{"version":3,"file":"careers.js","mappings":"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","sources":["webpack://career-coach-api-js/./node_modules/core-js/actual/promise/index.js","webpack://career-coach-api-js/./node_modules/core-js/es/promise/index.js","webpack://career-coach-api-js/./node_modules/core-js/internals/a-callable.js","webpack://career-coach-api-js/./node_modules/core-js/internals/a-constructor.js","webpack://career-coach-api-js/./node_modules/core-js/internals/a-possible-prototype.js","webpack://career-coach-api-js/./node_modules/core-js/internals/add-to-unscopables.js","webpack://career-coach-api-js/./node_modules/core-js/internals/an-instance.js","webpack://career-coach-api-js/./node_modules/core-js/internals/an-object.js","webpack://career-coach-api-js/./node_modules/core-js/internals/array-includes.js","webpack://career-coach-api-js/./node_modules/core-js/internals/array-slice.js","webpack://career-coach-api-js/./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://career-coach-api-js/./node_modules/core-js/internals/classof-raw.js","webpack://career-coach-api-js/./node_modules/core-js/internals/classof.js","webpack://career-coach-api-js/./node_modules/core-js/internals/clear-error-stack.js","webpack://career-coach-api-js/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://career-coach-api-js/./node_modules/core-js/internals/correct-prototype-getter.js","webpack://career-coach-api-js/./node_modules/core-js/internals/create-iterator-constructor.js","webpack://career-coach-api-js/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://career-coach-api-js/./node_modules/core-js/internals/create-property-descriptor.js","webpack://career-coach-api-js/./node_modules/core-js/internals/define-built-in.js","webpack://career-coach-api-js/./node_modules/core-js/internals/define-iterator.js","webpack://career-coach-api-js/./node_modules/core-js/internals/descriptors.js","webpack://career-coach-api-js/./node_modules/core-js/internals/document-create-element.js","webpack://career-coach-api-js/./node_modules/core-js/internals/dom-iterables.js","webpack://career-coach-api-js/./node_modules/core-js/internals/dom-token-list-prototype.js","webpack://career-coach-api-js/./node_modules/core-js/internals/engine-is-browser.js","webpack://career-coach-api-js/./node_modules/core-js/internals/engine-is-ios-pebble.js","webpack://career-coach-api-js/./node_modules/core-js/internals/engine-is-ios.js","webpack://career-coach-api-js/./node_modules/core-js/internals/engine-is-node.js","webpack://career-coach-api-js/./node_modules/core-js/internals/engine-is-webos-webkit.js","webpack://career-coach-api-js/./node_modules/core-js/internals/engine-user-agent.js","webpack://career-coach-api-js/./node_modules/core-js/internals/engine-v8-version.js","webpack://career-coach-api-js/./node_modules/core-js/internals/enum-bug-keys.js","webpack://career-coach-api-js/./node_modules/core-js/internals/error-stack-installable.js","webpack://career-coach-api-js/./node_modules/core-js/internals/export.js","webpack://career-coach-api-js/./node_modules/core-js/internals/fails.js","webpack://career-coach-api-js/./node_modules/core-js/internals/function-apply.js","webpack://career-coach-api-js/./node_modules/core-js/internals/function-bind-context.js","webpack://career-coach-api-js/./node_modules/core-js/internals/function-bind-native.js","webpack://career-coach-api-js/./node_modules/core-js/internals/function-call.js","webpack://career-coach-api-js/./node_modules/core-js/internals/function-name.js","webpack://career-coach-api-js/./node_modules/core-js/internals/function-uncurry-this.js","webpack://career-coach-api-js/./node_modules/core-js/internals/get-built-in.js","webpack://career-coach-api-js/./node_modules/core-js/internals/get-iterator-method.js","webpack://career-coach-api-js/./node_modules/core-js/internals/get-iterator.js","webpack://career-coach-api-js/./node_modules/core-js/internals/get-method.js","webpack://career-coach-api-js/./node_modules/core-js/internals/global.js","webpack://career-coach-api-js/./node_modules/core-js/internals/has-own-property.js","webpack://career-coach-api-js/./node_modules/core-js/internals/hidden-keys.js","webpack://career-coach-api-js/./node_modules/core-js/internals/host-report-errors.js","webpack://career-coach-api-js/./node_modules/core-js/internals/html.js","webpack://career-coach-api-js/./node_modules/core-js/internals/ie8-dom-define.js","webpack://career-coach-api-js/./node_modules/core-js/internals/indexed-object.js","webpack://career-coach-api-js/./node_modules/core-js/internals/inspect-source.js","webpack://career-coach-api-js/./node_modules/core-js/internals/install-error-cause.js","webpack://career-coach-api-js/./node_modules/core-js/internals/internal-state.js","webpack://career-coach-api-js/./node_modules/core-js/internals/is-array-iterator-method.js","webpack://career-coach-api-js/./node_modules/core-js/internals/is-callable.js","webpack://career-coach-api-js/./node_modules/core-js/internals/is-constructor.js","webpack://career-coach-api-js/./node_modules/core-js/internals/is-forced.js","webpack://career-coach-api-js/./node_modules/core-js/internals/is-object.js","webpack://career-coach-api-js/./node_modules/core-js/internals/is-pure.js","webpack://career-coach-api-js/./node_modules/core-js/internals/is-symbol.js","webpack://career-coach-api-js/./node_modules/core-js/internals/iterate.js","webpack://career-coach-api-js/./node_modules/core-js/internals/iterator-close.js","webpack://career-coach-api-js/./node_modules/core-js/internals/iterators-core.js","webpack://career-coach-api-js/./node_modules/core-js/internals/iterators.js","webpack://career-coach-api-js/./node_modules/core-js/internals/length-of-array-like.js","webpack://career-coach-api-js/./node_modules/core-js/internals/make-built-in.js","webpack://career-coach-api-js/./node_modules/core-js/internals/microtask.js","webpack://career-coach-api-js/./node_modules/core-js/internals/native-symbol.js","webpack://career-coach-api-js/./node_modules/core-js/internals/native-weak-map.js","webpack://career-coach-api-js/./node_modules/core-js/internals/new-promise-capability.js","webpack://career-coach-api-js/./node_modules/core-js/internals/normalize-string-argument.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-create.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-define-properties.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-define-property.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-get-prototype-of.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-is-prototype-of.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-keys-internal.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-keys.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://career-coach-api-js/./node_modules/core-js/internals/object-to-string.js","webpack://career-coach-api-js/./node_modules/core-js/internals/ordinary-to-primitive.js","webpack://career-coach-api-js/./node_modules/core-js/internals/own-keys.js","webpack://career-coach-api-js/./node_modules/core-js/internals/path.js","webpack://career-coach-api-js/./node_modules/core-js/internals/perform.js","webpack://career-coach-api-js/./node_modules/core-js/internals/promise-constructor-detection.js","webpack://career-coach-api-js/./node_modules/core-js/internals/promise-native-constructor.js","webpack://career-coach-api-js/./node_modules/core-js/internals/promise-resolve.js","webpack://career-coach-api-js/./node_modules/core-js/internals/promise-statics-incorrect-iteration.js","webpack://career-coach-api-js/./node_modules/core-js/internals/queue.js","webpack://career-coach-api-js/./node_modules/core-js/internals/require-object-coercible.js","webpack://career-coach-api-js/./node_modules/core-js/internals/set-global.js","webpack://career-coach-api-js/./node_modules/core-js/internals/set-species.js","webpack://career-coach-api-js/./node_modules/core-js/internals/set-to-string-tag.js","webpack://career-coach-api-js/./node_modules/core-js/internals/shared-key.js","webpack://career-coach-api-js/./node_modules/core-js/internals/shared-store.js","webpack://career-coach-api-js/./node_modules/core-js/internals/shared.js","webpack://career-coach-api-js/./node_modules/core-js/internals/species-constructor.js","webpack://career-coach-api-js/./node_modules/core-js/internals/string-multibyte.js","webpack://career-coach-api-js/./node_modules/core-js/internals/task.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-absolute-index.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-indexed-object.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-integer-or-infinity.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-length.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-object.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-primitive.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-property-key.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-string-tag-support.js","webpack://career-coach-api-js/./node_modules/core-js/internals/to-string.js","webpack://career-coach-api-js/./node_modules/core-js/internals/try-to-string.js","webpack://career-coach-api-js/./node_modules/core-js/internals/uid.js","webpack://career-coach-api-js/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://career-coach-api-js/./node_modules/core-js/internals/v8-prototype-define-bug.js","webpack://career-coach-api-js/./node_modules/core-js/internals/validate-arguments-length.js","webpack://career-coach-api-js/./node_modules/core-js/internals/well-known-symbol.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.aggregate-error.constructor.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.aggregate-error.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.array.iterator.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.object.to-string.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.all-settled.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.all.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.any.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.catch.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.constructor.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.finally.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.race.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.reject.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.promise.resolve.js","webpack://career-coach-api-js/./node_modules/core-js/modules/es.string.iterator.js","webpack://career-coach-api-js/./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack://career-coach-api-js/./node_modules/core-js/stable/promise/index.js","webpack://career-coach-api-js/./node_modules/patternomaly/dist/patternomaly.js","webpack://career-coach-api-js/webpack/bootstrap","webpack://career-coach-api-js/webpack/runtime/compat get default export","webpack://career-coach-api-js/webpack/runtime/define property getters","webpack://career-coach-api-js/webpack/runtime/global","webpack://career-coach-api-js/webpack/runtime/hasOwnProperty shorthand","webpack://career-coach-api-js/./node_modules/spin.js/spin.js","webpack://career-coach-api-js/./src/pagination.mjs","webpack://career-coach-api-js/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://career-coach-api-js/./node_modules/chart.js/dist/chart.esm.js","webpack://career-coach-api-js/./node_modules/chart.js/auto/auto.esm.js","webpack://career-coach-api-js/./node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js","webpack://career-coach-api-js/./src/sorters.mjs","webpack://career-coach-api-js/./src/pie-legend.mjs","webpack://career-coach-api-js/./src/tabler.mjs","webpack://career-coach-api-js/./node_modules/whatwg-fetch/fetch.js","webpack://career-coach-api-js/./src/index.js"],"sourcesContent":["var parent = require('../../stable/promise');\n\nmodule.exports = parent;\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es-x/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(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 (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String($Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } return stack;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es-x/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\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 global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar setGlobal = require('../internals/set-global');\n\nmodule.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return O;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n return O;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","module.exports = typeof window == 'object' && typeof Deno != 'object';\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es-x/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es-x/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es-x/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es-x/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es-x/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es-x/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\n// eslint-disable-next-line es-x/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n defineProperty(value, 'name', { value: name, configurable: true });\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) try {\n defineProperty(value, 'prototype', { writable: false });\n } catch (error) { /* empty */ }\n } else value.prototype = undefined;\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessage\n // - onreadystatechange\n // - setTimeout\n } else {\n // strange IE + webpack dev server bug - use .bind(global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || 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","/* eslint-disable es-x/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (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 = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es-x/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es-x/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es-x/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* 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","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es-x/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es-x/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es-x/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var global = require('../internals/global');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar isCallable = require('../internals/is-callable');\nvar isForced = require('../internals/is-forced');\nvar inspectSource = require('../internals/inspect-source');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_PURE = require('../internals/is-pure');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar SPECIES = wellKnownSymbol('species');\nvar SUBCLASSING = false;\nvar NATIVE_PROMISE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\n\nvar FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor);\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 if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution\n if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_PROMISE_REJECTION_EVENT;\n});\n\nmodule.exports = {\n CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR,\n REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT,\n SUBCLASSING: SUBCLASSING\n};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/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 NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\nmodule.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) {\n NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ });\n});\n","var Queue = function () {\n this.head = null;\n this.tail = null;\n};\n\nQueue.prototype = {\n add: function (item) {\n var entry = { item: item, next: null };\n if (this.head) this.tail.next = entry;\n else this.head = entry;\n this.tail = entry;\n },\n get: function () {\n var entry = this.head;\n if (entry) {\n this.head = entry.next;\n if (this.tail === entry) this.tail = null;\n return entry.item;\n }\n }\n};\n\nmodule.exports = Queue;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es-x/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.22.5',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.22.5/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(handler) {\n validateArgumentsLength(arguments.length, 1);\n var fn = isCallable(handler) ? handler : Function(handler);\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(fn, undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es-x/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n return passed;\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar clearErrorStack = require('../internals/clear-error-stack');\nvar installErrorCause = require('../internals/install-error-cause');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n var options = arguments.length > 2 ? arguments[2] : undefined;\n var isInstance = isPrototypeOf(AggregateErrorPrototype, this);\n var that;\n if (setPrototypeOf) {\n that = setPrototypeOf(new Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);\n } else {\n that = isInstance ? this : create(AggregateErrorPrototype);\n createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');\n }\n if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message));\n if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n installErrorCause(that, options);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error, { name: true });\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true, constructor: true, arity: 2 }, {\n AggregateError: $AggregateError\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.aggregate-error.constructor');\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/define-iterator');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n defineBuiltIn(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.all` method\n// https://tc39.es/ecma262/#sec-promise.all\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, 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.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n any: function any(iterable) {\n var C = this;\n var AggregateError = getBuiltIn('AggregateError');\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// `Promise.prototype.catch` method\n// https://tc39.es/ecma262/#sec-promise.prototype.catch\n$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, {\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n});\n\n// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n var method = getBuiltIn('Promise').prototype['catch'];\n if (NativePromisePrototype['catch'] !== method) {\n defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true });\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar IS_NODE = require('../internals/engine-is-node');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar perform = require('../internals/perform');\nvar Queue = require('../internals/queue');\nvar InternalStateModule = require('../internals/internal-state');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar PromiseConstructorDetection = require('../internals/promise-constructor-detection');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\n\nvar PROMISE = 'Promise';\nvar FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;\nvar NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;\nvar NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar PromiseConstructor = NativePromiseConstructor;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar callReaction = function (reaction, state) {\n var value = state.value;\n var ok = state.state == FULFILLED;\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 (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can 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 call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n microtask(function () {\n var reactions = state.reactions;\n var reaction;\n while (reaction = reactions.get()) {\n callReaction(reaction, state);\n }\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED_PROMISE_CONSTRUCTOR) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalPromiseState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n\n PromisePrototype = PromiseConstructor.prototype;\n\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: new Queue(),\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n state.parent = true;\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n if (state.state == PENDING) state.reactions.add(reaction);\n else microtask(function () {\n callReaction(reaction, state);\n });\n return reaction.promise;\n });\n\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalPromiseState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!NATIVE_PROMISE_SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromiseConstructor && fails(function () {\n // eslint-disable-next-line unicorn/no-thenable -- required for testing\n NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\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});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromisePrototype['finally'] !== method) {\n defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true });\n }\n}\n","// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/es.promise.constructor');\nrequire('../modules/es.promise.all');\nrequire('../modules/es.promise.catch');\nrequire('../modules/es.promise.race');\nrequire('../modules/es.promise.reject');\nrequire('../modules/es.promise.resolve');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.race` method\n// https://tc39.es/ecma262/#sec-promise.race\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\n// `Promise.reject` method\n// https://tc39.es/ecma262/#sec-promise.reject\n$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n reject: function reject(r) {\n var capability = newPromiseCapabilityModule.f(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar promiseResolve = require('../internals/promise-resolve');\n\nvar PromiseConstructorWrapper = getBuiltIn('Promise');\nvar CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR;\n\n// `Promise.resolve` method\n// https://tc39.es/ecma262/#sec-promise.resolve\n$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, {\n resolve: function resolve(x) {\n return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x);\n }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","var parent = require('../../es/promise');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.pattern = factory());\n}(this, (function () { 'use strict';\n\nvar BACKGROUND_COLOR = 'rgba(100, 100, 100, 0.7)';\nvar PATTERN_COLOR = 'rgba(255, 255, 255, 0.8)';\nvar POINT_STYLE = 'round';\n\nvar asyncGenerator = function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(function (arg) {\n resume(\"next\", arg);\n }, function (arg) {\n resume(\"throw\", arg);\n });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n return this;\n };\n }\n\n AsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n };\n\n AsyncGenerator.prototype.throw = function (arg) {\n return this._invoke(\"throw\", arg);\n };\n\n AsyncGenerator.prototype.return = function (arg) {\n return this._invoke(\"return\", arg);\n };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n}();\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function 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 Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Shape = function () {\n function Shape() {\n var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 20;\n var backgroundColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : BACKGROUND_COLOR;\n var patternColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : PATTERN_COLOR;\n classCallCheck(this, Shape);\n\n this._canvas = document.createElement('canvas');\n this._context = this._canvas.getContext('2d');\n\n this._canvas.width = size;\n this._canvas.height = size;\n\n this._context.fillStyle = backgroundColor;\n this._context.fillRect(0, 0, this._canvas.width, this._canvas.height);\n\n this._size = size;\n this._patternColor = patternColor;\n\n return this;\n }\n\n createClass(Shape, [{\n key: 'setStrokeProps',\n value: function setStrokeProps() {\n this._context.strokeStyle = this._patternColor;\n this._context.lineWidth = this._size / 10;\n this._context.lineJoin = POINT_STYLE;\n this._context.lineCap = POINT_STYLE;\n }\n }, {\n key: 'setFillProps',\n value: function setFillProps() {\n this._context.fillStyle = this._patternColor;\n }\n }]);\n return Shape;\n}();\n\nvar Plus = function (_Shape) {\n inherits(Plus, _Shape);\n\n function Plus() {\n classCallCheck(this, Plus);\n return possibleConstructorReturn(this, (Plus.__proto__ || Object.getPrototypeOf(Plus)).apply(this, arguments));\n }\n\n createClass(Plus, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawPlus();\n this.drawPlus(halfSize, halfSize);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawPlus',\n value: function drawPlus() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2;\n var quarterSize = size / 4;\n\n this._context.moveTo(quarterSize + offsetX, 0 + offsetY);\n this._context.lineTo(quarterSize + offsetX, halfSize + offsetY);\n this._context.moveTo(0 + offsetX, quarterSize + offsetY);\n this._context.lineTo(halfSize + offsetX, quarterSize + offsetY);\n\n this._context.closePath();\n }\n }]);\n return Plus;\n}(Shape);\n\nvar Cross = function (_Shape) {\n inherits(Cross, _Shape);\n\n function Cross() {\n classCallCheck(this, Cross);\n return possibleConstructorReturn(this, (Cross.__proto__ || Object.getPrototypeOf(Cross)).apply(this, arguments));\n }\n\n createClass(Cross, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawCross();\n this.drawCross(halfSize, halfSize);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawCross',\n value: function drawCross() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2;\n var gap = 2;\n\n this._context.moveTo(offsetX + gap, offsetY + gap);\n this._context.lineTo(halfSize - gap + offsetX, halfSize - gap + offsetY);\n this._context.moveTo(offsetX + gap, halfSize - gap + offsetY);\n this._context.lineTo(halfSize - gap + offsetX, offsetY + gap);\n\n this._context.closePath();\n }\n }]);\n return Cross;\n}(Shape);\n\nvar Dash = function (_Shape) {\n inherits(Dash, _Shape);\n\n function Dash() {\n classCallCheck(this, Dash);\n return possibleConstructorReturn(this, (Dash.__proto__ || Object.getPrototypeOf(Dash)).apply(this, arguments));\n }\n\n createClass(Dash, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawDash();\n this.drawDash(halfSize, halfSize);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawDash',\n value: function drawDash() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2;\n var gap = 2;\n\n this._context.moveTo(offsetX + gap, offsetY + gap);\n this._context.lineTo(halfSize - gap + offsetX, halfSize - gap + offsetY);\n\n this._context.closePath();\n }\n }]);\n return Dash;\n}(Shape);\n\nvar CrossDash = function (_Shape) {\n inherits(CrossDash, _Shape);\n\n function CrossDash() {\n classCallCheck(this, CrossDash);\n return possibleConstructorReturn(this, (CrossDash.__proto__ || Object.getPrototypeOf(CrossDash)).apply(this, arguments));\n }\n\n createClass(CrossDash, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n this._context.beginPath();\n\n this.setStrokeProps();\n\n var cross = new Cross();\n cross.drawCross.call(this);\n\n var dash = new Dash();\n dash.drawDash.call(this, halfSize, halfSize);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }]);\n return CrossDash;\n}(Shape);\n\nvar Dot = function (_Shape) {\n inherits(Dot, _Shape);\n\n function Dot() {\n classCallCheck(this, Dot);\n return possibleConstructorReturn(this, (Dot.__proto__ || Object.getPrototypeOf(Dot)).apply(this, arguments));\n }\n\n createClass(Dot, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setFillProps();\n\n this.drawDot();\n this.drawDot(halfSize, halfSize);\n\n this._context.fill();\n\n return this._canvas;\n }\n }, {\n key: 'drawDot',\n value: function drawDot() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var diameter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._size / 10;\n\n var size = this._size;\n var quarterSize = size / 4;\n var x = quarterSize + offsetX;\n var y = quarterSize + offsetY;\n\n this._context.moveTo(x + quarterSize, y);\n this._context.arc(x, y, diameter, 0, 2 * Math.PI);\n\n this._context.closePath();\n }\n }]);\n return Dot;\n}(Shape);\n\nvar DotDash = function (_Shape) {\n inherits(DotDash, _Shape);\n\n function DotDash() {\n classCallCheck(this, DotDash);\n return possibleConstructorReturn(this, (DotDash.__proto__ || Object.getPrototypeOf(DotDash)).apply(this, arguments));\n }\n\n createClass(DotDash, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n var dash = new Dash();\n dash.drawDash.call(this, halfSize, halfSize);\n\n this._context.closePath();\n this._context.stroke();\n\n this.setFillProps();\n\n var dot = new Dot();\n dot.drawDot.call(this);\n\n this._context.fill();\n\n return this._canvas;\n }\n }]);\n return DotDash;\n}(Shape);\n\nvar Disc = function (_Dot) {\n inherits(Disc, _Dot);\n\n function Disc() {\n classCallCheck(this, Disc);\n return possibleConstructorReturn(this, (Disc.__proto__ || Object.getPrototypeOf(Disc)).apply(this, arguments));\n }\n\n createClass(Disc, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n var diameter = this._size / 5;\n\n this._context.beginPath();\n\n this.setFillProps();\n\n this.drawDot(0, 0, diameter);\n this.drawDot(halfSize, halfSize, diameter);\n\n this._context.fill();\n\n return this._canvas;\n }\n }]);\n return Disc;\n}(Dot);\n\nvar Ring = function (_Dot) {\n inherits(Ring, _Dot);\n\n function Ring() {\n classCallCheck(this, Ring);\n return possibleConstructorReturn(this, (Ring.__proto__ || Object.getPrototypeOf(Ring)).apply(this, arguments));\n }\n\n createClass(Ring, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n var diameter = this._size / 5;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawDot(0, 0, diameter);\n this.drawDot(halfSize, halfSize, diameter);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }]);\n return Ring;\n}(Dot);\n\nvar Line = function (_Shape) {\n inherits(Line, _Shape);\n\n function Line() {\n classCallCheck(this, Line);\n return possibleConstructorReturn(this, (Line.__proto__ || Object.getPrototypeOf(Line)).apply(this, arguments));\n }\n\n createClass(Line, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawLine();\n this.drawLine(halfSize, halfSize);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawLine',\n value: function drawLine() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var quarterSize = size / 4;\n\n this._context.moveTo(0, quarterSize + offsetY);\n this._context.lineTo(this._size, quarterSize + offsetY);\n\n this._context.closePath();\n }\n }]);\n return Line;\n}(Shape);\n\nvar VerticalLine = function (_Line) {\n inherits(VerticalLine, _Line);\n\n function VerticalLine() {\n classCallCheck(this, VerticalLine);\n return possibleConstructorReturn(this, (VerticalLine.__proto__ || Object.getPrototypeOf(VerticalLine)).apply(this, arguments));\n }\n\n createClass(VerticalLine, [{\n key: 'drawTile',\n value: function drawTile() {\n this._context.translate(this._size, 0);\n this._context.rotate(90 * Math.PI / 180);\n\n Line.prototype.drawTile.call(this);\n\n return this._canvas;\n }\n }]);\n return VerticalLine;\n}(Line);\n\nvar Weave = function (_Shape) {\n inherits(Weave, _Shape);\n\n function Weave() {\n classCallCheck(this, Weave);\n return possibleConstructorReturn(this, (Weave.__proto__ || Object.getPrototypeOf(Weave)).apply(this, arguments));\n }\n\n createClass(Weave, [{\n key: 'drawTile',\n value: function drawTile() {\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawWeave(0, 0);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawWeave',\n value: function drawWeave(offsetX, offsetY) {\n var size = this._size;\n var halfSize = size / 2;\n\n this._context.moveTo(offsetX + 1, offsetY + 1);\n this._context.lineTo(halfSize - 1, halfSize - 1);\n\n this._context.moveTo(halfSize + 1, size - 1);\n this._context.lineTo(size - 1, halfSize + 1);\n\n this._context.closePath();\n }\n }]);\n return Weave;\n}(Shape);\n\nvar Zigzag = function (_Shape) {\n inherits(Zigzag, _Shape);\n\n function Zigzag() {\n classCallCheck(this, Zigzag);\n return possibleConstructorReturn(this, (Zigzag.__proto__ || Object.getPrototypeOf(Zigzag)).apply(this, arguments));\n }\n\n createClass(Zigzag, [{\n key: 'drawTile',\n value: function drawTile() {\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawZigzag();\n this.drawZigzag(this._size / 2);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawZigzag',\n value: function drawZigzag() {\n var offsetY = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var size = this._size;\n var quarterSize = size / 4;\n var halfSize = size / 2;\n var tenthSize = size / 10;\n\n this._context.moveTo(0, tenthSize + offsetY);\n this._context.lineTo(quarterSize, halfSize - tenthSize + offsetY);\n this._context.lineTo(halfSize, tenthSize + offsetY);\n this._context.lineTo(size - quarterSize, halfSize - tenthSize + offsetY);\n this._context.lineTo(size, tenthSize + offsetY);\n }\n }]);\n return Zigzag;\n}(Shape);\n\nvar ZigzagVertical = function (_Zigzag) {\n inherits(ZigzagVertical, _Zigzag);\n\n function ZigzagVertical() {\n classCallCheck(this, ZigzagVertical);\n return possibleConstructorReturn(this, (ZigzagVertical.__proto__ || Object.getPrototypeOf(ZigzagVertical)).apply(this, arguments));\n }\n\n createClass(ZigzagVertical, [{\n key: 'drawTile',\n value: function drawTile() {\n this._context.translate(this._size, 0);\n this._context.rotate(90 * Math.PI / 180);\n\n Zigzag.prototype.drawTile.call(this);\n\n return this._canvas;\n }\n }]);\n return ZigzagVertical;\n}(Zigzag);\n\nvar Diagonal = function (_Shape) {\n inherits(Diagonal, _Shape);\n\n function Diagonal() {\n classCallCheck(this, Diagonal);\n return possibleConstructorReturn(this, (Diagonal.__proto__ || Object.getPrototypeOf(Diagonal)).apply(this, arguments));\n }\n\n createClass(Diagonal, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawDiagonalLine();\n this.drawDiagonalLine(halfSize, halfSize);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawDiagonalLine',\n value: function drawDiagonalLine() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2;\n var gap = 1;\n\n this._context.moveTo(halfSize - gap - offsetX, gap * -1 + offsetY);\n this._context.lineTo(size + 1 - offsetX, halfSize + 1 + offsetY);\n\n this._context.closePath();\n }\n }]);\n return Diagonal;\n}(Shape);\n\nvar DiagonalRightLeft = function (_Diagonal) {\n inherits(DiagonalRightLeft, _Diagonal);\n\n function DiagonalRightLeft() {\n classCallCheck(this, DiagonalRightLeft);\n return possibleConstructorReturn(this, (DiagonalRightLeft.__proto__ || Object.getPrototypeOf(DiagonalRightLeft)).apply(this, arguments));\n }\n\n createClass(DiagonalRightLeft, [{\n key: 'drawTile',\n value: function drawTile() {\n this._context.translate(this._size, 0);\n this._context.rotate(90 * Math.PI / 180);\n\n Diagonal.prototype.drawTile.call(this);\n\n return this._canvas;\n }\n }]);\n return DiagonalRightLeft;\n}(Diagonal);\n\nvar Square = function (_Shape) {\n inherits(Square, _Shape);\n\n function Square() {\n classCallCheck(this, Square);\n return possibleConstructorReturn(this, (Square.__proto__ || Object.getPrototypeOf(Square)).apply(this, arguments));\n }\n\n createClass(Square, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setFillProps();\n\n this.drawSquare();\n this.drawSquare(halfSize, halfSize);\n\n this._context.fill();\n\n return this._canvas;\n }\n }, {\n key: 'drawSquare',\n value: function drawSquare() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2;\n var gap = size / 20;\n\n this._context.fillRect(offsetX + gap, offsetY + gap, halfSize - gap * 2, halfSize - gap * 2);\n\n this._context.closePath();\n }\n }]);\n return Square;\n}(Shape);\n\nvar Box = function (_Shape) {\n inherits(Box, _Shape);\n\n function Box() {\n classCallCheck(this, Box);\n return possibleConstructorReturn(this, (Box.__proto__ || Object.getPrototypeOf(Box)).apply(this, arguments));\n }\n\n createClass(Box, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawBox();\n this.drawBox(halfSize, halfSize);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawBox',\n value: function drawBox() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2;\n var gap = size / 20;\n\n this._context.strokeRect(offsetX + gap, offsetY + gap, halfSize - gap * 4, halfSize - gap * 4);\n\n this._context.closePath();\n }\n }]);\n return Box;\n}(Shape);\n\nvar Triangle = function (_Shape) {\n inherits(Triangle, _Shape);\n\n function Triangle() {\n classCallCheck(this, Triangle);\n return possibleConstructorReturn(this, (Triangle.__proto__ || Object.getPrototypeOf(Triangle)).apply(this, arguments));\n }\n\n createClass(Triangle, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setFillProps();\n\n this.drawTriangle();\n this.drawTriangle(halfSize, halfSize);\n\n this._context.fill();\n\n return this._canvas;\n }\n }, {\n key: 'drawTriangle',\n value: function drawTriangle() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2;\n var quarterSize = size / 4;\n\n this._context.moveTo(quarterSize + offsetX, offsetY);\n this._context.lineTo(halfSize + offsetX, halfSize + offsetY);\n this._context.lineTo(offsetX, halfSize + offsetY);\n\n this._context.closePath();\n }\n }]);\n return Triangle;\n}(Shape);\n\nvar TriangleVertical = function (_Triangle) {\n inherits(TriangleVertical, _Triangle);\n\n function TriangleVertical() {\n classCallCheck(this, TriangleVertical);\n return possibleConstructorReturn(this, (TriangleVertical.__proto__ || Object.getPrototypeOf(TriangleVertical)).apply(this, arguments));\n }\n\n createClass(TriangleVertical, [{\n key: 'drawTile',\n value: function drawTile() {\n var size = this._size;\n\n this._context.translate(size, size);\n this._context.rotate(180 * Math.PI / 180);\n\n Triangle.prototype.drawTile.call(this);\n\n return this._canvas;\n }\n }]);\n return TriangleVertical;\n}(Triangle);\n\nvar Diamond = function (_Shape) {\n inherits(Diamond, _Shape);\n\n function Diamond() {\n classCallCheck(this, Diamond);\n return possibleConstructorReturn(this, (Diamond.__proto__ || Object.getPrototypeOf(Diamond)).apply(this, arguments));\n }\n\n createClass(Diamond, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setFillProps();\n\n this.drawDiamond();\n this.drawDiamond(halfSize, halfSize);\n\n this._context.fill();\n\n return this._canvas;\n }\n }, {\n key: 'drawDiamond',\n value: function drawDiamond() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2;\n var quarterSize = size / 4;\n\n this._context.moveTo(quarterSize + offsetX, offsetY);\n this._context.lineTo(halfSize + offsetX, quarterSize + offsetY);\n this._context.lineTo(quarterSize + offsetX, halfSize + offsetY);\n this._context.lineTo(offsetX, quarterSize + offsetY);\n\n this._context.closePath();\n }\n }]);\n return Diamond;\n}(Shape);\n\nvar DiamondBox = function (_Diamond) {\n inherits(DiamondBox, _Diamond);\n\n function DiamondBox() {\n classCallCheck(this, DiamondBox);\n return possibleConstructorReturn(this, (DiamondBox.__proto__ || Object.getPrototypeOf(DiamondBox)).apply(this, arguments));\n }\n\n createClass(DiamondBox, [{\n key: 'drawTile',\n value: function drawTile() {\n var halfSize = this._size / 2;\n\n this._context.beginPath();\n\n this.setStrokeProps();\n\n this.drawDiamond();\n this.drawDiamond(halfSize, halfSize);\n\n this._context.stroke();\n\n return this._canvas;\n }\n }, {\n key: 'drawDiamond',\n value: function drawDiamond() {\n var offsetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var size = this._size;\n var halfSize = size / 2 - 1;\n var quarterSize = size / 4;\n\n this._context.moveTo(quarterSize + offsetX, offsetY + 1);\n this._context.lineTo(halfSize + offsetX, quarterSize + offsetY);\n this._context.lineTo(quarterSize + offsetX, halfSize + offsetY);\n this._context.lineTo(offsetX + 1, quarterSize + offsetY);\n\n this._context.closePath();\n }\n }]);\n return DiamondBox;\n}(Diamond);\n\nvar shapes = {\n 'plus': Plus,\n 'cross': Cross,\n 'dash': Dash,\n 'cross-dash': CrossDash,\n 'dot': Dot,\n 'dot-dash': DotDash,\n 'disc': Disc,\n 'ring': Ring,\n 'line': Line,\n 'line-vertical': VerticalLine,\n 'weave': Weave,\n 'zigzag': Zigzag,\n 'zigzag-vertical': ZigzagVertical,\n 'diagonal': Diagonal,\n 'diagonal-right-left': DiagonalRightLeft,\n 'square': Square,\n 'box': Box,\n 'triangle': Triangle,\n 'triangle-inverted': TriangleVertical,\n 'diamond': Diamond,\n 'diamond-box': DiamondBox\n};\n\nvar deprecatedShapes = {\n 'circle': shapes['disc'],\n 'triangle-vertical': shapes['triangle-inverted'],\n 'line-horizontal': shapes['line'],\n 'line-diagonal-lr': shapes['diagonal'],\n 'line-diagonal-rl': shapes['diagonal-right-left'],\n 'zigzag-horizontal': shapes['zigzag'],\n 'diamond-outline': shapes['diamond-box']\n};\n\nvar completeShapesList = [];\n\nfunction getRandomShape() {\n var excludedShapeTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var shapesList = Object.keys(shapes);\n\n excludedShapeTypes.forEach(function (shapeType) {\n shapesList.splice(shapesList.indexOf(shapeType), 1);\n });\n\n var randomIndex = Math.floor(Math.random() * shapesList.length);\n\n return shapesList[randomIndex];\n}\n\n_extends(completeShapesList, shapes, deprecatedShapes);\n\nfunction draw() {\n var shapeType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'square';\n var backgroundColor = arguments[1];\n var patternColor = arguments[2];\n var size = arguments[3];\n\n var patternCanvas = document.createElement('canvas');\n var patternContext = patternCanvas.getContext('2d');\n var outerSize = size * 2;\n\n var Shape = completeShapesList[shapeType];\n var shape = new Shape(size, backgroundColor, patternColor);\n\n var pattern = patternContext.createPattern(shape.drawTile(), 'repeat');\n\n patternCanvas.width = outerSize;\n patternCanvas.height = outerSize;\n\n pattern.shapeType = shapeType;\n\n return pattern;\n}\n\nfunction generate(colorList) {\n var firstShapeType = void 0;\n var previousShapeType = void 0;\n\n return colorList.map(function (color, index, list) {\n var shapeType = void 0;\n\n if (index === 0) {\n shapeType = getRandomShape();\n previousShapeType = shapeType;\n firstShapeType = previousShapeType;\n } else if (index === list.length - 1) {\n shapeType = getRandomShape([previousShapeType, firstShapeType]);\n } else {\n shapeType = getRandomShape([previousShapeType]);\n previousShapeType = shapeType;\n }\n\n return draw(shapeType, color);\n });\n}\n\nvar pattern = {\n draw: draw,\n generate: generate\n};\n\nreturn pattern;\n\n})));\n//# sourceMappingURL=patternomaly.js.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar defaults = {\r\n lines: 12,\r\n length: 7,\r\n width: 5,\r\n radius: 10,\r\n scale: 1.0,\r\n corners: 1,\r\n color: '#000',\r\n fadeColor: 'transparent',\r\n animation: 'spinner-line-fade-default',\r\n rotate: 0,\r\n direction: 1,\r\n speed: 1,\r\n zIndex: 2e9,\r\n className: 'spinner',\r\n top: '50%',\r\n left: '50%',\r\n shadow: '0 0 1px transparent',\r\n position: 'absolute',\r\n};\r\nvar Spinner = /** @class */ (function () {\r\n function Spinner(opts) {\r\n if (opts === void 0) { opts = {}; }\r\n this.opts = __assign(__assign({}, defaults), opts);\r\n }\r\n /**\r\n * Adds the spinner to the given target element. If this instance is already\r\n * spinning, it is automatically removed from its previous target by calling\r\n * stop() internally.\r\n */\r\n Spinner.prototype.spin = function (target) {\r\n this.stop();\r\n this.el = document.createElement('div');\r\n this.el.className = this.opts.className;\r\n this.el.setAttribute('role', 'progressbar');\r\n css(this.el, {\r\n position: this.opts.position,\r\n width: 0,\r\n zIndex: this.opts.zIndex,\r\n left: this.opts.left,\r\n top: this.opts.top,\r\n transform: \"scale(\" + this.opts.scale + \")\",\r\n });\r\n if (target) {\r\n target.insertBefore(this.el, target.firstChild || null);\r\n }\r\n drawLines(this.el, this.opts);\r\n return this;\r\n };\r\n /**\r\n * Stops and removes the Spinner.\r\n * Stopped spinners may be reused by calling spin() again.\r\n */\r\n Spinner.prototype.stop = function () {\r\n if (this.el) {\r\n if (typeof requestAnimationFrame !== 'undefined') {\r\n cancelAnimationFrame(this.animateId);\r\n }\r\n else {\r\n clearTimeout(this.animateId);\r\n }\r\n if (this.el.parentNode) {\r\n this.el.parentNode.removeChild(this.el);\r\n }\r\n this.el = undefined;\r\n }\r\n return this;\r\n };\r\n return Spinner;\r\n}());\r\nexport { Spinner };\r\n/**\r\n * Sets multiple style properties at once.\r\n */\r\nfunction css(el, props) {\r\n for (var prop in props) {\r\n el.style[prop] = props[prop];\r\n }\r\n return el;\r\n}\r\n/**\r\n * Returns the line color from the given string or array.\r\n */\r\nfunction getColor(color, idx) {\r\n return typeof color == 'string' ? color : color[idx % color.length];\r\n}\r\n/**\r\n * Internal method that draws the individual lines.\r\n */\r\nfunction drawLines(el, opts) {\r\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\r\n var shadow = 'none';\r\n if (opts.shadow === true) {\r\n shadow = '0 2px 4px #000'; // default shadow\r\n }\r\n else if (typeof opts.shadow === 'string') {\r\n shadow = opts.shadow;\r\n }\r\n var shadows = parseBoxShadow(shadow);\r\n for (var i = 0; i < opts.lines; i++) {\r\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\r\n var backgroundLine = css(document.createElement('div'), {\r\n position: 'absolute',\r\n top: -opts.width / 2 + \"px\",\r\n width: (opts.length + opts.width) + 'px',\r\n height: opts.width + 'px',\r\n background: getColor(opts.fadeColor, i),\r\n borderRadius: borderRadius,\r\n transformOrigin: 'left',\r\n transform: \"rotate(\" + degrees + \"deg) translateX(\" + opts.radius + \"px)\",\r\n });\r\n var delay = i * opts.direction / opts.lines / opts.speed;\r\n delay -= 1 / opts.speed; // so initial animation state will include trail\r\n var line = css(document.createElement('div'), {\r\n width: '100%',\r\n height: '100%',\r\n background: getColor(opts.color, i),\r\n borderRadius: borderRadius,\r\n boxShadow: normalizeShadow(shadows, degrees),\r\n animation: 1 / opts.speed + \"s linear \" + delay + \"s infinite \" + opts.animation,\r\n });\r\n backgroundLine.appendChild(line);\r\n el.appendChild(backgroundLine);\r\n }\r\n}\r\nfunction parseBoxShadow(boxShadow) {\r\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\r\n var shadows = [];\r\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\r\n var shadow = _a[_i];\r\n var matches = shadow.match(regex);\r\n if (matches === null) {\r\n continue; // invalid syntax\r\n }\r\n var x = +matches[2];\r\n var y = +matches[5];\r\n var xUnits = matches[4];\r\n var yUnits = matches[7];\r\n if (x === 0 && !xUnits) {\r\n xUnits = yUnits;\r\n }\r\n if (y === 0 && !yUnits) {\r\n yUnits = xUnits;\r\n }\r\n if (xUnits !== yUnits) {\r\n continue; // units must match to use as coordinates\r\n }\r\n shadows.push({\r\n prefix: matches[1] || '',\r\n x: x,\r\n y: y,\r\n xUnits: xUnits,\r\n yUnits: yUnits,\r\n end: matches[8],\r\n });\r\n }\r\n return shadows;\r\n}\r\n/**\r\n * Modify box-shadow x/y offsets to counteract rotation\r\n */\r\nfunction normalizeShadow(shadows, degrees) {\r\n var normalized = [];\r\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\r\n var shadow = shadows_1[_i];\r\n var xy = convertOffset(shadow.x, shadow.y, degrees);\r\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\r\n }\r\n return normalized.join(', ');\r\n}\r\nfunction convertOffset(x, y, degrees) {\r\n var radians = degrees * Math.PI / 180;\r\n var sin = Math.sin(radians);\r\n var cos = Math.cos(radians);\r\n return [\r\n Math.round((x * cos + y * sin) * 1000) / 1000,\r\n Math.round((-x * sin + y * cos) * 1000) / 1000,\r\n ];\r\n}\r\n","export { Pager as default };\n/**\n * Generates a pager for ul listing\n * \n * @param {HTMLElement} collection \n * @param {Number} perPage \n */\nfunction Pager(collection, perPage) {\n\tthis.collection = collection;\n\tthis.list = Array.prototype.slice.call(this.collection.children);\t\n\tthis.perPage = perPage;\n\tthis.currentPage = 1;\n\tthis.len = this.list.length;\n\tthis.numPages = Math.ceil(this.len / this.perPage);\n\tthis.menu = undefined;\n\tthis.nav = undefined;\n\n\tthis.init();\n};\nPager.prototype.debug = function() {\n\tconsole.log('Current Page: ' + this.currentPage);\n\tconsole.log('Number of Pages: ' + this.numPages);\n}\nPager.prototype.init = function () {\n\tthis.drawMenu();\n\tthis.loadList();\n};\nPager.prototype.drawMenu = function() {\n\tthis.nav = document.createElement('nav');\n\tthis.nav.id = \"pager\";\n\tvar pages = \"\";\n\tfor (let x = 0; x < this.numPages; x++) {\n\t\tlet string = `
  • `;\n\t\tstring += x + 1;\n\t\tstring += '
  • ';\n\t\tpages += string;\n\t}\n\t\n\tthis.nav.innerHTML =`\n\t`;\n\n document.querySelector('#pager-container').appendChild(this.nav); \n \n this.menu = document.querySelector('.pagination');\n\n this.menu = Array.prototype.slice.call(this.menu.children);\n var _this = this;\n this.menu.forEach(function (e) {\n if (e.firstElementChild.id == \"previous\") {\n \te.firstElementChild.addEventListener('click', function() {_this.prevPage();}, false);\n }\telse if (e.firstElementChild.id == \"next\") {\n \t\te.firstElementChild.addEventListener('click', function() {_this.nextPage();}, false);\n \t} else { e.firstElementChild.addEventListener('click', function() {\n \t\t\t_this.toPage(e.firstElementChild.innerText);\n \t\t}, false);\n }\n }); \n};\nPager.prototype.nextPage = function () {\n\twindow.event.preventDefault();\n\t//console.log('in Next Page: Current page is ' + this.currentPage);\n\t\t if (this.currentPage == this.numPages) {\n return\t\n } else {\n this.currentPage += 1;\n //console.log('in Next Page: Current page is NOW ' + this.currentPage);\n this.loadList();\n \t}\n};\nPager.prototype.prevPage = function () {\n\twindow.event.preventDefault();\n if (this.currentPage == 1) {\n return\t\n } else {\n this.currentPage -= 1;\n this.loadList();\n \t}\n};\nPager.prototype.firstPage = function () {\n\twindow.event.preventDefault();\n\tthis.currentPage = 1;\n this.loadList();\n \n \n};\nPager.prototype.lastPage = function () {\n\twindow.event.preventDefault();\n\tthis.currentPage = this.numPages;\n this.loadList();\n \n};\nPager.prototype.toPage = function (page) {\n\twindow.event.preventDefault();\n\tthis.currentPage = parseInt(page);\n this.loadList();\n \n \n};\n\nPager.prototype.loadList = function () {\n\tvar begin = ((this.currentPage - 1) * this.perPage);\n\tvar end = begin + this.perPage;\n\n\tvar pageList = this.list.slice(begin, end);\n\n\tthis.drawList(pageList);\n\n\tthis.check();\n\t//this.debug();\n\t//console.log(this.menu)\n\t//console.log(this)\n\tif (this.numPages <= 1 ) {this.nav.style.display = \"none\"}\n\n};\n\nPager.prototype.drawList = function (pageList) {\n\tthis.collection.innerHTML = \"\";\n\n\tfor (let r = 0; r < pageList.length; r++) {\n\t\tthis.collection.appendChild(pageList[r]);\n\t};\n\n};\nPager.prototype.check = function () {\n\t\tthis.menu.forEach(function(e) {\n \te.classList.remove('active');\n\t\te.querySelector('a').removeAttribute(\"aria-current\")\n\t\t// need to add aria current to child a element\n\n \te.removeAttribute(\"aria-current\");\n });\n this.menu[this.currentPage].classList.add('active');\n this.menu[this.currentPage].querySelector('a').setAttribute(\"aria-current\", \"page\");\n\n\tdocument.getElementById(\"next\").disabled = this.currentPage == this.numPages ? true : false;\n\tthis.currentPage == this.numPages ? document.getElementById(\"next\")\n\t.parentNode.classList.add('disabled') : document.getElementById(\"next\")\n\t.parentNode.classList.remove('disabled');\n\n document.getElementById(\"previous\").disabled = this.currentPage == 1 ? true : false;\n \tthis.currentPage == 1 ? document.getElementById(\"previous\")\n\t.parentNode.classList.add('disabled') : document.getElementById(\"previous\")\n\t.parentNode.classList.remove('disabled');\n //document.getElementById(\"first\").disabled = this.currentPage == 1 ? true : false;\n //document.getElementById(\"last\").disabled = this.currentPage == this.numPages ? true : false;\n};","/*!\n * Chart.js v3.7.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n const idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n let pos = 0;\n let idx = indexOfDotOrLength(key, pos);\n while (obj && idx > pos) {\n obj = obj[key.substr(pos, idx - pos)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n return obj;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\nconst map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = '0123456789ABCDEF';\nconst h1 = (b) => hex[b & 0xF];\nconst h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF));\nfunction isShort(v) {\n\treturn eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\nfunction hexParse(str) {\n\tvar len = str.length;\n\tvar ret;\n\tif (str[0] === '#') {\n\t\tif (len === 4 || len === 5) {\n\t\t\tret = {\n\t\t\t\tr: 255 & map[str[1]] * 17,\n\t\t\t\tg: 255 & map[str[2]] * 17,\n\t\t\t\tb: 255 & map[str[3]] * 17,\n\t\t\t\ta: len === 5 ? map[str[4]] * 17 : 255\n\t\t\t};\n\t\t} else if (len === 7 || len === 9) {\n\t\t\tret = {\n\t\t\t\tr: map[str[1]] << 4 | map[str[2]],\n\t\t\t\tg: map[str[3]] << 4 | map[str[4]],\n\t\t\t\tb: map[str[5]] << 4 | map[str[6]],\n\t\t\t\ta: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n\t\t\t};\n\t\t}\n\t}\n\treturn ret;\n}\nfunction hexString(v) {\n\tvar f = isShort(v) ? h1 : h2;\n\treturn v\n\t\t? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '')\n\t\t: v;\n}\nfunction round(v) {\n\treturn v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n\treturn lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n\treturn lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n\treturn lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n\treturn lim(round(v * 100), 0, 100);\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n\tconst m = RGB_RE.exec(str);\n\tlet a = 255;\n\tlet r, g, b;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[7] !== r) {\n\t\tconst v = +m[7];\n\t\ta = 255 & (m[8] ? p2b(v) : v * 255);\n\t}\n\tr = +m[1];\n\tg = +m[3];\n\tb = +m[5];\n\tr = 255 & (m[2] ? p2b(r) : r);\n\tg = 255 & (m[4] ? p2b(g) : g);\n\tb = 255 & (m[6] ? p2b(b) : b);\n\treturn {\n\t\tr: r,\n\t\tg: g,\n\t\tb: b,\n\t\ta: a\n\t};\n}\nfunction rgbString(v) {\n\treturn v && (\n\t\tv.a < 255\n\t\t\t? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n\t\t\t: `rgb(${v.r}, ${v.g}, ${v.b})`\n\t);\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\treturn [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n\tconst f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n\tconst rgb = hsl2rgbn(h, 1, 0.5);\n\tlet i;\n\tif (w + b > 1) {\n\t\ti = 1 / (w + b);\n\t\tw *= i;\n\t\tb *= i;\n\t}\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] *= 1 - w - b;\n\t\trgb[i] += w;\n\t}\n\treturn rgb;\n}\nfunction rgb2hsl(v) {\n\tconst range = 255;\n\tconst r = v.r / range;\n\tconst g = v.g / range;\n\tconst b = v.b / range;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h, s, d;\n\tif (max !== min) {\n\t\td = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\th = max === r\n\t\t\t? ((g - b) / d) + (g < b ? 6 : 0)\n\t\t\t: max === g\n\t\t\t\t? (b - r) / d + 2\n\t\t\t\t: (r - g) / d + 4;\n\t\th = h * 60 + 0.5;\n\t}\n\treturn [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n\treturn (\n\t\tArray.isArray(a)\n\t\t\t? f(a[0], a[1], a[2])\n\t\t\t: f(a, b, c)\n\t).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n\treturn calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n\treturn calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n\treturn calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n\treturn (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n\tconst m = HUE_RE.exec(str);\n\tlet a = 255;\n\tlet v;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[5] !== v) {\n\t\ta = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n\t}\n\tconst h = hue(+m[2]);\n\tconst p1 = +m[3] / 100;\n\tconst p2 = +m[4] / 100;\n\tif (m[1] === 'hwb') {\n\t\tv = hwb2rgb(h, p1, p2);\n\t} else if (m[1] === 'hsv') {\n\t\tv = hsv2rgb(h, p1, p2);\n\t} else {\n\t\tv = hsl2rgb(h, p1, p2);\n\t}\n\treturn {\n\t\tr: v[0],\n\t\tg: v[1],\n\t\tb: v[2],\n\t\ta: a\n\t};\n}\nfunction rotate(v, deg) {\n\tvar h = rgb2hsl(v);\n\th[0] = hue(h[0] + deg);\n\th = hsl2rgb(h);\n\tv.r = h[0];\n\tv.g = h[1];\n\tv.b = h[2];\n}\nfunction hslString(v) {\n\tif (!v) {\n\t\treturn;\n\t}\n\tconst a = rgb2hsl(v);\n\tconst h = a[0];\n\tconst s = n2p(a[1]);\n\tconst l = n2p(a[2]);\n\treturn v.a < 255\n\t\t? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n\t\t: `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map$1 = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n\tconst unpacked = {};\n\tconst keys = Object.keys(names);\n\tconst tkeys = Object.keys(map$1);\n\tlet i, j, k, ok, nk;\n\tfor (i = 0; i < keys.length; i++) {\n\t\tok = nk = keys[i];\n\t\tfor (j = 0; j < tkeys.length; j++) {\n\t\t\tk = tkeys[j];\n\t\t\tnk = nk.replace(k, map$1[k]);\n\t\t}\n\t\tk = parseInt(names[ok], 16);\n\t\tunpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n\t}\n\treturn unpacked;\n}\nlet names$1;\nfunction nameParse(str) {\n\tif (!names$1) {\n\t\tnames$1 = unpack();\n\t\tnames$1.transparent = [0, 0, 0, 0];\n\t}\n\tconst a = names$1[str.toLowerCase()];\n\treturn a && {\n\t\tr: a[0],\n\t\tg: a[1],\n\t\tb: a[2],\n\t\ta: a.length === 4 ? a[3] : 255\n\t};\n}\nfunction modHSL(v, i, ratio) {\n\tif (v) {\n\t\tlet tmp = rgb2hsl(v);\n\t\ttmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n\t\ttmp = hsl2rgb(tmp);\n\t\tv.r = tmp[0];\n\t\tv.g = tmp[1];\n\t\tv.b = tmp[2];\n\t}\n}\nfunction clone(v, proto) {\n\treturn v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n\tvar v = {r: 0, g: 0, b: 0, a: 255};\n\tif (Array.isArray(input)) {\n\t\tif (input.length >= 3) {\n\t\t\tv = {r: input[0], g: input[1], b: input[2], a: 255};\n\t\t\tif (input.length > 3) {\n\t\t\t\tv.a = n2b(input[3]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = clone(input, {r: 0, g: 0, b: 0, a: 1});\n\t\tv.a = n2b(v.a);\n\t}\n\treturn v;\n}\nfunction functionParse(str) {\n\tif (str.charAt(0) === 'r') {\n\t\treturn rgbParse(str);\n\t}\n\treturn hueParse(str);\n}\nclass Color {\n\tconstructor(input) {\n\t\tif (input instanceof Color) {\n\t\t\treturn input;\n\t\t}\n\t\tconst type = typeof input;\n\t\tlet v;\n\t\tif (type === 'object') {\n\t\t\tv = fromObject(input);\n\t\t} else if (type === 'string') {\n\t\t\tv = hexParse(input) || nameParse(input) || functionParse(input);\n\t\t}\n\t\tthis._rgb = v;\n\t\tthis._valid = !!v;\n\t}\n\tget valid() {\n\t\treturn this._valid;\n\t}\n\tget rgb() {\n\t\tvar v = clone(this._rgb);\n\t\tif (v) {\n\t\t\tv.a = b2n(v.a);\n\t\t}\n\t\treturn v;\n\t}\n\tset rgb(obj) {\n\t\tthis._rgb = fromObject(obj);\n\t}\n\trgbString() {\n\t\treturn this._valid ? rgbString(this._rgb) : this._rgb;\n\t}\n\thexString() {\n\t\treturn this._valid ? hexString(this._rgb) : this._rgb;\n\t}\n\thslString() {\n\t\treturn this._valid ? hslString(this._rgb) : this._rgb;\n\t}\n\tmix(color, weight) {\n\t\tconst me = this;\n\t\tif (color) {\n\t\t\tconst c1 = me.rgb;\n\t\t\tconst c2 = color.rgb;\n\t\t\tlet w2;\n\t\t\tconst p = weight === w2 ? 0.5 : weight;\n\t\t\tconst w = 2 * p - 1;\n\t\t\tconst a = c1.a - c2.a;\n\t\t\tconst w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\tw2 = 1 - w1;\n\t\t\tc1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n\t\t\tc1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n\t\t\tc1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n\t\t\tc1.a = p * c1.a + (1 - p) * c2.a;\n\t\t\tme.rgb = c1;\n\t\t}\n\t\treturn me;\n\t}\n\tclone() {\n\t\treturn new Color(this.rgb);\n\t}\n\talpha(a) {\n\t\tthis._rgb.a = n2b(a);\n\t\treturn this;\n\t}\n\tclearer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 - ratio;\n\t\treturn this;\n\t}\n\tgreyscale() {\n\t\tconst rgb = this._rgb;\n\t\tconst val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n\t\trgb.r = rgb.g = rgb.b = val;\n\t\treturn this;\n\t}\n\topaquer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 + ratio;\n\t\treturn this;\n\t}\n\tnegate() {\n\t\tconst v = this._rgb;\n\t\tv.r = 255 - v.r;\n\t\tv.g = 255 - v.g;\n\t\tv.b = 255 - v.b;\n\t\treturn this;\n\t}\n\tlighten(ratio) {\n\t\tmodHSL(this._rgb, 2, ratio);\n\t\treturn this;\n\t}\n\tdarken(ratio) {\n\t\tmodHSL(this._rgb, 2, -ratio);\n\t\treturn this;\n\t}\n\tsaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, ratio);\n\t\treturn this;\n\t}\n\tdesaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, -ratio);\n\t\treturn this;\n\t}\n\trotate(deg) {\n\t\trotate(this._rgb, deg);\n\t\treturn this;\n\t}\n}\nfunction index_esm(input) {\n\treturn new Color(input);\n}\n\nconst isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern;\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n let type, xOffset, yOffset, size, cornerRadius;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(evt, canvas) {\n const e = evt.native || evt;\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _toLeftRightCenter as $, _rlookupByKey as A, getAngleFromPoint as B, toPadding as C, each as D, getMaximumSize as E, _getParentNode as F, readUsedSize as G, HALF_PI as H, throttled as I, supportsEventListenerOptions as J, _isDomSupported as K, log10 as L, _factorize as M, finiteOrDefault as N, callback as O, PI as P, _addGrace as Q, toDegrees as R, _measureText as S, TAU as T, _int16Range as U, _alignPixel as V, clipArea as W, renderText as X, unclipArea as Y, toFont as Z, _arrayUnique as _, resolve as a, _angleDiff as a$, _alignStartEnd as a0, overrides as a1, merge as a2, _capitalize as a3, descriptors as a4, isFunction as a5, _attachContext as a6, _createResolver as a7, _descriptors as a8, mergeIf as a9, restoreTextDirection as aA, noop as aB, distanceBetweenPoints as aC, _setMinAndMaxByKey as aD, niceNum as aE, almostWhole as aF, almostEquals as aG, _decimalPlaces as aH, _longestText as aI, _filterBetween as aJ, _lookup as aK, getHoverColor as aL, clone$1 as aM, _merger as aN, _mergerIf as aO, _deprecated as aP, toFontString as aQ, splineCurve as aR, splineCurveMonotone as aS, getStyle as aT, fontString as aU, toLineHeight as aV, PITAU as aW, INFINITY as aX, RAD_PER_DEG as aY, QUARTER_PI as aZ, TWO_THIRDS_PI as a_, uid as aa, debounce as ab, retinaScale as ac, clearCanvas as ad, setsEqual as ae, _elementsEqual as af, _isClickEvent as ag, _isBetween as ah, _readValueToProps as ai, _updateBezierControlPoints as aj, _computeSegments as ak, _boundSegments as al, _steppedInterpolation as am, _bezierInterpolation as an, _pointInLine as ao, _steppedLineTo as ap, _bezierCurveTo as aq, drawPoint as ar, addRoundedRectPath as as, toTRBL as at, toTRBLCorners as au, _boundSegment as av, _normalizeAngle as aw, getRtlAdapter as ax, overrideTextDirection as ay, _textX as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, getRelativePosition as y, _isPointInArea as z };\n","/*!\n * Chart.js v3.7.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as getAngleFromPoint, C as toPadding, D as each, E as getMaximumSize, F as _getParentNode, G as readUsedSize, I as throttled, J as supportsEventListenerOptions, K as _isDomSupported, L as log10, M as _factorize, N as finiteOrDefault, O as callback, Q as _addGrace, R as toDegrees, S as _measureText, U as _int16Range, V as _alignPixel, W as clipArea, X as renderText, Y as unclipArea, Z as toFont, $ as _toLeftRightCenter, a0 as _alignStartEnd, a1 as overrides, a2 as merge, a3 as _capitalize, a4 as descriptors, a5 as isFunction, a6 as _attachContext, a7 as _createResolver, a8 as _descriptors, a9 as mergeIf, aa as uid, ab as debounce, ac as retinaScale, ad as clearCanvas, ae as setsEqual, af as _elementsEqual, ag as _isClickEvent, ah as _isBetween, ai as _readValueToProps, aj as _updateBezierControlPoints, ak as _computeSegments, al as _boundSegments, am as _steppedInterpolation, an as _bezierInterpolation, ao as _pointInLine, ap as _steppedLineTo, aq as _bezierCurveTo, ar as drawPoint, as as addRoundedRectPath, at as toTRBL, au as toTRBLCorners, av as _boundSegment, aw as _normalizeAngle, ax as getRtlAdapter, ay as overrideTextDirection, az as _textX, aA as restoreTextDirection, aB as noop, aC as distanceBetweenPoints, aD as _setMinAndMaxByKey, aE as niceNum, aF as almostWhole, aG as almostEquals, aH as _decimalPlaces, aI as _longestText, aJ as _filterBetween, aK as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || (elapsed < duration));\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n});\ndefaults.describe('animations', {\n _fallback: 'animation',\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const metasets = iScale.getMatchingVisibleMetas(this._type);\n const stacked = iScale.options.stacked;\n const ilen = metasets.length;\n const stacks = [];\n let i, item;\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n if (!item.controller.options.grouped) {\n continue;\n }\n if (typeof dataIndex !== 'undefined') {\n const val = item.controller.getParsed(dataIndex)[\n item.controller._cachedMeta.vScale.axis\n ];\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n stacks.push(item.stack);\n }\n if (item.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n};\n\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false,\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const dataset = this.getDataset();\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const dataset = this.getDataset();\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const dataset = this.getDataset();\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n return getRelativePosition$1(e, chart);\n}\nfunction evaluateAllVisibleItems(chart, handler) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n let index, data, element;\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n ({index, data} = metasets[i]);\n for (let j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n const items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = _isPointInArea(center, chart.chartArea, chart._minPadding);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n }\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return [];\n }\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition);\n}\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const items = [];\n const axis = options.axis;\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateAllVisibleItems(chart, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n if (options.intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition)\n : getNearestItems(chart, position, axis, false, useFinalPosition);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition) :\n getNearestItems(chart, position, axis, false, useFinalPosition);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'x', intersect: options.intersect}, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'y', intersect: options.intersect}, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition$1(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(this.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = grid.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n if (isHorizontal) {\n x = pixel;\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {textAlign, x};\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n drawBorder() {\n const {chart, ctx, options: {grid}} = this;\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n return plugins;\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n const result = [];\n const context = chart.getContext();\n for (let i = 0; i < plugins.length; i++) {\n const plugin = plugins[i];\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.7.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nclass Chart {\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {mode});\n this._layers.sort(compare2Level('z', '_idx'));\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: _isPointInArea(e, this.chartArea, this._minPadding)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n const {options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (meta.type !== 'line') {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\nfunction decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n let target = null;\n let horizontal;\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n return null;\n}\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const target = [];\n const start = options.reverse ? scale.max : scale.min;\n const end = options.reverse ? scale.min : scale.max;\n let i, center, value;\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\nfunction getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return createBoundaryLine(boundary, line);\n}\nfunction createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _clip(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = findSegmentEnd(start, end, points);\n const bounds = getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\nfunction _fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n _fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n _clip(ctx, target, area.bottom);\n }\n _fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction drawfill(ctx, source, area) {\n const target = getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart || config._chart;\n this._chart = this.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n const title = callbacks.title.apply(this, [context]);\n const afterTitle = callbacks.afterTitle.apply(this, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n const footer = callbacks.footer.apply(this, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(this, context));\n labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n labelTextColors.push(scoped.labelTextColor.call(this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n chart.notifyPlugins('afterTooltipDraw', args);\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: plugin_filler,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid} = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(this.getContext(index - 1));\n drawRadiusLine(this, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","import {Chart, registerables} from '../dist/chart.esm';\n\nChart.register(...registerables);\n\nexport default Chart;\n","/*!\n * chartjs-plugin-datalabels v2.0.0\n * https://chartjs-plugin-datalabels.netlify.app\n * (c) 2017-2021 chartjs-plugin-datalabels contributors\n * Released under the MIT license\n */\nimport { isNullOrUndef, merge, toFont, resolve, toPadding, valueOrDefault, callback, isObject, each } from 'chart.js/helpers';\nimport { defaults as defaults$1, ArcElement, PointElement, BarElement } from 'chart.js';\n\nvar devicePixelRatio = (function() {\n if (typeof window !== 'undefined') {\n if (window.devicePixelRatio) {\n return window.devicePixelRatio;\n }\n\n // devicePixelRatio is undefined on IE10\n // https://stackoverflow.com/a/20204180/8837887\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/85\n var screen = window.screen;\n if (screen) {\n return (screen.deviceXDPI || 1) / (screen.logicalXDPI || 1);\n }\n }\n\n return 1;\n}());\n\nvar utils = {\n // @todo move this in Chart.helpers.toTextLines\n toTextLines: function(inputs) {\n var lines = [];\n var input;\n\n inputs = [].concat(inputs);\n while (inputs.length) {\n input = inputs.pop();\n if (typeof input === 'string') {\n lines.unshift.apply(lines, input.split('\\n'));\n } else if (Array.isArray(input)) {\n inputs.push.apply(inputs, input);\n } else if (!isNullOrUndef(inputs)) {\n lines.unshift('' + input);\n }\n }\n\n return lines;\n },\n\n // @todo move this in Chart.helpers.canvas.textSize\n // @todo cache calls of measureText if font doesn't change?!\n textSize: function(ctx, lines, font) {\n var items = [].concat(lines);\n var ilen = items.length;\n var prev = ctx.font;\n var width = 0;\n var i;\n\n ctx.font = font.string;\n\n for (i = 0; i < ilen; ++i) {\n width = Math.max(ctx.measureText(items[i]).width, width);\n }\n\n ctx.font = prev;\n\n return {\n height: ilen * font.lineHeight,\n width: width\n };\n },\n\n /**\n * Returns value bounded by min and max. This is equivalent to max(min, min(value, max)).\n * @todo move this method in Chart.helpers.bound\n * https://doc.qt.io/qt-5/qtglobal.html#qBound\n */\n bound: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Returns an array of pair [value, state] where state is:\n * * -1: value is only in a0 (removed)\n * * 1: value is only in a1 (added)\n */\n arrayDiff: function(a0, a1) {\n var prev = a0.slice();\n var updates = [];\n var i, j, ilen, v;\n\n for (i = 0, ilen = a1.length; i < ilen; ++i) {\n v = a1[i];\n j = prev.indexOf(v);\n\n if (j === -1) {\n updates.push([v, 1]);\n } else {\n prev.splice(j, 1);\n }\n }\n\n for (i = 0, ilen = prev.length; i < ilen; ++i) {\n updates.push([prev[i], -1]);\n }\n\n return updates;\n },\n\n /**\n * https://github.com/chartjs/chartjs-plugin-datalabels/issues/70\n */\n rasterize: function(v) {\n return Math.round(v * devicePixelRatio) / devicePixelRatio;\n }\n};\n\nfunction orient(point, origin) {\n var x0 = origin.x;\n var y0 = origin.y;\n\n if (x0 === null) {\n return {x: 0, y: -1};\n }\n if (y0 === null) {\n return {x: 1, y: 0};\n }\n\n var dx = point.x - x0;\n var dy = point.y - y0;\n var ln = Math.sqrt(dx * dx + dy * dy);\n\n return {\n x: ln ? dx / ln : 0,\n y: ln ? dy / ln : -1\n };\n}\n\nfunction aligned(x, y, vx, vy, align) {\n switch (align) {\n case 'center':\n vx = vy = 0;\n break;\n case 'bottom':\n vx = 0;\n vy = 1;\n break;\n case 'right':\n vx = 1;\n vy = 0;\n break;\n case 'left':\n vx = -1;\n vy = 0;\n break;\n case 'top':\n vx = 0;\n vy = -1;\n break;\n case 'start':\n vx = -vx;\n vy = -vy;\n break;\n case 'end':\n // keep natural orientation\n break;\n default:\n // clockwise rotation (in degree)\n align *= (Math.PI / 180);\n vx = Math.cos(align);\n vy = Math.sin(align);\n break;\n }\n\n return {\n x: x,\n y: y,\n vx: vx,\n vy: vy\n };\n}\n\n// Line clipping (Cohen–Sutherland algorithm)\n// https://en.wikipedia.org/wiki/Cohen–Sutherland_algorithm\n\nvar R_INSIDE = 0;\nvar R_LEFT = 1;\nvar R_RIGHT = 2;\nvar R_BOTTOM = 4;\nvar R_TOP = 8;\n\nfunction region(x, y, rect) {\n var res = R_INSIDE;\n\n if (x < rect.left) {\n res |= R_LEFT;\n } else if (x > rect.right) {\n res |= R_RIGHT;\n }\n if (y < rect.top) {\n res |= R_TOP;\n } else if (y > rect.bottom) {\n res |= R_BOTTOM;\n }\n\n return res;\n}\n\nfunction clipped(segment, area) {\n var x0 = segment.x0;\n var y0 = segment.y0;\n var x1 = segment.x1;\n var y1 = segment.y1;\n var r0 = region(x0, y0, area);\n var r1 = region(x1, y1, area);\n var r, x, y;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!(r0 | r1) || (r0 & r1)) {\n // both points inside or on the same side: no clipping\n break;\n }\n\n // at least one point is outside\n r = r0 || r1;\n\n if (r & R_TOP) {\n x = x0 + (x1 - x0) * (area.top - y0) / (y1 - y0);\n y = area.top;\n } else if (r & R_BOTTOM) {\n x = x0 + (x1 - x0) * (area.bottom - y0) / (y1 - y0);\n y = area.bottom;\n } else if (r & R_RIGHT) {\n y = y0 + (y1 - y0) * (area.right - x0) / (x1 - x0);\n x = area.right;\n } else if (r & R_LEFT) {\n y = y0 + (y1 - y0) * (area.left - x0) / (x1 - x0);\n x = area.left;\n }\n\n if (r === r0) {\n x0 = x;\n y0 = y;\n r0 = region(x0, y0, area);\n } else {\n x1 = x;\n y1 = y;\n r1 = region(x1, y1, area);\n }\n }\n\n return {\n x0: x0,\n x1: x1,\n y0: y0,\n y1: y1\n };\n}\n\nfunction compute$1(range, config) {\n var anchor = config.anchor;\n var segment = range;\n var x, y;\n\n if (config.clamp) {\n segment = clipped(segment, config.area);\n }\n\n if (anchor === 'start') {\n x = segment.x0;\n y = segment.y0;\n } else if (anchor === 'end') {\n x = segment.x1;\n y = segment.y1;\n } else {\n x = (segment.x0 + segment.x1) / 2;\n y = (segment.y0 + segment.y1) / 2;\n }\n\n return aligned(x, y, range.vx, range.vy, config.align);\n}\n\nvar positioners = {\n arc: function(el, config) {\n var angle = (el.startAngle + el.endAngle) / 2;\n var vx = Math.cos(angle);\n var vy = Math.sin(angle);\n var r0 = el.innerRadius;\n var r1 = el.outerRadius;\n\n return compute$1({\n x0: el.x + vx * r0,\n y0: el.y + vy * r0,\n x1: el.x + vx * r1,\n y1: el.y + vy * r1,\n vx: vx,\n vy: vy\n }, config);\n },\n\n point: function(el, config) {\n var v = orient(el, config.origin);\n var rx = v.x * el.options.radius;\n var ry = v.y * el.options.radius;\n\n return compute$1({\n x0: el.x - rx,\n y0: el.y - ry,\n x1: el.x + rx,\n y1: el.y + ry,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n bar: function(el, config) {\n var v = orient(el, config.origin);\n var x = el.x;\n var y = el.y;\n var sx = 0;\n var sy = 0;\n\n if (el.horizontal) {\n x = Math.min(el.x, el.base);\n sx = Math.abs(el.base - el.x);\n } else {\n y = Math.min(el.y, el.base);\n sy = Math.abs(el.base - el.y);\n }\n\n return compute$1({\n x0: x,\n y0: y + sy,\n x1: x + sx,\n y1: y,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n fallback: function(el, config) {\n var v = orient(el, config.origin);\n\n return compute$1({\n x0: el.x,\n y0: el.y,\n x1: el.x,\n y1: el.y,\n vx: v.x,\n vy: v.y\n }, config);\n }\n};\n\nvar rasterize = utils.rasterize;\n\nfunction boundingRects(model) {\n var borderWidth = model.borderWidth || 0;\n var padding = model.padding;\n var th = model.size.height;\n var tw = model.size.width;\n var tx = -tw / 2;\n var ty = -th / 2;\n\n return {\n frame: {\n x: tx - padding.left - borderWidth,\n y: ty - padding.top - borderWidth,\n w: tw + padding.width + borderWidth * 2,\n h: th + padding.height + borderWidth * 2\n },\n text: {\n x: tx,\n y: ty,\n w: tw,\n h: th\n }\n };\n}\n\nfunction getScaleOrigin(el, context) {\n var scale = context.chart.getDatasetMeta(context.datasetIndex).vScale;\n\n if (!scale) {\n return null;\n }\n\n if (scale.xCenter !== undefined && scale.yCenter !== undefined) {\n return {x: scale.xCenter, y: scale.yCenter};\n }\n\n var pixel = scale.getBasePixel();\n return el.horizontal ?\n {x: pixel, y: null} :\n {x: null, y: pixel};\n}\n\nfunction getPositioner(el) {\n if (el instanceof ArcElement) {\n return positioners.arc;\n }\n if (el instanceof PointElement) {\n return positioners.point;\n }\n if (el instanceof BarElement) {\n return positioners.bar;\n }\n return positioners.fallback;\n}\n\nfunction drawRoundedRect(ctx, x, y, w, h, radius) {\n var HALF_PI = Math.PI / 2;\n\n if (radius) {\n var r = Math.min(radius, h / 2, w / 2);\n var left = x + r;\n var top = y + r;\n var right = x + w - r;\n var bottom = y + h - r;\n\n ctx.moveTo(x, top);\n if (left < right && top < bottom) {\n ctx.arc(left, top, r, -Math.PI, -HALF_PI);\n ctx.arc(right, top, r, -HALF_PI, 0);\n ctx.arc(right, bottom, r, 0, HALF_PI);\n ctx.arc(left, bottom, r, HALF_PI, Math.PI);\n } else if (left < right) {\n ctx.moveTo(left, y);\n ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n ctx.arc(left, top, r, HALF_PI, Math.PI + HALF_PI);\n } else if (top < bottom) {\n ctx.arc(left, top, r, -Math.PI, 0);\n ctx.arc(left, bottom, r, 0, Math.PI);\n } else {\n ctx.arc(left, top, r, -Math.PI, Math.PI);\n }\n ctx.closePath();\n ctx.moveTo(x, y);\n } else {\n ctx.rect(x, y, w, h);\n }\n}\n\nfunction drawFrame(ctx, rect, model) {\n var bgColor = model.backgroundColor;\n var borderColor = model.borderColor;\n var borderWidth = model.borderWidth;\n\n if (!bgColor && (!borderColor || !borderWidth)) {\n return;\n }\n\n ctx.beginPath();\n\n drawRoundedRect(\n ctx,\n rasterize(rect.x) + borderWidth / 2,\n rasterize(rect.y) + borderWidth / 2,\n rasterize(rect.w) - borderWidth,\n rasterize(rect.h) - borderWidth,\n model.borderRadius);\n\n ctx.closePath();\n\n if (bgColor) {\n ctx.fillStyle = bgColor;\n ctx.fill();\n }\n\n if (borderColor && borderWidth) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = 'miter';\n ctx.stroke();\n }\n}\n\nfunction textGeometry(rect, align, font) {\n var h = font.lineHeight;\n var w = rect.w;\n var x = rect.x;\n var y = rect.y + h / 2;\n\n if (align === 'center') {\n x += w / 2;\n } else if (align === 'end' || align === 'right') {\n x += w;\n }\n\n return {\n h: h,\n w: w,\n x: x,\n y: y\n };\n}\n\nfunction drawTextLine(ctx, text, cfg) {\n var shadow = ctx.shadowBlur;\n var stroked = cfg.stroked;\n var x = rasterize(cfg.x);\n var y = rasterize(cfg.y);\n var w = rasterize(cfg.w);\n\n if (stroked) {\n ctx.strokeText(text, x, y, w);\n }\n\n if (cfg.filled) {\n if (shadow && stroked) {\n // Prevent drawing shadow on both the text stroke and fill, so\n // if the text is stroked, remove the shadow for the text fill.\n ctx.shadowBlur = 0;\n }\n\n ctx.fillText(text, x, y, w);\n\n if (shadow && stroked) {\n ctx.shadowBlur = shadow;\n }\n }\n}\n\nfunction drawText(ctx, lines, rect, model) {\n var align = model.textAlign;\n var color = model.color;\n var filled = !!color;\n var font = model.font;\n var ilen = lines.length;\n var strokeColor = model.textStrokeColor;\n var strokeWidth = model.textStrokeWidth;\n var stroked = strokeColor && strokeWidth;\n var i;\n\n if (!ilen || (!filled && !stroked)) {\n return;\n }\n\n // Adjust coordinates based on text alignment and line height\n rect = textGeometry(rect, align, font);\n\n ctx.font = font.string;\n ctx.textAlign = align;\n ctx.textBaseline = 'middle';\n ctx.shadowBlur = model.textShadowBlur;\n ctx.shadowColor = model.textShadowColor;\n\n if (filled) {\n ctx.fillStyle = color;\n }\n if (stroked) {\n ctx.lineJoin = 'round';\n ctx.lineWidth = strokeWidth;\n ctx.strokeStyle = strokeColor;\n }\n\n for (i = 0, ilen = lines.length; i < ilen; ++i) {\n drawTextLine(ctx, lines[i], {\n stroked: stroked,\n filled: filled,\n w: rect.w,\n x: rect.x,\n y: rect.y + rect.h * i\n });\n }\n}\n\nvar Label = function(config, ctx, el, index) {\n var me = this;\n\n me._config = config;\n me._index = index;\n me._model = null;\n me._rects = null;\n me._ctx = ctx;\n me._el = el;\n};\n\nmerge(Label.prototype, {\n /**\n * @private\n */\n _modelize: function(display, lines, config, context) {\n var me = this;\n var index = me._index;\n var font = toFont(resolve([config.font, {}], context, index));\n var color = resolve([config.color, defaults$1.color], context, index);\n\n return {\n align: resolve([config.align, 'center'], context, index),\n anchor: resolve([config.anchor, 'center'], context, index),\n area: context.chart.chartArea,\n backgroundColor: resolve([config.backgroundColor, null], context, index),\n borderColor: resolve([config.borderColor, null], context, index),\n borderRadius: resolve([config.borderRadius, 0], context, index),\n borderWidth: resolve([config.borderWidth, 0], context, index),\n clamp: resolve([config.clamp, false], context, index),\n clip: resolve([config.clip, false], context, index),\n color: color,\n display: display,\n font: font,\n lines: lines,\n offset: resolve([config.offset, 0], context, index),\n opacity: resolve([config.opacity, 1], context, index),\n origin: getScaleOrigin(me._el, context),\n padding: toPadding(resolve([config.padding, 0], context, index)),\n positioner: getPositioner(me._el),\n rotation: resolve([config.rotation, 0], context, index) * (Math.PI / 180),\n size: utils.textSize(me._ctx, lines, font),\n textAlign: resolve([config.textAlign, 'start'], context, index),\n textShadowBlur: resolve([config.textShadowBlur, 0], context, index),\n textShadowColor: resolve([config.textShadowColor, color], context, index),\n textStrokeColor: resolve([config.textStrokeColor, color], context, index),\n textStrokeWidth: resolve([config.textStrokeWidth, 0], context, index)\n };\n },\n\n update: function(context) {\n var me = this;\n var model = null;\n var rects = null;\n var index = me._index;\n var config = me._config;\n var value, label, lines;\n\n // We first resolve the display option (separately) to avoid computing\n // other options in case the label is hidden (i.e. display: false).\n var display = resolve([config.display, true], context, index);\n\n if (display) {\n value = context.dataset.data[index];\n label = valueOrDefault(callback(config.formatter, [value, context]), value);\n lines = isNullOrUndef(label) ? [] : utils.toTextLines(label);\n\n if (lines.length) {\n model = me._modelize(display, lines, config, context);\n rects = boundingRects(model);\n }\n }\n\n me._model = model;\n me._rects = rects;\n },\n\n geometry: function() {\n return this._rects ? this._rects.frame : {};\n },\n\n rotation: function() {\n return this._model ? this._model.rotation : 0;\n },\n\n visible: function() {\n return this._model && this._model.opacity;\n },\n\n model: function() {\n return this._model;\n },\n\n draw: function(chart, center) {\n var me = this;\n var ctx = chart.ctx;\n var model = me._model;\n var rects = me._rects;\n var area;\n\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n if (model.clip) {\n area = model.area;\n ctx.beginPath();\n ctx.rect(\n area.left,\n area.top,\n area.right - area.left,\n area.bottom - area.top);\n ctx.clip();\n }\n\n ctx.globalAlpha = utils.bound(0, model.opacity, 1);\n ctx.translate(rasterize(center.x), rasterize(center.y));\n ctx.rotate(model.rotation);\n\n drawFrame(ctx, rects.frame, model);\n drawText(ctx, model.lines, rects.text, model);\n\n ctx.restore();\n }\n});\n\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; // eslint-disable-line es/no-number-minsafeinteger\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; // eslint-disable-line es/no-number-maxsafeinteger\n\nfunction rotated(point, center, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var cx = center.x;\n var cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nfunction projected(points, axis) {\n var min = MAX_INTEGER;\n var max = MIN_INTEGER;\n var origin = axis.origin;\n var i, pt, vx, vy, dp;\n\n for (i = 0; i < points.length; ++i) {\n pt = points[i];\n vx = pt.x - origin.x;\n vy = pt.y - origin.y;\n dp = axis.vx * vx + axis.vy * vy;\n min = Math.min(min, dp);\n max = Math.max(max, dp);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nfunction toAxis(p0, p1) {\n var vx = p1.x - p0.x;\n var vy = p1.y - p0.y;\n var ln = Math.sqrt(vx * vx + vy * vy);\n\n return {\n vx: (p1.x - p0.x) / ln,\n vy: (p1.y - p0.y) / ln,\n origin: p0,\n ln: ln\n };\n}\n\nvar HitBox = function() {\n this._rotation = 0;\n this._rect = {\n x: 0,\n y: 0,\n w: 0,\n h: 0\n };\n};\n\nmerge(HitBox.prototype, {\n center: function() {\n var r = this._rect;\n return {\n x: r.x + r.w / 2,\n y: r.y + r.h / 2\n };\n },\n\n update: function(center, rect, rotation) {\n this._rotation = rotation;\n this._rect = {\n x: rect.x + center.x,\n y: rect.y + center.y,\n w: rect.w,\n h: rect.h\n };\n },\n\n contains: function(point) {\n var me = this;\n var margin = 1;\n var rect = me._rect;\n\n point = rotated(point, me.center(), -me._rotation);\n\n return !(point.x < rect.x - margin\n || point.y < rect.y - margin\n || point.x > rect.x + rect.w + margin * 2\n || point.y > rect.y + rect.h + margin * 2);\n },\n\n // Separating Axis Theorem\n // https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169\n intersects: function(other) {\n var r0 = this._points();\n var r1 = other._points();\n var axes = [\n toAxis(r0[0], r0[1]),\n toAxis(r0[0], r0[3])\n ];\n var i, pr0, pr1;\n\n if (this._rotation !== other._rotation) {\n // Only separate with r1 axis if the rotation is different,\n // else it's enough to separate r0 and r1 with r0 axis only!\n axes.push(\n toAxis(r1[0], r1[1]),\n toAxis(r1[0], r1[3])\n );\n }\n\n for (i = 0; i < axes.length; ++i) {\n pr0 = projected(r0, axes[i]);\n pr1 = projected(r1, axes[i]);\n\n if (pr0.max < pr1.min || pr1.max < pr0.min) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * @private\n */\n _points: function() {\n var me = this;\n var rect = me._rect;\n var angle = me._rotation;\n var center = me.center();\n\n return [\n rotated({x: rect.x, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y + rect.h}, center, angle),\n rotated({x: rect.x, y: rect.y + rect.h}, center, angle)\n ];\n }\n});\n\nfunction coordinates(el, model, geometry) {\n var point = model.positioner(el, model);\n var vx = point.vx;\n var vy = point.vy;\n\n if (!vx && !vy) {\n // if aligned center, we don't want to offset the center point\n return {x: point.x, y: point.y};\n }\n\n var w = geometry.w;\n var h = geometry.h;\n\n // take in account the label rotation\n var rotation = model.rotation;\n var dx = Math.abs(w / 2 * Math.cos(rotation)) + Math.abs(h / 2 * Math.sin(rotation));\n var dy = Math.abs(w / 2 * Math.sin(rotation)) + Math.abs(h / 2 * Math.cos(rotation));\n\n // scale the unit vector (vx, vy) to get at least dx or dy equal to\n // w or h respectively (else we would calculate the distance to the\n // ellipse inscribed in the bounding rect)\n var vs = 1 / Math.max(Math.abs(vx), Math.abs(vy));\n dx *= vx * vs;\n dy *= vy * vs;\n\n // finally, include the explicit offset\n dx += model.offset * vx;\n dy += model.offset * vy;\n\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n}\n\nfunction collide(labels, collider) {\n var i, j, s0, s1;\n\n // IMPORTANT Iterate in the reverse order since items at the end of the\n // list have an higher weight/priority and thus should be less impacted\n // by the overlapping strategy.\n\n for (i = labels.length - 1; i >= 0; --i) {\n s0 = labels[i].$layout;\n\n for (j = i - 1; j >= 0 && s0._visible; --j) {\n s1 = labels[j].$layout;\n\n if (s1._visible && s0._box.intersects(s1._box)) {\n collider(s0, s1);\n }\n }\n }\n\n return labels;\n}\n\nfunction compute(labels) {\n var i, ilen, label, state, geometry, center, proxy;\n\n // Initialize labels for overlap detection\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n // Chart.js 3 removed el._model in favor of getProps(), making harder to\n // abstract reading values in positioners. Also, using string arrays to\n // read values (i.e. var {a,b,c} = el.getProps([\"a\",\"b\",\"c\"])) would make\n // positioners inefficient in the normal case (i.e. not the final values)\n // and the code a bit ugly, so let's use a Proxy instead.\n proxy = new Proxy(label._el, {get: (el, p) => el.getProps([p], true)[p]});\n\n geometry = label.geometry();\n center = coordinates(proxy, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n }\n }\n\n // Auto hide overlapping labels\n return collide(labels, function(s0, s1) {\n var h0 = s0._hidable;\n var h1 = s1._hidable;\n\n if ((h0 && h1) || h1) {\n s1._visible = false;\n } else if (h0) {\n s0._visible = false;\n }\n });\n}\n\nvar layout = {\n prepare: function(datasets) {\n var labels = [];\n var i, j, ilen, jlen, label;\n\n for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n for (j = 0, jlen = datasets[i].length; j < jlen; ++j) {\n label = datasets[i][j];\n labels.push(label);\n label.$layout = {\n _box: new HitBox(),\n _hidable: false,\n _visible: true,\n _set: i,\n _idx: j\n };\n }\n }\n\n // TODO New `z` option: labels with a higher z-index are drawn\n // of top of the ones with a lower index. Lowest z-index labels\n // are also discarded first when hiding overlapping labels.\n labels.sort(function(a, b) {\n var sa = a.$layout;\n var sb = b.$layout;\n\n return sa._idx === sb._idx\n ? sb._set - sa._set\n : sb._idx - sa._idx;\n });\n\n this.update(labels);\n\n return labels;\n },\n\n update: function(labels) {\n var dirty = false;\n var i, ilen, label, model, state;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n model = label.model();\n state = label.$layout;\n state._hidable = model && model.display === 'auto';\n state._visible = label.visible();\n dirty |= state._hidable;\n }\n\n if (dirty) {\n compute(labels);\n }\n },\n\n lookup: function(labels, point) {\n var i, state;\n\n // IMPORTANT Iterate in the reverse order since items at the end of\n // the list have an higher z-index, thus should be picked first.\n\n for (i = labels.length - 1; i >= 0; --i) {\n state = labels[i].$layout;\n\n if (state && state._visible && state._box.contains(point)) {\n return labels[i];\n }\n }\n\n return null;\n },\n\n draw: function(chart, labels) {\n var i, ilen, label, state, geometry, center;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n geometry = label.geometry();\n center = coordinates(label._el, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n label.draw(chart, center);\n }\n }\n }\n};\n\nvar formatter = function(value) {\n if (isNullOrUndef(value)) {\n return null;\n }\n\n var label = value;\n var keys, klen, k;\n if (isObject(value)) {\n if (!isNullOrUndef(value.label)) {\n label = value.label;\n } else if (!isNullOrUndef(value.r)) {\n label = value.r;\n } else {\n label = '';\n keys = Object.keys(value);\n for (k = 0, klen = keys.length; k < klen; ++k) {\n label += (k !== 0 ? ', ' : '') + keys[k] + ': ' + value[keys[k]];\n }\n }\n }\n\n return '' + label;\n};\n\n/**\n * IMPORTANT: make sure to also update tests and TypeScript definition\n * files (`/test/specs/defaults.spec.js` and `/types/options.d.ts`)\n */\n\nvar defaults = {\n align: 'center',\n anchor: 'center',\n backgroundColor: null,\n borderColor: null,\n borderRadius: 0,\n borderWidth: 0,\n clamp: false,\n clip: false,\n color: undefined,\n display: true,\n font: {\n family: undefined,\n lineHeight: 1.2,\n size: undefined,\n style: undefined,\n weight: null\n },\n formatter: formatter,\n labels: undefined,\n listeners: {},\n offset: 4,\n opacity: 1,\n padding: {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4\n },\n rotation: 0,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n textShadowBlur: 0,\n textShadowColor: undefined\n};\n\n/**\n * @see https://github.com/chartjs/Chart.js/issues/4176\n */\n\nvar EXPANDO_KEY = '$datalabels';\nvar DEFAULT_KEY = '$default';\n\nfunction configure(dataset, options) {\n var override = dataset.datalabels;\n var listeners = {};\n var configs = [];\n var labels, keys;\n\n if (override === false) {\n return null;\n }\n if (override === true) {\n override = {};\n }\n\n options = merge({}, [options, override]);\n labels = options.labels || {};\n keys = Object.keys(labels);\n delete options.labels;\n\n if (keys.length) {\n keys.forEach(function(key) {\n if (labels[key]) {\n configs.push(merge({}, [\n options,\n labels[key],\n {_key: key}\n ]));\n }\n });\n } else {\n // Default label if no \"named\" label defined.\n configs.push(options);\n }\n\n // listeners: {: {: }}\n listeners = configs.reduce(function(target, config) {\n each(config.listeners || {}, function(fn, event) {\n target[event] = target[event] || {};\n target[event][config._key || DEFAULT_KEY] = fn;\n });\n\n delete config.listeners;\n return target;\n }, {});\n\n return {\n labels: configs,\n listeners: listeners\n };\n}\n\nfunction dispatchEvent(chart, listeners, label) {\n if (!listeners) {\n return;\n }\n\n var context = label.$context;\n var groups = label.$groups;\n var callback$1;\n\n if (!listeners[groups._set]) {\n return;\n }\n\n callback$1 = listeners[groups._set][groups._key];\n if (!callback$1) {\n return;\n }\n\n if (callback(callback$1, [context]) === true) {\n // Users are allowed to tweak the given context by injecting values that can be\n // used in scriptable options to display labels differently based on the current\n // event (e.g. highlight an hovered label). That's why we update the label with\n // the output context and schedule a new chart render by setting it dirty.\n chart[EXPANDO_KEY]._dirty = true;\n label.update(context);\n }\n}\n\nfunction dispatchMoveEvents(chart, listeners, previous, label) {\n var enter, leave;\n\n if (!previous && !label) {\n return;\n }\n\n if (!previous) {\n enter = true;\n } else if (!label) {\n leave = true;\n } else if (previous !== label) {\n leave = enter = true;\n }\n\n if (leave) {\n dispatchEvent(chart, listeners.leave, previous);\n }\n if (enter) {\n dispatchEvent(chart, listeners.enter, label);\n }\n}\n\nfunction handleMoveEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var listeners = expando._listeners;\n var previous, label;\n\n if (!listeners.enter && !listeners.leave) {\n return;\n }\n\n if (event.type === 'mousemove') {\n label = layout.lookup(expando._labels, event);\n } else if (event.type !== 'mouseout') {\n return;\n }\n\n previous = expando._hovered;\n expando._hovered = label;\n dispatchMoveEvents(chart, listeners, previous, label);\n}\n\nfunction handleClickEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var handlers = expando._listeners.click;\n var label = handlers && layout.lookup(expando._labels, event);\n if (label) {\n dispatchEvent(chart, handlers, label);\n }\n}\n\nvar plugin = {\n id: 'datalabels',\n\n defaults: defaults,\n\n beforeInit: function(chart) {\n chart[EXPANDO_KEY] = {\n _actives: []\n };\n },\n\n beforeUpdate: function(chart) {\n var expando = chart[EXPANDO_KEY];\n expando._listened = false;\n expando._listeners = {}; // {: {: {: }}}\n expando._datasets = []; // per dataset labels: [Label[]]\n expando._labels = []; // layouted labels: Label[]\n },\n\n afterDatasetUpdate: function(chart, args, options) {\n var datasetIndex = args.index;\n var expando = chart[EXPANDO_KEY];\n var labels = expando._datasets[datasetIndex] = [];\n var visible = chart.isDatasetVisible(datasetIndex);\n var dataset = chart.data.datasets[datasetIndex];\n var config = configure(dataset, options);\n var elements = args.meta.data || [];\n var ctx = chart.ctx;\n var i, j, ilen, jlen, cfg, key, el, label;\n\n ctx.save();\n\n for (i = 0, ilen = elements.length; i < ilen; ++i) {\n el = elements[i];\n el[EXPANDO_KEY] = [];\n\n if (visible && el && chart.getDataVisibility(i) && !el.skip) {\n for (j = 0, jlen = config.labels.length; j < jlen; ++j) {\n cfg = config.labels[j];\n key = cfg._key;\n\n label = new Label(cfg, ctx, el, i);\n label.$groups = {\n _set: datasetIndex,\n _key: key || DEFAULT_KEY\n };\n label.$context = {\n active: false,\n chart: chart,\n dataIndex: i,\n dataset: dataset,\n datasetIndex: datasetIndex\n };\n\n label.update(label.$context);\n el[EXPANDO_KEY].push(label);\n labels.push(label);\n }\n }\n }\n\n ctx.restore();\n\n // Store listeners at the chart level and per event type to optimize\n // cases where no listeners are registered for a specific event.\n merge(expando._listeners, config.listeners, {\n merger: function(event, target, source) {\n target[event] = target[event] || {};\n target[event][args.index] = source[event];\n expando._listened = true;\n }\n });\n },\n\n afterUpdate: function(chart, options) {\n chart[EXPANDO_KEY]._labels = layout.prepare(\n chart[EXPANDO_KEY]._datasets,\n options);\n },\n\n // Draw labels on top of all dataset elements\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/29\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/32\n afterDatasetsDraw: function(chart) {\n layout.draw(chart, chart[EXPANDO_KEY]._labels);\n },\n\n beforeEvent: function(chart, args) {\n // If there is no listener registered for this chart, `listened` will be false,\n // meaning we can immediately ignore the incoming event and avoid useless extra\n // computation for users who don't implement label interactions.\n if (chart[EXPANDO_KEY]._listened) {\n var event = args.event;\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n handleMoveEvents(chart, event);\n break;\n case 'click':\n handleClickEvents(chart, event);\n break;\n }\n }\n },\n\n afterEvent: function(chart) {\n var expando = chart[EXPANDO_KEY];\n var previous = expando._actives;\n var actives = expando._actives = chart.getActiveElements();\n var updates = utils.arrayDiff(previous, actives);\n var i, ilen, j, jlen, update, label, labels;\n\n for (i = 0, ilen = updates.length; i < ilen; ++i) {\n update = updates[i];\n if (update[1]) {\n labels = update[0].element[EXPANDO_KEY] || [];\n for (j = 0, jlen = labels.length; j < jlen; ++j) {\n label = labels[j];\n label.$context.active = (update[1] === 1);\n label.update(label.$context);\n }\n }\n }\n\n if (expando._dirty || updates.length) {\n layout.update(expando._labels);\n chart.render();\n }\n\n delete expando._dirty;\n }\n};\n\nexport default plugin;\n","export {sortEmployment, sortEarnings};\n\n\nfunction sortEmployment(a, b) {\n return parseInt(a.year) - parseInt(b.year);\n}\nfunction sortEarnings(a, b) {\n return parseInt(a.percentile) - parseInt(b.percentile);\n}\nfunction sortEducation(a, b){\n let order = [\"a high school diploma or less\",\"a certificate\",\"some college\",\"an Associate degree\",\"a Bachelor's degree\",\"a Master's or Professional degree\",\"a Doctoral degree or more\"]\n\n}","export {htmlLegendPlugin, getLegendList}\n\nconst getLegendList = (chart, id) => {\n const legendContainer = document.getElementById(id);\n let listContainer = legendContainer.querySelector(\"ul\");\n\n if (!listContainer) {\n listContainer = document.createElement(\"ul\");\n listContainer.style.display = \"flex\";\n listContainer.style.flexWrap = \"wrap\";\n listContainer.style.flexDirection = \"row\";\n listContainer.style.margin = 0;\n listContainer.style.padding = 0;\n\n legendContainer.appendChild(listContainer);\n }\n\n return listContainer;\n};\n\nconst htmlLegendPlugin = {\n id: \"htmlLegend\",\n afterUpdate(chart, args, options) {\n const ul = getLegendList(chart, options.containerID);\n\n while (ul.firstChild) {\n ul.firstChild.remove();\n }\n\n const items = chart.options.plugins.legend.labels.generateLabels(chart);\n\n items.forEach((item) => {\n console.log(item)\n const li = document.createElement(\"li\");\n li.style.alignItems = \"center\";\n li.style.cursor = \"pointer\";\n li.style.display = \"flex\";\n //li.style.flexWrap = \"wrap\";\n li.style.flexDirection = \"row\";\n li.style.marginLeft = \"10px\";\n li.style.flex = \"1 1 44%\";\n li.style.marginBottom = \"4px\";\n\n li.addEventListener(\"click\", function () {\n const { type } = chart.config;\n if (type === \"pie\" || type === \"doughnut\") {\n chart.toggleDataVisibility(item.index);\n } else {\n chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n );\n }\n chart.update();\n });\n\n const boxSpan = document.createElement(\"canvas\");\n const ctx = boxSpan.getContext('2d');\n \n boxSpan.style.borderWidth = item.lineWidth + \"px\";\n boxSpan.style.display = \"inline-block\";\n boxSpan.style.height = \"20px\";\n boxSpan.style.width = \"20px\";\n boxSpan.style.marginRight = \"10px\";\n boxSpan.style.marginBottom = \"0px\";\n\n ctx.fillStyle = item.fillStyle;\n ctx.strokeStyle = item.strokeStyle;\n //ctx.setTransform(new DOMMatrix('scale(12,6)'));\n ctx.scale(12,6)\n ctx.fillRect(0, 0, boxSpan.width, boxSpan.height)\n\n const textContainer = document.createElement(\"p\");\n textContainer.style.color = item.fontColor;\n textContainer.style.fontSize = \"0.7rem\";\n textContainer.style.margin = 0;\n textContainer.style.padding = 0;\n textContainer.style.textDecoration = item.hidden ? \"line-through\" : \"\";\n\n const text = document.createTextNode(item.text);\n \n textContainer.appendChild(text);\n\n li.appendChild(boxSpan);\n li.appendChild(textContainer);\n ul.appendChild(li);\n });\n },\n};\n","export default tabler;\nexport {format};\n\nconst capitalize = (s) => {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nconst format = {\n percentile(i) {\n var j = i % 10,\n k = i % 100;\n if (j == 1 && k != 11) {\n return i + \"st\";\n }\n if (j == 2 && k != 12) {\n return i + \"nd\";\n }\n if (j == 3 && k != 13) {\n return i + \"rd\";\n }\n return i + \"th\";\n },\n\n earnings(i) {\n return \"$\" + i.toFixed(2).toLocaleString(\"en-US\");\n },\n\n percent(i) {\n return i.toFixed(2) + \"%\";\n },\n};\n\n/**\n * Format json data rows as html table\n *\n * @param {Array} keys array of keys for table columns in data array\n * @param {Array} data json data formatted [x: x.val, y: y.val],\n * @returns {HTMLElement} Table element containing passed data\n */\nfunction tabler(keys, data, sr, caption) {\n const table = document.createElement(\"table\");\n table.classList.add(\"table\");\n if (sr == true) {table.classList.add(\"sr-only\")}\n const cap = document.createElement(\"caption\");\n const heading = document.createElement(\"thead\");\n const body = document.createElement(\"tbody\");\n const headRow = document.createElement(\"tr\");\n\n cap.innerText = caption;\n\n keys.forEach((key) => {\n let header = document.createElement(\"th\");\n header.innerText = capitalize(key);\n headRow.appendChild(header);\n });\n\n heading.appendChild(headRow);\n\n data.forEach((element) => {\n let row = document.createElement(\"tr\");\n keys.forEach((el) => {\n let cell = document.createElement(\"td\");\n if (el in format) {\n cell.innerText = format[el](element[el]);\n } else {\n cell.innerText = element[el];\n }\n row.appendChild(cell);\n });\n body.appendChild(row);\n });\n\n table.appendChild(cap);\n table.appendChild(heading);\n table.appendChild(body);\n\n return table;\n}\n","var global =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n (typeof global !== 'undefined' && global)\n\nvar support = {\n searchParams: 'URLSearchParams' in global,\n iterable: 'Symbol' in global && 'iterator' in Symbol,\n blob:\n 'FileReader' in global &&\n 'Blob' in global &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in global,\n arrayBuffer: 'ArrayBuffer' in global\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = global.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === '' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob'\n } else if (\n support.arrayBuffer &&\n request.headers.get('Content-Type') &&\n request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n ) {\n xhr.responseType = 'arraybuffer'\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!global.fetch) {\n global.fetch = fetch\n global.Headers = Headers\n global.Request = Request\n global.Response = Response\n}\n","import { Spinner as Spinz } from \"spin.js\";\nimport Pager from \"./pagination.mjs\";\nimport Chart from \"chart.js/auto\";\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { sortEmployment, sortEarnings } from \"./sorters.mjs\";\nimport {htmlLegendPlugin, getLegendList} from \"./pie-legend.mjs\";\nimport pattern from \"patternomaly\";\nimport tabler from \"./tabler.mjs\";\nimport format from \"./tabler.mjs\";\nimport 'core-js/actual/promise';\nimport 'whatwg-fetch';\n\n(function () {\n if (document.getElementById(\"career-list\")) {\n /**\n * Store relevant data for all charts for easy reinstantiation\n */\n const chartData = {\n rows: [],\n };\n\n const controls = document.getElementById(\"controls\");\n /** Wrapper for career list */\n const wrapper = document.getElementById(\"career-list\");\n /** ul list element to hold career data containers */\n const el = document.createElement('ul')\n el.id = \"careerData\"\n el.setAttribute('aria-label', \"Career Data for Careers related to program\");\n el.classList.add(\"accordion\", \"list\", \"career-data\")\n\n const mask = document.createElement(\"div\");\n mask.classList.add(\"loading\");\n wrapper.prepend(mask);\n\n // const el = document.getElementById(\"careerData\");\n /** options for spinner plugin */\n const opts = {\n lines: 13, // The number of lines to draw\n length: 38, // The length of each line\n width: 17, // The line thickness\n radius: 45, // The radius of the inner circle\n scale: 0.5, // Scales overall size of the spinner\n corners: 1, // Corner roundness (0..1)\n speed: 1, // Rounds per second\n rotate: 0, // The rotation offset\n animation: \"spinner-line-fade-quick\", // The CSS animation name for the lines\n direction: 1, // 1: clockwise, -1: counterclockwise\n color: \"#003366\", // CSS color or array of colors\n fadeColor: \"transparent\", // CSS color or array of colors\n top: \"35%\", // Top position relative to parent\n left: \"50%\", // Left position relative to parent\n shadow: \"0 0 1px transparent\", // Box-shadow for the lines\n zIndex: 2000000000, // The z-index (defaults to 2e9)\n className: \"spinner\", // The CSS class to assign to the spinner\n position: \"absolute\", // Element positioning\n };\n\n const spinner = new Spinz(opts).spin(wrapper);\n /**\n * utility function for reformating array into expected values\n *\n * @param {array} myArray\n * @param {string} columnName\n * @returns\n */\n function arrayColumns(myArray, columnName) {\n //console.log(myArray);\n return myArray.map(function (value, index) {\n return value[columnName];\n });\n }\n\n function handleCharts(e) {\n setTimeout(function () {\n var target = e.target;\n var id = target.getAttribute(\"data-id\");\n\n if (!target.classList.contains(\"chart-live\")) {\n chartData.rows[id].charts.forEach(function (e) {\n //console.log(e);\n //console.log(setOptions(e.data, i));\n e.chart = new Chart(\n e.canvas,\n formatOptions[e.canvas.getAttribute(\"data-chart\")](e.data, id)\n );\n });\n target.classList.toggle(\"chart-live\");\n } else {\n chartData.rows[id].charts.forEach(function (e, i) {\n e.chart.destroy();\n });\n target.classList.toggle(\"chart-live\");\n }\n }, 1);\n }\n\n /**\n * Object with functions to create output option objects for chart.js\n * @namespace\n */\n const formatOptions = {\n /**\n * Earnings bar chart options\n *\n * @memberof formatOptions\n * @param {object} data formatted data object populated from API call\n * @returns {object} options object\n */\n earnings: function (data, id) {\n let options = {\n type: \"bar\",\n data: {\n labels: data.x,\n datasets: [\n {\n label: \"Annual Earnings\",\n data: data.y,\n borderWidth: 1,\n },\n ],\n },\n options: {\n color: \"#333\",\n backgroundColor: \"rgba(0, 34, 101, 0.7)\",\n borderColor: \"#002265\",\n scales: {\n y: {\n beginAtZero: true,\n title: {\n display: true,\n text: \"Earnings (USD)\",\n color: \"#002265\",\n },\n ticks: {\n callback: function (value, index, values) {\n return \"$\" + value;\n },\n color: \"#333\",\n },\n },\n x: {\n title: {\n display: true,\n text: \"Percentile\",\n color: \"#002265\",\n },\n ticks: {\n callback: function (value, index, values) {\n function processNum(i) {\n var j = i % 10,\n k = i % 100;\n if (j == 1 && k != 11) {\n return i + \"st\";\n }\n if (j == 2 && k != 12) {\n return i + \"nd\";\n }\n if (j == 3 && k != 13) {\n return i + \"rd\";\n }\n return parseInt(i) + \"th\";\n }\n return processNum(this.getLabelForValue(value));\n },\n },\n },\n },\n responsive: true,\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n callbacks: {\n label: function (context) {\n var label = \"\";\n\n if (context.parsed.y !== null) {\n label += new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(context.parsed.y);\n }\n return label;\n },\n title: function (context) {\n function processNum(i) {\n var j = i % 10,\n k = i % 100;\n if (j == 1 && k != 11) {\n return i + \"st\";\n }\n if (j == 2 && k != 12) {\n return i + \"nd\";\n }\n if (j == 3 && k != 13) {\n return i + \"rd\";\n }\n return parseInt(i) + \"th\";\n }\n\n return (\n processNum(parseInt(context[0].label)) + \" Percentile\"\n );\n },\n },\n },\n },\n },\n };\n return options;\n },\n /**\n * Employment Projection Line Plot Options\n *\n * @memberof formatOptions\n * @param {object} data formatted data object populated from API call\n * @returns {object} options object\n */\n employment: function (data, id) {\n let options = {\n type: \"line\",\n data: {\n labels: data.x,\n datasets: [\n {\n label: \"Employment (10 Year Projection)\",\n data: data.y,\n },\n ],\n },\n options: {\n color: \"#333\",\n plugins: {\n legend: {\n display: false,\n },\n },\n borderColor: \"#002265\",\n scales: {\n y: {\n title: {\n display: true,\n text: \"Employment\",\n color: \"#002265\",\n },\n ticks: {\n stepSize: 1.0,\n },\n },\n x: {\n title: {\n display: true,\n text: \"Year\",\n color: \"#002265\",\n },\n },\n },\n },\n responsive: true,\n };\n return options;\n },\n /**\n * Education Pie Graph Options\n *\n * @memberof formatOptions\n * @param {object} data formatted data object populated from API call\n * @returns {object} options object\n */\n education: function (data, id) {\n let options = {\n type: \"pie\",\n data: {\n labels: [\n \"High School or less\",\n \"Certificate\",\n \"Some College\",\n \"Associate Degree\",\n \"Bachelor's Degree\",\n \"Master's Degree\",\n \"Doctoral Degree +\",\n ],\n datasets: [\n {\n label: \"Education level in career\",\n data: data.y,\n backgroundColor: [\n pattern.draw(\"square\", \"#4dc9f6\"),\n pattern.draw(\"line-vertical\",\"#f67019\"),\n pattern.draw(\"ring\",\"#f53794\"),\n pattern.draw(\"dash\", \"#537bc4\"),\n pattern.draw(\"zigzag\",\"#acc236\"),\n pattern.draw(\"diamond\",\"#166a8f\"),\n pattern.draw(\"dot\",\"#00a950\")\n ],\n },\n ],\n },\n options: {\n color: \"#333\",\n responsive: true,\n aspectRatio: 1.44,\n plugins: {\n datalabels: {\n anchor: \"center\",\n align: \"end\",\n offset: 5,\n display: function(context) {\n //console.log(context)\n var value = context.dataset.data[context.dataIndex];\n return parseFloat(value) > 10 ? true : false;\n },\n formatter: function(value, context) {\n return value.toFixed(2) + \"%\";\n },\n backgroundColor: \"rgba(51,51,51,0.7)\",\n padding: 3,\n borderRadius: 5,\n color: \"#fff\",\n font: {\n size: '11px'\n }\n },\n htmlLegend: {\n containerID: \"legend-\" + id,\n },\n legend: {\n display: false,\n },\n tooltip: {\n callbacks: {\n label: function (context) {\n var label = context.label || \"\";\n if (label) {\n label += \": \";\n }\n if (context.parsed.y !== null) {\n label += context.formattedValue + \"%\";\n }\n return label;\n },\n },\n },\n },\n },\n plugins: [htmlLegendPlugin, ChartDataLabels],\n };\n return options;\n },\n };\n\n /**\n * prints API data to template\n *\n * @param {json} json api results\n *\n */\n function fillTemplate(json) {\n json.forEach(function (e, i) {\n var template = \"\";\n var item = \"\";\n if (document.getElementById(\"career-template\")) {\n var template = document.getElementById(\"career-template\");\n } else {\n throw new Error(\"No template found\");\n }\n //set body fields\n const mappings = {\n name: e[\"humanized-title\"],\n description: e.description,\n education: e[\"typical-ed-level\"],\n openings: e[\"annual-openings\"],\n employment: e[\"employment-current\"],\n earnings:\n \"$\" +\n Math.round(parseInt(e[\"median-earnings\"])).toLocaleString(\"en-US\"),\n };\n\n item = document.importNode(template.content, true);\n const anchor = item.querySelector(\".career-data__heading\");\n const slots = item.querySelectorAll(\".slot\");\n //console.log(slots);\n\n//\n\n //Set parameters necessary for accordion\n anchor.dataset.id = i;\n //anchor.dataset.controls = \"tab-\" + i;\n anchor.id = \"tab-\" + i + \"-heading\";\n anchor.dataset.target = \"#\" + \"tab-\" + i;\n anchor.innerHTML = `${e[\"humanized-title\"]}`\n anchor.setAttribute(\"aria-controls\", \"tab-\" + i);\n anchor.setAttribute(\"aria-expanded\", \"false\");\n\n //set body parameters\n slots.forEach(function (slot) {\n if (slot.dataset.slot && mappings[slot.dataset.slot] != null) {\n //console.log(String(mappings[slot.dataset.slot]));\n slot.innerText = String(mappings[slot.dataset.slot]);\n }\n });\n //accordion body parameters\n const body = item.querySelector(\".accordion-body\");\n body.id = \"tab-\" + i;\n body.setAttribute(\"aria-labelledby\", \"tab-\" + i + \"-heading\");\n\n //set canvas IDs\n let canvi = item.querySelectorAll(\".chart\");\n\n canvi[0].id = \"annual-earnings-\" + i;\n canvi[0].appendChild(tabler([\"percentile\",\"earnings\"], e[\"annual-earnings\"], false, \"Accessible - Annual Earnings by Percentile\"));\n canvi[0].parentNode.append(tabler([\"percentile\",\"earnings\"], e[\"annual-earnings\"], true, \"Accessible - Annual Earnings by Percentile\"));\n\n canvi[1].id = \"employment-\" + i;\n canvi[1].appendChild(tabler([\"year\",\"number\"], e[\"employment\"], false, \"Accessible - Employment 10 year projection\"));\n canvi[1].parentNode.append(tabler([\"year\",\"number\"], e[\"employment\"], true, \"Accessible - Employment 10 year projection\"));\n\n canvi[2].id = \"education-\" + i;\n canvi[2].appendChild(tabler([\"level\",\"percent\"], e[\"education-attainment-levels\"], false, \"Accessible - Educational Attainment percentage breakdown\"));\n canvi[2].parentNode.append(tabler([\"level\",\"percent\"], e[\"education-attainment-levels\"], true, \"Accessible - Educational Attainment percentage breakdown\"));\n\n let legend = item.querySelector(\".chart-legend\");\n legend.id = \"legend-\" + i;\n\n canvi = Array.prototype.slice.call(canvi);\n\n //set CTA button\n const cta = item.querySelector(\".cta__button\");\n\n cta.href = \"https://grayson.emsicc.com/careers/\" + e[\"title-slug\"];\n cta.innerText = e[\"humanized-title\"];\n //sort arrays in case misordered\n e[\"annual-earnings\"] = e[\"annual-earnings\"].sort(sortEarnings);\n e[\"employment\"] = e[\"employment\"].sort(sortEmployment);\n\n //store formatted data for canvases\n chartData.rows[i] = {\n charts: [\n {\n chart: {},\n canvas: canvi[0],\n data: {\n x: arrayColumns(e[\"annual-earnings\"], \"percentile\"),\n y: arrayColumns(e[\"annual-earnings\"], \"earnings\"),\n },\n },\n {\n chart: {},\n canvas: canvi[1],\n data: {\n x: arrayColumns(e[\"employment\"], \"year\"),\n y: arrayColumns(e[\"employment\"], \"number\"),\n },\n },\n {\n chart: {},\n canvas: canvi[2],\n data: {\n x: arrayColumns(e[\"education-attainment-levels\"], \"level\"),\n y: arrayColumns(e[\"education-attainment-levels\"], \"percent\"),\n },\n },\n ],\n };\n\n //append to DOM\n el.appendChild(item);\n });\n }\n\n function init() {\n controls.addEventListener(\"change\", function () {\n let geoid = controls.querySelector(\"#geoid\");\n let programs = controls.querySelector(\"#programs\");\n mask.classList.remove(\"loaded\");\n mask.classList.add(\"loading\");\n spinner.spin(wrapper);\n //remove existing results from DOM\n //console.log(\"Children to be removed:\");\n //console.log(el.childNodes);\n\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n while (mask.firstChild) {\n mask.removeChild(mask.firstChild)\n }\n //clear chart data object\n chartData.rows = [];\n //remove pager\n document.getElementById(\"pager\").remove();\n //make new http request\n makeRequest(programs.value, geoid.value);\n //console.log(\"THIS IS CHARTDATAAAAA\");\n //console.log(chartData);\n });\n el.addEventListener(\"click\", handleCharts, false);\n }\n\n function makeRequest(slug, radiusId) {\n //Make HTTP Request to local API\n fetch(\"/api/get-career.php\", {\n method: \"POST\",\n cache: \"no-cache\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: \"slug=\" + slug + \"&\" + \"geoid=\" + radiusId,\n })\n .then((response) => {\n if (response.ok) {\n //return if request successfull\n return response.json();\n } else { \n throw new Error(\n 'Failed to load career information, please contact site administrator at webmaster@grayson.edu'\n );\n }\n })\n .then((json) => fillTemplate(json))\n .then(() => mask.prepend(el))\n .then(() => new Pager(el, 5))\n .then(() => {\n mask.classList.remove(\"loading\");\n mask.classList.add(\"loaded\");\n spinner.stop();\n })\n .catch((e) => {\n let message = document.createTextNode(e.message);\n let paragraph = document.createElement(\"p\");\n paragraph.appendChild(message)\n mask.appendChild(paragraph);\n paragraph.style = \"text-align:center;\";\n mask.classList.remove(\"loading\");\n mask.classList.add(\"loaded\");\n spinner.stop();\n });\n }\n init();\n //console.log('testing');\n makeRequest(wrapper.getAttribute(\"data-slug\"), controls.querySelector(\"#geoid\").value);\n }\n})();\n"],"names":["parent","module","exports","path","Promise","global","isCallable","tryToString","TypeError","argument","isConstructor","String","wellKnownSymbol","create","definePropertyModule","UNSCOPABLES","ArrayPrototype","Array","prototype","undefined","f","configurable","value","key","isPrototypeOf","it","Prototype","isObject","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","O","length","index","includes","indexOf","uncurryThis","slice","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","next","done","this","from","error","exec","SKIP_CLOSING","ITERATION_SUPPORT","object","toString","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","Object","CORRECT_ARGUMENTS","arguments","tag","result","tryGet","callee","$Error","Error","replace","TEST","stack","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","test","dropEntries","prepareStackTrace","hasOwn","ownKeys","getOwnPropertyDescriptorModule","target","source","exceptions","keys","defineProperty","getOwnPropertyDescriptor","i","fails","F","constructor","getPrototypeOf","IteratorPrototype","createPropertyDescriptor","setToStringTag","Iterators","returnThis","IteratorConstructor","NAME","ENUMERABLE_NEXT","DESCRIPTORS","bitmap","enumerable","writable","createNonEnumerableProperty","makeBuiltIn","setGlobal","options","unsafe","simple","noTargetGet","name","$","call","IS_PURE","FunctionName","createIteratorConstructor","setPrototypeOf","defineBuiltIn","IteratorsCore","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","proto","forced","get","document","EXISTS","createElement","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","classList","documentCreateElement","DOMTokenListPrototype","window","Deno","userAgent","Pebble","classof","process","getBuiltIn","match","version","versions","v8","split","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","sham","NATIVE_BIND","FunctionPrototype","Function","apply","Reflect","bind","aCallable","fn","that","hasOwnProperty","getDescriptor","aFunction","namespace","method","getMethod","anObject","getIteratorMethod","usingIterator","iteratorMethod","V","P","func","check","Math","globalThis","self","g","toObject","a","b","console","propertyIsEnumerable","store","functionToString","inspectSource","cause","set","has","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","state","wmget","wmhas","wmset","metadata","facade","STATE","enforce","getterFor","TYPE","type","noop","empty","construct","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","replacement","feature","detection","data","normalize","POLYFILL","NATIVE","string","toLowerCase","USE_SYMBOL_AS_UID","$Symbol","isArrayIteratorMethod","getIterator","iteratorClose","Result","stopped","ResultPrototype","iterable","unboundFunction","iterator","iterFn","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","kind","innerResult","innerError","PrototypeOfArrayIteratorPrototype","arrayIterator","toLength","obj","InternalStateModule","enforceInternalState","getInternalState","CONFIGURABLE_LENGTH","TEMPLATE","getter","setter","arity","join","flush","head","last","notify","toggle","node","promise","then","macrotask","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","IS_NODE","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","domain","exit","enter","resolve","nextTick","createTextNode","observe","characterData","task","V8_VERSION","getOwnPropertySymbols","symbol","Symbol","PromiseCapability","C","reject","$$resolve","$$reject","$default","activeXDocument","definePropertiesModule","enumBugKeys","html","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","Properties","V8_PROTOTYPE_DEFINE_BUG","objectKeys","defineProperties","props","IE8_DOM_DEFINE","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","Attributes","current","propertyIsEnumerableModule","internalObjectKeys","concat","getOwnPropertyNames","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","push","names","$propertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","CORRECT_SETTER","__proto__","input","pref","val","valueOf","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","NativePromiseConstructor","IS_BROWSER","NativePromisePrototype","SPECIES","SUBCLASSING","NATIVE_PROMISE_REJECTION_EVENT","PromiseRejectionEvent","FORCED_PROMISE_CONSTRUCTOR","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","CONSTRUCTOR","REJECTION_EVENT","newPromiseCapability","x","promiseCapability","checkCorrectnessOfIteration","all","Queue","tail","add","item","entry","CONSTRUCTOR_NAME","Constructor","TAG","uid","SHARED","mode","copyright","license","aConstructor","defaultConstructor","S","toIntegerOrInfinity","requireObjectCoercible","charAt","charCodeAt","CONVERT_TO_STRING","pos","first","second","position","size","codeAt","location","defer","channel","port","arraySlice","validateArgumentsLength","setImmediate","clear","clearImmediate","Dispatch","MessageChannel","counter","queue","run","id","runner","listener","event","post","postMessage","protocol","host","handler","args","now","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","max","min","integer","IndexedObject","ceil","floor","number","isSymbol","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","postfix","random","NATIVE_SYMBOL","passed","required","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","description","clearErrorStack","installErrorCause","iterate","normalizeStringArgument","ERROR_STACK_INSTALLABLE","$AggregateError","errors","message","isInstance","AggregateErrorPrototype","errorsArray","AggregateError","addToUnscopables","defineIterator","ARRAY_ITERATOR","setInternalState","iterated","Arguments","newPromiseCapabilityModule","perform","allSettled","capability","promiseResolve","remaining","alreadyCalled","status","reason","$promiseResolve","PROMISE_ANY_ERROR","any","alreadyResolved","alreadyRejected","real","onRejected","Internal","OwnPromiseCapability","nativeThen","setSpecies","anInstance","speciesConstructor","microtask","hostReportErrors","PromiseConstructorDetection","PROMISE","NATIVE_PROMISE_SUBCLASSING","getInternalPromiseState","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","UNHANDLED_REJECTION","isThenable","callReaction","reaction","exited","ok","fail","rejection","onHandleUnhandled","isReject","notified","reactions","onUnhandled","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","wrapper","executor","onFulfilled","PromiseWrapper","wrap","onFinally","isFunction","e","race","r","PromiseConstructorWrapper","CHECK_WRAPPER","STRING_ITERATOR","point","DOMIterables","ArrayIteratorMethods","ArrayValues","handlePrototype","CollectionPrototype","COLLECTION_NAME","METHOD_NAME","BACKGROUND_COLOR","PATTERN_COLOR","POINT_STYLE","classCallCheck","AwaitValue","AsyncGenerator","gen","front","back","resume","arg","settle","err","_invoke","request","return","asyncIterator","throw","instance","createClass","protoProps","staticProps","_extends","assign","inherits","subClass","superClass","possibleConstructorReturn","ReferenceError","Shape","backgroundColor","patternColor","_canvas","_context","getContext","width","height","fillStyle","fillRect","_size","_patternColor","strokeStyle","lineWidth","lineJoin","lineCap","Plus","_Shape","halfSize","beginPath","setStrokeProps","drawPlus","stroke","offsetX","offsetY","quarterSize","moveTo","lineTo","closePath","Cross","drawCross","gap","Dash","drawDash","CrossDash","Dot","setFillProps","drawDot","fill","diameter","y","arc","PI","DotDash","Disc","_Dot","Ring","Line","drawLine","VerticalLine","_Line","translate","rotate","drawTile","Weave","drawWeave","Zigzag","drawZigzag","tenthSize","ZigzagVertical","_Zigzag","Diagonal","drawDiagonalLine","DiagonalRightLeft","_Diagonal","Square","drawSquare","Box","drawBox","strokeRect","Triangle","drawTriangle","TriangleVertical","_Triangle","Diamond","drawDiamond","DiamondBox","_Diamond","shapes","completeShapesList","getRandomShape","excludedShapeTypes","shapesList","forEach","shapeType","splice","randomIndex","draw","patternCanvas","patternContext","outerSize","shape","pattern","createPattern","generate","colorList","firstShapeType","previousShapeType","map","color","list","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","__esModule","d","definition","o","prop","__assign","t","s","p","defaults","lines","radius","scale","corners","fadeColor","animation","direction","speed","zIndex","className","top","left","shadow","Spinner","opts","spin","setAttribute","css","transform","insertBefore","firstChild","borderRadius","round","shadows","boxShadow","regex","_i","_a","matches","xUnits","yUnits","prefix","end","parseBoxShadow","degrees","backgroundLine","background","getColor","transformOrigin","delay","line","normalizeShadow","drawLines","requestAnimationFrame","cancelAnimationFrame","animateId","clearTimeout","parentNode","idx","normalized","shadows_1","xy","convertOffset","radians","sin","cos","Pager","collection","perPage","children","currentPage","len","numPages","menu","nav","init","debug","log","drawMenu","loadList","pages","innerHTML","querySelector","_this","firstElementChild","prevPage","nextPage","toPage","innerText","preventDefault","firstPage","lastPage","page","parseInt","begin","pageList","drawList","remove","removeAttribute","getElementById","disabled","requestAnimFrame","callback","throttled","thisArg","updateFn","updateArgs","ticking","rest","_toLeftRightCenter","align","_alignStartEnd","start","isNullOrUndef","isArray","substr","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","dimension","endsWith","parseFloat","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","klen","k","isValidKey","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","indexOfDotOrLength","resolveObjectKey","_capitalize","str","toUpperCase","defined","setsEqual","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","pow","fraction","isNumber","isNaN","epsilon","abs","_setMinAndMaxByKey","array","property","toRadians","toDegrees","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","atEdge","elasticIn","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","m","easeInOutBounce","A","B","D","E","c","hex","h1","h2","eq","v","lim","l","h","p2b","n2b","b2n","n2p","RGB_RE","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","calln","hsl2rgb","hue","map$1","Z","Y","X","W","U","T","R","Q","N","M","L","K","G","H","I","J","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names$1","modHSL","ratio","tmp","clone","fromObject","functionParse","rgbParse","p1","p2","hwb2rgb","hsv2rgb","hueParse","Color","ret","unpacked","tkeys","j","nk","unpack","transparent","nameParse","_rgb","_valid","valid","rgbString","hexString","isShort","hslString","mix","weight","me","c1","c2","w2","w1","alpha","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","deg","index_esm","isPatternOrGradient","CanvasGradient","CanvasPattern","getHoverColor","overrides","descriptors","getScope$1","root","scope","_descriptors","borderColor","datasets","devicePixelRatio","context","chart","platform","getDevicePixelRatio","elements","events","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","_scriptable","startsWith","_indexable","_fallback","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","resetTransform","clearRect","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","rad","drawImage","SQRT1_2","rect","borderWidth","_isPointInArea","area","margin","right","bottom","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","text","strokeWidth","strokeColor","translation","textAlign","textBaseline","setRenderOpts","strokeText","maxWidth","fillText","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","RegExp","FONT_STYLE","toLineHeight","_readValueToProps","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","fallback","warn","toFontString","inputs","info","cacheable","createContext","parentContext","_lookup","table","cmp","mid","hi","lo","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","listeners","_arrayUnique","items","Set","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_subProxy","_stack","setContext","receiver","isScriptable","delete","_resolveScriptable","isIndexable","arr","filter","resolver","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","points","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","delta","iPixel","vPixel","monotoneCompute","splineCurveMonotone","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","positions","getPositionedStyle","styles","suffix","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","box","native","touches","shadowRoot","useOffsetPos","getBoundingClientRect","clientX","clientY","getCanvasPosition","round1","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","removeEventListener","readUsedSize","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","Map","formatNumber","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalizeSegment","count","_boundSegment","segment","bounds","startBound","endBound","getSegment","prevValue","inside","subStart","_boundSegments","segments","sub","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","animator","_request","_charts","_running","_lastDate","_notify","anims","date","callbacks","numSteps","duration","initial","currentStep","_refresh","_update","Date","running","_active","_total","tick","pop","_getAnims","charts","complete","progress","listen","cb","reduce","acc","cur","_duration","cancel","interpolators","boolean","to","factor","c0","Animation","cfg","currentValue","_fn","_easing","easing","_start","_loop","_target","_prop","_from","_to","_promises","active","update","elapsed","remain","wait","promises","res","rej","resolved","animationOptions","colors","properties","numbers","resize","show","animations","visible","hide","Animations","config","_chart","_properties","configure","animatedProps","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","shift","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$context","_syncList","initialize","linkScales","_stacked","addElements","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","base","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","parse","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","hidden","createStack","NEGATIVE_INFINITY","otherMin","otherMax","minDefined","maxDefined","getUserBounds","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","updateElement","updateSharedOptions","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","sort","getAllScaleValues","curr","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","super","bars","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","grouped","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","_index_","offset","grid","_value_","beginAtZero","BubbleController","getPixelForDecimal","tooltip","title","DoughnutController","innerRadius","outerRadius","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","aspectRatio","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_dataset","animationsDisabled","pointCount","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","scaleRangesChanged","_datasetIndex","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","controllers","DateAdapter","formats","timestamp","amount","unit","diff","startOf","weekday","endOf","members","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","optimizedEvaluateItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestCartesianItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","evaluateAllVisibleItems","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","params","layout","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","fullSize","setBoxDims","placeBoxes","userPadding","padding","placed","stackWeight","autoPadding","layouts","addBox","_layers","z","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","buildStacks","setLayoutDims","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","getMaximumSize","isAttached","updateConfig","BasicPlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","contains","createAttachObserver","observer","trigger","addedNodes","removedNodes","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","container","clientWidth","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","fromNativeEvent","addListener","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","bbWidth","bbHeight","margins","containerSize","containerStyle","containerBorder","containerPadding","clientHeight","getContainerSize","isConnected","Element","tooltipPosition","hasValue","final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","newTicks","majorStart","majorEnd","grace","drawBorder","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","beforeUpdate","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","ticksLimit","maxTicksLimit","_tickSize","maxScale","maxChart","determineMaxTicks","majorIndices","enabled","getMajorIndices","numMajorIndices","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","labelPadding","_computeLabelArea","drawBackground","findIndex","drawGrid","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","titleX","titleY","titleArgs","tz","gz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","register","parentScope","isIChartComponent","itemDefaults","routes","propertyParts","sourceName","sourceScope","parts","routeDefaults","registerDefaults","unregister","registry","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getElement","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","hook","_createDescriptors","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","Chart","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","timeout","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","invalidatePlugins","clipArc","pixelMargin","angleMargin","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","parseBorderRadius$1","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","ArcElement","fullCircles","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","inner","drawFullCircleBorders","setStyle","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","segmentOptions","findStartAndEnd","chartContext","baseStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","doSplitByStyles","splitByStyles","solidSegments","_computeSegments","interpolate","_interpolate","_getInterpolationMethod","interpolated","segmentMethod","strokePathWithCache","strokePathDirect","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","outer","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","boundingRects","addRectPath","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","decimated","getStartAndCountOfVisiblePointsSimplified","threshold","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","decodeFill","fillOption","parseFillOption","simpleArc","findSegmentEnd","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","unshift","pointValue","linePoints","firstValue","lastValue","getLineByIndex","sourcePoints","below","getLinesBelow","createBoundaryLine","buildStackLine","boundary","computeCircularBoundary","computeLinearBoundary","computeBoundary","pointsFromSegments","resolveTarget","propagate","visited","clipY","lineLoop","getBounds","_getEdge","clipBounds","interpolatedLineTo","interpolatedPoint","_fill","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","targetLoop","drawfill","lineOpts","above","doFill","plugin_filler","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","heightLimit","totalWidth","currentColWidth","currentColHeight","col","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","fontColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","isListened","hoveredItem","sameItem","plugin_legend","_element","afterEvent","ci","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","Tooltip","opacity","_eventPosition","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","getTitle","beforeTitle","afterTitle","getBeforeBody","getBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","labelCount","Decimation","Filler","SubTitle","CategoryScale","_startValue","_valueRange","_addedLabels","added","addedLabels","addIfString","lastIndexOf","findOrAddLabel","relativeLabelSize","minSpacing","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","generateTicks$1","LinearScale","isMajor","tickVal","LogarithmicScale","_zero","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","updateLimits","limits","hLimits","vLimits","getTextAlignForAngle","yForAngle","pathRadiusLine","getPointPosition","RadialLinearScale","drawingArea","_pointLabels","_pointLabelItems","valueCount","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","plFont","setCenterPoint","extra","outerDistance","pointLabelPosition","buildPointLabelItems","fitWithPointLabels","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","animate","INTERVALS","millisecond","common","steps","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","time","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","screen","deviceXDPI","logicalXDPI","utils","orient","origin","x0","y0","dy","ln","region","compute$1","anchor","clamp","r0","r1","clipped","vx","vy","aligned","rx","ry","sx","sy","rasterize","getScaleOrigin","drawTextLine","shadowBlur","stroked","filled","Label","_index","_model","_rects","_el","_modelize","positioner","textShadowBlur","textShadowColor","model","th","tw","tx","ty","frame","geometry","bgColor","drawRoundedRect","drawFrame","textGeometry","shadowColor","drawText","MIN_INTEGER","MAX_INTEGER","rotated","cx","cy","projected","dp","toAxis","HitBox","_rotation","_rect","coordinates","vs","intersects","pr0","pr1","axes","prepare","$layout","_box","_hidable","_visible","_set","sa","sb","dirty","collider","s0","s1","collide","h0","compute","lookup","DEFAULT_KEY","callback$1","groups","$groups","_key","_dirty","beforeInit","_actives","expando","_listened","_datasets","_labels","afterDatasetUpdate","datalabels","configs","afterDatasetsDraw","beforeEvent","leave","_hovered","dispatchMoveEvents","handleMoveEvents","handlers","click","handleClickEvents","updates","sortEmployment","sortEarnings","percentile","htmlLegendPlugin","legendContainer","listContainer","ul","containerID","flexWrap","flexDirection","li","alignItems","marginLeft","flex","marginBottom","boxSpan","marginRight","textContainer","textDecoration","sr","caption","cap","heading","headRow","header","cell","earnings","toFixed","toLocaleString","support","Blob","viewClasses","isArrayBufferView","ArrayBuffer","isView","normalizeName","normalizeValue","iteratorFor","Headers","headers","append","consumed","bodyUsed","fileReaderReady","reader","onload","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","bufferClone","buf","view","Uint8Array","byteLength","buffer","Body","_initBody","_bodyInit","_bodyText","_bodyBlob","FormData","_bodyFormData","URLSearchParams","DataView","_bodyArrayBuffer","rejected","arrayBuffer","byteOffset","readAsText","chars","fromCharCode","readArrayBufferAsText","formData","decode","json","oldValue","Request","upcased","url","credentials","signal","referrer","reParamSearch","getTime","form","trim","bytes","decodeURIComponent","Response","bodyInit","statusText","response","redirectStatuses","redirect","RangeError","DOMException","aborted","xhr","XMLHttpRequest","abortXhr","abort","rawHeaders","getAllResponseHeaders","responseURL","responseText","ontimeout","onabort","href","fixUrl","withCredentials","responseType","setRequestHeader","onreadystatechange","readyState","send","polyfill","fetch","chartData","rows","controls","mask","prepend","spinner","Spinz","arrayColumns","myArray","columnName","handleCharts","formatOptions","currency","employment","education","htmlLegend","ChartDataLabels","fillTemplate","template","mappings","openings","importNode","slots","querySelectorAll","slot","canvi","tabler","cta","geoid","programs","makeRequest","slug","radiusId","catch","paragraph"],"sourceRoot":""}