diff --git a/docs/app.js b/docs/app.js index 787ac4e..0a0a106 100644 --- a/docs/app.js +++ b/docs/app.js @@ -41,26 +41,6 @@ eval("/* eslint-disable */\n\n\n(function (root) {\n function checkInt(value) { /***/ }), -/***/ "./src/js/cookieconsent.min.js": -/*!*************************************!*\ - !*** ./src/js/cookieconsent.min.js ***! - \*************************************/ -/***/ (() => { - -eval("function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n!function (e) {\n function t(i) {\n if (n[i]) return n[i].exports;\n var o = n[i] = {\n i: i,\n l: !1,\n exports: {}\n };\n return e[i].call(o.exports, o, o.exports, t), o.l = !0, o.exports;\n }\n\n var n = {};\n t.m = e, t.c = n, t.d = function (e, n, i) {\n t.o(e, n) || Object.defineProperty(e, n, {\n enumerable: !0,\n get: i\n });\n }, t.r = function (e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }, t.t = function (e, n) {\n if (1 & n && (e = t(e)), 8 & n) return e;\n if (4 & n && \"object\" == _typeof(e) && e && e.__esModule) return e;\n var i = Object.create(null);\n if (t.r(i), Object.defineProperty(i, \"default\", {\n enumerable: !0,\n value: e\n }), 2 & n && \"string\" != typeof e) for (var o in e) {\n t.d(i, o, function (t) {\n return e[t];\n }.bind(null, o));\n }\n return i;\n }, t.n = function (e) {\n var n = e && e.__esModule ? function () {\n return e[\"default\"];\n } : function () {\n return e;\n };\n return t.d(n, \"a\", n), n;\n }, t.o = function (e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n }, t.p = \"\", t(t.s = 4);\n}([function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"a\", function () {\n return s;\n });\n var i = n(1),\n o = n(16);\n var c = new (n.n(o).a)();\n\n var s = function s() {\n var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, s);\n\n this.options = Object(i.j)(e, t), this.on = c.on.bind(c), this.emit = c.emit.bind(c);\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"b\", function () {\n return a;\n }), n.d(t, \"k\", function () {\n return l;\n }), n.d(t, \"e\", function () {\n return u;\n }), n.d(t, \"l\", function () {\n return d;\n }), n.d(t, \"d\", function () {\n return p;\n }), n.d(t, \"m\", function () {\n return h;\n }), n.d(t, \"a\", function () {\n return f;\n }), n.d(t, \"h\", function () {\n return m;\n }), n.d(t, \"g\", function () {\n return b;\n }), n.d(t, \"f\", function () {\n return g;\n }), n.d(t, \"c\", function () {\n return v;\n }), n.d(t, \"i\", function () {\n return y;\n }), n.d(t, \"j\", function () {\n return k;\n });\n var i = n(12),\n o = n(3),\n c = n(13),\n s = n(14),\n r = n(15);\n\n var a = i.a,\n l = i.b,\n u = function u(e, t) {\n return e.replace(/{{([a-z][a-z0-9\\-_]*)}}/gi, function (e, n) {\n return t(n) || \"\";\n });\n },\n d = function d(e, t) {\n var n = !1;\n return function () {\n n || (e.apply(void 0, arguments), n = !0, setTimeout(function () {\n n = !1;\n }, t));\n };\n },\n p = function p(e) {\n var t,\n n = 0,\n i = 0,\n o = e.length;\n if (0 === e.length) return n;\n\n for (; i < o; ++i) {\n n = (n << 5) - n + (t = e.charCodeAt(i)), n |= 0;\n }\n\n return n;\n },\n h = (o.d, o.a, o.c, o.b, c.b),\n f = c.a,\n m = s.c,\n b = s.b,\n g = s.a,\n v = r.a,\n y = r.b,\n w = function w(e) {\n return function (t, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n n = _ref2[0],\n i = _ref2[1];\n\n return t[n] = i instanceof Object && !(i instanceof Array) ? e[n] instanceof Object && !(e[n] instanceof Array) ? Object.entries(i).reduce(w(e[n]), {}) : i : e.hasOwnProperty(n) ? e[n] : i, t;\n };\n },\n k = function k(e, t) {\n return Object.entries(e).reduce(w(t), {});\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"e\", function () {\n return i;\n }), n.d(t, \"c\", function () {\n return o;\n }), n.d(t, \"b\", function () {\n return c;\n }), n.d(t, \"d\", function () {\n return s;\n }), n.d(t, \"a\", function () {\n return r;\n });\n var i = [\"DENY\", \"ALLOW\", \"DISMISS\"],\n o = \"DENY\",\n c = \"ALLOW\",\n s = \"DISMISS\",\n r = [\"UNCATEGORIZED\", \"ESSENTIAL\", \"PERSONALIZATION\", \"ANALYTICS\", \"MARKETING\"];\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"d\", function () {\n return i;\n }), n.d(t, \"a\", function () {\n return o;\n }), n.d(t, \"c\", function () {\n return c;\n }), n.d(t, \"b\", function () {\n return s;\n });\n\n var i = function i(e) {\n return \"#\" == e[0] ? e.substr(1) : 3 == e.length ? e[0] + e[0] + e[1] + e[1] + e[2] + e[2] : e;\n },\n o = function o(e) {\n return e = i(e), 128 <= (299 * parseInt(e.substr(0, 2), 16) + 587 * parseInt(e.substr(2, 2), 16) + 114 * parseInt(e.substr(4, 2), 16)) / 1e3 ? \"#000\" : \"#fff\";\n },\n c = function c(e) {\n var t = parseInt(i(e), 16),\n n = 38 + (t >> 16),\n o = 38 + (255 & t >> 8),\n c = 38 + (255 & t);\n return \"#\" + (16777216 + 65536 * (255 > n ? 1 > n ? 0 : n : 255) + 256 * (255 > o ? 1 > o ? 0 : o : 255) + (255 > c ? 1 > c ? 0 : c : 255)).toString(16).slice(1);\n },\n s = function s(e) {\n return e = i(e), \"000000\" === e ? \"#222\" : c(e);\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.r(t), function (e) {\n var t = n(6),\n i = (n.n(t), n(11));\n false ? 0 : e.exports = i.a;\n }.call(this, n(5)(e));\n}, function (e) {\n e.exports = function (e) {\n if (!e.webpackPolyfill) {\n var t = Object.create(e);\n t.children || (t.children = []), Object.defineProperty(t, \"loaded\", {\n enumerable: !0,\n get: function get() {\n return t.l;\n }\n }), Object.defineProperty(t, \"id\", {\n enumerable: !0,\n get: function get() {\n return t.i;\n }\n }), Object.defineProperty(t, \"exports\", {\n enumerable: !0\n }), t.webpackPolyfill = 1;\n }\n\n return t;\n };\n}, function (e, t, n) {\n var i = n(7);\n \"string\" == typeof i && (i = [[e.i, i, \"\"]]);\n var o = {\n hmr: !0,\n transform: void 0,\n insertInto: void 0\n };\n n(9)(i, o), i.locals && (e.exports = i.locals);\n}, function (e, t, n) {\n (e.exports = n(8)(!1)).push([e.i, '.cc-window{opacity:1;-webkit-transition:opacity 1s ease;-moz-transition:opacity 1s ease;-ms-transition:opacity 1s ease;-o-transition:opacity 1s ease;transition:opacity 1s ease}.cc-window.cc-invisible{opacity:0}.cc-animate.cc-revoke{-webkit-transition:transform 1s ease;-moz-transition:transform 1s ease;-ms-transition:transform 1s ease;-o-transition:transform 1s ease;transition:transform 1s ease}.cc-animate.cc-revoke.cc-top{transform:translateY(-2em)}.cc-animate.cc-revoke.cc-bottom{transform:translateY(2em)}.cc-animate.cc-revoke.cc-active.cc-top{transform:translateY(0)}.cc-animate.cc-revoke.cc-active.cc-bottom{transform:translateY(0)}.cc-revoke:hover{transform:translateY(0)}.cc-grower{max-height:0;overflow:hidden;-webkit-transition:max-height 1s;-moz-transition:max-height 1s;-ms-transition:max-height 1s;-o-transition:max-height 1s;transition:max-height 1s}.cc-window,.cc-revoke{position:fixed;overflow:hidden;box-sizing:border-box;font-family:Helvetica, Calibri, Arial, sans-serif;font-size:16px;line-height:1.5em;display:flex;flex-wrap:nowrap;z-index:9998}.cc-revoke{z-index:9999}.cc-window.cc-static{position:static}.cc-window.cc-floating{padding:2em;max-width:24em;flex-direction:column}.cc-window.cc-banner{padding:1em 1.8em;width:100%;flex-direction:row}.cc-revoke{padding:0.5em}.cc-revoke:hover{text-decoration:underline}.cc-header{font-size:18px;font-weight:bold}.cc-btn,.cc-link,.cc-close,.cc-revoke{cursor:pointer}.cc-link{opacity:0.8;display:inline-block;padding:0.2em;text-decoration:underline}.cc-link:hover{opacity:1}.cc-link:active,.cc-link:visited{color:initial}.cc-btn{display:block;padding:0.4em 0.8em;font-size:0.9em;font-weight:bold;border-width:2px;border-style:solid;text-align:center;white-space:nowrap}.cc-highlight .cc-btn:first-child{background-color:transparent;border-color:transparent}.cc-highlight .cc-btn:first-child:hover,.cc-highlight .cc-btn:first-child:focus{background-color:transparent;text-decoration:underline}.cc-close{display:block;position:absolute;top:0.5em;right:0.5em;font-size:1.6em;opacity:0.9;line-height:0.75}.cc-close:hover,.cc-close:focus{opacity:1}.cc-revoke.cc-top{top:0;left:3em;border-bottom-left-radius:0.5em;border-bottom-right-radius:0.5em}.cc-revoke.cc-bottom{bottom:0;left:3em;border-top-left-radius:0.5em;border-top-right-radius:0.5em}.cc-revoke.cc-left{left:3em;right:unset}.cc-revoke.cc-right{right:3em;left:unset}.cc-top{top:1em}.cc-left{left:1em}.cc-right{right:1em}.cc-bottom{bottom:1em}.cc-floating>.cc-link{margin-bottom:1em}.cc-floating .cc-message{display:block;margin-bottom:1em}.cc-window.cc-floating .cc-compliance{flex:1 0 auto}.cc-window.cc-banner{align-items:center}.cc-banner.cc-top{left:0;right:0;top:0}.cc-banner.cc-bottom{left:0;right:0;bottom:0}.cc-banner .cc-message{display:block;flex:1 1 auto;max-width:100%;margin-right:1em}.cc-compliance{display:flex;align-items:center;justify-content:space-between}.cc-floating .cc-compliance>.cc-btn{flex:1}.cc-btn+.cc-btn{margin-left:0.5em}.cc-window.cc-type-categories{display:inline-flex;flex-direction:column;overflow:visible}.cc-window.cc-type-categories .form{text-align:right}.cc-window.cc-type-categories .cc-btn{margin:0}.cc-window.cc-type-categories .cc-btn.cc-save{margin:0;display:inline-block}.cc-categories{display:inline-flex}.cc-categories .cc-category{display:flex;max-width:100%;margin:0 2px;position:relative}.cc-categories .cc-btn{border-right:none;outline:none;text-transform:capitalize}.cc-categories .cc-btn input[type=checkbox]{float:left;height:26px;width:calc( 100% - 22px);display:block;position:absolute;top:0;left:2px;cursor:pointer}.cc-categories .cc-btn:not(.cc-info):not(.cc-save){padding-left:26px}.cc-categories .cc-info{border-left:none;border-right:2px solid lightgrey;padding:4px;font-variant:all-small-caps}.cc-categories .cc-info:focus+.cc-tooltip{display:block}.cc-categories .cc-tooltip{display:none;position:absolute;z-index:3;width:190px;bottom:46px;padding:8px;border:thin solid lightgrey;box-shadow:1px 1px 4px rgba(150,150,150,0.7)}.cc-categories .cc-tooltip:after{content:\"\";width:10px;height:10px;transform:rotate(45deg);position:absolute;bottom:-7px;left:10px;box-shadow:2px 1px 1px rgba(200,200,200,0.5)}.cc-categories .cc-tooltip p{margin:0}@media print{.cc-window,.cc-revoke{display:none}}@media screen and (max-width: 900px){.cc-btn{white-space:normal}}@media screen and (max-width: 414px) and (orientation: portrait), screen and (max-width: 736px) and (orientation: landscape){.cc-window.cc-top{top:0}.cc-window.cc-bottom{bottom:0}.cc-window.cc-banner,.cc-window.cc-floating,.cc-window.cc-right,.cc-window.cc-left{left:0;right:0}.cc-window.cc-banner{flex-direction:column;align-items:unset}.cc-window.cc-banner .cc-compliance{flex:1 1 auto}.cc-window.cc-banner .cc-message{margin-right:0;margin-bottom:1em}.cc-window.cc-floating{max-width:none}.cc-window.cc-type-categories{flex-direction:column}.cc-window .cc-message{margin-bottom:1em}.cc-window .cc-categories{flex-direction:column;width:100%;margin-right:8px}.cc-window .cc-category{margin:4px 0}.cc-window .cc-category .cc-btn:not(.cc-info){width:calc( 100% - 16px);min-width:140px}}@media screen and (max-width: 854px){.cc-window.cc-type-categories .cc-btn.cc-save{margin:8px 0}}@media screen and (max-width: 790px){.cc-window.cc-type-categories .cc-categories{display:flex;flex-direction:column}.cc-categories .cc-category{margin:4px 0}.form{width:100%;max-width:350px}.cc-btn:not(.cc-info):not(.cc-save){width:calc( 100% - 16px)}}.cc-floating.cc-theme-classic{padding:1.2em;border-radius:5px}.cc-floating.cc-type-info.cc-theme-classic .cc-compliance{text-align:center;display:inline;flex:none}.cc-theme-classic{overflow:visible;justify-content:space-between}.cc-theme-classic .cc-btn{position:relative;border-radius:5px;outline:none}.cc-theme-classic .cc-btn:last-child{min-width:140px}.cc-theme-classic .cc-category .cc-btn{border-radius:5px 0 0 5px;padding-right:2px;padding-left:28px;font-weight:normal;border-right:none;box-sizing:border-box}.cc-theme-classic .cc-category .cc-btn input[type=checkbox]{position:absolute;left:0;top:-1px;width:100%;height:26px;opacity:0;cursor:pointer;z-index:1}.cc-theme-classic .cc-category .cc-btn input[type=checkbox]+.cc-btn-checkbox{display:block;font-size:2rem;position:absolute;top:2px;left:6px;z-index:0;outline:none}.cc-theme-classic .cc-category .cc-btn input[type=checkbox]+.cc-btn-checkbox:before{content:\"\\\\1F5F5\"}.cc-theme-classic .cc-category .cc-btn input[type=checkbox]:checked+.cc-btn-checkbox:after{content:\"\\\\2713\";position:absolute;top:-4px;left:0;font-size:2.3rem;text-shadow:0 1px 3px rgba(150,150,150,0.5)}.cc-theme-classic .cc-category .cc-btn.cc-info{margin:0;padding:0 4px;border-radius:0 5px 5px 0}.cc-theme-classic .cc-category .cc-btn:last-child{min-width:0}.cc-theme-classic .cc-category .cc-tooltip{border-radius:5px}.cc-theme-classic .cc-category .cc-tooltip:after{border-bottom:thin solid lightgrey;border-right:thin solid lightgrey}.cc-floating.cc-type-info.cc-theme-classic .cc-btn{display:inline-block}.cc-theme-edgeless.cc-window{padding:0}.cc-floating.cc-theme-edgeless .cc-message{margin:2em;margin-bottom:1.5em}.cc-banner.cc-theme-edgeless .cc-btn{margin:0;padding:0.8em 1.8em;height:100%}.cc-banner.cc-theme-edgeless .cc-message{margin-left:1em}.cc-floating.cc-theme-edgeless .cc-btn+.cc-btn{margin-left:0}.cc-window.cc-theme-edgeless.cc-type-categories .cc-categories .cc-btn{padding:0.4em 0.8em;padding-left:26px}.cc-window.cc-theme-edgeless.cc-type-categories .cc-categories .cc-btn.cc-info{padding:0.4em 4px}.cc-window.cc-theme-edgeless.cc-type-categories .cc-categories .cc-tooltip{border:none}\\n', \"\"]);\n}, function (e) {\n \"use strict\";\n\n function t(e, t) {\n var n = e[1] || \"\",\n i = e[3];\n if (!i) return n;\n\n if (t && \"function\" == typeof btoa) {\n var o = function (e) {\n var t = btoa(unescape(encodeURIComponent(JSON.stringify(e)))),\n n = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(t);\n return \"/*# \".concat(n, \" */\");\n }(i),\n c = i.sources.map(function (e) {\n return \"/*# sourceURL=\".concat(i.sourceRoot).concat(e, \" */\");\n });\n\n return [n].concat(c).concat([o]).join(\"\\n\");\n }\n\n return [n].join(\"\\n\");\n }\n\n e.exports = function (e) {\n var n = [];\n return n.toString = function () {\n return this.map(function (n) {\n var i = t(n, e);\n return n[2] ? \"@media \".concat(n[2], \"{\").concat(i, \"}\") : i;\n }).join(\"\");\n }, n.i = function (e, t) {\n \"string\" == typeof e && (e = [[null, e, \"\"]]);\n\n for (var i, o = {}, c = 0; c < this.length; c++) {\n null != (i = this[c][0]) && (o[i] = !0);\n }\n\n for (var s, r = 0; r < e.length; r++) {\n null != (s = e[r])[0] && o[s[0]] || (t && !s[2] ? s[2] = t : t && (s[2] = \"(\".concat(s[2], \") and (\").concat(t, \")\")), n.push(s));\n }\n }, n;\n };\n}, function (e, t, n) {\n function i(e, t) {\n for (var n = 0; n < e.length; n++) {\n var i = e[n],\n o = h[i.id];\n\n if (o) {\n o.refs++;\n\n for (var c = 0; c < o.parts.length; c++) {\n o.parts[c](i.parts[c]);\n }\n\n for (; c < i.parts.length; c++) {\n o.parts.push(d(i.parts[c], t));\n }\n } else {\n var s = [];\n\n for (c = 0; c < i.parts.length; c++) {\n s.push(d(i.parts[c], t));\n }\n\n h[i.id] = {\n id: i.id,\n refs: 1,\n parts: s\n };\n }\n }\n }\n\n function o(e, t) {\n for (var n = [], i = {}, o = 0; o < e.length; o++) {\n var c = e[o],\n s = t.base ? c[0] + t.base : c[0],\n r = {\n css: c[1],\n media: c[2],\n sourceMap: c[3]\n };\n i[s] ? i[s].parts.push(r) : n.push(i[s] = {\n id: s,\n parts: [r]\n });\n }\n\n return n;\n }\n\n function c(e, t) {\n var n = m(e.insertInto);\n if (!n) throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n var i = v[v.length - 1];\n if (\"top\" === e.insertAt) i ? i.nextSibling ? n.insertBefore(t, i.nextSibling) : n.appendChild(t) : n.insertBefore(t, n.firstChild), v.push(t);else if (\"bottom\" === e.insertAt) n.appendChild(t);else {\n if (\"object\" != _typeof(e.insertAt) || !e.insertAt.before) throw new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n var o = m(e.insertAt.before, n);\n n.insertBefore(t, o);\n }\n }\n\n function s(e) {\n if (null === e.parentNode) return !1;\n e.parentNode.removeChild(e);\n var t = v.indexOf(e);\n 0 <= t && v.splice(t, 1);\n }\n\n function r(e) {\n var t = document.createElement(\"style\");\n\n if (void 0 === e.attrs.type && (e.attrs.type = \"text/css\"), void 0 === e.attrs.nonce) {\n var n = u();\n n && (e.attrs.nonce = n);\n }\n\n return l(t, e.attrs), c(e, t), t;\n }\n\n function a(e) {\n var t = document.createElement(\"link\");\n return void 0 === e.attrs.type && (e.attrs.type = \"text/css\"), e.attrs.rel = \"stylesheet\", l(t, e.attrs), c(e, t), t;\n }\n\n function l(e, t) {\n Object.keys(t).forEach(function (n) {\n e.setAttribute(n, t[n]);\n });\n }\n\n function u() {\n return n.nc;\n }\n\n function d(e, t) {\n var n, i, o, c;\n\n if (t.transform && e.css) {\n if (!(c = \"function\" == typeof t.transform ? t.transform(e.css) : t.transform[\"default\"](e.css))) return function () {};\n e.css = c;\n }\n\n if (t.singleton) {\n var l = g++;\n n = b || (b = r(t)), i = p.bind(null, n, l, !1), o = p.bind(null, n, l, !0);\n } else e.sourceMap && \"function\" == typeof URL && \"function\" == typeof URL.createObjectURL && \"function\" == typeof URL.revokeObjectURL && \"function\" == typeof Blob && \"function\" == typeof btoa ? (n = a(t), i = function (e, t, n) {\n var i = n.css,\n o = n.sourceMap,\n c = void 0 === t.convertToAbsoluteUrls && o;\n (t.convertToAbsoluteUrls || c) && (i = y(i)), o && (i += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(o)))) + \" */\");\n var s = new Blob([i], {\n type: \"text/css\"\n }),\n r = e.href;\n e.href = URL.createObjectURL(s), r && URL.revokeObjectURL(r);\n }.bind(null, n, t), o = function o() {\n s(n), n.href && URL.revokeObjectURL(n.href);\n }) : (n = r(t), i = function (e, t) {\n var n = t.css,\n i = t.media;\n if (i && e.setAttribute(\"media\", i), e.styleSheet) e.styleSheet.cssText = n;else {\n for (; e.firstChild;) {\n e.removeChild(e.firstChild);\n }\n\n e.appendChild(document.createTextNode(n));\n }\n }.bind(null, n), o = function o() {\n s(n);\n });\n\n return i(e), function (t) {\n if (t) {\n if (t.css === e.css && t.media === e.media && t.sourceMap === e.sourceMap) return;\n i(e = t);\n } else o();\n };\n }\n\n function p(e, t, n, i) {\n var o = n ? \"\" : i.css;\n if (e.styleSheet) e.styleSheet.cssText = w(t, o);else {\n var c = document.createTextNode(o),\n s = e.childNodes;\n s[t] && e.removeChild(s[t]), s.length ? e.insertBefore(c, s[t]) : e.appendChild(c);\n }\n }\n\n var h = {},\n f = function (e) {\n var t;\n return function () {\n return void 0 === t && (t = e.apply(this, arguments)), t;\n };\n }(function () {\n return window && document && document.all && !window.atob;\n }),\n m = function () {\n var e = {};\n return function (t, n) {\n if (\"function\" == typeof t) return t();\n\n if (void 0 === e[t]) {\n var i = function (e, t) {\n return t ? t.querySelector(e) : document.querySelector(e);\n }.call(this, t, n);\n\n if (window.HTMLIFrameElement && i instanceof window.HTMLIFrameElement) try {\n i = i.contentDocument.head;\n } catch (t) {\n i = null;\n }\n e[t] = i;\n }\n\n return e[t];\n };\n }(),\n b = null,\n g = 0,\n v = [],\n y = n(10);\n\n e.exports = function (e, t) {\n if (\"undefined\" != typeof DEBUG && DEBUG && \"object\" != (typeof document === \"undefined\" ? \"undefined\" : _typeof(document))) throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n (t = t || {}).attrs = \"object\" == _typeof(t.attrs) ? t.attrs : {}, t.singleton || \"boolean\" == typeof t.singleton || (t.singleton = f()), t.insertInto || (t.insertInto = \"head\"), t.insertAt || (t.insertAt = \"bottom\");\n var n = o(e, t);\n return i(n, t), function (e) {\n for (var c = [], s = 0; s < n.length; s++) {\n var r = n[s];\n (a = h[r.id]).refs--, c.push(a);\n }\n\n e && i(o(e, t), t);\n var a;\n\n for (s = 0; s < c.length; s++) {\n if (0 === (a = c[s]).refs) {\n for (var l = 0; l < a.parts.length; l++) {\n a.parts[l]();\n }\n\n delete h[a.id];\n }\n }\n };\n };\n\n var w = function () {\n var e = [];\n return function (t, n) {\n return e[t] = n, e.filter(Boolean).join(\"\\n\");\n };\n }();\n}, function (e) {\n e.exports = function (e) {\n var t = \"undefined\" != typeof window && window.location;\n if (!t) throw new Error(\"fixUrls requires window.location\");\n if (!e || \"string\" != typeof e) return e;\n var n = t.protocol + \"//\" + t.host,\n i = n + t.pathname.replace(/\\/[^\\/]*$/, \"/\");\n return e.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function (e, t) {\n var o,\n c = t.trim().replace(/^\"(.*)\"$/, function (e, t) {\n return t;\n }).replace(/^'(.*)'$/, function (e, t) {\n return t;\n });\n return /^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(c) ? e : (o = 0 === c.indexOf(\"//\") ? c : 0 === c.indexOf(\"/\") ? n + c : i + c.replace(/^\\.\\//, \"\"), \"url(\" + JSON.stringify(o) + \")\");\n });\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"a\", function () {\n return l;\n });\n var i = n(0),\n o = n(17),\n c = n(19),\n s = n(21),\n r = n(2),\n a = n(1);\n\n var l = /*#__PURE__*/function (_i$a) {\n _inherits(l, _i$a);\n\n var _super = _createSuper(l);\n\n function l() {\n var _this;\n\n var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, l);\n\n _this = _super.call(this, e);\n var t = r.a.map(function (e) {\n var t = _this.options.cookie && _this.options.cookie.name ? _this.options.cookie.name : \"cookieconsent_status_\",\n n = Object(a.b)(t + e);\n return Object(a.h)(n) ? _defineProperty({}, e, n) : void 0;\n }).filter(function (e) {\n return !!e && e[Object.keys(e)[0]];\n });\n 0 < t.length ? setTimeout(function () {\n return _this.emit(\"initialized\", t);\n }) : _this.options.legal && _this.options.legal.countryCode ? _this.initializationComplete({\n code: _this.options.legal.countryCode\n }) : _this.options.location ? new c.a(_this.options.location).locate(_this.initializationComplete.bind(_assertThisInitialized(_this)), _this.initializationError.bind(_assertThisInitialized(_this))) : _this.initializationComplete({});\n return _this;\n }\n\n _createClass(l, [{\n key: \"initializationComplete\",\n value: function initializationComplete(e) {\n var _this2 = this;\n\n e.code && (this.options = new o.a(this.options.legal).applyLaw(this.options, e.code)), this.popup = new s.a(this.options), setTimeout(function () {\n return _this2.emit(\"initialized\", _this2.popup);\n }, 0);\n }\n }, {\n key: \"initializationError\",\n value: function initializationError(e) {\n var _this3 = this;\n\n setTimeout(function () {\n return _this3.emit(\"error\", e, new s.a(_this3.options));\n }, 0);\n }\n }, {\n key: \"getCountryLaws\",\n value: function getCountryLaws(e) {\n return new o.a(this.options.legal).get(e);\n }\n }, {\n key: \"isOpen\",\n value: function isOpen() {\n return this.popup.isOpen();\n }\n }, {\n key: \"close\",\n value: function close() {\n return this.popup.close(), this;\n }\n }, {\n key: \"revokeChoice\",\n value: function revokeChoice() {\n return this.popup.revokeChoice(), this;\n }\n }, {\n key: \"open\",\n value: function open() {\n return this.popup.open(), this;\n }\n }, {\n key: \"toggleRevokeButton\",\n value: function toggleRevokeButton(e) {\n return this.popup.toggleRevokeButton(e), this;\n }\n }, {\n key: \"setStatuses\",\n value: function setStatuses(e) {\n return this.popup.setStatuses(e), this;\n }\n }, {\n key: \"clearStatuses\",\n value: function clearStatuses() {\n return this.popup.clearStatuses(), this;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n return this.popup.destroy(), this;\n }\n }]);\n\n return l;\n }(i.a);\n\n r.e.reduce(function (e, t) {\n return Object.defineProperty(l, t, {\n get: function get() {\n return t;\n },\n set: function set() {},\n enumerable: !1,\n writeable: !1,\n configurable: !1\n }), e;\n }, l);\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"a\", function () {\n return i;\n }), n.d(t, \"b\", function () {\n return o;\n });\n\n var i = function i(e) {\n var t = (\" \" + document.cookie).split(\" \" + e + \"=\");\n return 2 > t.length ? void 0 : t.pop().split(\";\").shift();\n },\n o = function o(e, t, n, i, _o, c) {\n var s = new Date();\n s.setHours(s.getHours() + 24 * (\"number\" == typeof n ? n : 365)), document.cookie = e + \"=\" + t + \";expires=\" + s.toUTCString() + \";path=\" + (_o || \"/\") + (i ? \";domain=\" + i : \"\") + (c ? \";secure\" : \"\");\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"b\", function () {\n return o;\n }), n.d(t, \"a\", function () {\n return c;\n });\n var i = n(3);\n\n var o = function o(e, t) {\n return e && e.parentNode ? e.classList.contains(t) ? e : o(e.parentNode, t) : null;\n },\n c = function c(e, t, n) {\n var o = {},\n c = t.popup,\n s = t.button,\n r = t.highlight,\n a = t.saveButton;\n c && (c.text = c.text ? c.text : Object(i.a)(c.background), c.link = c.link ? c.link : c.text, o[n + \" .cc-tooltip, \" + n + \" .cc-tooltip:after\"] = [\"color: \" + c.text, \"background-color: \" + c.background], o[n + \".cc-window\"] = [\"color: \" + c.text, \"background-color: \" + c.background], o[n + \".cc-revoke\"] = [\"color: \" + c.text, \"background-color: \" + c.background], o[n + \" .cc-link,\" + n + \" .cc-link:active,\" + n + \" .cc-link:visited\"] = [\"color: \" + c.link], s && (s.text = s.text ? s.text : Object(i.a)(s.background), s.border = s.border ? s.border : \"transparent\", o[n + \" .cc-btn\"] = [\"color: \" + s.text, \"border-color: \" + s.border, \"background-color: \" + s.background], s.padding && o[n + \" .cc-btn\"].push(\"padding: \" + s.padding), \"transparent\" != s.background && (o[n + \" .cc-btn:hover, \" + n + \" .cc-btn:focus\"] = [\"background-color: \" + (s.hover || Object(i.b)(s.background))]), r ? (r.text = r.text ? r.text : Object(i.a)(r.background), r.border = r.border ? r.border : \"transparent\", o[n + \" .cc-highlight .cc-btn:first-child\"] = [\"color: \" + r.text, \"border-color: \" + r.border, \"background-color: \" + r.background]) : o[n + \" .cc-highlight .cc-btn:first-child\"] = [\"color: \" + c.text]), a && (o[\"\".concat(n, \" .cc-btn.cc-save\")] = [\"color: \" + a.text, \"border-color: \" + a.border, \"background-color: \" + a.background]));\n var l = document.createElement(\"style\");\n return l.id = e, document.head.appendChild(l), Object.entries(o).forEach(function (_ref4, n) {\n var _ref5 = _slicedToArray(_ref4, 2),\n e = _ref5[0],\n t = _ref5[1];\n\n return l.sheet.insertRule(\"\".concat(e, \"{\").concat(t.join(\";\"), \"}\"), n);\n }), l;\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"c\", function () {\n return o;\n }), n.d(t, \"a\", function () {\n return c;\n }), n.d(t, \"b\", function () {\n return s;\n });\n var i = n(2);\n\n var o = function o(e) {\n return 0 <= i.e.indexOf(e);\n },\n c = function c() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n },\n s = function s(e) {\n return \"object\" == _typeof(e) && null !== e && e.constructor == Object;\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"a\", function () {\n return i;\n }), n.d(t, \"b\", function () {\n return o;\n });\n\n var i = function i(e, t, n) {\n var i;\n var o = document.createElement(\"script\");\n o.type = \"text/\" + (e.type || \"javascript\"), o.src = e.src || e, o.async = !1, o.onreadystatechange = s.onload = function () {\n var e = o.readyState;\n clearTimeout(i), t.done || e && !/loaded|complete/.test(e) || (t.done = !0, t(), o.onreadystatechange = o.onload = null);\n }, document.body.appendChild(o), i = setTimeout(function () {\n t.done = !0, t(), o.onreadystatechange = o.onload = null;\n }, n);\n },\n o = function o(e, t, n, i, _o2) {\n var c = new (window.XMLHttpRequest || window.ActiveXObject)(\"MSXML2.XMLHTTP.3.0\");\n if (c.open(i ? \"POST\" : \"GET\", e, 1), c.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\"), Array.isArray(_o2)) for (var _e2 = 0, _t = _o2.length; _e2 < _t; ++_e2) {\n var _t2 = _o2[_e2].split(\":\", 2);\n\n c.setRequestHeader(_t2[0].replace(/^\\s+|\\s+$/g, \"\"), _t2[1].replace(/^\\s+|\\s+$/g, \"\"));\n }\n \"function\" == typeof t && (c.onreadystatechange = function () {\n 3 < c.readyState && t(c);\n }), c.send(i);\n };\n}, function (e) {\n \"use strict\";\n\n function t() {\n t.init.call(this);\n }\n\n function n(e) {\n return void 0 === e._maxListeners ? t.defaultMaxListeners : e._maxListeners;\n }\n\n function i(e, t, i, o) {\n var c, s, r;\n if (\"function\" != typeof i) throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(i));\n if (void 0 === (s = e._events) ? (s = e._events = Object.create(null), e._eventsCount = 0) : (void 0 !== s.newListener && (e.emit(\"newListener\", t, i.listener ? i.listener : i), s = e._events), r = s[t]), void 0 === r) r = s[t] = i, ++e._eventsCount;else if (\"function\" == typeof r ? r = s[t] = o ? [i, r] : [r, i] : o ? r.unshift(i) : r.push(i), 0 < (c = n(e)) && r.length > c && !r.warned) {\n r.warned = !0;\n var a = new Error(\"Possible EventEmitter memory leak detected. \" + r.length + \" \" + t + \" listeners added. Use emitter.setMaxListeners() to increase limit\");\n a.name = \"MaxListenersExceededWarning\", a.emitter = e, a.type = t, a.count = r.length, console;\n }\n return e;\n }\n\n function o(e, t, n) {\n var i = {\n fired: !1,\n wrapFn: void 0,\n target: e,\n type: t,\n listener: n\n },\n o = function () {\n for (var e = [], t = 0; t < arguments.length; t++) {\n e.push(arguments[t]);\n }\n\n this.fired || (this.target.removeListener(this.type, this.wrapFn), this.fired = !0, u(this.listener, this.target, e));\n }.bind(i);\n\n return o.listener = n, i.wrapFn = o, o;\n }\n\n function c(e, t, n) {\n var i = e._events;\n if (void 0 === i) return [];\n var o = i[t];\n return void 0 === o ? [] : \"function\" == typeof o ? n ? [o.listener || o] : [o] : n ? function (e) {\n for (var t = Array(e.length), n = 0; n < t.length; ++n) {\n t[n] = e[n].listener || e[n];\n }\n\n return t;\n }(o) : r(o, o.length);\n }\n\n function s(e) {\n var t = this._events;\n\n if (void 0 !== t) {\n var n = t[e];\n if (\"function\" == typeof n) return 1;\n if (void 0 !== n) return n.length;\n }\n\n return 0;\n }\n\n function r(e, t) {\n for (var n = Array(t), i = 0; i < t; ++i) {\n n[i] = e[i];\n }\n\n return n;\n }\n\n var a,\n l = \"object\" == (typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) ? Reflect : null,\n u = l && \"function\" == typeof l.apply ? l.apply : function (e, t, n) {\n return Function.prototype.apply.call(e, t, n);\n };\n a = l && \"function\" == typeof l.ownKeys ? l.ownKeys : Object.getOwnPropertySymbols ? function (e) {\n return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e));\n } : function (e) {\n return Object.getOwnPropertyNames(e);\n };\n\n var d = Number.isNaN || function (e) {\n return e != e;\n };\n\n e.exports = t, t.EventEmitter = t, t.prototype._events = void 0, t.prototype._eventsCount = 0, t.prototype._maxListeners = void 0;\n var p = 10;\n Object.defineProperty(t, \"defaultMaxListeners\", {\n enumerable: !0,\n get: function get() {\n return p;\n },\n set: function set(e) {\n if (\"number\" != typeof e || 0 > e || d(e)) throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + e + \".\");\n p = e;\n }\n }), t.init = function () {\n (void 0 === this._events || this._events === Object.getPrototypeOf(this)._events) && (this._events = Object.create(null), this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0;\n }, t.prototype.setMaxListeners = function (e) {\n if (\"number\" != typeof e || 0 > e || d(e)) throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + e + \".\");\n return this._maxListeners = e, this;\n }, t.prototype.getMaxListeners = function () {\n return n(this);\n }, t.prototype.emit = function (e) {\n for (var t = [], n = 1; n < arguments.length; n++) {\n t.push(arguments[n]);\n }\n\n var i = \"error\" === e,\n o = this._events;\n if (void 0 !== o) i = i && void 0 === o.error;else if (!i) return !1;\n\n if (i) {\n var c;\n if (0 < t.length && (c = t[0]), c instanceof Error) throw c;\n var s = new Error(\"Unhandled error.\" + (c ? \" (\" + c.message + \")\" : \"\"));\n throw s.context = c, s;\n }\n\n var a = o[e];\n if (void 0 === a) return !1;\n if (\"function\" == typeof a) u(a, this, t);else {\n var l = a.length,\n d = r(a, l);\n\n for (n = 0; n < l; ++n) {\n u(d[n], this, t);\n }\n }\n return !0;\n }, t.prototype.addListener = function (e, t) {\n return i(this, e, t, !1);\n }, t.prototype.on = t.prototype.addListener, t.prototype.prependListener = function (e, t) {\n return i(this, e, t, !0);\n }, t.prototype.once = function (e, t) {\n if (\"function\" != typeof t) throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(t));\n return this.on(e, o(this, e, t)), this;\n }, t.prototype.prependOnceListener = function (e, t) {\n if (\"function\" != typeof t) throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(t));\n return this.prependListener(e, o(this, e, t)), this;\n }, t.prototype.removeListener = function (e, t) {\n var n, i, o, c, s;\n if (\"function\" != typeof t) throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(t));\n if (void 0 === (i = this._events)) return this;\n if (void 0 === (n = i[e])) return this;\n if (n === t || n.listener === t) 0 == --this._eventsCount ? this._events = Object.create(null) : (delete i[e], i.removeListener && this.emit(\"removeListener\", e, n.listener || t));else if (\"function\" != typeof n) {\n for (o = -1, c = n.length - 1; 0 <= c; c--) {\n if (n[c] === t || n[c].listener === t) {\n s = n[c].listener, o = c;\n break;\n }\n }\n\n if (0 > o) return this;\n 0 === o ? n.shift() : function (e, t) {\n for (; t + 1 < e.length; t++) {\n e[t] = e[t + 1];\n }\n\n e.pop();\n }(n, o), 1 === n.length && (i[e] = n[0]), void 0 !== i.removeListener && this.emit(\"removeListener\", e, s || t);\n }\n return this;\n }, t.prototype.off = t.prototype.removeListener, t.prototype.removeAllListeners = function (e) {\n var t, n, i;\n if (void 0 === (n = this._events)) return this;\n if (void 0 === n.removeListener) return 0 === arguments.length ? (this._events = Object.create(null), this._eventsCount = 0) : void 0 !== n[e] && (0 == --this._eventsCount ? this._events = Object.create(null) : delete n[e]), this;\n\n if (0 === arguments.length) {\n var o,\n c = Object.keys(n);\n\n for (i = 0; i < c.length; ++i) {\n \"removeListener\" === (o = c[i]) || this.removeAllListeners(o);\n }\n\n return this.removeAllListeners(\"removeListener\"), this._events = Object.create(null), this._eventsCount = 0, this;\n }\n\n if (\"function\" == typeof (t = n[e])) this.removeListener(e, t);else if (void 0 !== t) for (i = t.length - 1; 0 <= i; i--) {\n this.removeListener(e, t[i]);\n }\n return this;\n }, t.prototype.listeners = function (e) {\n return c(this, e, !0);\n }, t.prototype.rawListeners = function (e) {\n return c(this, e, !1);\n }, t.listenerCount = function (e, t) {\n return \"function\" == typeof e.listenerCount ? e.listenerCount(t) : s.call(e, t);\n }, t.prototype.listenerCount = s, t.prototype.eventNames = function () {\n return 0 < this._eventsCount ? a(this._events) : [];\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"a\", function () {\n return c;\n });\n var i = n(0),\n o = n(18);\n\n var c = /*#__PURE__*/function (_i$a2) {\n _inherits(c, _i$a2);\n\n var _super2 = _createSuper(c);\n\n function c() {\n var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, c);\n\n return _super2.call(this, o.a, e);\n }\n\n _createClass(c, [{\n key: \"get\",\n value: function get(e) {\n return {\n hasLaw: 0 <= this.options.hasLaw.indexOf(e),\n revokable: 0 <= this.options.revokable.indexOf(e),\n explicitAction: 0 <= this.options.explicitAction.indexOf(e)\n };\n }\n }, {\n key: \"applyLaw\",\n value: function applyLaw(e, t) {\n var n = this.get(t);\n return n.hasLaw || (e.enabled = !1, this.emit(\"noCookieLaw\", t, n)), this.options.regionalLaw && (n.revokable && (e.revokable = !0), n.explicitAction && (e.dismissOnScroll = !1, e.dismissOnTimeout = !1)), e;\n }\n }]);\n\n return c;\n }(i.a);\n}, function (e, t) {\n \"use strict\";\n\n t.a = {\n regionalLaw: !0,\n hasLaw: [\"AT\", \"BE\", \"BG\", \"HR\", \"CZ\", \"CY\", \"DK\", \"EE\", \"FI\", \"FR\", \"DE\", \"EL\", \"HU\", \"IE\", \"IT\", \"LV\", \"LT\", \"LU\", \"MT\", \"NL\", \"NO\", \"PL\", \"PT\", \"SK\", \"ES\", \"SE\", \"GB\", \"UK\", \"GR\", \"EU\", \"RO\"],\n revokable: [\"HR\", \"CY\", \"DK\", \"EE\", \"FR\", \"DE\", \"LV\", \"LT\", \"NL\", \"NO\", \"PT\", \"ES\"],\n explicitAction: [\"HR\", \"IT\", \"ES\", \"NO\"]\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"a\", function () {\n return s;\n });\n var i = n(0),\n o = n(20),\n c = n(1);\n\n var s = /*#__PURE__*/function (_i$a3) {\n _inherits(s, _i$a3);\n\n var _super3 = _createSuper(s);\n\n function s(e) {\n var _this4;\n\n _classCallCheck(this, s);\n\n _this4 = _super3.call(this, o.a, e), _this4.currentServiceIndex = -1;\n return _this4;\n }\n\n _createClass(s, [{\n key: \"getNextService\",\n value: function getNextService() {\n var e;\n\n do {\n e = this.getServiceByIdx(++this.currentServiceIndex);\n } while (this.currentServiceIndex < this.options.services.length && !e);\n\n return e;\n }\n }, {\n key: \"getServiceByIdx\",\n value: function getServiceByIdx(e) {\n var t = this.options.services[e];\n\n if (\"function\" == typeof t) {\n var _e3 = t();\n\n return _e3.name ? Object.assign({}, _e3, this.options.serviceDefinitions[_e3.name](_e3)) : _e3;\n }\n\n return \"string\" == typeof t ? this.options.serviceDefinitions[t]() : Object(c.g)(t) ? this.options.serviceDefinitions[t.name](t) : null;\n }\n }, {\n key: \"locate\",\n value: function locate(e, t) {\n var n = this.getNextService();\n return n ? (this.callbackComplete = e, this.callbackError = t, void this.runService(n, this.runNextServiceOnError.bind(this))) : void t(new Error(\"No services to run\"));\n }\n }, {\n key: \"setupUrl\",\n value: function setupUrl(e) {\n var t = this.getCurrentServiceOpts();\n return e.url.replace(/\\{(.*?)\\}/g, function (n, i) {\n if (\"callback\" === i) {\n var _t3 = \"callback\" + Date.now();\n\n return window[_t3] = function (t) {\n e.__JSONP_DATA = JSON.stringify(t);\n }, _t3;\n }\n\n return i in t.interpolateUrl ? t.interpolateUrl[i] : void 0;\n });\n }\n }, {\n key: \"runService\",\n value: function runService(e, t) {\n var _this5 = this;\n\n if (e && e.url && e.callback) {\n (e.isScript ? c.c : c.i)(this.setupUrl(e), function (n) {\n var i = n ? n.responseText : \"\";\n e.__JSONP_DATA && (i = e.__JSONP_DATA, delete e.__JSONP_DATA), _this5.runServiceCallback.call(_this5, t, e, i);\n }, this.options.timeout, e.data, e.headers);\n }\n }\n }, {\n key: \"runServiceCallback\",\n value: function runServiceCallback(e, t, n) {\n var _this6 = this;\n\n var i = t.callback(function (t) {\n i || _this6.onServiceResult(e, t);\n }, n);\n i && this.onServiceResult(e, i);\n }\n }, {\n key: \"onServiceResult\",\n value: function onServiceResult(e, t) {\n t instanceof Error || t && t.error ? e.call(this, t, null) : e.call(this, null, t);\n }\n }, {\n key: \"runNextServiceOnError\",\n value: function runNextServiceOnError(e, t) {\n if (e) {\n this.logError(e);\n\n var _t4 = this.getNextService();\n\n _t4 ? this.runService(_t4, this.runNextServiceOnError.bind(this)) : this.completeService.call(this, this.callbackError, new Error(\"All services failed\"));\n } else this.completeService.call(this, this.callbackComplete, t);\n }\n }, {\n key: \"getCurrentServiceOpts\",\n value: function getCurrentServiceOpts() {\n var e = this.options.services[this.currentServiceIndex];\n return \"string\" == typeof e ? {\n name: e\n } : \"function\" == typeof e ? e() : Object(c.g)(e) ? e : {};\n }\n }, {\n key: \"completeService\",\n value: function completeService(e, t) {\n this.currentServiceIndex = -1, e && e(t);\n }\n }, {\n key: \"logError\",\n value: function logError() {}\n }]);\n\n return s;\n }(i.a);\n}, function (e, t) {\n \"use strict\";\n\n var n = function n(e) {\n return new Error(\"Error [\" + (e.code || \"UNKNOWN\") + \"]: \" + e.error);\n };\n\n t.a = {\n timeout: 5e3,\n services: [\"ipinfo\"],\n serviceDefinitions: {\n ipinfo: function ipinfo() {\n return {\n url: \"//ipinfo.io\",\n headers: [\"Accept: application/json\"],\n callback: function callback(e, t) {\n try {\n var i = JSON.parse(t);\n return i.error ? n(i) : {\n code: i.country\n };\n } catch (e) {\n return n({\n error: \"Invalid response (\" + e + \")\"\n });\n }\n }\n };\n },\n ipinfodb: function ipinfodb() {\n return {\n url: \"//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}\",\n isScript: !0,\n callback: function callback(e, t) {\n try {\n var i = JSON.parse(t);\n return \"ERROR\" == i.statusCode ? n({\n error: i.statusMessage\n }) : {\n code: i.countryCode\n };\n } catch (e) {\n return n({\n error: \"Invalid response (\" + e + \")\"\n });\n }\n }\n };\n },\n maxmind: function maxmind() {\n return {\n url: \"//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js\",\n isScript: !0,\n callback: function callback(e) {\n return window.geoip2 ? void geoip2.country(function (t) {\n try {\n e({\n code: t.country.iso_code\n });\n } catch (t) {\n e(n(t));\n }\n }, function (t) {\n e(n(t));\n }) : void e(new Error(\"Unexpected response format. The downloaded script should have exported `geoip2` to the global scope\"));\n }\n };\n }\n }\n };\n}, function (e, t, n) {\n \"use strict\";\n\n n.d(t, \"a\", function () {\n return r;\n });\n var i = n(0),\n o = n(22),\n c = n(2),\n s = n(1);\n\n var r = /*#__PURE__*/function (_i$a4) {\n _inherits(r, _i$a4);\n\n var _super4 = _createSuper(r);\n\n function r(e) {\n var _this7;\n\n _classCallCheck(this, r);\n\n _this7 = _super4.call(this, o.a, e), _this7.userCategories = {\n UNCATEGORIZED: \"DISMISS\",\n ESSENTIAL: \"ALLOW\",\n PERSONALIZATION: \"DISMISS\",\n ANALYTICS: \"DISMISS\",\n MARKETING: \"DISMISS\"\n }, _this7.customStyles = {}, _this7.hasTransition = !!function () {\n var e = document.createElement(\"div\"),\n t = {\n t: \"transitionend\",\n OT: \"oTransitionEnd\",\n msT: \"MSTransitionEnd\",\n MozT: \"transitionend\",\n WebkitT: \"webkitTransitionEnd\"\n };\n\n for (var _n2 in t) {\n if (t.hasOwnProperty(_n2) && void 0 !== e.style[_n2 + \"ransition\"]) return t[_n2];\n }\n\n return \"\";\n }(), _this7.canUseCookies() && (_this7.options.enabled = !1), _this7.options.blacklistPage.includes(location.pathname) && (_this7.options.enabled = !1), _this7.options.whitelistPage.includes(location.pathname) && (_this7.options.enabled = !0);\n\n var t = _this7.options.window.replace(\"{{classes}}\", _this7.getPopupClasses().join(\" \")).replace(\"{{children}}\", _this7.getPopupInnerMarkup());\n\n var n = _this7.options.overrideHTML;\n\n if (\"string\" == typeof n && n.length && (t = n), _this7.options[\"static\"]) {\n var _e4 = _this7.appendMarkup(\"
\".concat(t, \"
\"));\n\n _e4.style.display = \"\", _this7.element = _e4.firstChild, _this7.element.style.display = \"none\", _this7.element.classList.add(\"cc-invisible\");\n } else _this7.element = _this7.appendMarkup(t);\n\n _this7.applyAutoDismiss(), _this7.applyRevokeButton(), _this7.options.autoOpen && _this7.autoOpen();\n return _this7;\n }\n\n _createClass(r, [{\n key: \"open\",\n value: function open() {\n if (this.element) return this.isOpen() || (this.hasTransition ? this.fadeIn() : this.element.style.display = \"\", this.options.revokable && this.toggleRevokeButton(), this.emit(\"popupOpened\")), this;\n }\n }, {\n key: \"close\",\n value: function close(e) {\n if (this.element) return this.isOpen() && (this.hasTransition ? this.fadeOut() : this.element.style.display = \"none\", e && this.options.revokable && this.toggleRevokeButton(!0), this.emit(\"popupClosed\")), this;\n }\n }, {\n key: \"fadeIn\",\n value: function fadeIn() {\n var _this8 = this;\n\n var e = this.element;\n this.hasTransition && e && (this.afterTransition && this.afterFadeOut(e), e.classList.contains(\"cc-invisible\")) && (e.style.display = \"\", this.options[\"static\"] && (this.element.parentNode.style.maxHeight = this.element.clientHeight + \"px\"), this.openingTimeout = setTimeout(function () {\n return _this8.afterFadeIn(e);\n }, 20));\n }\n }, {\n key: \"afterFadeIn\",\n value: function afterFadeIn(e) {\n this.openingTimeout = null, e.classList.remove(\"cc-invisible\");\n }\n }, {\n key: \"fadeOut\",\n value: function fadeOut() {\n var _this9 = this;\n\n this.hasTransition && this.element && (this.openingTimeout && (clearTimeout(this.openingTimeout), this.afterFadeIn(this.element)), !this.element.classList.contains(\"cc-invisible\") && (this.options[\"static\"] && (this.element.parentNode.style.maxHeight = \"\"), this.afterTransition = function () {\n return _this9.afterFadeOut(_this9.element);\n }, this.element.addEventListener(this.transitionEnd, this.afterTransition), this.element.classList.add(\"cc-invisible\")));\n }\n }, {\n key: \"afterFadeOut\",\n value: function afterFadeOut(e) {\n e.style.display = \"none\", e.removeEventListener(this.transitionEnd, this.afterTransition), this.afterTransition = null;\n }\n }, {\n key: \"isOpen\",\n value: function isOpen() {\n return this.element && \"\" === this.element.style.display && (!this.hasTransition || !this.element.classList.contains(\"cc-invisible\"));\n }\n }, {\n key: \"toggleRevokeButton\",\n value: function toggleRevokeButton(e) {\n this.revokeBtn && (this.revokeBtn.style.display = e ? \"\" : \"none\");\n }\n }, {\n key: \"revokeChoice\",\n value: function revokeChoice(e) {\n this.options.enabled = !0, this.clearStatuses(), this.emit(\"revokeChoice\"), e || this.autoOpen();\n }\n }, {\n key: \"hasAnswered\",\n value: function hasAnswered() {\n return this.getStatuses().some(function (e) {\n return !!e;\n });\n }\n }, {\n key: \"hasConsented\",\n value: function hasConsented() {\n return this.getStatuses().map(function (e) {\n return e === c.b || e === c.d;\n });\n }\n }, {\n key: \"autoOpen\",\n value: function autoOpen() {\n var e = this.hasAnswered();\n !e && this.options.enabled ? this.open() : e && this.options.revokable && this.toggleRevokeButton(!0);\n }\n }, {\n key: \"setStatuses\",\n value: function setStatuses() {\n var _this10 = this,\n _arguments = arguments;\n\n var _this$options$cookie = this.options.cookie,\n e = _this$options$cookie.name,\n t = _this$options$cookie.expiryDays,\n n = _this$options$cookie.domain,\n i = _this$options$cookie.path,\n o = _this$options$cookie.secure,\n r = function r(_r, a) {\n if (Object(s.h)(a)) {\n var l = e + \"_\" + _r,\n u = 0 <= c.e.indexOf(Object(s.b)(l));\n Object(s.k)(l, a, t, n, i, o), _this10.emit(\"statusChanged\", l, a, u);\n } else _this10.clearStatuses();\n };\n\n 0 === arguments.length ? c.a.forEach(function (e) {\n return r(e, _this10.userCategories[e]);\n }) : 1 === arguments.length ? c.a.forEach(function (e) {\n return r(e, _arguments[0]);\n }) : 1 < arguments.length && arguments.forEach(function (e, t) {\n r(_this10.userCategories[t], e);\n });\n }\n }, {\n key: \"getStatuses\",\n value: function getStatuses() {\n var _this11 = this;\n\n return c.a.map(function (e) {\n return Object(s.b)(_this11.options.cookie.name + \"_\" + e);\n });\n }\n }, {\n key: \"clearStatuses\",\n value: function clearStatuses() {\n var _this$options$cookie2 = this.options.cookie,\n e = _this$options$cookie2.name,\n t = _this$options$cookie2.domain,\n n = _this$options$cookie2.path;\n c.a.forEach(function (i) {\n Object(s.k)(e + \"_\" + i, \"\", -1, t, n);\n });\n }\n }, {\n key: \"canUseCookies\",\n value: function canUseCookies() {\n var _this12 = this;\n\n if (!window.navigator.cookieEnabled || window.CookiesOK || window.navigator.CookiesOK) return !0;\n var e = this.getStatuses(),\n t = 0 < e.map(function (e, t) {\n return _defineProperty({}, c.a[t], Object(s.h)(e));\n }).filter(function (e) {\n return e[Object.keys(e)[0]];\n }).length;\n return e.forEach(function (e, t) {\n return _this12.userCategories[c.a[t]] === e ? e : _this12.userCategories[c.a[t]];\n }), t;\n }\n }, {\n key: \"getPositionClasses\",\n value: function getPositionClasses() {\n return this.options.position.split(\"-\").map(function (e) {\n return \"cc-\" + e;\n });\n }\n }, {\n key: \"getPopupClasses\",\n value: function getPopupClasses() {\n var e = this.options;\n var t = \"top\" == e.position || \"bottom\" == e.position ? \"banner\" : \"floating\";\n Object(s.f)() && e.mobileForceFloat && (t = \"floating\");\n var n = [\"cc-\" + t, \"cc-type-\" + e.type, \"cc-theme-\" + e.theme];\n return e[\"static\"] && n.push(\"cc-static\"), n.push.apply(n, this.getPositionClasses()), this.attachCustomPalette(this.options.palette), this.customStyleSelector && n.push(this.customStyleSelector), n;\n }\n }, {\n key: \"getPopupInnerMarkup\",\n value: function getPopupInnerMarkup() {\n var e = {},\n t = this.options;\n t.showLink || (t.elements.link = \"\", t.elements.messagelink = t.elements.message), Object.keys(t.elements).forEach(function (n) {\n e[n] = Object(s.e)(t.elements[n], function (e) {\n var n = t.content[e];\n return e && \"string\" == typeof n && n.length ? n : \"\";\n });\n });\n var n = t.compliance[t.type];\n n || (n = t.compliance.info), e.compliance = Object(s.e)(n, function (t) {\n return e[t];\n });\n var i = t.layouts[t.layout];\n return i || (i = t.layouts.basic), Object(s.e)(i, function (t) {\n return e[t];\n });\n }\n }, {\n key: \"appendMarkup\",\n value: function appendMarkup(e) {\n var _this13 = this;\n\n var t = this.options,\n n = document.createElement(\"div\"),\n i = t.container && 1 === t.container.nodeType ? t.container : document.body;\n n.innerHTML = e;\n var o = n.children[0];\n if (o.style.display = \"none\", o.classList.contains(\"cc-window\") && this.hasTransition && o.classList.add(\"cc-invisible\"), o.addEventListener(\"click\", function (e) {\n return _this13.handleButtonClick(e);\n }), o.querySelectorAll('.cc-btn [type=\"checkbox\"]').forEach(function (e) {\n e.addEventListener(\"change\", function () {\n _this13.userCategories[e.name] = e.checked ? \"ALLOW\" : \"DENY\";\n }), e.addEventListener(\"click\", function (e) {\n return e.stopPropagation();\n });\n }), o.querySelectorAll(\".cc-info\").forEach(function (e) {\n e.addEventListener(\"mousedown\", function (e) {\n this === document.activeElement && (this.blur(), e.preventDefault());\n });\n }), t.autoAttach) try {\n i.firstChild ? i.insertBefore(o, i.firstChild) : i.appendChild(o);\n } catch (e) {\n throw new Error(\"No container to attach too. Make sure the DOM has loaded. Is your script loaded just before the `` tag?\");\n }\n return o;\n }\n }, {\n key: \"handleButtonClick\",\n value: function handleButtonClick(e) {\n var t = Object(s.m)(e.target, \"cc-btn\") || e.target;\n if (t.classList.contains(\"cc-btn\") && t.classList.contains(\"cc-save\")) return this.setStatuses(), void this.close(!0);\n if (!t.classList.contains(\"cc-btn\")) return t.classList.contains(\"cc-close\") ? (this.setStatuses(c.d), void this.close(!0)) : t.classList.contains(\"cc-revoke\") ? void this.revokeChoice() : void 0;\n {\n var _e5 = t.className.match(new RegExp(\"\\\\bcc-(\" + c.e.map(function (e) {\n return e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n }).join(\"|\") + \")\\\\b\")),\n _n3 = _e5 && _e5[1] || !1;\n\n _n3 && (this.setStatuses(_n3), this.close(!0));\n }\n }\n }, {\n key: \"attachCustomPalette\",\n value: function attachCustomPalette(e) {\n var t = Object(s.d)(JSON.stringify(e)),\n n = \"cc-color-override-\" + t,\n i = Object(s.g)(e);\n return this.customStyleSelector = i ? n : null, i && Object(s.a)(t, e, \".\" + n), i;\n }\n }, {\n key: \"getEventPath\",\n value: function getEventPath(e) {\n var t = e.composedPath ? e.composedPath() : function (e, t) {\n for (; t;) {\n e.push(t), t = t.parentNode;\n }\n\n return e;\n }([], e.target);\n return t || void 0;\n }\n }, {\n key: \"applyAutoDismiss\",\n value: function applyAutoDismiss() {\n var _this14 = this;\n\n var e = Math.floor;\n var _this$options = this.options,\n t = _this$options.enabled,\n n = _this$options.dismissOnTimeout,\n i = _this$options.dismissOnScroll,\n o = _this$options.dismissOnLinkClick,\n s = _this$options.dismissOnWindowClick,\n r = _this$options.dismissOnKeyPress;\n t && (\"number\" == typeof n && 0 <= n ? this.dismissTimeout = setTimeout(function () {\n _this14.setStatuses(c.d), _this14.close(!0);\n }, e(n)) : \"number\" == typeof i && 0 <= i ? (this.onWindowScroll = function () {\n window.pageYOffset > e(i) && (_this14.setStatuses(c.d), _this14.close(!0), window.removeEventListener(\"scroll\", _this14.onWindowScroll, {\n passive: !0\n }), _this14.onWindowScroll = null);\n }, window.addEventListener(\"scroll\", this.onWindowScroll, {\n passive: !0\n })) : s ? (this.onWindowClick = function (e) {\n getEventPath(e).some(function (e) {\n return _this14.options.ignoreClicksFrom.some(function (t) {\n return e.classList && e.classList.contains(t);\n });\n }) || (_this14.setStatuses(c.d), _this14.close(!0), window.removeEventListener(\"click\", _this14.onWindowClick), window.removeEventListener(\"touchend\", _this14.onWindowClick), _this14.onWindowClick = null);\n }, window.addEventListener(\"click\", this.onWindowClick), window.addEventListener(\"touchend\", this.onWindowClick)) : o ? (this.onLinkClick = function (e) {\n getEventPath(e).some(function (e) {\n return void 0 !== e.tagName && \"A\" === e.tagName;\n }) && (_this14.setStatuses(c.d), _this14.close(!0), window.removeEventListener(\"click\", _this14.onLinkClick), _this14.onLinkClick = null);\n }, window.addEventListener(\"click\", this.onLinkClick)) : r && (this.onKeyPress = function (e) {\n var t = e.keyCode;\n 13 === t ? (_this14.setStatuses(c.b), _this14.close(!0)) : 27 === t && (_this14.setStatuses(c.d), _this14.close(!0));\n }, window.addEventListener(\"onkeypress\", this.onKeyPress)));\n }\n }, {\n key: \"applyRevokeButton\",\n value: function applyRevokeButton() {\n if (\"info\" != this.options.type && (this.options.revokable = !0), Object(s.f)() && (this.options.animateRevokable = !1), this.options.revokable) {\n var _e6 = this.getPositionClasses();\n\n this.options.animateRevokable && _e6.push(\"cc-animate\"), this.customStyleSelector && _e6.push(this.customStyleSelector), this.options.theme && _e6.push(\"cc-theme-\" + this.options.theme);\n\n var _t5 = this.options.revokeBtn.replace(\"{{classes}}\", _e6.join(\" \")).replace(\"{{policy}}\", this.options.content.policy);\n\n this.revokeBtn = this.appendMarkup(_t5);\n var _n4 = this.revokeBtn;\n\n if (this.options.animateRevokable) {\n var _e7 = Object(s.l)(function (e) {\n var t = !1;\n var i = window.innerHeight - 20;\n (_n4.classList.contains(\"cc-top\") && e.clientY < 20 || _n4.classList.contains(\"cc-bottom\") && e.clientY > i) && (t = !0), t && !_n4.classList.contains(\"cc-active\") ? _n4.classList.add(\"cc-active\") : !t && _n4.classList.contains(\"cc-active\") && _n4.classList.remove(\"cc-active\");\n }, 200);\n\n this.onMouseMove = _e7, window.addEventListener(\"mousemove\", _e7);\n }\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.element && this.element.remove(), this.revokeBtn && this.revokeBtn.remove(), this.onWindowScroll && window.removeEventListener(\"scroll\", this.onWindowScroll), this.onWindowClick && (window.removeEventListener(\"click\", this.onWindowClick), window.removeEventListener(\"touchend\", this.onWindowClick)), this.onLinkClick && window.removeEventListener(\"click\", this.onLinkClick), this.onKeyPress && window.addEventListener(\"onkeypress\", this.onKeyPress);\n }\n }]);\n\n return r;\n }(i.a);\n}, function (e, t, n) {\n \"use strict\";\n\n var i = n(2);\n t.a = {\n enabled: !0,\n container: null,\n cookie: {\n name: \"cookieconsent_status\",\n path: \"/\",\n domain: \"localhost\",\n expiryDays: 365,\n secure: !1\n },\n content: {\n header: \"Cookies used on the website!\",\n message: \"This website uses cookies to ensure you get the best experience on our website.\",\n dismiss: \"Got it!\",\n allow: \"Allow cookies\",\n deny: \"Decline\",\n link: \"Learn more\",\n href: \"https://www.cookiesandyou.com\",\n close: \"❌\",\n target: \"_blank\",\n policy: \"Cookie Policy\"\n },\n elements: {\n header: '{{header}} ',\n message: '{{message}}',\n messagelink: '{{message}} {{link}}',\n dismiss: \"{{dismiss}}\"),\n allow: \"{{allow}}\"),\n deny: \"{{deny}}\"),\n link: '{{link}}',\n close: '{{close}}',\n categories: '\",\n save: ''\n },\n window: '
\\x3c!--googleoff: all--\\x3e{{children}}\\x3c!--googleon: all--\\x3e
',\n modal: \"\",\n revokeBtn: '
{{policy}}
',\n compliance: {\n info: '
{{dismiss}}
',\n \"opt-in\": '
{{dismiss}}{{allow}}{{customize}}
',\n \"opt-out\": '
{{dismiss}}{{deny}}
',\n categories: '
{{categories}}{{save}}
'\n },\n type: \"info\",\n layouts: {\n basic: \"{{messagelink}}{{compliance}}\",\n \"basic-close\": \"{{messagelink}}{{compliance}}{{close}}\",\n \"basic-header\": \"{{header}}{{message}}{{link}}{{compliance}}\"\n },\n layout: \"basic\",\n position: \"bottom\",\n theme: \"block\",\n \"static\": !1,\n palette: null,\n revokable: !1,\n animateRevokable: !0,\n showLink: !0,\n dismissOnScroll: !1,\n dismissOnTimeout: !1,\n dismissOnWindowClick: !1,\n dismissOnLinkClick: !1,\n dismissOnKeyPress: !1,\n ignoreClicksFrom: [\"cc-revoke\", \"cc-btn\", \"cc-link\"],\n autoOpen: !0,\n autoAttach: !0,\n mobileForceFloat: !0,\n whitelistPage: [],\n blacklistPage: [],\n overrideHTML: null\n };\n}]);\n\n//# sourceURL=webpack://hollow-knight-completion-check/./src/js/cookieconsent.min.js?"); - -/***/ }), - -/***/ "./src/js/cookies.js": -/*!***************************!*\ - !*** ./src/js/cookies.js ***! - \***************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - -eval("var _this = this;\n\n/* global require */\n// Cookie Consent https://github.com/osano/cookieconsent\nvar CC = __webpack_require__(/*! ./cookieconsent.min.js */ \"./src/js/cookieconsent.min.js\");\n\nvar cc = new CC({\n //...options,\n palette: {\n popup: {\n background: \"#3c404d\",\n text: \"#d6d6d6\"\n },\n button: {\n background: \"#3e6d8c\",\n text: \"#d9f3ff\"\n }\n },\n theme: \"edgeless\",\n type: \"opt-in\",\n content: {\n message: \"This website uses cookies for Google Analytics, for pure statistics purposes.\",\n dismiss: 'Got it!',\n allow: 'Allow cookies',\n deny: 'Decline',\n link: 'Learn more',\n href: 'https://www.cookiesandyou.com',\n close: '❌',\n policy: 'Cookie Policy',\n target: '_blank'\n }\n}); // cc.on(\"initialized\", (...args) => console.log(args));\n\ncc.on(\"initialized\", function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n console.log(args);\n var type = _this.options.type;\n\n var didConsent = _this.hasConsented();\n\n if (type == 'opt-in' && didConsent) {// enable cookies\n }\n\n if (type == 'opt-out' && !didConsent) {// disable cookies\n }\n});\ncc.on(\"revokeChoice\", function () {\n console.log(\"Popup Reset\");\n var type = _this.options.type;\n\n if (type == 'opt-in') {// disable cookies\n }\n\n if (type == 'opt-out') {// enable cookies\n }\n});\ncc.on(\"statusChanged\", function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n console.log(args);\n var type = _this.options.type;\n\n var didConsent = _this.hasConsented();\n\n if (type == 'opt-in' && didConsent) {// enable cookies\n }\n\n if (type == 'opt-out' && !didConsent) {// disable cookies\n }\n});\ncc.on(\"error\", console.error);\ncc.on(\"popupOpened\", function () {\n return console.log(\"Popup Open\");\n});\ncc.on(\"popupClosed\", function () {\n return console.log(\"Popup Closed\");\n});\n\n//# sourceURL=webpack://hollow-knight-completion-check/./src/js/cookies.js?"); - -/***/ }), - /***/ "./src/js/hk-database.js": /*!*******************************!*\ !*** ./src/js/hk-database.js ***! @@ -306,7 +286,7 @@ eval("module.exports = __webpack_require__.p + \"img/thumbnail1200x628.jpg\";\n\ /*!*************************!*\ !*** ./src/js/index.js ***! \*************************/ -eval("/* global require */\n// Handle cookies\n__webpack_require__(/*! ./cookies.js */ \"./src/js/cookies.js\"); // CSS\n\n\n__webpack_require__(/*! ../css/cookieconsent.css */ \"./src/css/cookieconsent.css\");\n\n__webpack_require__(/*! ../css/fontello.css */ \"./src/css/fontello.css\");\n\n__webpack_require__(/*! ../css/simpleicon.css */ \"./src/css/simpleicon.css\");\n\n__webpack_require__(/*! ../css/style.css */ \"./src/css/style.css\"); // required for meta tags (social) to be visible by Webpack\n\n\n__webpack_require__(/*! ../img/thumbnail1200x628.jpg */ \"./src/img/thumbnail1200x628.jpg\"); // Instantly load test save file from .json (fast Debugging script)\n// require(\"./LoadJson.js\");\n// Load Save File for opening files, decoding, decryption\n\n\n__webpack_require__(/*! ./LoadSaveFile.js */ \"./src/js/LoadSaveFile.js\"); // Main script for analyzing the decoded save file and generating the page on the fly\n\n\n__webpack_require__(/*! ./HKCheckCompletion.js */ \"./src/js/HKCheckCompletion.js\");\n\n//# sourceURL=webpack://hollow-knight-completion-check/./src/js/index.js?"); +eval("/* global require */\n// Handle cookies\n// require(\"./cookies.js\");\n// CSS\n__webpack_require__(/*! ../css/cookieconsent.css */ \"./src/css/cookieconsent.css\");\n\n__webpack_require__(/*! ../css/fontello.css */ \"./src/css/fontello.css\");\n\n__webpack_require__(/*! ../css/simpleicon.css */ \"./src/css/simpleicon.css\");\n\n__webpack_require__(/*! ../css/style.css */ \"./src/css/style.css\"); // required for meta tags (social) to be visible by Webpack\n\n\n__webpack_require__(/*! ../img/thumbnail1200x628.jpg */ \"./src/img/thumbnail1200x628.jpg\"); // Instantly load test save file from .json (fast Debugging script)\n// require(\"./LoadJson.js\");\n// Load Save File for opening files, decoding, decryption\n\n\n__webpack_require__(/*! ./LoadSaveFile.js */ \"./src/js/LoadSaveFile.js\"); // Main script for analyzing the decoded save file and generating the page on the fly\n\n\n__webpack_require__(/*! ./HKCheckCompletion.js */ \"./src/js/HKCheckCompletion.js\");\n\n//# sourceURL=webpack://hollow-knight-completion-check/./src/js/index.js?"); })(); /******/ })() diff --git a/src/js/hk-database-v2.js b/src/js/hk-database-v2.js new file mode 100644 index 0000000..a1d60a3 --- /dev/null +++ b/src/js/hk-database-v2.js @@ -0,0 +1,1107 @@ +// ---------------- Hollow Knight Data Constant Objects ----------------- // +/* + This is the whole database for the tool, based on the .json save file data +*/ + +const HK = { + DIV_ID: { + intro: { + h2: "Game Status", + id: "hk-intro", + maxPercent: 112 + }, + hints: { + h2: "My friend Elderbug once told me about...", + id: "hk-hints", + }, + bosses: { + h2: "Bosses", + id: "hk-bosses", + percent: 0, + maxPercent: 14 + }, + charms: { + h2: "Charms", + id: "hk-charms", + percent: 0, + maxPercent: 36 + }, + equipment: { + h2: "Equipment", + id: "hk-equipment", + percent: 0, + maxPercent: 14 + }, + nailUpgrades: { + h2: "Nail Upgrades", + id: "hk-nailupgrades", + percent: 0, + maxPercent: 4 + }, + nailArts: { + h2: "Nail Arts", + id: "hk-nailarts", + percent: 0, + maxPercent: 3 + }, + spells: { + h2: "Spells", + id: "hk-spells", + percent: 0, + maxPercent: 6 + }, + maskShards: { + h2: "Mask Shards", + id: "hk-maskshards", + percent: 0, + maxPercent: 4 + }, + vesselFragments: { + h2: "Vessel Fragments", + id: "hk-vesselfragments", + percent: 0, + maxPercent: 3 + }, + dreamNail: { + h2: "Dream Nail and Essence", + id: "hk-dreamnail", + percent: 0, + maxPercent: 3 + }, + warriorDreams: { + h2: "Warrior Dreams", + id: "hk-warriordreams", + percent: 0, + maxPercent: 7 + }, + dreamers: { + h2: "Dreamers", + id: "hk-dreamers", + percent: 0, + maxPercent: 3 + }, + colosseum: { + h2: "Colosseum of Fools", + id: "hk-colosseum", + percent: 0, + maxPercent: 3 + }, + grimmTroupe: { + h2: "Grimm Troupe Content Pack", + id: "hk-grimmtroupe", + percent: 0, + maxPercent: 6 + }, + lifeblood: { + h2: "Lifeblood Content Pack", + id: "hk-lifeblood", + percent: 0, + maxPercent: 1 + }, + godmaster: { + h2: "Godmaster Content Pack", + id: "hk-godmaster", + percent: 0, + maxPercent: 5 + }, + essential: { + h2: "Game Completion Essentials", + id: "hk-essential" + }, + achievements: { + h2: "Achievements Essentials", + id: "hk-achievements" + }, + statistics: { + h2: "Game Statistics", + id: "hk-statistics" + } + }, + // hk-hints + HINTS: { + fireballLevel: { + spoiler: "...a mysterious shaman living in a dwelling below the town of Dirtmouth" + }, + hornet1Defeated: { + spoiler: "...a skilled protector guarding ruins in a lush green forest" + }, + hasDash: { + spoiler: "...an old cloak lying on a green path near a broken shell" + }, + hasWalljump: { + spoiler: "...a sharp claw lying forgotten somewhere amidst the insect village" + }, + Crossroads_04: { + spoiler: "...a mother sleeping peacefully below the town of Dirtmouth" + }, + slyRescued: { + spoiler: "...a fellow town bug who seems to be lost somewhere in the crossroads" + }, + hasLantern: { + spoiler: "...a precious item able to carry some light to even the darkest places" + }, + hasSuperDash: { + spoiler: "...some powerful crystal beating somewhere deep inside the mines" + }, + hasDreamNail: { + spoiler: "...a weapon from a dream world only found where the souls can peacefully rest" + }, + killedInfectedKnight: { + spoiler: "...a shattered corpse forgotten in a windy cave in the ancient depths below the city" + }, + hasDoubleJump: { + spoiler: "...something incredibly light dropped by a monarchfly in the ancient depths below the city" + }, + killedBlackKnight: { + spoiler: "...discarded shells of black guards lying on the floor of a high spire" + }, + lurienDefeated: { + spoiler: "...a dreamer sleeping somewhere at the top of a high spire" + }, + dungDefenderOrHornet2: { + spoiler: "...a skilled combatant living at the heart of the sewers or watching over a shell amidst ash falling from the sky" + }, + ismaTearOrShadeCloak: { + spoiler: "...something precious in a grove accessed from the waterways or a massive royal door guarding a cloak behind the darkness" + }, + defeatedMegaJelly: { + spoiler: "...an intelligent being floating inside hidden archives behind the fog" + }, + monomonDefeated: { + spoiler: "...a dreamer sleeping somewhere hidden in a foggy area" + }, + hegemolDefeated: { + spoiler: "...a dreamer sleeping near a spider nest area" + }, + killedHollowKnight: { + spoiler: "...a disturbance inside a black temple" + }, + }, + // hk-bosses + BOSSES: { + falseKnightDefeated: { + name: "False Knight", + spoiler: "Forgotten Crossroads" + }, // "Battle Scene" - "Crossroads_10" ? + hornet1Defeated: { + name: "Hornet Protector", + spoiler: "Greenpath" + }, + defeatedDungDefender: { + name: "Dung Defender", + spoiler: "Royal Waterways" + }, + mageLordDefeated: { + name: "Soul Master", + spoiler: "City of Tears: Soul Sanctum" + }, + killedBlackKnight: { + name: "Watcher Knights", + spoiler: "City of Tears: Watcher's Spire" + }, + collectorDefeated: { + name: "The Collector", + spoiler: "City of Tears: Tower of Love" + }, + defeatedMantisLords: { + name: "Mantis Lords", + spoiler: "Mantis Village" + }, + defeatedMegaJelly: { + name: "Uumuu", + spoiler: "Fog Canyon: Teacher's Archives" + }, + hornetOutskirtsDefeated: { + name: "Hornet Sentinel", + spoiler: "Kingdom's Edge" + }, + killedInfectedKnight: { + name: "Broken Vessel", + spoiler: "Ancient Basin" + }, + killedMimicSpider: { + name: "Nosk", + spoiler: "Deepnest" + }, // "Battle Scene" - "Deepnest_32" ? + killedTraitorLord: { + name: "Traitor Lord", + spoiler: "Queen's Gardens" + } // "Battle Scene" - "Fungus3_23" ? + }, + // hk-bosses + // "Battle Scene" sceneData.persistentBoolItems.id + BOSSES_WORLD: { + Crossroads_04: { + name: "Gruz Mother", + spoiler: "Forgotten Crossroads" + }, // killedBigFly + Crossroads_09: { + name: "Brooding Mawlek", + spoiler: "Forgotten Crossroads" + } // killedMawlek + }, + // reference: https://radiance.host/apidocs/Charms.html + CHARMS: { + gotCharm_1: { + name: "#1 Gathering Swarm", + spoiler: "Sly: 300 Geo" + }, // 1 + gotCharm_2: { + name: "#2 Wayward Compass", + spoiler: "Iselda: 220 Geo" + }, // 1 + gotCharm_3: { + name: "#3 Grubsong", + spoiler: "Grubfather: 10 Grubs rescued" + }, // 1 + gotCharm_4: { + name: "#4 Stalwart Shell", + spoiler: "Sly: 200 Geo" + }, // 2 + gotCharm_5: { + name: "#5 Baldur Shell", + spoiler: "Howling Cliffs" + }, // 2 + gotCharm_6: { + name: "#6 Fury of the Fallen", + spoiler: "King's Pass" + }, // 2 + gotCharm_7: { + name: "#7 Quick Focus", + spoiler: "Salubra: 800 Geo" + }, // 3 + gotCharm_8: { + name: "#8 Lifeblood Heart", + spoiler: "Salubra: 250 Geo" + }, // 2 + gotCharm_9: { + name: "#9 Lifeblood Core", + spoiler: "The Abyss: 15 Lifeblood masks" + }, // 3 + gotCharm_10: { + name: "#10 Defender's Crest", + spoiler: "Royal Waterways" + }, // 1 + gotCharm_11: { + name: "#11 Flukenest", + spoiler: "Royal Waterways" + }, // 3 + gotCharm_12: { + name: "#12 Thorns of Agony", + spoiler: "Greenpath" + }, // 1 + gotCharm_13: { + name: "#13 Mark of Pride", + spoiler: "Mantis Village" + }, // 3 + gotCharm_14: { + name: "#14 Steady Body", + spoiler: "Salubra: 120 Geo" + }, // 1 + gotCharm_15: { + name: "#15 Heavy Blow", + spoiler: "Sly: 350 Geo + Shopkeeper's Key" + }, // 2 + gotCharm_16: { + name: "#16 Sharp Shadow", + spoiler: "Deepnest" + }, // 2 + gotCharm_17: { + name: "#17 Spore Shroom", + spoiler: "Fungal Wastes" + }, // 1 + gotCharm_18: { + name: "#18 Longnail", + spoiler: "Salubra: 300 Geo" + }, // 2 + gotCharm_19: { + name: "#19 Shaman Stone", + spoiler: "Salubra: 220 Geo" + }, // 3 + gotCharm_20: { + name: "#20 Soul Catcher", + spoiler: "Forgotten Crossroads: Ancestral Mound" + }, // 2 + gotCharm_21: { + name: "#21 Soul Eater", + spoiler: "Resting Grounds" + }, // 4 + gotCharm_22: { + name: "#22 Glowing Womb", + spoiler: "Forgotten Crossroads" + }, // 2 + gotCharm_23: { + name: "#23 Fragile Heart", + spoiler: "Leg Eater: 350/280 Geo" + }, // 2 + gotCharm_24: { + name: "#24 Fragile Greed", + spoiler: "Leg Eater: 250/200 Geo" + }, // 2 + gotCharm_25: { + name: "#25 Fragile Strength", + spoiler: "Leg Eater: 600/480 Geo" + }, // 3 + gotCharm_26: { + name: "#26 Nailmaster’s Glory", + spoiler: "Sly: All Nail Arts" + }, // 1 + gotCharm_27: { + name: "#27 Joni’s Blessing", + spoiler: "Howling Cliffs: Joni's Repose" + }, // 4 + gotCharm_28: { + name: "#28 Shape of Unn", + spoiler: "Greenpath: Lake of Unn" + }, // 2 + gotCharm_29: { + name: "#29 Hiveblood", + spoiler: "The Hive" + }, // 4 + gotCharm_30: { + name: "#30 Dream Wielder", + spoiler: "Seer: 500 Essence" + }, // 1 + gotCharm_31: { + name: "#31 Dashmaster", + spoiler: "Fungal Wastes" + }, // 2 + gotCharm_32: { + name: "#32 Quick Slash", + spoiler: "Kingdom's Edge" + }, // 3 + gotCharm_33: { + name: "#33 Spell Twister", + spoiler: "City of Tears: Soul Sanctum" + }, // 2 + gotCharm_34: { + name: "#34 Deep Focus", + spoiler: "Crystal Peak" + }, // 4 + gotCharm_35: { + name: "#35 Grubberfly’s Elegy", + spoiler: "Grubfather: 46 Grubs rescued" + }, // 3 + gotCharm_36: { + name: "#36 Kingsoul", + spoiler: "Queen's Gardens + Ancient Basin" + }, // 5 + }, + COLOSSEUM: { + colosseumBronzeCompleted: { + name: "Trial of the Warrior", + spoiler: "Little Fool: 100 Geo" + }, + colosseumSilverCompleted: { + name: "Trial of the Conqueror", + spoiler: "Little Fool: 450 Geo + Warrior completed" + }, + colosseumGoldCompleted: { + name: "Trial of the Fool", + spoiler: "Little Fool: 800 Geo + Conqueror completed" + }, + }, + DREAMERS: { + lurienDefeated: { + name: "Lurien the Watcher", + spoiler: "City of Tears: Watcher's Spire" + }, + monomonDefeated: { + name: "Monomon the Teacher", + spoiler: "Fog Canyon: Teacher's Archives" + }, + hegemolDefeated: { + name: "Herrah the Beast", + spoiler: "Deepnest: Distant Village" + } + }, + DREAMNAIL: { + hasDreamNail: { + name: "Dream Nail acquired", + spoiler: "Resting Grounds" + }, + dreamNailUpgraded: { + name: "Awoken Dream Nail", + spoiler: "Seer: 1800 Essence" + }, + mothDeparted: { + name: "Hear the Seer's final words", + spoiler: "Seer: 2400 Essence" + } + }, + EQUIPMENT: { + hasDash: { + name: "Mothwing Cloak", + spoiler: "Greenpath: Dash ability" + }, + hasWalljump: { + name: "Mantis Claw", + spoiler: "Mantis Village: Wall Jump ability" + }, + hasSuperDash: { + name: "Crystal Heart", + spoiler: "Crystal Peak: Super Dash ability" + }, + hasDoubleJump: { + name: "Monarch Wings", + spoiler: "Ancient Basin: Double Jump ability" + }, + hasAcidArmour: { + name: "Isma's Tear", + spoiler: "Royal Waterways: Acid Armour ability" + }, + hasKingsBrand: { + name: "King's Brand", + spoiler: "Kingdom's Edge" + }, + hasShadowDash: { + name: "Shade Cloak", + spoiler: "The Abyss: Shadow Dash ability" + } + }, + MASKSHARDS: { + slyShellFrag1: { + name: "Mask Shard #1", + spoiler: "Sly: 150 Geo" + }, + slyShellFrag2: { + name: "Mask Shard #2", + spoiler: "Sly: 500 Geo" + }, + slyShellFrag3: { + name: "Mask Shard #3", + spoiler: "Sly: 800 Geo + Shopkeeper's Key" + }, + slyShellFrag4: { + name: "Mask Shard #4", + spoiler: "Sly: 1500 Geo + Shopkeeper's Key" + }, + dreamReward7: { + name: "Mask Shard #5", + spoiler: "Seer: 1500 Essence" + } + }, + // "Heart Piece" sceneData.persistentBoolItems.id + MASKSHARDS_WORLD: { + Crossroads_13: { + name: "Mask Shard #6", + spoiler: "Forgotten Crossroads: below Hot Springs" + }, + Crossroads_09: { + name: "Mask Shard #7", + spoiler: "Forgotten Crossroads: Brooding Mawlek" + }, + Crossroads_38: { + name: "Mask Shard #8", + spoiler: "Grubfather: 5 Grubs rescued" + }, + Room_Bretta: { + name: "Mask Shard #9", + spoiler: "Dirtmouth: Bretta's Room, rescue Bretta" + }, + Fungus2_01: { + name: "Mask Shard #10", + spoiler: "Queen's Station, requires Mantis Claw" + }, + Waterways_04b: { + name: "Mask Shard #11", + spoiler: "Royal Waterways" + }, + Fungus1_36: { + name: "Mask Shard #12", + spoiler: "Greenpath: Stone Sanctuary" + }, + Mines_32: { + name: "Mask Shard #13", + spoiler: "Crystal Peak: Enraged Guardian" + }, + Fungus2_25: { + name: "Mask Shard #14", + spoiler: "Deepnest: entrance from Fungal Wastes" + }, + Hive_04: { + name: "Mask Shard #15", + spoiler: "The Hive, use Hive Guardian" + }, + Room_Mansion: { + name: "Mask Shard #16", + spoiler: "Resting Grounds: Delicate Flower" + } + }, + VESSELFRAGMENTS: { + slyVesselFrag1: { + name: "Vessel Fragment #1", + spoiler: "Sly: 550 Geo" + }, + slyVesselFrag2: { + name: "Vessel Fragment #2", + spoiler: "Sly: 900 Geo + Shopkeeper's Key" + }, + dreamReward5: { + name: "Vessel Fragment #3", + spoiler: "Seer: 700 Essence" + }, + vesselFragStagNest: { + name: "Vessel Fragment #4", + spoiler: "Stag Nest" + } + }, + // "Vessel Fragment" sceneData.persistentBoolItems.id + VESSELFRAGMENTS_WORLD: { + Fungus1_13: { + name: "Vessel Fragment #5", + spoiler: "Greenpath: near Queen's Gardens exit" + }, + Crossroads_37: { + name: "Vessel Fragment #6", + spoiler: "Forgotten Crossroads: unlock City of Tears lift" + }, + Ruins2_09: { + name: "Vessel Fragment #7", + spoiler: "Above King's Station" + }, + Deepnest_38: { + name: "Vessel Fragment #8", + spoiler: "Deepnest: Goam platforming challenge" + }, + Abyss_04: { + name: "Vessel Fragment #9", + spoiler: "Ancient Basin Fountain: 3000 Geo" + } + }, + NAILARTS: { + hasDashSlash: { + name: "Great Slash", + spoiler: "Nailmaster Sheo: Greenpath" + }, // this is correct + hasUpwardSlash: { + name: "Dash Slash", + spoiler: "Nailmaster Oro: Kingdom's Edge, 800 Geo" + }, // this is correct + hasCyclone: { + name: "Cyclone Slash", + spoiler: "Nailmaster Mato: Howling Cliffs" + }, + }, + NAILUPGRADES: { + oldNail: { + name: "#0 Old Nail", + spoiler: "Starting Weapon" + }, + sharpenedNail: { + name: "#1 Sharpened Nail", + spoiler: "Nailsmith: 250 Geo" + }, + channeledNail: { + name: "#2 Channeled Nail", + spoiler: "Nailsmith: 800 Geo + 1 Pale Ore" + }, + coiledNail: { + name: "#3 Coiled Nail", + spoiler: "Nailsmith: 2000 Geo + 2 Pale Ore" + }, + pureNail: { + name: "#4 Pure Nail", + spoiler: "Nailsmith: 4000 Geo + 3 Pale Ore" + } + }, + SPELLS: { + fireballLevel: { + 1: { + name: "Vengeful Spirit", + spoiler: "Forgotten Crossroads: Ancestral Mound" + }, + 2: { + name: "Shade Soul", + spoiler: "City of Tears: Soul Sanctum + Elegant Key" + }, + }, + quakeLevel: { + 1: { + name: "Desolate Dive", + spoiler: "City of Tears: Soul Sanctum" + }, + 2: { + name: "Descending Dark", + spoiler: "Crystal Peak: Crystallised Mound" + }, + }, + screamLevel: { + 1: { + name: "Howling Wraiths", + spoiler: "Fog Canyon: Overgrown Mound" + }, + 2: { + name: "Abyss Shriek", + spoiler: "The Abyss" + }, + } + }, + WARRIORDREAMS: { + xeroDefeated: { + name: "Xero", + spoiler: "Resting Grounds" + }, + noEyesDefeated: { + name: "No Eyes", + spoiler: "Greenpath: Stone Sanctuary" + }, + elderHuDefeated: { + name: "Elder Hu", + spoiler: "Fungal Wastes" + }, + aladarSlugDefeated: { + name: "Gorb", + spoiler: "Howling Cliffs" + }, + mumCaterpillarDefeated: { + name: "Marmu", + spoiler: "Queen's Gardens" + }, + galienDefeated: { + name: "Galien", + spoiler: "Deepnest" + }, + markothDefeated: { + name: "Markoth", + spoiler: "Kingdom's Edge, requires Shade Cloak" + }, + }, + GRIMMTROUPE: { + gotCharm_37: { + name: "Charm #37 Sprintmaster", + spoiler: "Sly: 400 Geo + Shopkeeper's Key" + }, + gotCharm_38: { + name: "Charm #38 Dreamshield", + spoiler: "Resting Grounds" + }, + gotCharm_39: { + name: "Charm #39 Weaversong", + spoiler: "Deepnest: Weaver's Den" + }, + gotCharm_40: { + name: "Charm #40 Grimmchild / Carefree Melody", + spoiler: "Dirtmouth" + }, + killedGrimm: { + name: "Troupe Leader Grimm", + spoiler: "Dirtmouth" + } + }, + LIFEBLOOD: { + killedHiveKnight: { + name: "Hive Knight", + spoiler: "The Hive" + } + }, + GODMASTER_DOORS: { + pantheonMaster: { + name: "#1 Pantheon of the Master", + spoiler: "Godhome" + }, + pantheonArtist: { + name: "#2 Pantheon of the Artist", + spoiler: "Godhome" + }, + pantheonSage: { + name: "#3 Pantheon of the Sage", + spoiler: "Godhome" + }, + pantheonKnight: { + name: "#4 Pantheon of the Knight", + spoiler: "Godhome" + } + }, + GODMASTER: { + hasGodfinder: { + name: "Godtuner", + spoiler: "Junk Pit, requires Simple Key" + } + }, + ESSENTIAL: { + grubsCollected: { + name: "Grubs Rescued", + spoiler: "out of 46 total", + max: 46 + }, + dreamOrbs: { + name: "Essence Collected", + spoiler: "Dream Nail (2400 for completion)", + max: 2400 + }, + stationsOpened: { + name: "Stag Stations opened", + spoiler: "out of 10 total", + max: 10 + }, + fountainGeo: { + name: "Geo in Fountain", + spoiler: "Ancient Basin: 3000 Geo maximum", + max: 3000 + }, + slyRescued: { + name: "Sly Rescued", + spoiler: "Forgotten Crossroads, near Gruz Mother" + }, + brettaRescued: { + name: "Bretta Rescued", + spoiler: "Fungal Wastes, near Dashmaster charm statue" + }, + hasLantern: { + name: "Lumafly Lantern", + spoiler: "Sly: 1800 Geo" + }, + shopkeeperKey: { + name: "Shopkeeper's Key", + spoiler: "Crystal Peak" + }, + elegantKey: { + name: "Elegant Key", + spoiler: "Sly: 800 Geo + Shopkeeper's Key" + }, + loveKey: { + name: "Love Key", + spoiler: "Queen's Gardens, near Fungal Wastes" + }, + slySimpleKey: { + name: "Simple Key #1", + spoiler: "Sly: 950 Geo" + }, + simpleKeyCityOfTears: { + name: "Simple Key #2", + spoiler: "City of Tears" + }, + simpleKeyAncientBasin: { + name: "Simple Key #3", + spoiler: "Ancient Basin" + }, + gotLurkerKey: { + name: "Simple Key #4", + spoiler: "Kingdom's Edge: Colosseum of Fools" + }, + paleOreAncientBasin: { + name: "Pale Ore #1", + spoiler: "Ancient Basin" + }, + paleOreSeer: { + name: "Pale Ore #2", + spoiler: "Seer: 300 Essence" + }, + paleOreCrystalPeak: { + name: "Pale Ore #3", + spoiler: "Crystal Peak: Hallownest's Crown" + }, + paleOreDeepnest: { + name: "Pale Ore #4", + spoiler: "Deepnest, Nosk reward" + }, + paleOreGrubfather: { + name: "Pale Ore #5", + spoiler: "Grubfather: 31 Grubs rescued" + }, + paleOreColosseum: { + name: "Pale Ore #6", + spoiler: "Colosseum of Fools: Trial of the Conqueror" + }, + hasTramPass: { + name: "Tram Pass", + spoiler: "Deepnest, Failed Tramway" + }, + nightmareLanternLit: { + name: "Nightmare Lantern Lit", + spoiler: "Howling Cliffs, corpse of a large bug" + } + }, + GRUBS_LIST: ["Crossroads_35", "Crossroads_03", "Crossroads_05", "Crossroads_48", "Crossroads_31", "Fungus1_06", "Fungus1_07", "Fungus1_21", "Fungus1_28", "Fungus2_18", "Ruins1_05", "Mines_04", "Mines_03", "Mines_31", "Mines_19", "Ruins1_32", "RestingGrounds_10", "Ruins_House_01", "Mines_35", "Mines_16", "Waterways_04", "Waterways_13", "Abyss_19", "Abyss_17", "Mines_24", "Fungus1_13", "Fungus3_47", "Fungus3_10", "Fungus3_48", "Fungus3_22", "Ruins2_07", "Ruins2_11_1", "Ruins2_11_2", "Ruins2_11_3", "Deepnest_East_11", "Deepnest_East_14", "Fungus2_20", "Ruins2_03", "Deepnest_36", "Deepnest_03", "Deepnest_31", "Deepnest_39", "Deepnest_Spider_Town", "Waterways_14", "Hive_03", "Hive_04"], + ACHIEVEMENTS: { + areaMaps: { + name: "Area Maps", + spoiler: "Cornifer and Iselda (out of 13)", + max: 13, + list: [ + "mapCrossroads", "mapGreenpath", "mapFogCanyon", "mapRoyalGardens", "mapFungalWastes", "mapCity", "mapWaterways", "mapMines", "mapDeepnest", "mapCliffs", "mapOutskirts", "mapRestingGrounds", "mapAbyss" + ] + }, + journalEntriesCompleted: { + name: "Creatures Encountered", + spoiler: "Hunter's Journal (164 max)", + max: 164 + }, + journalNotesCompleted: { + name: "Hunter Notes Completed", + spoiler: "Hunter's Journal (164 max)", + max: 164 + }, + hasJournal: { + name: "Hunter's Journal", + spoiler: "Greenpath: Hunter" + }, + hasHuntersMark: { + name: "Hunter's Mark", + spoiler: "Greenpath: Hunter" + }, + killedPrayerSlug: { + name: "Journal: Maggot", + spoiler: "Forgotten Crossroads: False Knight secret room" + }, + killedOrangeScuttler: { + name: "Journal: Lightseed", + spoiler: "Infected Crossroads" + }, + killedPigeon: { + name: "Journal: Maskfly", + spoiler: "Greenpath, Queen's Gardens" + }, + killedLazyFlyer: { + name: "Journal: Aluba", + spoiler: "Lake of Unn, Queen's Gardens (near White Lady)" + }, + killedAcidFlyer: { + name: "Journal: Duranda", + spoiler: "Greenpath: Nailmaster Sheo's tent path" + }, + killedAcidWalker: { + name: "Journal: Durandoo", + spoiler: "Greenpath, Queen's Gardens" + }, + killedPlantShooter: { + name: "Journal: Gulka", + spoiler: "Greenpath: west of Stone Sanctuary" + }, + killedMushroomTurret: { + name: "Journal: Sporg", + spoiler: "Fungal Wastes" + }, + killedZapBug: { + name: "Journal: Charged Lumafly", + spoiler: "Fog Canyon: Teacher's Archives (tank)" + }, + killedCrystalCrawler: { + name: "Journal: Crystal Crawler", + spoiler: "Crystal Peak" + }, + killedGorgeousHusk: { + name: "Journal: Gorgeous Husk", + spoiler: "City of Tears: secret room" + }, + killedWorm: { + name: "Journal: Goam", + spoiler: "Infected Crossroads: near Fungal Wastes entrance" + }, + killedBigCentipede: { + name: "Journal: Garpede", + spoiler: "Deepnest: east of Hot Spring" + }, + killedAbyssTendril: { + name: "Journal: Void Tendrils", + spoiler: "The Abyss: secret room" + }, + killedPaleLurker: { + name: "Journal: Pale Lurker", + spoiler: "Colosseum of Fools: secret area" + }, + falseKnightDreamDefeated: { + name: "Failed Champion", + spoiler: "Forgotten Crossroads" + }, + mageLordDreamDefeated: { + name: "Soul Tyrant", + spoiler: "City of Tears: Soul Sanctum" + }, + infectedKnightDreamDefeated: { + name: "Lost Kin", + spoiler: "Ancient Basin" + }, + whiteDefenderDefeated: { + name: "White Defender", + spoiler: "Royal Waterways" + }, + greyPrinceDefeated: { + name: "Grey Prince Zote", + spoiler: "Dirtmouth: Bretta's Room (per save choice)" + }, + killedHollowKnight: { + name: "Hollow Knight", + spoiler: "Forgotten Crossroads: Black Egg Temple" + }, + salubraBlessing: { + name: "Salubra's Blessing", + spoiler: "Salubra: 800 Geo + all 40 Charms found" + }, + gotShadeCharm: { + name: "Void Heart", + spoiler: "Kingsoul + Birthplace" + }, + killedFinalBoss: { + name: "Radiance", + spoiler: "Forgotten Crossroads: Black Egg Temple" + }, + bossDoorStateTier5: { + name: "Embrace the Void", + spoiler: "Godhome: Pantheon of Hallownest" + }, + zoteDead: { + name: "Optimal Zote", + spoiler: "Neglect achievement (per save choice)" + }, + nailsmithSpared: { + name: "Optimal Nailsmith", + spoiler: "Happy Couple achievement (per save choice)" + }, + }, + STATISTICS: { + nailDamage: { + name: "Nail Damage", + spoiler: "Nailsmith upgrades, City of Tears", + max: 21 + }, + charmSlots: { + name: "Charm Notches", + spoiler: "out of 11 total", + max: 11 + }, + whisperingRoots: { + name: "Whispering Roots completed", + spoiler: "Dream Nail (out of 15)", + max: 15 + }, + relicsWandererJournal: { + name: "Relic #1 found total", + nameHeld: "trinket1", + nameSold: "soldTrinket1", + spoiler: "Wanderer's Journal (out of 14)", + max: 14, + }, + relicsHallownestSeal: { + name: "Relic #2 found total", + nameHeld: "trinket2", + nameSold: "soldTrinket2", + spoiler: "Hallownest Seal (out of 17)", + max: 17, + }, + relicsKingsIdol: { + name: "Relic #3 found total", + nameHeld: "trinket3", + nameSold: "soldTrinket3", + spoiler: "King's Idol (out of 8)", + max: 8, + }, + relicsArcaneEgg: { + name: "Relic #4 found total", + nameHeld: "trinket4", + nameSold: "soldTrinket4", + spoiler: "Arcane Egg (4 max, 1 missable)", + max: 4, + }, + geoRocks: { + name: "Geo Rocks", + spoiler: "Unbroken/Broken/Discovered Total" + }, + geoPool: { + name: "Shade Geo", + spoiler: "Amount of Geo the Shade is currently holding", + min: 0 + }, // not ghostCoins + rancidEggs: { + name: "Rancid Eggs", + spoiler: "Find: Hallownest, Buy: Sly, Tuk" + }, + xunFlowerBrokeTimes: { + name: "Delicate Flowers broken", + spoiler: "Resting Grounds: Grey Mourner" + }, + notchShroomOgres: { + name: "Charm Notch #1", + spoiler: "Fungal Wastes: Shroom Ogres room" + }, + salubraNotch1: { + name: "Charm Notch #2", + spoiler: "Salubra: 120 Geo + 5 Charms found" + }, + salubraNotch2: { + name: "Charm Notch #3", + spoiler: "Salubra: 500 Geo + 10 Charms found" + }, + salubraNotch3: { + name: "Charm Notch #4", + spoiler: "Salubra: 900 Geo + 18 Charms found" + }, + salubraNotch4: { + name: "Charm Notch #5", + spoiler: "Salubra: 1400 Geo + 25 Charms found" + }, + colosseumBronzeCompleted: { + name: "Charm Notch #6", + spoiler: "Colosseum of Fools: Trial of the Warrior" + }, + notchFogCanyon: { + name: "Charm Notch #7", + spoiler: "Fog Canyon: explosive eggs room" + }, + gotGrimmNotch: { + name: "Charm Notch #8", + spoiler: "Dirtmouth: Troupe Leader Grimm" + }, + hasDreamGate: { + name: "Dream Gate", + spoiler: "Seer: 900 Essence" + }, + fragileGreed_unbreakable: { + name: "Unbreakable Greed", + spoiler: "Divine: Fragile Greed + 9000 Geo" + }, + fragileHealth_unbreakable: { + name: "Unbreakable Heart", + spoiler: "Divine: Fragile Heart + 12000 Geo" + }, + fragileStrength_unbreakable: { + name: "Unbreakable Strength", + spoiler: "Divine: Fragile Strength + 15000 Geo" + }, + killedMenderBug: { + name: "Journal: Menderbug", + spoiler: "Forgotten Crossroads + destroy sign" + }, + killedBindingSeal: { + name: "Journal: Seal of Binding", + spoiler: "White Palace: Path of Pain completion" + }, + killedGodseekerMask: { + name: "Journal: Weathered Mask", + spoiler: "Godhome: Land of Storms" + }, + killedVoidIdol_1: { + name: "Journal: Void Idol Attuned", + spoiler: "Godhome: Hall of Gods, defeat all" + }, + killedVoidIdol_2: { + name: "Journal: Void Idol Ascended", + spoiler: "Godhome: Hall of Gods, defeat all" + }, + killedVoidIdol_3: { + name: "Journal: Void Idol Radiant", + spoiler: "Godhome: Hall of Gods, defeat all" + }, + whiteDefenderDefeats: { + name: "White Defender times defeated", + spoiler: "Royal Waterways (5 max)", + max: 5 + }, + greyPrinceDefeats: { + name: "Grey Prince Zote times defeated", + spoiler: "Dirtmouth (10 max)", + max: 10 + }, + whitePalaceSecretRoomVisited: { + name: "White Palace Secret Room visited", + spoiler: "Help identify this room!" + }, + killsBindingSeal: { + name: "Path of Pain", + spoiler: "White Palace: main secret area" + }, + } +}; + +export default HK; \ No newline at end of file