@bdelab/roav-ran 2.0.0-beta.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_sentry-release-injection-file.99f80362.js +2 -0
- package/lib/_sentry-release-injection-file.99f80362.js.map +1 -0
- package/lib/{index.402307bd.js → index.394e74ce.js} +3 -3
- package/lib/{index.402307bd.js.map → index.394e74ce.js.map} +1 -1
- package/lib/index.html +3 -3
- package/lib/{worker.fc9db56f.js → worker.ad01d7cf.js} +2 -2
- package/lib/{worker.fc9db56f.js.map → worker.ad01d7cf.js.map} +1 -1
- package/package.json +3 -3
- package/lib/_sentry-release-injection-file.2748d9e7.js +0 -2
- package/lib/_sentry-release-injection-file.2748d9e7.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
;!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
1
|
+
;!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="72c6aafb-fce0-4022-a19f-4af1aec744c2",e._sentryDebugIdIdentifier="sentry-dbid-72c6aafb-fce0-4022-a19f-4af1aec744c2")}catch(e){}}();import"./_sentry-release-injection-file.99f80362.js";import e from"path";var n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e){if(e.__esModule)return e;var n=e.default;if("function"==typeof n){var t=function e(){return this instanceof e?Reflect.construct(n,arguments,this.constructor):n.apply(this,arguments)};t.prototype=n.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach((function(n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})})),t}var s,a={exports:{}};
|
|
2
2
|
/*! store2 - v2.14.3 - 2024-02-14
|
|
3
3
|
* Copyright (c) 2024 Nathan Bubna; Licensed MIT */s=a,function(e,n){var t={version:"2.14.3",areas:{},apis:{},nsdelim:".",inherit:function(e,n){for(var t in e)n.hasOwnProperty(t)||Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t));return n},stringify:function(e,n){return void 0===e||"function"==typeof e?e+"":JSON.stringify(e,n||t.replace)},parse:function(e,n){try{return JSON.parse(e,n||t.revive)}catch(n){return e}},fn:function(e,n){for(var i in t.storeAPI[e]=n,t.apis)t.apis[i][e]=n},get:function(e,n){return e.getItem(n)},set:function(e,n,t){e.setItem(n,t)},remove:function(e,n){e.removeItem(n)},key:function(e,n){return e.key(n)},length:function(e){return e.length},clear:function(e){e.clear()},Store:function(e,n,i){var s=t.inherit(t.storeAPI,(function(e,n,t){return 0===arguments.length?s.getAll():"function"==typeof n?s.transact(e,n,t):void 0!==n?s.set(e,n,t):"string"==typeof e||"number"==typeof e?s.get(e):"function"==typeof e?s.each(e):e?s.setAll(e,n):s.clear()}));s._id=e;try{var a="__store2_test";n.setItem(a,"ok"),s._area=n,n.removeItem(a)}catch(e){s._area=t.storage("fake")}return s._ns=i||"",t.areas[e]||(t.areas[e]=s._area),t.apis[s._ns+s._id]||(t.apis[s._ns+s._id]=s),s},storeAPI:{area:function(e,n){var i=this[e];return i&&i.area||(i=t.Store(e,n,this._ns),this[e]||(this[e]=i)),i},namespace:function(e,n,i){if(i=i||this._delim||t.nsdelim,!e)return this._ns?this._ns.substring(0,this._ns.length-i.length):"";var s=e,a=this[s];if(!(a&&a.namespace||((a=t.Store(this._id,this._area,this._ns+s+i))._delim=i,this[s]||(this[s]=a),n)))for(var o in t.areas)a.area(o,t.areas[o]);return a},isFake:function(e){return e?(this._real=this._area,this._area=t.storage("fake")):!1===e&&(this._area=this._real||this._area),"fake"===this._area.name},toString:function(){return"store"+(this._ns?"."+this.namespace():"")+"["+this._id+"]"},has:function(e){return this._area.has?this._area.has(this._in(e)):!!(this._in(e)in this._area)},size:function(){return this.keys().length},each:function(e,n){for(var i=0,s=t.length(this._area);i<s;i++){var a=this._out(t.key(this._area,i));if(void 0!==a&&!1===e.call(this,a,this.get(a),n))break;s>t.length(this._area)&&(s--,i--)}return n||this},keys:function(e){return this.each((function(e,n,t){t.push(e)}),e||[])},get:function(e,n){var i,s=t.get(this._area,this._in(e));return"function"==typeof n&&(i=n,n=null),null!==s?t.parse(s,i):null!=n?n:s},getAll:function(e){return this.each((function(e,n,t){t[e]=n}),e||{})},transact:function(e,n,t){var i=this.get(e,t),s=n(i);return this.set(e,void 0===s?i:s),this},set:function(e,n,i){var s,a=this.get(e);return null!=a&&!1===i?n:("function"==typeof i&&(s=i,i=void 0),t.set(this._area,this._in(e),t.stringify(n,s),i)||a)},setAll:function(e,n){var t,i;for(var s in e)i=e[s],this.set(s,i,n)!==i&&(t=!0);return t},add:function(e,n,i){var s=this.get(e);if(s instanceof Array)n=s.concat(n);else if(null!==s){var a=typeof s;if(a===typeof n&&"object"===a){for(var o in n)s[o]=n[o];n=s}else n=s+n}return t.set(this._area,this._in(e),t.stringify(n,i)),n},remove:function(e,n){var i=this.get(e,n);return t.remove(this._area,this._in(e)),i},clear:function(){return this._ns?this.each((function(e){t.remove(this._area,this._in(e))}),1):t.clear(this._area),this},clearAll:function(){var e=this._area;for(var n in t.areas)t.areas.hasOwnProperty(n)&&(this._area=t.areas[n],this.clear());return this._area=e,this},_in:function(e){return"string"!=typeof e&&(e=t.stringify(e)),this._ns?this._ns+e:e},_out:function(e){return this._ns?e&&0===e.indexOf(this._ns)?e.substring(this._ns.length):void 0:e}},storage:function(e){return t.inherit(t.storageAPI,{items:{},name:e})},storageAPI:{length:0,has:function(e){return this.items.hasOwnProperty(e)},key:function(e){var n=0;for(var t in this.items)if(this.has(t)&&e===n++)return t},setItem:function(e,n){this.has(e)||this.length++,this.items[e]=n},removeItem:function(e){this.has(e)&&(delete this.items[e],this.length--)},getItem:function(e){return this.has(e)?this.items[e]:null},clear:function(){for(var e in this.items)this.removeItem(e)}}},i=t.Store("local",function(){try{return localStorage}catch(e){}}());i.local=i,i._=t,i.area("session",function(){try{return sessionStorage}catch(e){}}()),i.area("page",t.storage("page")),"function"==typeof n&&void 0!==n.amd?n("store2",[],(function(){return i})):s.exports?s.exports=i:(e.store&&(t.conflict=e.store),e.store=i)}(n,n&&n.define);var o=t(a.exports);function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function c(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function l(e){var n=function(e,n){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var i=t.call(e,n||"default");if("object"!=r(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"==r(n)?n:n+""}function p(e,n){for(var t=0;t<n.length;t++){var i=n[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,l(i.key),i)}}function u(e,n,t){return n&&p(e.prototype,n),t&&p(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function d(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,n){return g=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,n){return e.__proto__=n,e},g(e,n)}function m(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),n&&g(e,n)}function v(e,n){if(n&&("object"===r(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return d(e)}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function f(e,n,t){return(n=l(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function x(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,i=new Array(n);t<n;t++)i[t]=e[t];return i}function b(e){return function(e){if(Array.isArray(e))return e}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,n){if(e){if("string"==typeof e)return x(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?x(e,n):void 0}}(e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?y(Object(t),!0).forEach((function(n){f(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):y(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}var k={type:"logger",log:function(e){this.output("log",e)},warn:function(e){this.output("warn",e)},error:function(e){this.output("error",e)},output:function(e,n){console&&console[e]&&console[e].apply(console,n)}},S=new(function(){function e(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};c(this,e),this.init(n,t)}return u(e,[{key:"init",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=e||k,this.options=n,this.debug=n.debug}},{key:"setDebug",value:function(e){this.debug=e}},{key:"log",value:function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return this.forward(n,"log","",!0)}},{key:"warn",value:function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return this.forward(n,"warn","",!0)}},{key:"error",value:function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return this.forward(n,"error","")}},{key:"deprecate",value:function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return this.forward(n,"warn","WARNING DEPRECATED: ",!0)}},{key:"forward",value:function(e,n,t,i){return i&&!this.debug?null:("string"==typeof e[0]&&(e[0]="".concat(t).concat(this.prefix," ").concat(e[0])),this.logger[n](e))}},{key:"create",value:function(n){return new e(this.logger,w(w({},{prefix:"".concat(this.prefix,":").concat(n,":")}),this.options))}},{key:"clone",value:function(n){return(n=n||this.options).prefix=n.prefix||this.prefix,new e(this.logger,n)}}]),e}()),j=function(){function e(){c(this,e),this.observers={}}return u(e,[{key:"on",value:function(e,n){var t=this;return e.split(" ").forEach((function(e){t.observers[e]=t.observers[e]||[],t.observers[e].push(n)})),this}},{key:"off",value:function(e,n){this.observers[e]&&(n?this.observers[e]=this.observers[e].filter((function(e){return e!==n})):delete this.observers[e])}},{key:"emit",value:function(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),i=1;i<n;i++)t[i-1]=arguments[i];this.observers[e]&&[].concat(this.observers[e]).forEach((function(e){e.apply(void 0,t)}));this.observers["*"]&&[].concat(this.observers["*"]).forEach((function(n){n.apply(n,[e].concat(t))}))}}]),e}();function _(){var e,n,t=new Promise((function(t,i){e=t,n=i}));return t.resolve=e,t.reject=n,t}function C(e){return null==e?"":""+e}function A(e,n,t){function i(e){return e&&e.indexOf("###")>-1?e.replace(/###/g,"."):e}function s(){return!e||"string"==typeof e}for(var a="string"!=typeof n?[].concat(n):n.split(".");a.length>1;){if(s())return{};var o=i(a.shift());!e[o]&&t&&(e[o]=new t),e=Object.prototype.hasOwnProperty.call(e,o)?e[o]:{}}return s()?{}:{obj:e,k:i(a.shift())}}function E(e,n,t){var i=A(e,n,Object);i.obj[i.k]=t}function R(e,n){var t=A(e,n),i=t.obj,s=t.k;if(i)return i[s]}function L(e,n,t){for(var i in n)"__proto__"!==i&&"constructor"!==i&&(i in e?"string"==typeof e[i]||e[i]instanceof String||"string"==typeof n[i]||n[i]instanceof String?t&&(e[i]=n[i]):L(e[i],n[i],t):e[i]=n[i]);return e}function M(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var I={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function D(e){return"string"==typeof e?e.replace(/[&<>"'\/]/g,(function(e){return I[e]})):e}var O="undefined"!=typeof window&&window.navigator&&void 0===window.navigator.userAgentData&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,T=[" ",",","?","!",";"];function P(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(e){if(e[n])return e[n];for(var i=n.split(t),s=e,a=0;a<i.length;++a){if(!s)return;if("string"==typeof s[i[a]]&&a+1<i.length)return;if(void 0===s[i[a]]){for(var o=2,r=i.slice(a,a+o).join(t),c=s[r];void 0===c&&i.length>a+o;)o++,c=s[r=i.slice(a,a+o).join(t)];if(void 0===c)return;if(null===c)return null;if(n.endsWith(r)){if("string"==typeof c)return c;if(r&&"string"==typeof c[r])return c[r]}var l=i.slice(a+o).join(t);return l?P(c,l,t):void 0}s=s[i[a]]}return s}}function F(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function N(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?F(Object(t),!0).forEach((function(n){f(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):F(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function q(e){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var t,i=h(e);if(n){var s=h(this).constructor;t=Reflect.construct(i,arguments,s)}else t=i.apply(this,arguments);return v(this,t)}}var z=function(e){m(t,j);var n=q(t);function t(e){var i,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};return c(this,t),i=n.call(this),O&&j.call(d(i)),i.data=e||{},i.options=s,void 0===i.options.keySeparator&&(i.options.keySeparator="."),void 0===i.options.ignoreJSONStructure&&(i.options.ignoreJSONStructure=!0),i}return u(t,[{key:"addNamespaces",value:function(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}},{key:"removeNamespaces",value:function(e){var n=this.options.ns.indexOf(e);n>-1&&this.options.ns.splice(n,1)}},{key:"getResource",value:function(e,n,t){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=void 0!==i.keySeparator?i.keySeparator:this.options.keySeparator,a=void 0!==i.ignoreJSONStructure?i.ignoreJSONStructure:this.options.ignoreJSONStructure,o=[e,n];t&&"string"!=typeof t&&(o=o.concat(t)),t&&"string"==typeof t&&(o=o.concat(s?t.split(s):t)),e.indexOf(".")>-1&&(o=e.split("."));var r=R(this.data,o);return r||!a||"string"!=typeof t?r:P(this.data&&this.data[e]&&this.data[e][n],t,s)}},{key:"addResource",value:function(e,n,t,i){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1},a=void 0!==s.keySeparator?s.keySeparator:this.options.keySeparator,o=[e,n];t&&(o=o.concat(a?t.split(a):t)),e.indexOf(".")>-1&&(i=n,n=(o=e.split("."))[1]),this.addNamespaces(n),E(this.data,o,i),s.silent||this.emit("added",e,n,t,i)}},{key:"addResources",value:function(e,n,t){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(var s in t)"string"!=typeof t[s]&&"[object Array]"!==Object.prototype.toString.apply(t[s])||this.addResource(e,n,s,t[s],{silent:!0});i.silent||this.emit("added",e,n,t)}},{key:"addResourceBundle",value:function(e,n,t,i,s){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1},o=[e,n];e.indexOf(".")>-1&&(i=t,t=n,n=(o=e.split("."))[1]),this.addNamespaces(n);var r=R(this.data,o)||{};i?L(r,t,s):r=N(N({},r),t),E(this.data,o,r),a.silent||this.emit("added",e,n,t)}},{key:"removeResourceBundle",value:function(e,n){this.hasResourceBundle(e,n)&&delete this.data[e][n],this.removeNamespaces(n),this.emit("removed",e,n)}},{key:"hasResourceBundle",value:function(e,n){return void 0!==this.getResource(e,n)}},{key:"getResourceBundle",value:function(e,n){return n||(n=this.options.defaultNS),"v1"===this.options.compatibilityAPI?N(N({},{}),this.getResource(e,n)):this.getResource(e,n)}},{key:"getDataByLanguage",value:function(e){return this.data[e]}},{key:"hasLanguageSomeTranslations",value:function(e){var n=this.getDataByLanguage(e);return!!(n&&Object.keys(n)||[]).find((function(e){return n[e]&&Object.keys(n[e]).length>0}))}},{key:"toJSON",value:function(){return this.data}}]),t}(),V={processors:{},addPostProcessor:function(e){this.processors[e.name]=e},handle:function(e,n,t,i,s){var a=this;return e.forEach((function(e){a.processors[e]&&(n=a.processors[e].process(n,t,i,s))})),n}};function B(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function U(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?B(Object(t),!0).forEach((function(n){f(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):B(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function H(e){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var t,i=h(e);if(n){var s=h(this).constructor;t=Reflect.construct(i,arguments,s)}else t=i.apply(this,arguments);return v(this,t)}}var W={},$=function(e){m(t,j);var n=H(t);function t(e){var i,s,a,o,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return c(this,t),i=n.call(this),O&&j.call(d(i)),s=["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],a=e,o=d(i),s.forEach((function(e){a[e]&&(o[e]=a[e])})),i.options=r,void 0===i.options.keySeparator&&(i.options.keySeparator="."),i.logger=S.create("translator"),i}return u(t,[{key:"changeLanguage",value:function(e){e&&(this.language=e)}},{key:"exists",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};if(null==e)return!1;var t=this.resolve(e,n);return t&&void 0!==t.res}},{key:"extractFromKey",value:function(e,n){var t=void 0!==n.nsSeparator?n.nsSeparator:this.options.nsSeparator;void 0===t&&(t=":");var i=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator,s=n.ns||this.options.defaultNS||[],a=t&&e.indexOf(t)>-1,o=!(this.options.userDefinedKeySeparator||n.keySeparator||this.options.userDefinedNsSeparator||n.nsSeparator||function(e,n,t){n=n||"",t=t||"";var i=T.filter((function(e){return n.indexOf(e)<0&&t.indexOf(e)<0}));if(0===i.length)return!0;var s=new RegExp("(".concat(i.map((function(e){return"?"===e?"\\?":e})).join("|"),")")),a=!s.test(e);if(!a){var o=e.indexOf(t);o>0&&!s.test(e.substring(0,o))&&(a=!0)}return a}(e,t,i));if(a&&!o){var r=e.match(this.interpolator.nestingRegexp);if(r&&r.length>0)return{key:e,namespaces:s};var c=e.split(t);(t!==i||t===i&&this.options.ns.indexOf(c[0])>-1)&&(s=c.shift()),e=c.join(i)}return"string"==typeof s&&(s=[s]),{key:e,namespaces:s}}},{key:"translate",value:function(e,n,i){var s=this;if("object"!==r(n)&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),"object"===r(n)&&(n=U({},n)),n||(n={}),null==e)return"";Array.isArray(e)||(e=[String(e)]);var a=void 0!==n.returnDetails?n.returnDetails:this.options.returnDetails,o=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator,c=this.extractFromKey(e[e.length-1],n),l=c.key,p=c.namespaces,u=p[p.length-1],d=n.lng||this.language,g=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(d&&"cimode"===d.toLowerCase()){if(g){var m=n.nsSeparator||this.options.nsSeparator;return a?{res:"".concat(u).concat(m).concat(l),usedKey:l,exactUsedKey:l,usedLng:d,usedNS:u}:"".concat(u).concat(m).concat(l)}return a?{res:l,usedKey:l,exactUsedKey:l,usedLng:d,usedNS:u}:l}var v=this.resolve(e,n),h=v&&v.res,f=v&&v.usedKey||l,x=v&&v.exactUsedKey||l,b=Object.prototype.toString.apply(h),y=void 0!==n.joinArrays?n.joinArrays:this.options.joinArrays,w=!this.i18nFormat||this.i18nFormat.handleAsObject;if(w&&h&&("string"!=typeof h&&"boolean"!=typeof h&&"number"!=typeof h)&&["[object Number]","[object Function]","[object RegExp]"].indexOf(b)<0&&("string"!=typeof y||"[object Array]"!==b)){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");var k=this.options.returnedObjectHandler?this.options.returnedObjectHandler(f,h,U(U({},n),{},{ns:p})):"key '".concat(l," (").concat(this.language,")' returned an object instead of string.");return a?(v.res=k,v):k}if(o){var S="[object Array]"===b,j=S?[]:{},_=S?x:f;for(var C in h)if(Object.prototype.hasOwnProperty.call(h,C)){var A="".concat(_).concat(o).concat(C);j[C]=this.translate(A,U(U({},n),{joinArrays:!1,ns:p})),j[C]===A&&(j[C]=h[C])}h=j}}else if(w&&"string"==typeof y&&"[object Array]"===b)(h=h.join(y))&&(h=this.extendTranslation(h,e,n,i));else{var E=!1,R=!1,L=void 0!==n.count&&"string"!=typeof n.count,M=t.hasDefaultValue(n),I=L?this.pluralResolver.getSuffix(d,n.count,n):"",D=n["defaultValue".concat(I)]||n.defaultValue;!this.isValidLookup(h)&&M&&(E=!0,h=D),this.isValidLookup(h)||(R=!0,h=l);var O=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&R?void 0:h,T=M&&D!==h&&this.options.updateMissing;if(R||E||T){if(this.logger.log(T?"updateKey":"missingKey",d,u,l,T?D:h),o){var P=this.resolve(l,U(U({},n),{},{keySeparator:!1}));P&&P.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var F=[],N=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if("fallback"===this.options.saveMissingTo&&N&&N[0])for(var q=0;q<N.length;q++)F.push(N[q]);else"all"===this.options.saveMissingTo?F=this.languageUtils.toResolveHierarchy(n.lng||this.language):F.push(n.lng||this.language);var z=function(e,t,i){var a=M&&i!==h?i:O;s.options.missingKeyHandler?s.options.missingKeyHandler(e,u,t,a,T,n):s.backendConnector&&s.backendConnector.saveMissing&&s.backendConnector.saveMissing(e,u,t,a,T,n),s.emit("missingKey",e,u,t,h)};this.options.saveMissing&&(this.options.saveMissingPlurals&&L?F.forEach((function(e){s.pluralResolver.getSuffixes(e,n).forEach((function(t){z([e],l+t,n["defaultValue".concat(t)]||D)}))})):z(F,l,D))}h=this.extendTranslation(h,e,n,v,i),R&&h===l&&this.options.appendNamespaceToMissingKey&&(h="".concat(u,":").concat(l)),(R||E)&&this.options.parseMissingKeyHandler&&(h="v1"!==this.options.compatibilityAPI?this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?"".concat(u,":").concat(l):l,E?h:void 0):this.options.parseMissingKeyHandler(h))}return a?(v.res=h,v):h}},{key:"extendTranslation",value:function(e,n,t,i,s){var a=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,U(U({},this.options.interpolation.defaultVariables),t),i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!t.skipInterpolation){t.interpolation&&this.interpolator.init(U(U({},t),{interpolation:U(U({},this.options.interpolation),t.interpolation)}));var o,r="string"==typeof e&&(t&&t.interpolation&&void 0!==t.interpolation.skipOnVariables?t.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);if(r){var c=e.match(this.interpolator.nestingRegexp);o=c&&c.length}var l=t.replace&&"string"!=typeof t.replace?t.replace:t;if(this.options.interpolation.defaultVariables&&(l=U(U({},this.options.interpolation.defaultVariables),l)),e=this.interpolator.interpolate(e,l,t.lng||this.language,t),r){var p=e.match(this.interpolator.nestingRegexp);o<(p&&p.length)&&(t.nest=!1)}!t.lng&&"v1"!==this.options.compatibilityAPI&&i&&i.res&&(t.lng=i.usedLng),!1!==t.nest&&(e=this.interpolator.nest(e,(function(){for(var e=arguments.length,i=new Array(e),o=0;o<e;o++)i[o]=arguments[o];return s&&s[0]===i[0]&&!t.context?(a.logger.warn("It seems you are nesting recursively key: ".concat(i[0]," in key: ").concat(n[0])),null):a.translate.apply(a,i.concat([n]))}),t)),t.interpolation&&this.interpolator.reset()}var u=t.postProcess||this.options.postProcess,d="string"==typeof u?[u]:u;return null!=e&&d&&d.length&&!1!==t.applyPostProcessor&&(e=V.handle(d,e,n,this.options&&this.options.postProcessPassResolved?U({i18nResolved:i},t):t,this)),e}},{key:"resolve",value:function(e){var n,t,i,s,a,o=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e&&(e=[e]),e.forEach((function(e){if(!o.isValidLookup(n)){var c=o.extractFromKey(e,r),l=c.key;t=l;var p=c.namespaces;o.options.fallbackNS&&(p=p.concat(o.options.fallbackNS));var u=void 0!==r.count&&"string"!=typeof r.count,d=u&&!r.ordinal&&0===r.count&&o.pluralResolver.shouldUseIntlApi(),g=void 0!==r.context&&("string"==typeof r.context||"number"==typeof r.context)&&""!==r.context,m=r.lngs?r.lngs:o.languageUtils.toResolveHierarchy(r.lng||o.language,r.fallbackLng);p.forEach((function(e){o.isValidLookup(n)||(a=e,!W["".concat(m[0],"-").concat(e)]&&o.utils&&o.utils.hasLoadedNamespace&&!o.utils.hasLoadedNamespace(a)&&(W["".concat(m[0],"-").concat(e)]=!0,o.logger.warn('key "'.concat(t,'" for languages "').concat(m.join(", "),'" won\'t get resolved as namespace "').concat(a,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),m.forEach((function(t){if(!o.isValidLookup(n)){s=t;var a,c=[l];if(o.i18nFormat&&o.i18nFormat.addLookupKeys)o.i18nFormat.addLookupKeys(c,l,t,e,r);else{var p;u&&(p=o.pluralResolver.getSuffix(t,r.count,r));var m="".concat(o.options.pluralSeparator,"zero");if(u&&(c.push(l+p),d&&c.push(l+m)),g){var v="".concat(l).concat(o.options.contextSeparator).concat(r.context);c.push(v),u&&(c.push(v+p),d&&c.push(v+m))}}for(;a=c.pop();)o.isValidLookup(n)||(i=a,n=o.getResource(t,e,a,r))}})))}))}})),{res:n,usedKey:t,exactUsedKey:i,usedLng:s,usedNS:a}}},{key:"isValidLookup",value:function(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&""===e)}},{key:"getResource",value:function(e,n,t){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,n,t,i):this.resourceStore.getResource(e,n,t,i)}}],[{key:"hasDefaultValue",value:function(e){var n="defaultValue";for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&n===t.substring(0,12)&&void 0!==e[t])return!0;return!1}}]),t}();function Y(e){return e.charAt(0).toUpperCase()+e.slice(1)}var K=function(){function e(n){c(this,e),this.options=n,this.supportedLngs=this.options.supportedLngs||!1,this.logger=S.create("languageUtils")}return u(e,[{key:"getScriptPartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return null;var n=e.split("-");return 2===n.length?null:(n.pop(),"x"===n[n.length-1].toLowerCase()?null:this.formatLanguageCode(n.join("-")))}},{key:"getLanguagePartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return e;var n=e.split("-");return this.formatLanguageCode(n[0])}},{key:"formatLanguageCode",value:function(e){if("string"==typeof e&&e.indexOf("-")>-1){var n=["hans","hant","latn","cyrl","cans","mong","arab"],t=e.split("-");return this.options.lowerCaseLng?t=t.map((function(e){return e.toLowerCase()})):2===t.length?(t[0]=t[0].toLowerCase(),t[1]=t[1].toUpperCase(),n.indexOf(t[1].toLowerCase())>-1&&(t[1]=Y(t[1].toLowerCase()))):3===t.length&&(t[0]=t[0].toLowerCase(),2===t[1].length&&(t[1]=t[1].toUpperCase()),"sgn"!==t[0]&&2===t[2].length&&(t[2]=t[2].toUpperCase()),n.indexOf(t[1].toLowerCase())>-1&&(t[1]=Y(t[1].toLowerCase())),n.indexOf(t[2].toLowerCase())>-1&&(t[2]=Y(t[2].toLowerCase()))),t.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}},{key:"isSupportedCode",value:function(e){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}},{key:"getBestMatchFromCodes",value:function(e){var n,t=this;return e?(e.forEach((function(e){if(!n){var i=t.formatLanguageCode(e);t.options.supportedLngs&&!t.isSupportedCode(i)||(n=i)}})),!n&&this.options.supportedLngs&&e.forEach((function(e){if(!n){var i=t.getLanguagePartFromCode(e);if(t.isSupportedCode(i))return n=i;n=t.options.supportedLngs.find((function(e){return e===i?e:e.indexOf("-")<0&&i.indexOf("-")<0?void 0:0===e.indexOf(i)?e:void 0}))}})),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n):null}},{key:"getFallbackCodes",value:function(e,n){if(!e)return[];if("function"==typeof e&&(e=e(n)),"string"==typeof e&&(e=[e]),"[object Array]"===Object.prototype.toString.apply(e))return e;if(!n)return e.default||[];var t=e[n];return t||(t=e[this.getScriptPartFromCode(n)]),t||(t=e[this.formatLanguageCode(n)]),t||(t=e[this.getLanguagePartFromCode(n)]),t||(t=e.default),t||[]}},{key:"toResolveHierarchy",value:function(e,n){var t=this,i=this.getFallbackCodes(n||this.options.fallbackLng||[],e),s=[],a=function(e){e&&(t.isSupportedCode(e)?s.push(e):t.logger.warn("rejecting language code not found in supportedLngs: ".concat(e)))};return"string"==typeof e&&e.indexOf("-")>-1?("languageOnly"!==this.options.load&&a(this.formatLanguageCode(e)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&a(this.getScriptPartFromCode(e)),"currentOnly"!==this.options.load&&a(this.getLanguagePartFromCode(e))):"string"==typeof e&&a(this.formatLanguageCode(e)),i.forEach((function(e){s.indexOf(e)<0&&a(t.formatLanguageCode(e))})),s}}]),e}(),X=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],G={1:function(e){return Number(e>1)},2:function(e){return Number(1!=e)},3:function(e){return 0},4:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},5:function(e){return Number(0==e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5)},6:function(e){return Number(1==e?0:e>=2&&e<=4?1:2)},7:function(e){return Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},8:function(e){return Number(1==e?0:2==e?1:8!=e&&11!=e?2:3)},9:function(e){return Number(e>=2)},10:function(e){return Number(1==e?0:2==e?1:e<7?2:e<11?3:4)},11:function(e){return Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3)},12:function(e){return Number(e%10!=1||e%100==11)},13:function(e){return Number(0!==e)},14:function(e){return Number(1==e?0:2==e?1:3==e?2:3)},15:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2)},16:function(e){return Number(e%10==1&&e%100!=11?0:0!==e?1:2)},17:function(e){return Number(1==e||e%10==1&&e%100!=11?0:1)},18:function(e){return Number(0==e?0:1==e?1:2)},19:function(e){return Number(1==e?0:0==e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3)},20:function(e){return Number(1==e?0:0==e||e%100>0&&e%100<20?1:2)},21:function(e){return Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0)},22:function(e){return Number(1==e?0:2==e?1:(e<0||e>10)&&e%10==0?2:3)}},J=["v1","v2","v3"],Q={zero:0,one:1,two:2,few:3,many:4,other:5};var Z=function(){function e(n){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};c(this,e),this.languageUtils=n,this.options=i,this.logger=S.create("pluralResolver"),this.options.compatibilityJSON&&"v4"!==this.options.compatibilityJSON||"undefined"!=typeof Intl&&Intl.PluralRules||(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=(t={},X.forEach((function(e){e.lngs.forEach((function(n){t[n]={numbers:e.nr,plurals:G[e.fc]}}))})),t)}return u(e,[{key:"addRule",value:function(e,n){this.rules[e]=n}},{key:"getRule",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(e,{type:n.ordinal?"ordinal":"cardinal"})}catch(e){return}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}},{key:"needsPlural",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=this.getRule(e,n);return this.shouldUseIntlApi()?t&&t.resolvedOptions().pluralCategories.length>1:t&&t.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.getSuffixes(e,t).map((function(e){return"".concat(n).concat(e)}))}},{key:"getSuffixes",value:function(e){var n=this,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=this.getRule(e,t);return i?this.shouldUseIntlApi()?i.resolvedOptions().pluralCategories.sort((function(e,n){return Q[e]-Q[n]})).map((function(e){return"".concat(n.options.prepend).concat(e)})):i.numbers.map((function(i){return n.getSuffix(e,i,t)})):[]}},{key:"getSuffix",value:function(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.getRule(e,t);return i?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(i.select(n)):this.getSuffixRetroCompatible(i,n):(this.logger.warn("no plural rule found for: ".concat(e)),"")}},{key:"getSuffixRetroCompatible",value:function(e,n){var t=this,i=e.noAbs?e.plurals(n):e.plurals(Math.abs(n)),s=e.numbers[i];this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]&&(2===s?s="plural":1===s&&(s=""));var a=function(){return t.options.prepend&&s.toString()?t.options.prepend+s.toString():s.toString()};return"v1"===this.options.compatibilityJSON?1===s?"":"number"==typeof s?"_plural_".concat(s.toString()):a():"v2"===this.options.compatibilityJSON||this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]?a():this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString()}},{key:"shouldUseIntlApi",value:function(){return!J.includes(this.options.compatibilityJSON)}}]),e}();function ee(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function ne(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ee(Object(t),!0).forEach((function(n){f(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ee(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function te(e,n,t){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=function(e,n,t){var i=R(e,t);return void 0!==i?i:R(n,t)}(e,n,t);return!a&&s&&"string"==typeof t&&void 0===(a=P(e,t,i))&&(a=P(n,t,i)),a}var ie=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};c(this,e),this.logger=S.create("interpolator"),this.options=n,this.format=n.interpolation&&n.interpolation.format||function(e){return e},this.init(n)}return u(e,[{key:"init",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});var n=e.interpolation;this.escape=void 0!==n.escape?n.escape:D,this.escapeValue=void 0===n.escapeValue||n.escapeValue,this.useRawValueToEscape=void 0!==n.useRawValueToEscape&&n.useRawValueToEscape,this.prefix=n.prefix?M(n.prefix):n.prefixEscaped||"{{",this.suffix=n.suffix?M(n.suffix):n.suffixEscaped||"}}",this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||",",this.unescapePrefix=n.unescapeSuffix?"":n.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":n.unescapeSuffix||"",this.nestingPrefix=n.nestingPrefix?M(n.nestingPrefix):n.nestingPrefixEscaped||M("$t("),this.nestingSuffix=n.nestingSuffix?M(n.nestingSuffix):n.nestingSuffixEscaped||M(")"),this.nestingOptionsSeparator=n.nestingOptionsSeparator?n.nestingOptionsSeparator:n.nestingOptionsSeparator||",",this.maxReplaces=n.maxReplaces?n.maxReplaces:1e3,this.alwaysFormat=void 0!==n.alwaysFormat&&n.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var e="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(e,"g");var n="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(n,"g");var t="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(t,"g")}},{key:"interpolate",value:function(e,n,t,i){var s,a,o,r=this,c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function l(e){return e.replace(/\$/g,"$$$$")}var p=function(e){if(e.indexOf(r.formatSeparator)<0){var s=te(n,c,e,r.options.keySeparator,r.options.ignoreJSONStructure);return r.alwaysFormat?r.format(s,void 0,t,ne(ne(ne({},i),n),{},{interpolationkey:e})):s}var a=e.split(r.formatSeparator),o=a.shift().trim(),l=a.join(r.formatSeparator).trim();return r.format(te(n,c,o,r.options.keySeparator,r.options.ignoreJSONStructure),l,t,ne(ne(ne({},i),n),{},{interpolationkey:o}))};this.resetRegExp();var u=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,d=i&&i.interpolation&&void 0!==i.interpolation.skipOnVariables?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:function(e){return l(e)}},{regex:this.regexp,safeValue:function(e){return r.escapeValue?l(r.escape(e)):l(e)}}].forEach((function(n){for(o=0;s=n.regex.exec(e);){var t=s[1].trim();if(void 0===(a=p(t)))if("function"==typeof u){var c=u(e,s,i);a="string"==typeof c?c:""}else if(i&&Object.prototype.hasOwnProperty.call(i,t))a="";else{if(d){a=s[0];continue}r.logger.warn("missed to pass in variable ".concat(t," for interpolating ").concat(e)),a=""}else"string"==typeof a||r.useRawValueToEscape||(a=C(a));var l=n.safeValue(a);if(e=e.replace(s[0],l),d?(n.regex.lastIndex+=a.length,n.regex.lastIndex-=s[0].length):n.regex.lastIndex=0,++o>=r.maxReplaces)break}})),e}},{key:"nest",value:function(e,n){var t,i,s,a=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};function r(e,n){var t=this.nestingOptionsSeparator;if(e.indexOf(t)<0)return e;var i=e.split(new RegExp("".concat(t,"[ ]*{"))),a="{".concat(i[1]);e=i[0];var o=(a=this.interpolate(a,s)).match(/'/g),r=a.match(/"/g);(o&&o.length%2==0&&!r||r.length%2!=0)&&(a=a.replace(/'/g,'"'));try{s=JSON.parse(a),n&&(s=ne(ne({},n),s))}catch(n){return this.logger.warn("failed parsing options string in nesting for key ".concat(e),n),"".concat(e).concat(t).concat(a)}return delete s.defaultValue,e}for(;t=this.nestingRegexp.exec(e);){var c=[];(s=(s=ne({},o)).replace&&"string"!=typeof s.replace?s.replace:s).applyPostProcessor=!1,delete s.defaultValue;var l=!1;if(-1!==t[0].indexOf(this.formatSeparator)&&!/{.*}/.test(t[1])){var p=t[1].split(this.formatSeparator).map((function(e){return e.trim()}));t[1]=p.shift(),c=p,l=!0}if((i=n(r.call(this,t[1].trim(),s),s))&&t[0]===e&&"string"!=typeof i)return i;"string"!=typeof i&&(i=C(i)),i||(this.logger.warn("missed to resolve ".concat(t[1]," for nesting ").concat(e)),i=""),l&&(i=c.reduce((function(e,n){return a.format(e,n,o.lng,ne(ne({},o),{},{interpolationkey:t[1].trim()}))}),i.trim())),e=e.replace(t[0],i),this.regexp.lastIndex=0}return e}}]),e}();function se(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function ae(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?se(Object(t),!0).forEach((function(n){f(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):se(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function oe(e){var n={};return function(t,i,s){var a=i+JSON.stringify(s),o=n[a];return o||(o=e(i,s),n[a]=o),o(t)}}var re=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};c(this,e),this.logger=S.create("formatter"),this.options=n,this.formats={number:oe((function(e,n){var t=new Intl.NumberFormat(e,ae({},n));return function(e){return t.format(e)}})),currency:oe((function(e,n){var t=new Intl.NumberFormat(e,ae(ae({},n),{},{style:"currency"}));return function(e){return t.format(e)}})),datetime:oe((function(e,n){var t=new Intl.DateTimeFormat(e,ae({},n));return function(e){return t.format(e)}})),relativetime:oe((function(e,n){var t=new Intl.RelativeTimeFormat(e,ae({},n));return function(e){return t.format(e,n.range||"day")}})),list:oe((function(e,n){var t=new Intl.ListFormat(e,ae({},n));return function(e){return t.format(e)}}))},this.init(n)}return u(e,[{key:"init",value:function(e){var n=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||","}},{key:"add",value:function(e,n){this.formats[e.toLowerCase().trim()]=n}},{key:"addCached",value:function(e,n){this.formats[e.toLowerCase().trim()]=oe(n)}},{key:"format",value:function(e,n,t){var i=this,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return n.split(this.formatSeparator).reduce((function(e,n){var a=function(e){var n=e.toLowerCase().trim(),t={};if(e.indexOf("(")>-1){var i=e.split("(");n=i[0].toLowerCase().trim();var s=i[1].substring(0,i[1].length-1);"currency"===n&&s.indexOf(":")<0?t.currency||(t.currency=s.trim()):"relativetime"===n&&s.indexOf(":")<0?t.range||(t.range=s.trim()):s.split(";").forEach((function(e){if(e){var n=b(e.split(":")),i=n[0],s=n.slice(1).join(":").trim().replace(/^'+|'+$/g,"");t[i.trim()]||(t[i.trim()]=s),"false"===s&&(t[i.trim()]=!1),"true"===s&&(t[i.trim()]=!0),isNaN(s)||(t[i.trim()]=parseInt(s,10))}}))}return{formatName:n,formatOptions:t}}(n),o=a.formatName,r=a.formatOptions;if(i.formats[o]){var c=e;try{var l=s&&s.formatParams&&s.formatParams[s.interpolationkey]||{},p=l.locale||l.lng||s.locale||s.lng||t;c=i.formats[o](e,p,ae(ae(ae({},r),s),l))}catch(e){i.logger.warn(e)}return c}return i.logger.warn("there was no format function for ".concat(o)),e}),e)}}]),e}();function ce(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function le(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ce(Object(t),!0).forEach((function(n){f(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ce(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function pe(e){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var t,i=h(e);if(n){var s=h(this).constructor;t=Reflect.construct(i,arguments,s)}else t=i.apply(this,arguments);return v(this,t)}}var ue=function(e){m(t,j);var n=pe(t);function t(e,i,s){var a,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return c(this,t),a=n.call(this),O&&j.call(d(a)),a.backend=e,a.store=i,a.services=s,a.languageUtils=s.languageUtils,a.options=o,a.logger=S.create("backendConnector"),a.waitingReads=[],a.maxParallelReads=o.maxParallelReads||10,a.readingCalls=0,a.maxRetries=o.maxRetries>=0?o.maxRetries:5,a.retryTimeout=o.retryTimeout>=1?o.retryTimeout:350,a.state={},a.queue=[],a.backend&&a.backend.init&&a.backend.init(s,o.backend,o),a}return u(t,[{key:"queueLoad",value:function(e,n,t,i){var s=this,a={},o={},r={},c={};return e.forEach((function(e){var i=!0;n.forEach((function(n){var r="".concat(e,"|").concat(n);!t.reload&&s.store.hasResourceBundle(e,n)?s.state[r]=2:s.state[r]<0||(1===s.state[r]?void 0===o[r]&&(o[r]=!0):(s.state[r]=1,i=!1,void 0===o[r]&&(o[r]=!0),void 0===a[r]&&(a[r]=!0),void 0===c[n]&&(c[n]=!0)))})),i||(r[e]=!0)})),(Object.keys(a).length||Object.keys(o).length)&&this.queue.push({pending:o,pendingCount:Object.keys(o).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(a),pending:Object.keys(o),toLoadLanguages:Object.keys(r),toLoadNamespaces:Object.keys(c)}}},{key:"loaded",value:function(e,n,t){var i=e.split("|"),s=i[0],a=i[1];n&&this.emit("failedLoading",s,a,n),t&&this.store.addResourceBundle(s,a,t),this.state[e]=n?-1:2;var o={};this.queue.forEach((function(t){!function(e,n,t,i){var s=A(e,n,Object),a=s.obj,o=s.k;a[o]=a[o]||[],i&&(a[o]=a[o].concat(t)),i||a[o].push(t)}(t.loaded,[s],a),function(e,n){void 0!==e.pending[n]&&(delete e.pending[n],e.pendingCount--)}(t,e),n&&t.errors.push(n),0!==t.pendingCount||t.done||(Object.keys(t.loaded).forEach((function(e){o[e]||(o[e]={});var n=t.loaded[e];n.length&&n.forEach((function(n){void 0===o[e][n]&&(o[e][n]=!0)}))})),t.done=!0,t.errors.length?t.callback(t.errors):t.callback())})),this.emit("loaded",o),this.queue=this.queue.filter((function(e){return!e.done}))}},{key:"read",value:function(e,n,t){var i=this,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.retryTimeout,o=arguments.length>5?arguments[5]:void 0;if(!e.length)return o(null,{});if(this.readingCalls>=this.maxParallelReads)this.waitingReads.push({lng:e,ns:n,fcName:t,tried:s,wait:a,callback:o});else{this.readingCalls++;var r=function(r,c){if(i.readingCalls--,i.waitingReads.length>0){var l=i.waitingReads.shift();i.read(l.lng,l.ns,l.fcName,l.tried,l.wait,l.callback)}r&&c&&s<i.maxRetries?setTimeout((function(){i.read.call(i,e,n,t,s+1,2*a,o)}),a):o(r,c)},c=this.backend[t].bind(this.backend);if(2!==c.length)return c(e,n,r);try{var l=c(e,n);l&&"function"==typeof l.then?l.then((function(e){return r(null,e)})).catch(r):r(null,l)}catch(e){r(e)}}}},{key:"prepareLoading",value:function(e,n){var t=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),s&&s();"string"==typeof e&&(e=this.languageUtils.toResolveHierarchy(e)),"string"==typeof n&&(n=[n]);var a=this.queueLoad(e,n,i,s);if(!a.toLoad.length)return a.pending.length||s(),null;a.toLoad.forEach((function(e){t.loadOne(e)}))}},{key:"load",value:function(e,n,t){this.prepareLoading(e,n,{},t)}},{key:"reload",value:function(e,n,t){this.prepareLoading(e,n,{reload:!0},t)}},{key:"loadOne",value:function(e){var n=this,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=e.split("|"),s=i[0],a=i[1];this.read(s,a,"read",void 0,void 0,(function(i,o){i&&n.logger.warn("".concat(t,"loading namespace ").concat(a," for language ").concat(s," failed"),i),!i&&o&&n.logger.log("".concat(t,"loaded namespace ").concat(a," for language ").concat(s),o),n.loaded(e,i,o)}))}},{key:"saveMissing",value:function(e,n,t,i,s){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:function(){};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n))this.logger.warn('did not save key "'.concat(t,'" as the namespace "').concat(n,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");else if(null!=t&&""!==t){if(this.backend&&this.backend.create){var r=le(le({},a),{},{isUpdate:s}),c=this.backend.create.bind(this.backend);if(c.length<6)try{var l;(l=5===c.length?c(e,n,t,i,r):c(e,n,t,i))&&"function"==typeof l.then?l.then((function(e){return o(null,e)})).catch(o):o(null,l)}catch(e){o(e)}else c(e,n,t,i,o,r)}e&&e[0]&&this.store.addResource(e[0],n,t,i)}}}]),t}();function de(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){var n={};if("object"===r(e[1])&&(n=e[1]),"string"==typeof e[1]&&(n.defaultValue=e[1]),"string"==typeof e[2]&&(n.tDescription=e[2]),"object"===r(e[2])||"object"===r(e[3])){var t=e[3]||e[2];Object.keys(t).forEach((function(e){n[e]=t[e]}))}return n},interpolation:{escapeValue:!0,format:function(e,n,t,i){return e},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function ge(e){return"string"==typeof e.ns&&(e.ns=[e.ns]),"string"==typeof e.fallbackLng&&(e.fallbackLng=[e.fallbackLng]),"string"==typeof e.fallbackNS&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function me(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function ve(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?me(Object(t),!0).forEach((function(n){f(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):me(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function he(e){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var t,i=h(e);if(n){var s=h(this).constructor;t=Reflect.construct(i,arguments,s)}else t=i.apply(this,arguments);return v(this,t)}}function fe(){}var xe=function(e){m(t,j);var n=he(t);function t(){var e,i,s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments.length>1?arguments[1]:void 0;if(c(this,t),e=n.call(this),O&&j.call(d(e)),e.options=ge(s),e.services={},e.logger=S,e.modules={external:[]},i=d(e),Object.getOwnPropertyNames(Object.getPrototypeOf(i)).forEach((function(e){"function"==typeof i[e]&&(i[e]=i[e].bind(i))})),a&&!e.isInitialized&&!s.isClone){if(!e.options.initImmediate)return e.init(s,a),v(e,d(e));setTimeout((function(){e.init(s,a)}),0)}return e}return u(t,[{key:"init",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;"function"==typeof n&&(t=n,n={}),!n.defaultNS&&!1!==n.defaultNS&&n.ns&&("string"==typeof n.ns?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));var i=de();function s(e){return e?"function"==typeof e?new e:e:null}if(this.options=ve(ve(ve({},i),this.options),ge(n)),"v1"!==this.options.compatibilityAPI&&(this.options.interpolation=ve(ve({},i.interpolation),this.options.interpolation)),void 0!==n.keySeparator&&(this.options.userDefinedKeySeparator=n.keySeparator),void 0!==n.nsSeparator&&(this.options.userDefinedNsSeparator=n.nsSeparator),!this.options.isClone){var a;this.modules.logger?S.init(s(this.modules.logger),this.options):S.init(null,this.options),this.modules.formatter?a=this.modules.formatter:"undefined"!=typeof Intl&&(a=re);var o=new K(this.options);this.store=new z(this.options.resources,this.options);var r=this.services;r.logger=S,r.resourceStore=this.store,r.languageUtils=o,r.pluralResolver=new Z(o,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!a||this.options.interpolation.format&&this.options.interpolation.format!==i.interpolation.format||(r.formatter=s(a),r.formatter.init(r,this.options),this.options.interpolation.format=r.formatter.format.bind(r.formatter)),r.interpolator=new ie(this.options),r.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},r.backendConnector=new ue(s(this.modules.backend),r.resourceStore,r,this.options),r.backendConnector.on("*",(function(n){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];e.emit.apply(e,[n].concat(i))})),this.modules.languageDetector&&(r.languageDetector=s(this.modules.languageDetector),r.languageDetector.init&&r.languageDetector.init(r,this.options.detection,this.options)),this.modules.i18nFormat&&(r.i18nFormat=s(this.modules.i18nFormat),r.i18nFormat.init&&r.i18nFormat.init(this)),this.translator=new $(this.services,this.options),this.translator.on("*",(function(n){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];e.emit.apply(e,[n].concat(i))})),this.modules.external.forEach((function(n){n.init&&n.init(e)}))}if(this.format=this.options.interpolation.format,t||(t=fe),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){var c=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);c.length>0&&"dev"!==c[0]&&(this.options.lng=c[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined");["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach((function(n){e[n]=function(){var t;return(t=e.store)[n].apply(t,arguments)}}));["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach((function(n){e[n]=function(){var t;return(t=e.store)[n].apply(t,arguments),e}}));var l=_(),p=function(){var n=function(n,i){e.isInitialized&&!e.initializedStoreOnce&&e.logger.warn("init: i18next is already initialized. You should call init just once!"),e.isInitialized=!0,e.options.isClone||e.logger.log("initialized",e.options),e.emit("initialized",e.options),l.resolve(i),t(n,i)};if(e.languages&&"v1"!==e.options.compatibilityAPI&&!e.isInitialized)return n(null,e.t.bind(e));e.changeLanguage(e.options.lng,n)};return this.options.resources||!this.options.initImmediate?p():setTimeout(p,0),l}},{key:"loadResources",value:function(e){var n=this,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:fe,i="string"==typeof e?e:this.language;if("function"==typeof e&&(t=e),!this.options.resources||this.options.partialBundledLanguages){if(i&&"cimode"===i.toLowerCase())return t();var s=[],a=function(e){e&&n.services.languageUtils.toResolveHierarchy(e).forEach((function(e){s.indexOf(e)<0&&s.push(e)}))};if(i)a(i);else this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach((function(e){return a(e)}));this.options.preload&&this.options.preload.forEach((function(e){return a(e)})),this.services.backendConnector.load(s,this.options.ns,(function(e){e||n.resolvedLanguage||!n.language||n.setResolvedLanguage(n.language),t(e)}))}else t(null)}},{key:"reloadResources",value:function(e,n,t){var i=_();return e||(e=this.languages),n||(n=this.options.ns),t||(t=fe),this.services.backendConnector.reload(e,n,(function(e){i.resolve(),t(e)})),i}},{key:"use",value:function(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return"backend"===e.type&&(this.modules.backend=e),("logger"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),"languageDetector"===e.type&&(this.modules.languageDetector=e),"i18nFormat"===e.type&&(this.modules.i18nFormat=e),"postProcessor"===e.type&&V.addPostProcessor(e),"formatter"===e.type&&(this.modules.formatter=e),"3rdParty"===e.type&&this.modules.external.push(e),this}},{key:"setResolvedLanguage",value:function(e){if(e&&this.languages&&!(["cimode","dev"].indexOf(e)>-1))for(var n=0;n<this.languages.length;n++){var t=this.languages[n];if(!(["cimode","dev"].indexOf(t)>-1)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}}},{key:"changeLanguage",value:function(e,n){var t=this;this.isLanguageChangingTo=e;var i=_();this.emit("languageChanging",e);var s=function(e){t.language=e,t.languages=t.services.languageUtils.toResolveHierarchy(e),t.resolvedLanguage=void 0,t.setResolvedLanguage(e)},a=function(a){e||a||!t.services.languageDetector||(a=[]);var o="string"==typeof a?a:t.services.languageUtils.getBestMatchFromCodes(a);o&&(t.language||s(o),t.translator.language||t.translator.changeLanguage(o),t.services.languageDetector&&t.services.languageDetector.cacheUserLanguage&&t.services.languageDetector.cacheUserLanguage(o)),t.loadResources(o,(function(e){!function(e,a){a?(s(a),t.translator.changeLanguage(a),t.isLanguageChangingTo=void 0,t.emit("languageChanged",a),t.logger.log("languageChanged",a)):t.isLanguageChangingTo=void 0,i.resolve((function(){return t.t.apply(t,arguments)})),n&&n(e,(function(){return t.t.apply(t,arguments)}))}(e,o)}))};return e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?0===this.services.languageDetector.detect.length?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(e):a(this.services.languageDetector.detect()),i}},{key:"getFixedT",value:function(e,n,t){var i=this,s=function e(n,s){var a;if("object"!==r(s)){for(var o=arguments.length,c=new Array(o>2?o-2:0),l=2;l<o;l++)c[l-2]=arguments[l];a=i.options.overloadTranslationOptionHandler([n,s].concat(c))}else a=ve({},s);a.lng=a.lng||e.lng,a.lngs=a.lngs||e.lngs,a.ns=a.ns||e.ns,a.keyPrefix=a.keyPrefix||t||e.keyPrefix;var p,u=i.options.keySeparator||".";return p=a.keyPrefix&&Array.isArray(n)?n.map((function(e){return"".concat(a.keyPrefix).concat(u).concat(e)})):a.keyPrefix?"".concat(a.keyPrefix).concat(u).concat(n):n,i.t(p,a)};return"string"==typeof e?s.lng=e:s.lngs=e,s.ns=n,s.keyPrefix=t,s}},{key:"t",value:function(){var e;return this.translator&&(e=this.translator).translate.apply(e,arguments)}},{key:"exists",value:function(){var e;return this.translator&&(e=this.translator).exists.apply(e,arguments)}},{key:"setDefaultNamespace",value:function(e){this.options.defaultNS=e}},{key:"hasLoadedNamespace",value:function(e){var n=this,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var i=t.lng||this.resolvedLanguage||this.languages[0],s=!!this.options&&this.options.fallbackLng,a=this.languages[this.languages.length-1];if("cimode"===i.toLowerCase())return!0;var o=function(e,t){var i=n.services.backendConnector.state["".concat(e,"|").concat(t)];return-1===i||2===i};if(t.precheck){var r=t.precheck(this,o);if(void 0!==r)return r}return!!this.hasResourceBundle(i,e)||(!(this.services.backendConnector.backend&&(!this.options.resources||this.options.partialBundledLanguages))||!(!o(i,e)||s&&!o(a,e)))}},{key:"loadNamespaces",value:function(e,n){var t=this,i=_();return this.options.ns?("string"==typeof e&&(e=[e]),e.forEach((function(e){t.options.ns.indexOf(e)<0&&t.options.ns.push(e)})),this.loadResources((function(e){i.resolve(),n&&n(e)})),i):(n&&n(),Promise.resolve())}},{key:"loadLanguages",value:function(e,n){var t=_();"string"==typeof e&&(e=[e]);var i=this.options.preload||[],s=e.filter((function(e){return i.indexOf(e)<0}));return s.length?(this.options.preload=i.concat(s),this.loadResources((function(e){t.resolve(),n&&n(e)})),t):(n&&n(),Promise.resolve())}},{key:"dir",value:function(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return"rtl";var n=this.services&&this.services.languageUtils||new K(de());return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"].indexOf(n.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}},{key:"cloneInstance",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:fe,s=ve(ve(ve({},this.options),n),{isClone:!0}),a=new t(s);void 0===n.debug&&void 0===n.prefix||(a.logger=a.logger.clone(n));return["store","services","language"].forEach((function(n){a[n]=e[n]})),a.services=ve({},this.services),a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a.translator=new $(a.services,a.options),a.translator.on("*",(function(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),i=1;i<n;i++)t[i-1]=arguments[i];a.emit.apply(a,[e].concat(t))})),a.init(s,i),a.translator.options=a.options,a.translator.backendConnector.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a}},{key:"toJSON",value:function(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}]),t}();f(xe,"createInstance",(function(){return new xe(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1?arguments[1]:void 0)}));var be=xe.createInstance();be.createInstance=xe.createInstance,be.createInstance,be.dir,be.init,be.loadResources,be.reloadResources,be.use,be.changeLanguage,be.getFixedT,be.t,be.exists,be.setDefaultNamespace,be.hasLoadedNamespace,be.loadNamespaces,be.loadLanguages;var ye=[],we=ye.forEach,ke=ye.slice;var Se=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,je=function(e,n,t,i){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{path:"/",sameSite:"strict"};t&&(s.expires=new Date,s.expires.setTime(s.expires.getTime()+60*t*1e3)),i&&(s.domain=i),document.cookie=function(e,n,t){var i=t||{};i.path=i.path||"/";var s=encodeURIComponent(n),a="".concat(e,"=").concat(s);if(i.maxAge>0){var o=i.maxAge-0;if(Number.isNaN(o))throw new Error("maxAge should be a Number");a+="; Max-Age=".concat(Math.floor(o))}if(i.domain){if(!Se.test(i.domain))throw new TypeError("option domain is invalid");a+="; Domain=".concat(i.domain)}if(i.path){if(!Se.test(i.path))throw new TypeError("option path is invalid");a+="; Path=".concat(i.path)}if(i.expires){if("function"!=typeof i.expires.toUTCString)throw new TypeError("option expires is invalid");a+="; Expires=".concat(i.expires.toUTCString())}if(i.httpOnly&&(a+="; HttpOnly"),i.secure&&(a+="; Secure"),i.sameSite)switch("string"==typeof i.sameSite?i.sameSite.toLowerCase():i.sameSite){case!0:a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"strict":a+="; SameSite=Strict";break;case"none":a+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return a}(e,encodeURIComponent(n),s)},_e=function(e){for(var n="".concat(e,"="),t=document.cookie.split(";"),i=0;i<t.length;i++){for(var s=t[i];" "===s.charAt(0);)s=s.substring(1,s.length);if(0===s.indexOf(n))return s.substring(n.length,s.length)}return null},Ce={name:"cookie",lookup:function(e){var n;if(e.lookupCookie&&"undefined"!=typeof document){var t=_e(e.lookupCookie);t&&(n=t)}return n},cacheUserLanguage:function(e,n){n.lookupCookie&&"undefined"!=typeof document&&je(n.lookupCookie,e,n.cookieMinutes,n.cookieDomain,n.cookieOptions)}},Ae={name:"querystring",lookup:function(e){var n;if("undefined"!=typeof window){var t=window.location.search;!window.location.search&&window.location.hash&&window.location.hash.indexOf("?")>-1&&(t=window.location.hash.substring(window.location.hash.indexOf("?")));for(var i=t.substring(1).split("&"),s=0;s<i.length;s++){var a=i[s].indexOf("=");if(a>0)i[s].substring(0,a)===e.lookupQuerystring&&(n=i[s].substring(a+1))}}return n}},Ee=null,Re=function(){if(null!==Ee)return Ee;try{Ee="undefined"!==window&&null!==window.localStorage;var e="i18next.translate.boo";window.localStorage.setItem(e,"foo"),window.localStorage.removeItem(e)}catch(e){Ee=!1}return Ee},Le={name:"localStorage",lookup:function(e){var n;if(e.lookupLocalStorage&&Re()){var t=window.localStorage.getItem(e.lookupLocalStorage);t&&(n=t)}return n},cacheUserLanguage:function(e,n){n.lookupLocalStorage&&Re()&&window.localStorage.setItem(n.lookupLocalStorage,e)}},Me=null,Ie=function(){if(null!==Me)return Me;try{Me="undefined"!==window&&null!==window.sessionStorage;var e="i18next.translate.boo";window.sessionStorage.setItem(e,"foo"),window.sessionStorage.removeItem(e)}catch(e){Me=!1}return Me},De={name:"sessionStorage",lookup:function(e){var n;if(e.lookupSessionStorage&&Ie()){var t=window.sessionStorage.getItem(e.lookupSessionStorage);t&&(n=t)}return n},cacheUserLanguage:function(e,n){n.lookupSessionStorage&&Ie()&&window.sessionStorage.setItem(n.lookupSessionStorage,e)}},Oe={name:"navigator",lookup:function(e){var n=[];if("undefined"!=typeof navigator){if(navigator.languages)for(var t=0;t<navigator.languages.length;t++)n.push(navigator.languages[t]);navigator.userLanguage&&n.push(navigator.userLanguage),navigator.language&&n.push(navigator.language)}return n.length>0?n:void 0}},Te={name:"htmlTag",lookup:function(e){var n,t=e.htmlTag||("undefined"!=typeof document?document.documentElement:null);return t&&"function"==typeof t.getAttribute&&(n=t.getAttribute("lang")),n}},Pe={name:"path",lookup:function(e){var n;if("undefined"!=typeof window){var t=window.location.pathname.match(/\/([a-zA-Z-]*)/g);if(t instanceof Array)if("number"==typeof e.lookupFromPathIndex){if("string"!=typeof t[e.lookupFromPathIndex])return;n=t[e.lookupFromPathIndex].replace("/","")}else n=t[0].replace("/","")}return n}},Fe={name:"subdomain",lookup:function(e){var n="number"==typeof e.lookupFromSubdomainIndex?e.lookupFromSubdomainIndex+1:1,t="undefined"!=typeof window&&window.location&&window.location.hostname&&window.location.hostname.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(t)return t[n]}};var Ne=function(){function e(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};c(this,e),this.type="languageDetector",this.detectors={},this.init(n,t)}return u(e,[{key:"init",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.services=e||{languageUtils:{}},this.options=function(e){return we.call(ke.call(arguments,1),(function(n){if(n)for(var t in n)void 0===e[t]&&(e[t]=n[t])})),e}(n,this.options||{},{order:["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:function(e){return e}}),"string"==typeof this.options.convertDetectedLanguage&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=function(e){return e.replace("-","_")}),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=t,this.addDetector(Ce),this.addDetector(Ae),this.addDetector(Le),this.addDetector(De),this.addDetector(Oe),this.addDetector(Te),this.addDetector(Pe),this.addDetector(Fe)}},{key:"addDetector",value:function(e){return this.detectors[e.name]=e,this}},{key:"detect",value:function(e){var n=this;e||(e=this.options.order);var t=[];return e.forEach((function(e){if(n.detectors[e]){var i=n.detectors[e].lookup(n.options);i&&"string"==typeof i&&(i=[i]),i&&(t=t.concat(i))}})),t=t.map((function(e){return n.options.convertDetectedLanguage(e)})),this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}},{key:"cacheUserLanguage",value:function(e,n){var t=this;n||(n=this.options.caches),n&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||n.forEach((function(n){t.detectors[n]&&t.detectors[n].cacheUserLanguage(e,t.options)})))}}]),e}();Ne.type="languageDetector";var qe={progressBar:"Progress Complete",fullScreenTrial:{prompt:"Switching to full screen mode.",buttonText:"Go"},instructions:{intro:{header:"Welcome to ROAR Multichoice!",topText:"In this activity, you're going to help me complete some sentences.",bottomText:""},instructions:{header:"What word completes the sentence?",topText:"Choose the best option to fill in the blank.",bottomText:""},practice:{header:"Let's practice!",topText:"Remember, your job is to choose the right word that fills in the blank.",bottomText:""},postPractice:{header:"Great job!",topText:"Now you're ready to try on your own. Try your best to choose the word that completes the sentence.",bottomText:""},practiceCorrect:{header:"That's right!",topText:"",bottomText:""},break1:{header:"Keep up the good work!",topText:"",bottomText:""},break2:{header:"You are doing great!",topText:"",bottomText:""},break3:{header:"Let's keep going.",topText:"",bottomText:""},break4:{header:"You are an expert at this!",topText:"",bottomText:""},break5:{header:"You can do it!",topText:"",bottomText:""},ending:{header:"You're all done! Thank you for helping me find those words!",topText:"",bottomText:""}}};(new Ne).addDetector({name:"defaultToEnglish",lookup:e=>"en"}),be.use(Ne).init({debug:!1,load:"languageOnly",fallbackLng:"en",detection:{order:["defaultToEnglish","querystring"]},resources:{en:{translation:qe}}});var ze=function(){this.__data__=[],this.size=0};var Ve=function(e,n){return e===n||e!=e&&n!=n},Be=Ve;var Ue=function(e,n){for(var t=e.length;t--;)if(Be(e[t][0],n))return t;return-1},He=Ue,We=Array.prototype.splice;var $e=Ue;var Ye=Ue;var Ke=Ue;var Xe=ze,Ge=function(e){var n=this.__data__,t=He(n,e);return!(t<0)&&(t==n.length-1?n.pop():We.call(n,t,1),--this.size,!0)},Je=function(e){var n=this.__data__,t=$e(n,e);return t<0?void 0:n[t][1]},Qe=function(e){return Ye(this.__data__,e)>-1},Ze=function(e,n){var t=this.__data__,i=Ke(t,e);return i<0?(++this.size,t.push([e,n])):t[i][1]=n,this};function en(e){var n=-1,t=null==e?0:e.length;for(this.clear();++n<t;){var i=e[n];this.set(i[0],i[1])}}en.prototype.clear=Xe,en.prototype.delete=Ge,en.prototype.get=Je,en.prototype.has=Qe,en.prototype.set=Ze;var nn=en,tn=nn;var sn=function(){this.__data__=new tn,this.size=0};var an=function(e){var n=this.__data__,t=n.delete(e);return this.size=n.size,t};var on=function(e){return this.__data__.get(e)};var rn=function(e){return this.__data__.has(e)},cn="object"==typeof n&&n&&n.Object===Object&&n,ln=cn,pn="object"==typeof self&&self&&self.Object===Object&&self,un=ln||pn||Function("return this")(),dn=un.Symbol,gn=dn,mn=Object.prototype,vn=mn.hasOwnProperty,hn=mn.toString,fn=gn?gn.toStringTag:void 0;var xn=function(e){var n=vn.call(e,fn),t=e[fn];try{e[fn]=void 0;var i=!0}catch(e){}var s=hn.call(e);return i&&(n?e[fn]=t:delete e[fn]),s},bn=Object.prototype.toString;var yn=xn,wn=function(e){return bn.call(e)},kn=dn?dn.toStringTag:void 0;var Sn=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":kn&&kn in Object(e)?yn(e):wn(e)};var jn=function(e){var n=typeof e;return null!=e&&("object"==n||"function"==n)},_n=Sn,Cn=jn;var An,En=function(e){if(!Cn(e))return!1;var n=_n(e);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n},Rn=un["__core-js_shared__"],Ln=(An=/[^.]+$/.exec(Rn&&Rn.keys&&Rn.keys.IE_PROTO||""))?"Symbol(src)_1."+An:"";var Mn=function(e){return!!Ln&&Ln in e},In=Function.prototype.toString;var Dn=function(e){if(null!=e){try{return In.call(e)}catch(e){}try{return e+""}catch(e){}}return""},On=En,Tn=Mn,Pn=jn,Fn=Dn,Nn=/^\[object .+?Constructor\]$/,qn=Function.prototype,zn=Object.prototype,Vn=qn.toString,Bn=zn.hasOwnProperty,Un=RegExp("^"+Vn.call(Bn).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Hn=function(e){return!(!Pn(e)||Tn(e))&&(On(e)?Un:Nn).test(Fn(e))},Wn=function(e,n){return null==e?void 0:e[n]};var $n=function(e,n){var t=Wn(e,n);return Hn(t)?t:void 0},Yn=$n(un,"Map"),Kn=$n(Object,"create"),Xn=Kn;var Gn=function(){this.__data__=Xn?Xn(null):{},this.size=0};var Jn=function(e){var n=this.has(e)&&delete this.__data__[e];return this.size-=n?1:0,n},Qn=Kn,Zn=Object.prototype.hasOwnProperty;var et=function(e){var n=this.__data__;if(Qn){var t=n[e];return"__lodash_hash_undefined__"===t?void 0:t}return Zn.call(n,e)?n[e]:void 0},nt=Kn,tt=Object.prototype.hasOwnProperty;var it=Kn;var st=Gn,at=Jn,ot=et,rt=function(e){var n=this.__data__;return nt?void 0!==n[e]:tt.call(n,e)},ct=function(e,n){var t=this.__data__;return this.size+=this.has(e)?0:1,t[e]=it&&void 0===n?"__lodash_hash_undefined__":n,this};function lt(e){var n=-1,t=null==e?0:e.length;for(this.clear();++n<t;){var i=e[n];this.set(i[0],i[1])}}lt.prototype.clear=st,lt.prototype.delete=at,lt.prototype.get=ot,lt.prototype.has=rt,lt.prototype.set=ct;var pt=lt,ut=nn,dt=Yn;var gt=function(e){var n=typeof e;return"string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==e:null===e};var mt=function(e,n){var t=e.__data__;return gt(n)?t["string"==typeof n?"string":"hash"]:t.map},vt=mt;var ht=mt;var ft=mt;var xt=mt;var bt=function(){this.size=0,this.__data__={hash:new pt,map:new(dt||ut),string:new pt}},yt=function(e){var n=vt(this,e).delete(e);return this.size-=n?1:0,n},wt=function(e){return ht(this,e).get(e)},kt=function(e){return ft(this,e).has(e)},St=function(e,n){var t=xt(this,e),i=t.size;return t.set(e,n),this.size+=t.size==i?0:1,this};function jt(e){var n=-1,t=null==e?0:e.length;for(this.clear();++n<t;){var i=e[n];this.set(i[0],i[1])}}jt.prototype.clear=bt,jt.prototype.delete=yt,jt.prototype.get=wt,jt.prototype.has=kt,jt.prototype.set=St;var _t=jt,Ct=nn,At=Yn,Et=_t;var Rt=nn,Lt=sn,Mt=an,It=on,Dt=rn,Ot=function(e,n){var t=this.__data__;if(t instanceof Ct){var i=t.__data__;if(!At||i.length<199)return i.push([e,n]),this.size=++t.size,this;t=this.__data__=new Et(i)}return t.set(e,n),this.size=t.size,this};function Tt(e){var n=this.__data__=new Rt(e);this.size=n.size}Tt.prototype.clear=Lt,Tt.prototype.delete=Mt,Tt.prototype.get=It,Tt.prototype.has=Dt,Tt.prototype.set=Ot;var Pt=Tt;var Ft=_t,Nt=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},qt=function(e){return this.__data__.has(e)};function zt(e){var n=-1,t=null==e?0:e.length;for(this.__data__=new Ft;++n<t;)this.add(e[n])}zt.prototype.add=zt.prototype.push=Nt,zt.prototype.has=qt;var Vt=zt,Bt=function(e,n){for(var t=-1,i=null==e?0:e.length;++t<i;)if(n(e[t],t,e))return!0;return!1},Ut=function(e,n){return e.has(n)};var Ht=function(e,n,t,i,s,a){var o=1&t,r=e.length,c=n.length;if(r!=c&&!(o&&c>r))return!1;var l=a.get(e),p=a.get(n);if(l&&p)return l==n&&p==e;var u=-1,d=!0,g=2&t?new Vt:void 0;for(a.set(e,n),a.set(n,e);++u<r;){var m=e[u],v=n[u];if(i)var h=o?i(v,m,u,n,e,a):i(m,v,u,e,n,a);if(void 0!==h){if(h)continue;d=!1;break}if(g){if(!Bt(n,(function(e,n){if(!Ut(g,n)&&(m===e||s(m,e,t,i,a)))return g.push(n)}))){d=!1;break}}else if(m!==v&&!s(m,v,t,i,a)){d=!1;break}}return a.delete(e),a.delete(n),d};var Wt=un.Uint8Array,$t=Ve,Yt=Ht,Kt=function(e){var n=-1,t=Array(e.size);return e.forEach((function(e,i){t[++n]=[i,e]})),t},Xt=function(e){var n=-1,t=Array(e.size);return e.forEach((function(e){t[++n]=e})),t},Gt=dn?dn.prototype:void 0,Jt=Gt?Gt.valueOf:void 0;var Qt=function(e,n,t,i,s,a,o){switch(t){case"[object DataView]":if(e.byteLength!=n.byteLength||e.byteOffset!=n.byteOffset)return!1;e=e.buffer,n=n.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=n.byteLength||!a(new Wt(e),new Wt(n)));case"[object Boolean]":case"[object Date]":case"[object Number]":return $t(+e,+n);case"[object Error]":return e.name==n.name&&e.message==n.message;case"[object RegExp]":case"[object String]":return e==n+"";case"[object Map]":var r=Kt;case"[object Set]":var c=1&i;if(r||(r=Xt),e.size!=n.size&&!c)return!1;var l=o.get(e);if(l)return l==n;i|=2,o.set(e,n);var p=Yt(r(e),r(n),i,s,a,o);return o.delete(e),p;case"[object Symbol]":if(Jt)return Jt.call(e)==Jt.call(n)}return!1};var Zt=function(e,n){for(var t=-1,i=n.length,s=e.length;++t<i;)e[s+t]=n[t];return e},ei=Array.isArray,ni=Zt,ti=ei;var ii=function(e,n,t){var i=n(e);return ti(e)?i:ni(i,t(e))};var si=function(){return[]},ai=function(e,n){for(var t=-1,i=null==e?0:e.length,s=0,a=[];++t<i;){var o=e[t];n(o,t,e)&&(a[s++]=o)}return a},oi=si,ri=Object.prototype.propertyIsEnumerable,ci=Object.getOwnPropertySymbols,li=ci?function(e){return null==e?[]:(e=Object(e),ai(ci(e),(function(n){return ri.call(e,n)})))}:oi;var pi=function(e,n){for(var t=-1,i=Array(e);++t<e;)i[t]=n(t);return i};var ui=function(e){return null!=e&&"object"==typeof e},di=Sn,gi=ui;var mi=function(e){return gi(e)&&"[object Arguments]"==di(e)},vi=ui,hi=Object.prototype,fi=hi.hasOwnProperty,xi=hi.propertyIsEnumerable,bi=mi(function(){return arguments}())?mi:function(e){return vi(e)&&fi.call(e,"callee")&&!xi.call(e,"callee")},yi={exports:{}};var wi=function(){return!1};!function(e,n){var t=un,i=wi,s=n&&!n.nodeType&&n,a=s&&e&&!e.nodeType&&e,o=a&&a.exports===s?t.Buffer:void 0,r=(o?o.isBuffer:void 0)||i;e.exports=r}(yi,yi.exports);var ki=yi.exports,Si=/^(?:0|[1-9]\d*)$/;var ji=function(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Si.test(e))&&e>-1&&e%1==0&&e<n};var _i=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},Ci=Sn,Ai=_i,Ei=ui,Ri={};Ri["[object Float32Array]"]=Ri["[object Float64Array]"]=Ri["[object Int8Array]"]=Ri["[object Int16Array]"]=Ri["[object Int32Array]"]=Ri["[object Uint8Array]"]=Ri["[object Uint8ClampedArray]"]=Ri["[object Uint16Array]"]=Ri["[object Uint32Array]"]=!0,Ri["[object Arguments]"]=Ri["[object Array]"]=Ri["[object ArrayBuffer]"]=Ri["[object Boolean]"]=Ri["[object DataView]"]=Ri["[object Date]"]=Ri["[object Error]"]=Ri["[object Function]"]=Ri["[object Map]"]=Ri["[object Number]"]=Ri["[object Object]"]=Ri["[object RegExp]"]=Ri["[object Set]"]=Ri["[object String]"]=Ri["[object WeakMap]"]=!1;var Li=function(e){return Ei(e)&&Ai(e.length)&&!!Ri[Ci(e)]};var Mi=function(e){return function(n){return e(n)}},Ii={exports:{}};!function(e,n){var t=cn,i=n&&!n.nodeType&&n,s=i&&e&&!e.nodeType&&e,a=s&&s.exports===i&&t.process,o=function(){try{var e=s&&s.require&&s.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=o}(Ii,Ii.exports);var Di=Ii.exports,Oi=Li,Ti=Mi,Pi=Di&&Di.isTypedArray,Fi=Pi?Ti(Pi):Oi,Ni=pi,qi=bi,zi=ei,Vi=ki,Bi=ji,Ui=Fi,Hi=Object.prototype.hasOwnProperty;var Wi=function(e,n){var t=zi(e),i=!t&&qi(e),s=!t&&!i&&Vi(e),a=!t&&!i&&!s&&Ui(e),o=t||i||s||a,r=o?Ni(e.length,String):[],c=r.length;for(var l in e)!n&&!Hi.call(e,l)||o&&("length"==l||s&&("offset"==l||"parent"==l)||a&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||Bi(l,c))||r.push(l);return r},$i=Object.prototype;var Yi=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||$i)};var Ki=function(e,n){return function(t){return e(n(t))}},Xi=Ki(Object.keys,Object),Gi=Yi,Ji=Xi,Qi=Object.prototype.hasOwnProperty;var Zi=En,es=_i;var ns=function(e){return null!=e&&es(e.length)&&!Zi(e)},ts=Wi,is=function(e){if(!Gi(e))return Ji(e);var n=[];for(var t in Object(e))Qi.call(e,t)&&"constructor"!=t&&n.push(t);return n},ss=ns;var as=function(e){return ss(e)?ts(e):is(e)},os=ii,rs=li,cs=as;var ls=function(e){return os(e,cs,rs)},ps=Object.prototype.hasOwnProperty;var us=function(e,n,t,i,s,a){var o=1&t,r=ls(e),c=r.length;if(c!=ls(n).length&&!o)return!1;for(var l=c;l--;){var p=r[l];if(!(o?p in n:ps.call(n,p)))return!1}var u=a.get(e),d=a.get(n);if(u&&d)return u==n&&d==e;var g=!0;a.set(e,n),a.set(n,e);for(var m=o;++l<c;){var v=e[p=r[l]],h=n[p];if(i)var f=o?i(h,v,p,n,e,a):i(v,h,p,e,n,a);if(!(void 0===f?v===h||s(v,h,t,i,a):f)){g=!1;break}m||(m="constructor"==p)}if(g&&!m){var x=e.constructor,b=n.constructor;x==b||!("constructor"in e)||!("constructor"in n)||"function"==typeof x&&x instanceof x&&"function"==typeof b&&b instanceof b||(g=!1)}return a.delete(e),a.delete(n),g},ds=$n(un,"DataView"),gs=Yn,ms=$n(un,"Promise"),vs=$n(un,"Set"),hs=$n(un,"WeakMap"),fs=Sn,xs=Dn,bs="[object Map]",ys="[object Promise]",ws="[object Set]",ks="[object WeakMap]",Ss="[object DataView]",js=xs(ds),_s=xs(gs),Cs=xs(ms),As=xs(vs),Es=xs(hs),Rs=fs;(ds&&Rs(new ds(new ArrayBuffer(1)))!=Ss||gs&&Rs(new gs)!=bs||ms&&Rs(ms.resolve())!=ys||vs&&Rs(new vs)!=ws||hs&&Rs(new hs)!=ks)&&(Rs=function(e){var n=fs(e),t="[object Object]"==n?e.constructor:void 0,i=t?xs(t):"";if(i)switch(i){case js:return Ss;case _s:return bs;case Cs:return ys;case As:return ws;case Es:return ks}return n});var Ls=Pt,Ms=Ht,Is=Qt,Ds=us,Os=Rs,Ts=ei,Ps=ki,Fs=Fi,Ns="[object Arguments]",qs="[object Array]",zs="[object Object]",Vs=Object.prototype.hasOwnProperty;var Bs=function(e,n,t,i,s,a){var o=Ts(e),r=Ts(n),c=o?qs:Os(e),l=r?qs:Os(n),p=(c=c==Ns?zs:c)==zs,u=(l=l==Ns?zs:l)==zs,d=c==l;if(d&&Ps(e)){if(!Ps(n))return!1;o=!0,p=!1}if(d&&!p)return a||(a=new Ls),o||Fs(e)?Ms(e,n,t,i,s,a):Is(e,n,c,t,i,s,a);if(!(1&t)){var g=p&&Vs.call(e,"__wrapped__"),m=u&&Vs.call(n,"__wrapped__");if(g||m){var v=g?e.value():e,h=m?n.value():n;return a||(a=new Ls),s(v,h,t,i,a)}}return!!d&&(a||(a=new Ls),Ds(e,n,t,i,s,a))},Us=ui;var Hs=function e(n,t,i,s,a){return n===t||(null==n||null==t||!Us(n)&&!Us(t)?n!=n&&t!=t:Bs(n,t,i,s,e,a))},Ws=Pt,$s=Hs;var Ys=jn;var Ks=function(e){return e==e&&!Ys(e)},Xs=Ks,Gs=as;var Js=function(e,n){return function(t){return null!=t&&(t[e]===n&&(void 0!==n||e in Object(t)))}},Qs=function(e,n,t,i){var s=t.length,a=s,o=!i;if(null==e)return!a;for(e=Object(e);s--;){var r=t[s];if(o&&r[2]?r[1]!==e[r[0]]:!(r[0]in e))return!1}for(;++s<a;){var c=(r=t[s])[0],l=e[c],p=r[1];if(o&&r[2]){if(void 0===l&&!(c in e))return!1}else{var u=new Ws;if(i)var d=i(l,p,c,e,n,u);if(!(void 0===d?$s(p,l,3,i,u):d))return!1}}return!0},Zs=function(e){for(var n=Gs(e),t=n.length;t--;){var i=n[t],s=e[i];n[t]=[i,s,Xs(s)]}return n},ea=Js;var na=function(e){var n=Zs(e);return 1==n.length&&n[0][2]?ea(n[0][0],n[0][1]):function(t){return t===e||Qs(t,e,n)}},ta=Sn,ia=ui;var sa=function(e){return"symbol"==typeof e||ia(e)&&"[object Symbol]"==ta(e)},aa=ei,oa=sa,ra=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ca=/^\w*$/;var la=function(e,n){if(aa(e))return!1;var t=typeof e;return!("number"!=t&&"symbol"!=t&&"boolean"!=t&&null!=e&&!oa(e))||(ca.test(e)||!ra.test(e)||null!=n&&e in Object(n))},pa=_t;function ua(e,n){if("function"!=typeof e||null!=n&&"function"!=typeof n)throw new TypeError("Expected a function");var t=function(){var i=arguments,s=n?n.apply(this,i):i[0],a=t.cache;if(a.has(s))return a.get(s);var o=e.apply(this,i);return t.cache=a.set(s,o)||a,o};return t.cache=new(ua.Cache||pa),t}ua.Cache=pa;var da=ua;var ga=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ma=/\\(\\)?/g,va=function(e){var n=da(e,(function(e){return 500===t.size&&t.clear(),e})),t=n.cache;return n}((function(e){var n=[];return 46===e.charCodeAt(0)&&n.push(""),e.replace(ga,(function(e,t,i,s){n.push(i?s.replace(ma,"$1"):t||e)})),n}));var ha=function(e,n){for(var t=-1,i=null==e?0:e.length,s=Array(i);++t<i;)s[t]=n(e[t],t,e);return s},fa=ha,xa=ei,ba=sa,ya=dn?dn.prototype:void 0,wa=ya?ya.toString:void 0;var ka=function e(n){if("string"==typeof n)return n;if(xa(n))return fa(n,e)+"";if(ba(n))return wa?wa.call(n):"";var t=n+"";return"0"==t&&1/n==-1/0?"-0":t},Sa=ka;var ja=ei,_a=la,Ca=va,Aa=function(e){return null==e?"":Sa(e)};var Ea=function(e,n){return ja(e)?e:_a(e,n)?[e]:Ca(Aa(e))},Ra=sa;var La=function(e){if("string"==typeof e||Ra(e))return e;var n=e+"";return"0"==n&&1/e==-1/0?"-0":n},Ma=Ea,Ia=La;var Da=function(e,n){for(var t=0,i=(n=Ma(n,e)).length;null!=e&&t<i;)e=e[Ia(n[t++])];return t&&t==i?e:void 0},Oa=Da;var Ta=function(e,n,t){var i=null==e?void 0:Oa(e,n);return void 0===i?t:i};var Pa=Ea,Fa=bi,Na=ei,qa=ji,za=_i,Va=La;var Ba=function(e,n,t){for(var i=-1,s=(n=Pa(n,e)).length,a=!1;++i<s;){var o=Va(n[i]);if(!(a=null!=e&&t(e,o)))break;e=e[o]}return a||++i!=s?a:!!(s=null==e?0:e.length)&&za(s)&&qa(o,s)&&(Na(e)||Fa(e))},Ua=function(e,n){return null!=e&&n in Object(e)},Ha=Ba;var Wa=function(e,n){return null!=e&&Ha(e,n,Ua)},$a=Hs,Ya=Ta,Ka=Wa,Xa=la,Ga=Ks,Ja=Js,Qa=La;var Za=function(e,n){return Xa(e)&&Ga(n)?Ja(Qa(e),n):function(t){var i=Ya(t,e);return void 0===i&&i===n?Ka(t,e):$a(n,i,3)}};var eo=Da;var no=function(e){return function(n){return eo(n,e)}},to=function(e){return function(n){return null==n?void 0:n[e]}},io=no,so=la,ao=La;var oo=function(e){return so(e)?to(ao(e)):io(e)},ro=na,co=Za,lo=function(e){return e},po=ei,uo=oo;var go=function(e){return"function"==typeof e?e:null==e?lo:"object"==typeof e?po(e)?co(e[0],e[1]):ro(e):uo(e)};var mo=function(e){if("function"!=typeof e)throw new TypeError("Expected a function");return function(){var n=arguments;switch(n.length){case 0:return!e.call(this);case 1:return!e.call(this,n[0]);case 2:return!e.call(this,n[0],n[1]);case 3:return!e.call(this,n[0],n[1],n[2])}return!e.apply(this,n)}},vo=$n,ho=function(){try{var e=vo(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();var fo=function(e,n,t){"__proto__"==n&&ho?ho(e,n,{configurable:!0,enumerable:!0,value:t,writable:!0}):e[n]=t},xo=Ve,bo=Object.prototype.hasOwnProperty;var yo=function(e,n,t){var i=e[n];bo.call(e,n)&&xo(i,t)&&(void 0!==t||n in e)||fo(e,n,t)},wo=Ea,ko=ji,So=jn,jo=La;var _o=function(e,n,t,i){if(!So(e))return e;for(var s=-1,a=(n=wo(n,e)).length,o=a-1,r=e;null!=r&&++s<a;){var c=jo(n[s]),l=t;if("__proto__"===c||"constructor"===c||"prototype"===c)return e;if(s!=o){var p=r[c];void 0===(l=i?i(p,c,r):void 0)&&(l=So(p)?p:ko(n[s+1])?[]:{})}yo(r,c,l),r=r[c]}return e},Co=Da,Ao=_o,Eo=Ea;var Ro=function(e,n,t){for(var i=-1,s=n.length,a={};++i<s;){var o=n[i],r=Co(e,o);t(r,o)&&Ao(a,Eo(o,e),r)}return a},Lo=Ki(Object.getPrototypeOf,Object),Mo=Zt,Io=Lo,Do=li,Oo=si,To=Object.getOwnPropertySymbols?function(e){for(var n=[];e;)Mo(n,Do(e)),e=Io(e);return n}:Oo;var Po=jn,Fo=Yi,No=function(e){var n=[];if(null!=e)for(var t in Object(e))n.push(t);return n},qo=Object.prototype.hasOwnProperty;var zo=Wi,Vo=function(e){if(!Po(e))return No(e);var n=Fo(e),t=[];for(var i in e)("constructor"!=i||!n&&qo.call(e,i))&&t.push(i);return t},Bo=ns;var Uo=ii,Ho=To,Wo=function(e){return Bo(e)?zo(e,!0):Vo(e)};var $o=ha,Yo=go,Ko=Ro,Xo=function(e){return Uo(e,Wo,Ho)};var Go=function(e,n){if(null==e)return{};var t=$o(Xo(e),(function(e){return[e]}));return n=Yo(n),Ko(e,t,(function(e,t){return n(e,t[0])}))},Jo=go,Qo=mo,Zo=Go;var er=t((function(e,n){return Zo(e,Qo(Jo(n)))}));var nr=t((function(e){return null===e}));var tr=t((function(e){return void 0===e}));function ir(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function sr(e,n){for(var t,i="",s=0,a=-1,o=0,r=0;r<=e.length;++r){if(r<e.length)t=e.charCodeAt(r);else{if(47===t)break;t=47}if(47===t){if(a===r-1||1===o);else if(a!==r-1&&2===o){if(i.length<2||2!==s||46!==i.charCodeAt(i.length-1)||46!==i.charCodeAt(i.length-2))if(i.length>2){var c=i.lastIndexOf("/");if(c!==i.length-1){-1===c?(i="",s=0):s=(i=i.slice(0,c)).length-1-i.lastIndexOf("/"),a=r,o=0;continue}}else if(2===i.length||1===i.length){i="",s=0,a=r,o=0;continue}n&&(i.length>0?i+="/..":i="..",s=2)}else i.length>0?i+="/"+e.slice(a+1,r):i=e.slice(a+1,r),s=r-a-1;a=r,o=0}else 46===t&&-1!==o?++o:o=-1}return i}var ar={resolve:function(){for(var e,n="",t=!1,i=arguments.length-1;i>=-1&&!t;i--){var s;i>=0?s=arguments[i]:(void 0===e&&(e=process.cwd()),s=e),ir(s),0!==s.length&&(n=s+"/"+n,t=47===s.charCodeAt(0))}return n=sr(n,!t),t?n.length>0?"/"+n:"/":n.length>0?n:"."},normalize:function(e){if(ir(e),0===e.length)return".";var n=47===e.charCodeAt(0),t=47===e.charCodeAt(e.length-1);return 0!==(e=sr(e,!n)).length||n||(e="."),e.length>0&&t&&(e+="/"),n?"/"+e:e},isAbsolute:function(e){return ir(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,n=0;n<arguments.length;++n){var t=arguments[n];ir(t),t.length>0&&(void 0===e?e=t:e+="/"+t)}return void 0===e?".":ar.normalize(e)},relative:function(e,n){if(ir(e),ir(n),e===n)return"";if((e=ar.resolve(e))===(n=ar.resolve(n)))return"";for(var t=1;t<e.length&&47===e.charCodeAt(t);++t);for(var i=e.length,s=i-t,a=1;a<n.length&&47===n.charCodeAt(a);++a);for(var o=n.length-a,r=s<o?s:o,c=-1,l=0;l<=r;++l){if(l===r){if(o>r){if(47===n.charCodeAt(a+l))return n.slice(a+l+1);if(0===l)return n.slice(a+l)}else s>r&&(47===e.charCodeAt(t+l)?c=l:0===l&&(c=0));break}var p=e.charCodeAt(t+l);if(p!==n.charCodeAt(a+l))break;47===p&&(c=l)}var u="";for(l=t+c+1;l<=i;++l)l!==i&&47!==e.charCodeAt(l)||(0===u.length?u+="..":u+="/..");return u.length>0?u+n.slice(a+c):(a+=c,47===n.charCodeAt(a)&&++a,n.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(ir(e),0===e.length)return".";for(var n=e.charCodeAt(0),t=47===n,i=-1,s=!0,a=e.length-1;a>=1;--a)if(47===(n=e.charCodeAt(a))){if(!s){i=a;break}}else s=!1;return-1===i?t?"/":".":t&&1===i?"//":e.slice(0,i)},basename:function(e,n){if(void 0!==n&&"string"!=typeof n)throw new TypeError('"ext" argument must be a string');ir(e);var t,i=0,s=-1,a=!0;if(void 0!==n&&n.length>0&&n.length<=e.length){if(n.length===e.length&&n===e)return"";var o=n.length-1,r=-1;for(t=e.length-1;t>=0;--t){var c=e.charCodeAt(t);if(47===c){if(!a){i=t+1;break}}else-1===r&&(a=!1,r=t+1),o>=0&&(c===n.charCodeAt(o)?-1==--o&&(s=t):(o=-1,s=r))}return i===s?s=r:-1===s&&(s=e.length),e.slice(i,s)}for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!a){i=t+1;break}}else-1===s&&(a=!1,s=t+1);return-1===s?"":e.slice(i,s)},extname:function(e){ir(e);for(var n=-1,t=0,i=-1,s=!0,a=0,o=e.length-1;o>=0;--o){var r=e.charCodeAt(o);if(47!==r)-1===i&&(s=!1,i=o+1),46===r?-1===n?n=o:1!==a&&(a=1):-1!==n&&(a=-1);else if(!s){t=o+1;break}}return-1===n||-1===i||0===a||1===a&&n===i-1&&n===t+1?"":e.slice(n,i)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,n){var t=n.dir||n.root,i=n.base||(n.name||"")+(n.ext||"");return t?t===n.root?t+i:t+e+i:i}("/",e)},parse:function(e){ir(e);var n={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return n;var t,i=e.charCodeAt(0),s=47===i;s?(n.root="/",t=1):t=0;for(var a=-1,o=0,r=-1,c=!0,l=e.length-1,p=0;l>=t;--l)if(47!==(i=e.charCodeAt(l)))-1===r&&(c=!1,r=l+1),46===i?-1===a?a=l:1!==p&&(p=1):-1!==a&&(p=-1);else if(!c){o=l+1;break}return-1===a||-1===r||0===p||1===p&&a===r-1&&a===o+1?-1!==r&&(n.base=n.name=0===o&&s?e.slice(1,r):e.slice(o,r)):(0===o&&s?(n.name=e.slice(1,a),n.base=e.slice(1,r)):(n.name=e.slice(o,a),n.base=e.slice(o,r)),n.ext=e.slice(a,r)),o>0?n.dir=e.slice(0,o-1):s&&(n.dir="/"),n},sep:"/",delimiter:":",win32:null,posix:null};ar.posix=ar;var or={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana"},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/ecmascript":{source:"iana",compressible:!0,extensions:["es","ecma"]},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"apache",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/load-control+xml":{source:"iana",compressible:!0},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!1,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["asc","sig"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"iana"},"application/reputon+json":{source:"iana",compressible:!0},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"iana"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana"},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/stix+json":{source:"iana",compressible:!0},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"iana",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"iana"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"iana"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"iana",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{source:"iana",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"iana",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.geo+json":{source:"iana",compressible:!0},"application/vnd.geocube+xml":{source:"iana",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.slides":{source:"iana"},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"iana",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hl7cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"iana"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"iana",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"iana"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"iana",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"iana",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.youtube.yt":{source:"iana"},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana"},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"iana"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/hsj2":{source:"iana",extensions:["hsj2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpeg","jpg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"apache",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/news":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime"]},"message/s-http":{source:"iana"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"iana"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/step":{source:"iana"},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana"},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"iana"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",compressible:!0},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["markdown","md"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"iana"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"iana"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}};
|
|
4
4
|
/*!
|
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
8
8
|
* MIT Licensed
|
|
9
9
|
*/
|
|
10
|
-
!function(n){var t,i,s,a=or,o=e.extname,r=/^\s*([^;\s]*)(?:;|\s|$)/,c=/^text\//i;function l(e){if(!e||"string"!=typeof e)return!1;var n=r.exec(e),t=n&&a[n[1].toLowerCase()];return t&&t.charset?t.charset:!(!n||!c.test(n[1]))&&"UTF-8"}n.charset=l,n.charsets={lookup:l},n.contentType=function(e){if(!e||"string"!=typeof e)return!1;var t=-1===e.indexOf("/")?n.lookup(e):e;if(!t)return!1;if(-1===t.indexOf("charset")){var i=n.charset(t);i&&(t+="; charset="+i.toLowerCase())}return t},n.extension=function(e){if(!e||"string"!=typeof e)return!1;var t=r.exec(e),i=t&&n.extensions[t[1].toLowerCase()];if(!i||!i.length)return!1;return i[0]},n.extensions=Object.create(null),n.lookup=function(e){if(!e||"string"!=typeof e)return!1;var t=o("x."+e).toLowerCase().substr(1);if(!t)return!1;return n.types[t]||!1},n.types=Object.create(null),t=n.extensions,i=n.types,s=["nginx","apache",void 0,"iana"],Object.keys(a).forEach((function(e){var n=a[e],o=n.extensions;if(o&&o.length){t[e]=o;for(var r=0;r<o.length;r++){var c=o[r];if(i[c]){var l=s.indexOf(a[i[c]].source),p=s.indexOf(n.source);if("application/octet-stream"!==i[c]&&(l>p||l===p&&"application/"===i[c].substr(0,12)))continue}i[c]=e}}}))}({});"function"==typeof SuppressedError&&SuppressedError;var rr,cr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};class lr extends Error{constructor(e="The global `jsPsych` variable is no longer available in jsPsych v7."){super(`${e} Please follow the migration guide at https://www.jspsych.org/7.0/support/migration-v7/ to update your experiment.`),this.name="MigrationError"}}window.jsPsych={get init(){throw new lr("`jsPsych.init()` was replaced by `initJsPsych()` in jsPsych v7.")},get data(){throw new lr},get randomization(){throw new lr},get turk(){throw new lr},get pluginAPI(){throw new lr},get ALL_KEYS(){throw new lr('jsPsych.ALL_KEYS was replaced by the "ALL_KEYS" string in jsPsych v7.')},get NO_KEYS(){throw new lr('jsPsych.NO_KEYS was replaced by the "NO_KEYS" string in jsPsych v7.')}},function(e){e[e.BOOL=0]="BOOL",e[e.STRING=1]="STRING",e[e.INT=2]="INT",e[e.FLOAT=3]="FLOAT",e[e.FUNCTION=4]="FUNCTION",e[e.KEY=5]="KEY",e[e.KEYS=6]="KEYS",e[e.SELECT=7]="SELECT",e[e.HTML_STRING=8]="HTML_STRING",e[e.IMAGE=9]="IMAGE",e[e.AUDIO=10]="AUDIO",e[e.VIDEO=11]="VIDEO",e[e.OBJECT=12]="OBJECT",e[e.COMPLEX=13]="COMPLEX",e[e.TIMELINE=14]="TIMELINE"}(rr||(rr={})),rr.OBJECT,rr.FUNCTION,rr.FUNCTION,rr.FUNCTION,rr.INT,rr.STRING,rr.COMPLEX,rr.AUDIO,rr.IMAGE,rr.VIDEO;var pr={exports:{}};!function(e,n,t){function i(e){var n=this,t=function(){var e=4022871197,n=function(n){n=String(n);for(var t=0;t<n.length;t++){var i=.02519603282416938*(e+=n.charCodeAt(t));i-=e=i>>>0,e=(i*=e)>>>0,e+=4294967296*(i-=e)}return 2.3283064365386963e-10*(e>>>0)};return n}();n.next=function(){var e=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=e-(n.c=0|e)},n.c=1,n.s0=t(" "),n.s1=t(" "),n.s2=t(" "),n.s0-=t(e),n.s0<0&&(n.s0+=1),n.s1-=t(e),n.s1<0&&(n.s1+=1),n.s2-=t(e),n.s2<0&&(n.s2+=1),t=null}function s(e,n){return n.c=e.c,n.s0=e.s0,n.s1=e.s1,n.s2=e.s2,n}function a(e,n){var t=new i(e),a=n&&n.state,o=t.next;return o.int32=function(){return 4294967296*t.next()|0},o.double=function(){return o()+11102230246251565e-32*(2097152*o()|0)},o.quick=o,a&&("object"==typeof a&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.alea=a}(0,pr,!1);var ur=pr.exports,dr={exports:{}};!function(e,n,t){function i(e){var n=this,t="";n.x=0,n.y=0,n.z=0,n.w=0,n.next=function(){var e=n.x^n.x<<11;return n.x=n.y,n.y=n.z,n.z=n.w,n.w^=n.w>>>19^e^e>>>8},e===(0|e)?n.x=e:t+=e;for(var i=0;i<t.length+64;i++)n.x^=0|t.charCodeAt(i),n.next()}function s(e,n){return n.x=e.x,n.y=e.y,n.z=e.z,n.w=e.w,n}function a(e,n){var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&("object"==typeof a&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.xor128=a}(0,dr,!1);var gr=dr.exports,mr={exports:{}};!function(e,n,t){function i(e){var n=this,t="";n.next=function(){var e=n.x^n.x>>>2;return n.x=n.y,n.y=n.z,n.z=n.w,n.w=n.v,(n.d=n.d+362437|0)+(n.v=n.v^n.v<<4^e^e<<1)|0},n.x=0,n.y=0,n.z=0,n.w=0,n.v=0,e===(0|e)?n.x=e:t+=e;for(var i=0;i<t.length+64;i++)n.x^=0|t.charCodeAt(i),i==t.length&&(n.d=n.x<<10^n.x>>>4),n.next()}function s(e,n){return n.x=e.x,n.y=e.y,n.z=e.z,n.w=e.w,n.v=e.v,n.d=e.d,n}function a(e,n){var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&("object"==typeof a&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.xorwow=a}(0,mr,!1);var vr=mr.exports,hr={exports:{}};!function(e,n,t){function i(e){var n=this;n.next=function(){var e,t,i=n.x,s=n.i;return e=i[s],t=(e^=e>>>7)^e<<24,t^=(e=i[s+1&7])^e>>>10,t^=(e=i[s+3&7])^e>>>3,t^=(e=i[s+4&7])^e<<7,e=i[s+7&7],t^=(e^=e<<13)^e<<9,i[s]=t,n.i=s+1&7,t},function(e,n){var t,i=[];if(n===(0|n))i[0]=n;else for(n=""+n,t=0;t<n.length;++t)i[7&t]=i[7&t]<<15^n.charCodeAt(t)+i[t+1&7]<<13;for(;i.length<8;)i.push(0);for(t=0;t<8&&0===i[t];++t);for(8==t?i[7]=-1:i[t],e.x=i,e.i=0,t=256;t>0;--t)e.next()}(n,e)}function s(e,n){return n.x=e.x.slice(),n.i=e.i,n}function a(e,n){null==e&&(e=+new Date);var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&(a.x&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.xorshift7=a}(0,hr,!1);var fr=hr.exports,xr={exports:{}};!function(e,n,t){function i(e){var n=this;n.next=function(){var e,t,i=n.w,s=n.X,a=n.i;return n.w=i=i+1640531527|0,t=s[a+34&127],e=s[a=a+1&127],t^=t<<13,e^=e<<17,t^=t>>>15,e^=e>>>12,t=s[a]=t^e,n.i=a,t+(i^i>>>16)|0},function(e,n){var t,i,s,a,o,r=[],c=128;for(n===(0|n)?(i=n,n=null):(n+="\0",i=0,c=Math.max(c,n.length)),s=0,a=-32;a<c;++a)n&&(i^=n.charCodeAt((a+32)%n.length)),0===a&&(o=i),i^=i<<10,i^=i>>>15,i^=i<<4,i^=i>>>13,a>=0&&(o=o+1640531527|0,s=0==(t=r[127&a]^=i+o)?s+1:0);for(s>=128&&(r[127&(n&&n.length||0)]=-1),s=127,a=512;a>0;--a)i=r[s+34&127],t=r[s=s+1&127],i^=i<<13,t^=t<<17,i^=i>>>15,t^=t>>>12,r[s]=i^t;e.w=o,e.X=r,e.i=s}(n,e)}function s(e,n){return n.i=e.i,n.w=e.w,n.X=e.X.slice(),n}function a(e,n){null==e&&(e=+new Date);var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&(a.X&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.xor4096=a}(0,xr,!1);var br=xr.exports,yr={exports:{}};!function(e,n,t){function i(e){var n=this,t="";n.next=function(){var e=n.b,t=n.c,i=n.d,s=n.a;return e=e<<25^e>>>7^t,t=t-i|0,i=i<<24^i>>>8^s,s=s-e|0,n.b=e=e<<20^e>>>12^t,n.c=t=t-i|0,n.d=i<<16^t>>>16^s,n.a=s-e|0},n.a=0,n.b=0,n.c=-1640531527,n.d=1367130551,e===Math.floor(e)?(n.a=e/4294967296|0,n.b=0|e):t+=e;for(var i=0;i<t.length+20;i++)n.b^=0|t.charCodeAt(i),n.next()}function s(e,n){return n.a=e.a,n.b=e.b,n.c=e.c,n.d=e.d,n}function a(e,n){var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&("object"==typeof a&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.tychei=a}(0,yr,!1);var wr=yr.exports,kr={exports:{}};!function(e){!function(n,t,i){var s,a=256,o="random",r=i.pow(a,6),c=i.pow(2,52),l=2*c,p=a-1;function u(e,p,u){var f=[],x=v(m((p=1==p?{entropy:!0}:p||{}).entropy?[e,h(t)]:null==e?function(){try{var e;return s&&(e=s.randomBytes)?e=e(a):(e=new Uint8Array(a),(n.crypto||n.msCrypto).getRandomValues(e)),h(e)}catch(e){var i=n.navigator,o=i&&i.plugins;return[+new Date,n,o,n.screen,h(t)]}}():e,3),f),b=new d(f),y=function(){for(var e=b.g(6),n=r,t=0;e<c;)e=(e+t)*a,n*=a,t=b.g(1);for(;e>=l;)e/=2,n/=2,t>>>=1;return(e+t)/n};return y.int32=function(){return 0|b.g(4)},y.quick=function(){return b.g(4)/4294967296},y.double=y,v(h(b.S),t),(p.pass||u||function(e,n,t,s){return s&&(s.S&&g(s,b),e.state=function(){return g(b,{})}),t?(i[o]=e,n):e})(y,x,"global"in p?p.global:this==i,p.state)}function d(e){var n,t=e.length,i=this,s=0,o=i.i=i.j=0,r=i.S=[];for(t||(e=[t++]);s<a;)r[s]=s++;for(s=0;s<a;s++)r[s]=r[o=p&o+e[s%t]+(n=r[s])],r[o]=n;(i.g=function(e){for(var n,t=0,s=i.i,o=i.j,r=i.S;e--;)n=r[s=p&s+1],t=t*a+r[p&(r[s]=r[o=p&o+n])+(r[o]=n)];return i.i=s,i.j=o,t})(a)}function g(e,n){return n.i=e.i,n.j=e.j,n.S=e.S.slice(),n}function m(e,n){var t,i=[],s=typeof e;if(n&&"object"==s)for(t in e)try{i.push(m(e[t],n-1))}catch(e){}return i.length?i:"string"==s?e:e+"\0"}function v(e,n){for(var t,i=e+"",s=0;s<i.length;)n[p&s]=p&(t^=19*n[p&s])+i.charCodeAt(s++);return h(n)}function h(e){return String.fromCharCode.apply(0,e)}if(v(i.random(),t),e.exports){e.exports=u;try{s=require("crypto")}catch(e){}}else i["seed"+o]=u}("undefined"!=typeof self?self:cr,[],Math)}(kr);var Sr=ur,jr=gr,_r=vr,Cr=fr,Ar=br,Er=wr,Rr=kr.exports;Rr.alea=Sr,Rr.xor128=jr,Rr.xorwow=_r,Rr.xorshift7=Cr,Rr.xor4096=Ar,Rr.tychei=Er;"undefined"!=typeof window&&window.hasOwnProperty("webkitAudioContext")&&!window.hasOwnProperty("AudioContext")&&(window.AudioContext=webkitAudioContext),rr.BOOL,rr.TIMELINE,rr.STRING,rr.STRING,rr.STRING,rr.HTML_STRING,rr.BOOL,rr.BOOL,rr.HTML_STRING,rr.BOOL,rr.INT,rr.FUNCTION,rr.FUNCTION;const Lr=[["D.svg","A.svg","L.svg","S.svg","R.svg","L.svg","A.svg","S.svg","L.svg","S.svg","R.svg","L.svg","D.svg","R.svg","D.svg","A.svg","R.svg","D.svg","R.svg","A.svg","D.svg","S.svg","L.svg","S.svg","R.svg","D.svg","A.svg","S.svg","L.svg","R.svg","L.svg","A.svg","R.svg","A.svg","D.svg","A.svg","S.svg","L.svg","D.svg","S.svg","A.svg","R.svg","S.svg","L.svg","A.svg","D.svg","L.svg","S.svg","R.svg","D.svg"],["A.svg","L.svg","R.svg","D.svg","R.svg","A.svg","S.svg","R.svg","D.svg","A.svg","S.svg","A.svg","D.svg","R.svg","D.svg","L.svg","R.svg","L.svg","S.svg","L.svg","D.svg","S.svg","L.svg","A.svg","S.svg","R.svg","S.svg","A.svg","D.svg","A.svg","R.svg","L.svg","R.svg","S.svg","L.svg","D.svg","A.svg","S.svg","R.svg","L.svg","D.svg","A.svg","L.svg","D.svg","R.svg","S.svg","D.svg","L.svg","S.svg","A.svg"],["D.svg","L.svg","S.svg","A.svg","D.svg","R.svg","L.svg","A.svg","R.svg","D.svg","L.svg","S.svg","L.svg","D.svg","A.svg","L.svg","D.svg","S.svg","D.svg","L.svg","S.svg","R.svg","A.svg","R.svg","S.svg","A.svg","R.svg","A.svg","S.svg","R.svg","L.svg","S.svg","D.svg","S.svg","R.svg","L.svg","A.svg","L.svg","R.svg","D.svg","A.svg","D.svg","S.svg","L.svg","A.svg","R.svg","D.svg","R.svg","S.svg","A.svg"],["S.svg","L.svg","R.svg","D.svg","R.svg","A.svg","S.svg","A.svg","R.svg","L.svg","D.svg","R.svg","D.svg","S.svg","L.svg","R.svg","A.svg","D.svg","S.svg","D.svg","R.svg","D.svg","A.svg","L.svg","R.svg","S.svg","D.svg","R.svg","L.svg","A.svg","S.svg","L.svg","S.svg","R.svg","A.svg","L.svg","A.svg","D.svg","A.svg","L.svg","R.svg","S.svg","A.svg","D.svg","L.svg","A.svg","S.svg","L.svg","S.svg","D.svg"],["L.svg","A.svg","D.svg","S.svg","D.svg","A.svg","D.svg","R.svg","L.svg","R.svg","D.svg","S.svg","A.svg","R.svg","L.svg","D.svg","R.svg","S.svg","R.svg","A.svg","S.svg","R.svg","L.svg","A.svg","D.svg","S.svg","L.svg","A.svg","S.svg","L.svg","D.svg","S.svg","A.svg","R.svg","L.svg","D.svg","S.svg","L.svg","R.svg","A.svg","S.svg","D.svg","R.svg","L.svg","D.svg","A.svg","L.svg","S.svg","A.svg","R.svg"],["D.svg","L.svg","S.svg","R.svg","D.svg","A.svg","R.svg","L.svg","S.svg","A.svg","R.svg","S.svg","R.svg","D.svg","S.svg","R.svg","L.svg","D.svg","R.svg","D.svg","A.svg","L.svg","S.svg","A.svg","D.svg","L.svg","D.svg","A.svg","S.svg","A.svg","L.svg","S.svg","R.svg","D.svg","L.svg","A.svg","R.svg","S.svg","L.svg","D.svg","A.svg","L.svg","A.svg","S.svg","D.svg","R.svg","S.svg","R.svg","A.svg","L.svg"],["D.svg","R.svg","A.svg","R.svg","L.svg","S.svg","A.svg","D.svg","L.svg","S.svg","L.svg","A.svg","L.svg","S.svg","A.svg","R.svg","S.svg","L.svg","D.svg","L.svg","A.svg","R.svg","S.svg","R.svg","D.svg","S.svg","A.svg","R.svg","L.svg","R.svg","S.svg","A.svg","D.svg","S.svg","R.svg","D.svg","S.svg","L.svg","D.svg","A.svg","D.svg","L.svg","A.svg","L.svg","D.svg","R.svg","D.svg","S.svg","A.svg","R.svg"],["L.svg","A.svg","R.svg","D.svg","R.svg","L.svg","A.svg","D.svg","L.svg","S.svg","A.svg","S.svg","D.svg","S.svg","A.svg","S.svg","D.svg","L.svg","S.svg","D.svg","R.svg","A.svg","L.svg","A.svg","D.svg","R.svg","L.svg","R.svg","D.svg","A.svg","L.svg","S.svg","D.svg","R.svg","L.svg","A.svg","R.svg","L.svg","S.svg","R.svg","S.svg","L.svg","A.svg","S.svg","D.svg","R.svg","A.svg","R.svg","D.svg","S.svg"],["S.svg","A.svg","R.svg","D.svg","L.svg","S.svg","D.svg","R.svg","S.svg","A.svg","L.svg","R.svg","S.svg","L.svg","A.svg","D.svg","S.svg","A.svg","R.svg","S.svg","D.svg","A.svg","D.svg","S.svg","R.svg","A.svg","L.svg","D.svg","L.svg","R.svg","S.svg","D.svg","L.svg","D.svg","S.svg","L.svg","R.svg","A.svg","S.svg","D.svg","L.svg","A.svg","R.svg","A.svg","L.svg","D.svg","A.svg","R.svg","L.svg","R.svg"],["R.svg","A.svg","S.svg","L.svg","S.svg","D.svg","R.svg","A.svg","S.svg","D.svg","A.svg","L.svg","D.svg","R.svg","L.svg","R.svg","A.svg","S.svg","R.svg","L.svg","D.svg","S.svg","L.svg","S.svg","R.svg","L.svg","R.svg","D.svg","A.svg","D.svg","S.svg","L.svg","R.svg","L.svg","D.svg","R.svg","L.svg","A.svg","D.svg","S.svg","A.svg","S.svg","D.svg","A.svg","L.svg","D.svg","A.svg","S.svg","R.svg","A.svg"],["L.svg","R.svg","D.svg","A.svg","S.svg","D.svg","L.svg","A.svg","R.svg","S.svg","A.svg","S.svg","L.svg","S.svg","D.svg","A.svg","S.svg","D.svg","S.svg","R.svg","D.svg","R.svg","A.svg","L.svg","R.svg","L.svg","D.svg","L.svg","A.svg","S.svg","A.svg","D.svg","R.svg","S.svg","A.svg","R.svg","L.svg","A.svg","R.svg","D.svg","L.svg","R.svg","L.svg","A.svg","S.svg","D.svg","R.svg","S.svg","D.svg","L.svg"],["D.svg","A.svg","L.svg","S.svg","R.svg","S.svg","A.svg","R.svg","S.svg","R.svg","L.svg","S.svg","D.svg","A.svg","S.svg","D.svg","R.svg","L.svg","D.svg","S.svg","R.svg","A.svg","L.svg","D.svg","R.svg","L.svg","A.svg","S.svg","A.svg","R.svg","L.svg","D.svg","A.svg","L.svg","S.svg","D.svg","R.svg","A.svg","L.svg","D.svg","S.svg","R.svg","L.svg","A.svg","D.svg","R.svg","L.svg","D.svg","A.svg","S.svg"],["R.svg","A.svg","L.svg","D.svg","A.svg","S.svg","A.svg","L.svg","S.svg","A.svg","D.svg","L.svg","A.svg","S.svg","R.svg","D.svg","S.svg","D.svg","R.svg","L.svg","R.svg","A.svg","R.svg","D.svg","A.svg","R.svg","L.svg","R.svg","S.svg","A.svg","S.svg","L.svg","D.svg","S.svg","D.svg","A.svg","D.svg","L.svg","R.svg","D.svg","R.svg","S.svg","L.svg","D.svg","S.svg","L.svg","A.svg","R.svg","L.svg","S.svg"],["R.svg","L.svg","A.svg","R.svg","L.svg","D.svg","S.svg","D.svg","A.svg","R.svg","D.svg","A.svg","S.svg","L.svg","R.svg","S.svg","A.svg","L.svg","S.svg","D.svg","S.svg","R.svg","L.svg","D.svg","S.svg","L.svg","D.svg","R.svg","L.svg","A.svg","D.svg","S.svg","D.svg","R.svg","A.svg","D.svg","R.svg","L.svg","A.svg","S.svg","A.svg","R.svg","A.svg","S.svg","L.svg","A.svg","S.svg","R.svg","L.svg","D.svg"],["L.svg","R.svg","A.svg","S.svg","L.svg","D.svg","S.svg","D.svg","R.svg","A.svg","D.svg","L.svg","R.svg","D.svg","A.svg","S.svg","R.svg","A.svg","D.svg","L.svg","A.svg","R.svg","S.svg","A.svg","L.svg","A.svg","D.svg","L.svg","S.svg","D.svg","S.svg","L.svg","R.svg","S.svg","R.svg","L.svg","R.svg","A.svg","L.svg","S.svg","A.svg","R.svg","D.svg","L.svg","S.svg","D.svg","A.svg","S.svg","R.svg","D.svg"],["A.svg","D.svg","S.svg","L.svg","D.svg","S.svg","R.svg","D.svg","A.svg","S.svg","R.svg","S.svg","A.svg","R.svg","S.svg","D.svg","L.svg","A.svg","R.svg","L.svg","D.svg","A.svg","D.svg","S.svg","L.svg","R.svg","D.svg","L.svg","S.svg","A.svg","S.svg","L.svg","R.svg","A.svg","R.svg","L.svg","R.svg","A.svg","D.svg","S.svg","L.svg","R.svg","S.svg","D.svg","L.svg","D.svg","A.svg","R.svg","L.svg","A.svg"],["S.svg","R.svg","S.svg","L.svg","D.svg","A.svg","L.svg","A.svg","R.svg","S.svg","R.svg","A.svg","L.svg","A.svg","R.svg","L.svg","S.svg","L.svg","A.svg","D.svg","A.svg","L.svg","S.svg","D.svg","A.svg","S.svg","D.svg","R.svg","D.svg","S.svg","R.svg","D.svg","R.svg","L.svg","D.svg","A.svg","R.svg","D.svg","L.svg","R.svg","A.svg","L.svg","D.svg","R.svg","A.svg","S.svg","L.svg","S.svg","D.svg","S.svg"],["L.svg","R.svg","S.svg","R.svg","A.svg","D.svg","S.svg","R.svg","L.svg","S.svg","D.svg","L.svg","A.svg","D.svg","L.svg","S.svg","D.svg","L.svg","D.svg","R.svg","A.svg","S.svg","D.svg","R.svg","S.svg","R.svg","A.svg","D.svg","R.svg","L.svg","D.svg","L.svg","S.svg","A.svg","R.svg","L.svg","D.svg","A.svg","L.svg","A.svg","S.svg","R.svg","A.svg","D.svg","S.svg","A.svg","L.svg","S.svg","A.svg","R.svg"],["S.svg","A.svg","L.svg","R.svg","A.svg","S.svg","D.svg","L.svg","A.svg","S.svg","R.svg","L.svg","S.svg","L.svg","R.svg","A.svg","S.svg","R.svg","L.svg","R.svg","A.svg","S.svg","D.svg","R.svg","L.svg","D.svg","A.svg","S.svg","D.svg","L.svg","R.svg","D.svg","S.svg","L.svg","D.svg","S.svg","D.svg","R.svg","A.svg","D.svg","L.svg","S.svg","R.svg","D.svg","A.svg","D.svg","L.svg","A.svg","R.svg","A.svg"],["A.svg","S.svg","R.svg","D.svg","L.svg","S.svg","R.svg","L.svg","A.svg","D.svg","L.svg","D.svg","S.svg","R.svg","A.svg","R.svg","S.svg","A.svg","R.svg","L.svg","R.svg","A.svg","D.svg","S.svg","L.svg","A.svg","D.svg","R.svg","L.svg","A.svg","D.svg","R.svg","S.svg","L.svg","D.svg","S.svg","R.svg","A.svg","S.svg","D.svg","L.svg","S.svg","D.svg","A.svg","L.svg","R.svg","D.svg","S.svg","L.svg","A.svg"]],Mr=[["two.svg","nine.svg","two.svg","seven.svg","two.svg","six.svg","seven.svg","four.svg","six.svg","four.svg","seven.svg","two.svg","four.svg","six.svg","seven.svg","four.svg","two.svg","six.svg","two.svg","nine.svg","two.svg","four.svg","two.svg","seven.svg","six.svg","nine.svg","seven.svg","nine.svg","four.svg","six.svg","nine.svg","six.svg","seven.svg","nine.svg","four.svg","seven.svg","two.svg","four.svg","six.svg","nine.svg","two.svg","nine.svg","six.svg","four.svg","seven.svg","nine.svg","six.svg","nine.svg","four.svg","seven.svg"],["six.svg","four.svg","seven.svg","two.svg","nine.svg","six.svg","four.svg","seven.svg","two.svg","four.svg","two.svg","seven.svg","two.svg","four.svg","seven.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","nine.svg","four.svg","nine.svg","six.svg","two.svg","six.svg","seven.svg","six.svg","two.svg","nine.svg","seven.svg","nine.svg","four.svg","seven.svg","six.svg","seven.svg","four.svg","two.svg","nine.svg","seven.svg","six.svg","four.svg","two.svg","nine.svg","seven.svg","six.svg","two.svg","four.svg","six.svg","nine.svg"],["six.svg","four.svg","six.svg","seven.svg","nine.svg","four.svg","two.svg","six.svg","nine.svg","two.svg","four.svg","seven.svg","four.svg","nine.svg","two.svg","six.svg","four.svg","seven.svg","two.svg","seven.svg","nine.svg","six.svg","two.svg","seven.svg","four.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","seven.svg","two.svg","four.svg","six.svg","seven.svg","six.svg","two.svg","nine.svg","six.svg","four.svg","nine.svg","six.svg","two.svg","seven.svg","four.svg","nine.svg","seven.svg","two.svg","nine.svg","seven.svg"],["four.svg","nine.svg","two.svg","four.svg","seven.svg","nine.svg","seven.svg","two.svg","six.svg","four.svg","seven.svg","four.svg","six.svg","nine.svg","six.svg","two.svg","six.svg","seven.svg","nine.svg","seven.svg","six.svg","two.svg","nine.svg","two.svg","four.svg","nine.svg","seven.svg","nine.svg","four.svg","two.svg","seven.svg","nine.svg","six.svg","four.svg","two.svg","seven.svg","two.svg","six.svg","nine.svg","seven.svg","four.svg","six.svg","seven.svg","nine.svg","six.svg","four.svg","six.svg","two.svg","four.svg","two.svg"],["six.svg","four.svg","seven.svg","six.svg","two.svg","six.svg","seven.svg","six.svg","two.svg","six.svg","seven.svg","nine.svg","four.svg","two.svg","nine.svg","four.svg","nine.svg","two.svg","nine.svg","seven.svg","nine.svg","four.svg","two.svg","four.svg","seven.svg","nine.svg","two.svg","seven.svg","two.svg","six.svg","two.svg","seven.svg","four.svg","six.svg","nine.svg","seven.svg","four.svg","nine.svg","six.svg","nine.svg","four.svg","six.svg","two.svg","seven.svg","six.svg","two.svg","nine.svg","four.svg","seven.svg","four.svg"],["four.svg","nine.svg","seven.svg","two.svg","six.svg","four.svg","nine.svg","two.svg","six.svg","seven.svg","nine.svg","six.svg","four.svg","seven.svg","four.svg","nine.svg","two.svg","six.svg","nine.svg","six.svg","seven.svg","two.svg","seven.svg","four.svg","nine.svg","two.svg","seven.svg","four.svg","six.svg","nine.svg","four.svg","seven.svg","two.svg","six.svg","seven.svg","four.svg","nine.svg","seven.svg","two.svg","six.svg","two.svg","four.svg","six.svg","nine.svg","two.svg","six.svg","four.svg","two.svg","nine.svg","seven.svg"],["six.svg","two.svg","four.svg","six.svg","seven.svg","nine.svg","four.svg","nine.svg","two.svg","seven.svg","two.svg","nine.svg","seven.svg","nine.svg","six.svg","seven.svg","six.svg","two.svg","nine.svg","four.svg","six.svg","four.svg","two.svg","seven.svg","four.svg","two.svg","nine.svg","six.svg","seven.svg","six.svg","nine.svg","seven.svg","four.svg","two.svg","seven.svg","nine.svg","six.svg","four.svg","six.svg","two.svg","four.svg","two.svg","seven.svg","six.svg","nine.svg","four.svg","seven.svg","two.svg","four.svg","nine.svg"],["nine.svg","two.svg","four.svg","seven.svg","nine.svg","two.svg","six.svg","four.svg","six.svg","seven.svg","two.svg","seven.svg","nine.svg","four.svg","two.svg","nine.svg","four.svg","seven.svg","nine.svg","two.svg","four.svg","nine.svg","seven.svg","six.svg","seven.svg","four.svg","six.svg","four.svg","seven.svg","six.svg","nine.svg","six.svg","four.svg","nine.svg","six.svg","two.svg","four.svg","two.svg","nine.svg","two.svg","six.svg","four.svg","two.svg","six.svg","seven.svg","six.svg","nine.svg","seven.svg","two.svg","seven.svg"],["six.svg","seven.svg","two.svg","four.svg","seven.svg","four.svg","nine.svg","six.svg","two.svg","six.svg","four.svg","two.svg","six.svg","seven.svg","nine.svg","two.svg","six.svg","nine.svg","seven.svg","two.svg","six.svg","four.svg","seven.svg","six.svg","seven.svg","nine.svg","seven.svg","four.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","seven.svg","nine.svg","two.svg","four.svg","nine.svg","six.svg","two.svg","nine.svg","seven.svg","two.svg","four.svg","six.svg","four.svg","two.svg","four.svg","nine.svg","seven.svg"],["six.svg","nine.svg","six.svg","seven.svg","six.svg","four.svg","two.svg","nine.svg","four.svg","seven.svg","two.svg","six.svg","seven.svg","two.svg","nine.svg","six.svg","seven.svg","four.svg","nine.svg","two.svg","nine.svg","four.svg","two.svg","seven.svg","six.svg","four.svg","six.svg","nine.svg","six.svg","four.svg","seven.svg","two.svg","nine.svg","two.svg","seven.svg","nine.svg","two.svg","four.svg","two.svg","seven.svg","six.svg","four.svg","two.svg","seven.svg","nine.svg","four.svg","six.svg","nine.svg","seven.svg","four.svg"],["nine.svg","four.svg","nine.svg","six.svg","two.svg","seven.svg","four.svg","six.svg","nine.svg","four.svg","seven.svg","two.svg","six.svg","two.svg","seven.svg","six.svg","two.svg","four.svg","two.svg","six.svg","four.svg","nine.svg","two.svg","four.svg","six.svg","four.svg","seven.svg","two.svg","seven.svg","four.svg","nine.svg","four.svg","six.svg","two.svg","four.svg","nine.svg","six.svg","seven.svg","nine.svg","two.svg","seven.svg","nine.svg","seven.svg","six.svg","nine.svg","seven.svg","two.svg","six.svg","seven.svg","nine.svg"],["four.svg","two.svg","six.svg","seven.svg","two.svg","six.svg","two.svg","four.svg","nine.svg","seven.svg","two.svg","four.svg","seven.svg","nine.svg","six.svg","two.svg","nine.svg","six.svg","seven.svg","nine.svg","six.svg","nine.svg","two.svg","four.svg","seven.svg","four.svg","six.svg","seven.svg","nine.svg","two.svg","four.svg","seven.svg","four.svg","six.svg","nine.svg","seven.svg","four.svg","six.svg","two.svg","seven.svg","nine.svg","six.svg","seven.svg","nine.svg","four.svg","two.svg","nine.svg","four.svg","six.svg","two.svg"],["four.svg","nine.svg","six.svg","four.svg","seven.svg","two.svg","nine.svg","six.svg","seven.svg","two.svg","nine.svg","six.svg","seven.svg","six.svg","two.svg","nine.svg","six.svg","seven.svg","two.svg","four.svg","six.svg","seven.svg","two.svg","four.svg","nine.svg","seven.svg","four.svg","two.svg","four.svg","seven.svg","nine.svg","six.svg","four.svg","nine.svg","six.svg","nine.svg","two.svg","four.svg","two.svg","six.svg","two.svg","nine.svg","six.svg","two.svg","seven.svg","four.svg","seven.svg","nine.svg","seven.svg","four.svg"],["seven.svg","four.svg","two.svg","nine.svg","six.svg","seven.svg","four.svg","six.svg","seven.svg","nine.svg","four.svg","seven.svg","nine.svg","two.svg","seven.svg","four.svg","seven.svg","two.svg","six.svg","seven.svg","six.svg","four.svg","six.svg","nine.svg","two.svg","seven.svg","two.svg","nine.svg","four.svg","six.svg","nine.svg","six.svg","four.svg","two.svg","nine.svg","two.svg","four.svg","six.svg","two.svg","nine.svg","seven.svg","two.svg","nine.svg","four.svg","six.svg","seven.svg","six.svg","four.svg","nine.svg","two.svg"],["six.svg","four.svg","two.svg","six.svg","seven.svg","four.svg","nine.svg","six.svg","two.svg","seven.svg","nine.svg","two.svg","four.svg","seven.svg","four.svg","two.svg","seven.svg","two.svg","nine.svg","six.svg","seven.svg","four.svg","nine.svg","four.svg","two.svg","four.svg","six.svg","nine.svg","two.svg","nine.svg","six.svg","two.svg","seven.svg","six.svg","nine.svg","seven.svg","nine.svg","two.svg","four.svg","six.svg","seven.svg","four.svg","nine.svg","seven.svg","four.svg","six.svg","two.svg","seven.svg","six.svg","nine.svg"],["six.svg","nine.svg","seven.svg","two.svg","four.svg","nine.svg","two.svg","seven.svg","nine.svg","seven.svg","two.svg","seven.svg","six.svg","four.svg","nine.svg","six.svg","four.svg","two.svg","seven.svg","nine.svg","six.svg","two.svg","four.svg","nine.svg","two.svg","four.svg","six.svg","seven.svg","two.svg","six.svg","seven.svg","four.svg","six.svg","four.svg","nine.svg","two.svg","four.svg","two.svg","nine.svg","seven.svg","six.svg","nine.svg","seven.svg","two.svg","four.svg","seven.svg","nine.svg","six.svg","four.svg","six.svg"],["seven.svg","four.svg","nine.svg","two.svg","six.svg","two.svg","seven.svg","two.svg","six.svg","four.svg","six.svg","nine.svg","two.svg","nine.svg","seven.svg","six.svg","nine.svg","seven.svg","four.svg","seven.svg","nine.svg","six.svg","nine.svg","four.svg","two.svg","nine.svg","two.svg","four.svg","six.svg","nine.svg","four.svg","seven.svg","six.svg","two.svg","seven.svg","two.svg","four.svg","seven.svg","nine.svg","seven.svg","six.svg","four.svg","seven.svg","six.svg","two.svg","four.svg","nine.svg","two.svg","four.svg","six.svg"],["six.svg","seven.svg","four.svg","two.svg","nine.svg","four.svg","two.svg","four.svg","six.svg","nine.svg","two.svg","four.svg","six.svg","nine.svg","four.svg","six.svg","four.svg","two.svg","seven.svg","six.svg","seven.svg","nine.svg","two.svg","six.svg","nine.svg","seven.svg","six.svg","seven.svg","two.svg","nine.svg","four.svg","six.svg","seven.svg","four.svg","two.svg","four.svg","seven.svg","nine.svg","seven.svg","six.svg","two.svg","nine.svg","six.svg","two.svg","seven.svg","nine.svg","two.svg","four.svg","nine.svg","seven.svg"],["four.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","seven.svg","two.svg","six.svg","nine.svg","two.svg","six.svg","two.svg","seven.svg","six.svg","seven.svg","two.svg","six.svg","two.svg","seven.svg","nine.svg","seven.svg","four.svg","six.svg","four.svg","nine.svg","seven.svg","four.svg","nine.svg","six.svg","two.svg","four.svg","seven.svg","nine.svg","two.svg","six.svg","four.svg","nine.svg","two.svg","seven.svg","four.svg","seven.svg","nine.svg","six.svg","seven.svg","four.svg","two.svg","four.svg","nine.svg","six.svg"],["six.svg","seven.svg","four.svg","nine.svg","two.svg","seven.svg","two.svg","six.svg","two.svg","seven.svg","two.svg","nine.svg","six.svg","four.svg","nine.svg","four.svg","seven.svg","two.svg","four.svg","nine.svg","six.svg","two.svg","seven.svg","nine.svg","six.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","seven.svg","six.svg","four.svg","seven.svg","nine.svg","seven.svg","four.svg","two.svg","six.svg","nine.svg","four.svg","two.svg","six.svg","two.svg","seven.svg","four.svg","seven.svg","nine.svg","four.svg","six.svg"]];function Ir(e,n=!1){return null==e?n:"true"===e.trim().toLowerCase()}function Dr(e){return"string"==typeof e?Ir(e):"boolean"==typeof e&&e}const Or=(e,n)=>{let t;var i,s=("string"!=typeof(i=e)&&(i=String(i)),i.toLocaleLowerCase());return t=["true","false"].includes(s)?Ir(s):!(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:13,i=Number(e);if(null!=e){if(Number.isNaN(i)){var s={k:0,tk:0,pk:0,preschool:0,prekindergarten:0,transitionalkindergarten:0,kindergarten:0,infanttoddler:0,infant:0,toddler:0,first:1,firstgrade:1,second:2,secondgrade:2,third:3,thirdgrade:3,fourth:4,fourthgrade:4,fifth:5,fifthgrade:5,sixth:6,sixthgrade:6,seventh:7,seventhgrade:7,eighth:8,eighthgrade:8,ninth:9,ninthgrade:9,tenth:10,tenthgrade:10,eleventh:11,eleventhgrade:11,twelfth:12,twelfthgrade:12,freshman:9,sophomore:10,junior:11,senior:12,postgraduate:13,university:13,graduate:13,master:13,doctorate:13,masters:13}[e.toLowerCase().replace(/\s/g,"").replace(/-/g,"")];if(void 0===s)return;return s<n?n:s>t?t:s}return i<n?n:i>t?t:i}}(n)>=6),t};const Tr=new Map;function Pr(e){const n=new URL(e,document.baseURI).href;if(Tr.has(n))return Tr.get(n);const t=new Promise(((e,t)=>{const i=document.createElement("script");i.src=n,i.dataset.dynamic="true",i.onload=()=>{e()},i.onerror=e=>{Tr.delete(n),t(e)},document.head.appendChild(i)}));return Tr.set(n,t),t}async function Fr(e){const n=e.getElementsByTagName("script");for(let e=0;e<n.length;e++){const t=n[e];t.src&&await Pr(t.src)}}function Nr(e){const n=e.getElementsByTagName("script");for(let e=0;e<n.length;e++){const t=document.createElement("script");t.text=n[e].text,document.head.appendChild(t).parentNode.removeChild(t)}}function qr(e){Object.keys(e).forEach((n=>{window[n]=e[n]}))}function zr(e){Object.keys(e).forEach((e=>{const n=Object.getOwnPropertyDescriptor(window,e);n&&n.configurable?delete window[e]:console.log(`Cannot remove ${e} from window; it may be non-configurable.`)}))}function Vr(e){document.querySelectorAll("script[data-dynamic]").forEach((n=>{e&&!e(n)||n.parentNode.removeChild(n)}))}function Br(e){e.style.position="",e.style.top="",e.style.left="",e.style.width="",e.style.height=""}function Ur(e){Object.keys(e).forEach((n=>{const t=CSS.escape?CSS.escape(n):n.replace(/([^\w-])/g,"\\$1"),i=document.querySelector(`[data-alt-id="${t}"]`);i&&(i.textContent=e[n])}))}var Hr='<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">\n <style>\n body {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100vh;\n margin: 0;\n background-color: #ffffff; /* White background */\n color: #000000; /* Black text */\n }\n\n .loading-container {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 20px;\n border-radius: 10px;\n background: rgba(0, 0, 0, 0.05); /* Slight gray tint to differentiate from the white background */\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Soft shadow for depth */\n }\n\n .loading-spinner {\n border: 8px solid rgba(0, 0, 0, 0.1); /* Lighter border for the spinner */\n border-top: 8px solid #0d6efd; /* Blue color for active part of the spinner */\n border-radius: 50%;\n width: 80px;\n height: 80px;\n animation: spin 1s linear infinite;\n margin-bottom: 20px;\n }\n\n h2 {\n font-weight: 400;\n letter-spacing: 1px;\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n </style>\n</head>\n<body>\n <div class="loading-container">\n <div class="loading-spinner"></div>\n <h2>Loading...</h2>\n </div>\n</body>\n</html>\n';function Wr(){const e=document.getElementById("deviceList"),n=document.getElementById("findDevice-collapsableCards");e.innerHTML="";const t=document.createElement("option");t.value="",t.text="",e.add(t);const i=Object.keys(deviceConfigs);if(i.forEach((n=>{const t=document.createElement("option");t.value=n,t.text=n.charAt(0).toUpperCase()+n.slice(1),e.add(t)})),1===i.length){$r(deviceConfigs[i[0]]),n&&(n.style.display="none",Yr())}else n&&(n.style.display="block")}function $r(e){console.log("You selected a "+e.deviceName),screenHeight=e.screenHeight,screenWidth=e.screenWidth,webcamHeight=e.webcamHeight,screenSizeCalibrated=e.screenSizeCalibrated,webcamCentered=e.webcamCentered,HeightWebcamEntered=e.HeightWebcamEntered,heightInput_textbox.value=webcamHeight,heightInput_textbox.disabled=HeightWebcamEntered,e.hasOwnProperty("normalizedFocalLength")&&(normalizedFocalLength=e.normalizedFocalLength),checkAllComplete()}function Yr(){var e=document.querySelectorAll(".card-title"),n=1;e.forEach((function(e){"none"!==e.parentElement.parentElement.style.display&&null!==e.parentElement.parentElement.offsetParent&&(e.textContent=e.textContent.replace(/\(\d+\)/,"("+n+")"),n++)}))}var Kr,Xr,Gr=Object.freeze({__proto__:null,collapseCamera:function(e=!0){document.querySelectorAll('[id*="-cameracollapsableCards"]').forEach((n=>{n.style.display=e?"none":""})),Yr()},collapseCards:function(e=!0){document.querySelectorAll('[id*="-collapsableCards"]').forEach((n=>{n.style.display="Toggle"===e?"none"===n.style.display?"":"none":e?"none":""})),Yr()},handleDevice:$r,inputParticipantName:function(e){var n=document.getElementById("idInput");n.value=e,n.disabled=!0},updateCardNumbers:Yr,updateDeviceConfigFromJSON:async function(e){try{const n=await fetch(e),t=await n.json();deviceConfigs=t,Wr()}catch(e){console.error("Error fetching or parsing JSON:",e)}},updateDropdownOptions:Wr});function Jr(){const e=window.navigator,n=window.screen,t={userAgent:e.userAgent,platform:e.platform,language:e.language,deviceMemory:e.deviceMemory||"Not available",hardwareConcurrency:e.hardwareConcurrency,maxTouchPoints:e.maxTouchPoints,cookiesEnabled:e.cookieEnabled,webDriver:e.webdriver,onlineStatus:e.onLine,gpu:"Not available"},i={width:n.width,height:n.height,colorDepth:n.colorDepth,pixelDepth:n.pixelDepth,retinaDisplay:window.matchMedia("(-webkit-min-device-pixel-ratio: 2)").matches,landscapeOrientation:window.matchMedia("(orientation: landscape)").matches},s=document.createElement("canvas"),a=s.getContext("webgl")||s.getContext("experimental-webgl");if(a){const e=a.getExtension("WEBGL_debug_renderer_info");t.gpu=e?a.getParameter(e.UNMASKED_RENDERER_WEBGL):"Not available"}return{device:t,screen:i}}var Qr,Zr=document.documentElement,ec={};function nc(){Zr.requestFullscreen?Zr.requestFullscreen():Zr.webkitRequestFullscreen?Zr.webkitRequestFullscreen():Zr.msRequestFullscreen&&Zr.msRequestFullscreen()}var tc=4;function ic(e){const n="video"===e?["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm","video/mp4"]:["audio/webm;codecs=opus","audio/webm","audio/ogg","audio/mp4"];for(const e of n)if(MediaRecorder.isTypeSupported(e))return e;return null}async function sc(e=!1,n=!1){try{const t={};(e||n)&&(t.video={width:{ideal:1280,min:640},height:{ideal:720,min:480},frameRate:{ideal:30,min:15}}),t.audio=!0;const i=await navigator.mediaDevices.getUserMedia(t);return Qr=i,ec={bEyeTracking:e,storeVideo:n},(e||n)&&inputVideo&&(inputVideo.srcObject=i,inputVideo.muted=!0,inputVideo.play(),inputVideo.addEventListener("loadedmetadata",(function(){Kr=inputVideo.videoWidth,Xr=inputVideo.videoHeight,headCanvas&&(headCanvas.width=Kr,headCanvas.height=Xr)}))),{success:!0}}catch(e){throw console.error("Error accessing media devices:",e),e}}function ac(e){const n={one:"1",two:"2",three:"3",four:"4",five:"5",six:"6",seven:"7",eight:"8",nine:"9"},t={...e};return Array.isArray(t.stimulus)&&(t.stimulus=t.stimulus.reduce(((e,t)=>e+(n[t.toLowerCase()]||t)),"")),{stimImages:t.stimulus,...t}}async function oc(){let e,n;mediaChunks=[],mediaRecorder&&"recording"===mediaRecorder.state&&mediaRecorder.stop();try{if(ec.storeVideo){if(e=Qr,n=ic("video"),!n)throw new Error("No supported video MIME type found for MediaRecorder")}else{const t=Qr.getAudioTracks();if(!(t.length>0))return void console.error("No audio tracks available for recording");if(e=new MediaStream(t),n=ic("audio"),!n)throw new Error("No supported audio MIME type found for MediaRecorder")}}catch(e){return void console.error("Error setting up recording stream:",e)}console.log("MIME Type:",n),mediaRecorder=new MediaRecorder(e,{mimeType:n,videoBitsPerSecond:25e5,audioBitsPerSecond:128e3}),mediaRecorder.ondataavailable=e=>{console.log("Media chunk size:",e.data.size),e.data.size>0&&mediaChunks.push(e.data)},mediaRecorder.onstop=async()=>{console.log("Recording stopped, blob created")},mediaRecorder.start()}async function rc(){try{await new Promise((e=>{mediaRecorder&&"recording"===mediaRecorder.state?(mediaRecorder.onstop=e,mediaRecorder.stop()):e()}))}catch(e){console.error("Error stopping media recorder:",e)}}async function cc({filename:e,deviceConfig:n,config:t,metadata:i}){let s;console.log("media chunks",mediaChunks),s=n.storeVideo?"video/webm":"audio/webm";const a=new Blob(mediaChunks,{type:s});if(!(a.size>0))return console.error("No media data recorded."),null;console.log("Media recorded successfully. Size:",a.size,"bytes");try{return await t.firekit.uploadFileOrBlobToStorage({filename:e,assessmentPid:store.session.get("id"),fileOrBlob:a,customMetadata:ac(i)})}catch(e){return console.error("Error uploading media:",e),null}}function lc(){Qr&&(Qr.getTracks().forEach((e=>{e.stop()})),Qr=null);const e=document.getElementsByClassName("inputVideo")[0];if(e&&e.srcObject){e.srcObject.getTracks().forEach((e=>{e.stop()})),e.srcObject=null}window.mediaRecorder&&"inactive"!==window.mediaRecorder.state&&(window.mediaRecorder.stop(),window.mediaRecorder=null),window.micStream&&window.micStream.getTracks&&(window.micStream.getTracks().forEach((e=>e.stop())),window.micStream=null)}var pc=Object.freeze({__proto__:null,get countdown(){return tc},giveAccess:sc,openFullscreen:nc,get orig_img_height(){return Xr},get orig_img_width(){return Kr},saveRecordings:cc,startRecording:oc,stopMediaStreams:lc,stopRecording:rc,updateCountdown:function e(n){0===--tc?(document.getElementById("instruction").style.display="none","function"==typeof n&&(n(),tc=4)):(document.getElementById("instruction").innerHTML="<h1>"+tc+"</h1>",setTimeout((function(){e(n)}),1e3))}});async function uc(e){const n=Hr,t=document.createElement("div");t.innerHTML='\x3c!-- Scripts --\x3e\n<script data-dynamic src="https://cdn.jsdelivr.net/npm/remote-calibrator@latest"><\/script>\n<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n\n\x3c!-- CSS --\x3e\n<style>\n\nbody {\n margin: 0;\n}\n\n .column {\n float: left;\n padding: 10px;\n}\n\n.left, .right {\n width: 33%;\n}\n\n.middle {\n width: 33%;\n}\n\n.row:after {\n content: "";\n display: table;\n clear: both;\n}\n\n.container {\n width: 75%; /* Set the width for the container */\n margin: auto; /* Center the container if needed */\n}\n\n #audio-visualization {\n width: 100%; /* Both elements fill the container */\n height: 100px; /* Set a fixed height for the canvas */\n\n /* display: block; Ensure they are not inline */\n}\n\n#audio-visualization-audioonly {\n width:100%;\n height: 100px; /* Set a fixed height for the canvas */\n}\n\n</style>\n\n\x3c!-- HTML --\x3e\n<body id="body">\n\n <div class="px-4 py-5 my-5 text-center" style="display: block;">\n <h1 class="display-5 fw-bold" id="title" data-alt-id="configureDevice">Configure Device</h1>\n <h5 data-alt-id="configureDevice_text1"> To get started, we will need to set up a few things. </h5>\n <h5 data-alt-id="configureDevice_text2"> If you’re not sure what to do, ask an adult to help you with this part. </h5>\n <img src="https://storage.googleapis.com/roav-ran/shared/assets/legacy/parent-help-icon.png" width="10%">\n <div class="col-lg-6 mx-auto" style="margin-top: -8vh;">\n <p class="lead mt-3 mb-5"></p>\n\n \x3c!-- Preconfigured Devices --\x3e\n <div class="d-grid gap-2 justify-content-center">\n\n <div class="row gap-2" id="findDevice-collapsableCards" style="display: none;">\n <div class="col">\n <div\n class="card"\n style="width: 42rem; height: 11rem"\n id="findDevice"\n >\n <div class="card-body">\n <h5 class="card-title" data-alt-id="chooseDevice">(1) Choose Device</h5>\n <p class="card-text" data-alt-id="chooseDevice_text1">\n Please select the device you are taking the test on.\n </p>\n <select id="deviceList" onchange="selectDevice()"></select>\n </div>\n </div>\n </div>\n </div>\n\n\n\n \x3c!-- ROW 1: Full Screen | Get Screen Size --\x3e\n <div class="row gap-2" id="screenSize-collapsableCards">\n <div class="col" >\n <div class="card" style="width:20rem; height:11rem" id="card-fullscreen">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="fullScreen">(1) Full Screen</h5>\n <p class="card-text" data-alt-id="fullScreen_text1">Do not exit out of \'Full Screen\' mode for the remainder of this study.</p>\n <button type="button" class="btn btn-primary" id="fullscreen" onclick="openFullscreen()" data-alt-id="fullScreen_text2">Make Fullscreen</button>\n </div>\n </div>\n </div>\n <div class="col">\n <div class="card" style="width:20rem;height:11rem" id="card-screen-size">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="screenSize">(2) Screen Size</h5>\n <p class="card-text" data-alt-id="screenSize_text1">We need this to calibrate your device\'s screen size.</p>\n <button type="button" class="btn btn-primary" id="measureScreen" onclick="getScreenSize()" data-alt-id="screenSize_text2">Measure Screen Size</button>\n </div>\n </div>\n </div>\n </div>\n\n\n \x3c!-- ROW 2: Webcam Centered | Height of Webcam --\x3e\n <div class="row gap-2" id="webcam-collapsableCards">\n <div class="col">\n <div class="card" style="width: 20rem;" id="card-webcam-center">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="webcamCentered">(3) Is your webcam centred?</h5>\n <h6 class="card-subtitle mb-2 text-muted" data-alt-id="webcamCentered_text1">It is expected that for laptops the webcam is already centred.</h6>\n <p class="card-text" data-alt-id="webcamCentered_text2">If you are using a separate webcam, please centre this in the middle (as seen in the image below).</p>\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/webcamCentered.jpg" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <button type="button" class="btn btn-primary" id="measureDistanceFromScreeen" onclick="getwebcamCentered()" data-alt-id="webcamCentered_text3">My Webcam is Centered</button>\n </div>\n </div>\n </div>\n <div class="col">\n <div class="card" style="width: 20rem;" id="card-height-camera">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="webcamHeight">(4) Height of Webcam</h5>\n <p class="card-text" data-alt-id="webcamHeight_text1">This is the distance between the centre of your webcam\'s lens and the top bezel of your screen (image provided for example)</p>\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/webcamPosition.PNG" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <label for="heightInput" data-alt-id="webcamHeight_text2">Height in cm:</label>\n <input type="number" id="heightInput" name="heightInput" required\n minlength="1" maxlength="8" size="10" value="2">\n </br></br>\n <button type="button" class="btn btn-primary" id="getHeightbutton" onclick="getHeightWebcam()" data-alt-id="webcamHeight_text3">Done</button>\n </div>\n </div>\n </div>\n </div>\n\n\n <div class="row gap-2" id="access-cameracollapsableCards">\n <div class="col">\n <div class="card" style="width: 42rem;height:11rem" id="card-camera">\n <div class="card-body">\n <h5 class="card-title" id="camera-access-title" data-alt-id="cameraAccess">(5) Camera Access</h5>\n <p class="card-text" id="camera-access-text" data-alt-id="cameraAccess_text1">Please provide access to your camera to record your eye movements.</p>\n <button type="button" class="btn btn-primary" id="start-camera" data-alt-id="cameraAccess_text2">Provide Access</button>\n </div>\n </div>\n </div>\n </div>\n \n <div class="row gap-2" id="access-audiocollapsableCards" style="display: none;">\n <div class="col">\n <div class="card" style="width: 42rem;height:11rem" id="card-audio">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="audioAccess">(3) Audio Access</h5>\n <p class="card-text" data-alt-id="audioAccess_text1">Please provide access to your microphone to record audio.</p>\n <button type="button" class="btn btn-primary" id="start-audio" data-alt-id="audioAccess_text2">Provide Access</button>\n </div>\n </div>\n </div>\n </div>\n\n\n \x3c!-- ROW 4: Check Recording --\x3e\n <div class="row gap-2" style="padding-top:1rem;" id="check-cameracollapsableCards">\n <div class="col">\n <div class="card" style="width:42rem" id="card-final-check">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="finalChecks">(6) Final Checks</h5>\n <p id="finalChecks_text" data-alt-id="finalChecks_text1">Please ensure your video is well-lit and centered. Speak at a normal volume to check the audio level below.</p>\n\n <div id="video-quality-checks">\n <div class="column left">\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/badlighting.jpg" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <b data-alt-id="badLighting">Bad Lighting</b> ❌</br>\n <span data-alt-id="badLightingDescription">(Make sure eyes and face are clearly visible)</span>\n </div>\n <div class="column middle">\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/glassesReflection.jpg" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <b data-alt-id="glassesOn">Glasses On</b> ❌</br>\n <span data-alt-id="removeGlasses">(Remove Glasses)</span>\n </div>\n <div class="column middle">\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/goodPosition.jpg" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <b data-alt-id="idealView">Ideal View</b> ✔ ️</br>\n <span data-alt-id="idealViewDescription">(Face close to camera and centered with clear view of eyes)</span>\n </div>\n </div>\n <div class="container">\n <video autoplay="true" id="videoElement" style="width:100%; background-color: darkgray;"></video>\n <canvas id="audio-visualization" width="640" height="100"></canvas>\n </div>\n\n <button type="button" class="btn btn-primary" id="Final-Check" onclick="finalCheckComplete()" data-alt-id="finalChecks_text2" disabled>I\'m Looking and Sounding Great</button>\n </div>\n </div>\n </div> \n </div>\n \n \x3c!-- ROW 4b: Audio-Only Final Check --\x3e\n <div class="row gap-2" style="padding-top:1rem; display: none;" id="check-audiocollapsableCards">\n <div class="col">\n <div class="card" style="width:42rem" id="card-final-check-audio">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="finalChecks">(4) Final Checks</h5>\n <p id="finalChecks_audioOnly_text2" data-alt-id="finalChecks_audioOnly_text1">Speak at a normal volume to check the audio level below.</p>\n <div class="container">\n <canvas id="audio-visualization-audioonly" width="640" height="100"></canvas>\n </div>\n\n <button type="button" class="btn btn-primary" id="Final-Check-Audio" onclick="finalCheckComplete()" data-alt-id="finalChecks_text2" disabled>I\'m Sounding Great</button>\n </div>\n </div>\n </div> \n </div>\n \n\n \x3c!-- ROW 5: User Details --\x3e\n <div class="row gap-2" style="padding-top:1rem;">\n <div class="col">\n <div class="card" style="width:42rem" id="card-camera">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="readytostart">(8) Ready to Start?</h5>\n <label for="idInput" data-alt-id="readytostart_text1">Participant ID:</label>\n <input type="text" id="idInput" name="idInput" required\n minlength="1" maxlength="100" size="10">\n </br></br>\n <button type="button" class="btn btn-primary" id="confirmButton" data-alt-id="readytostart_text2" disabled>Continue</button>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n \x3c!-- Audio Playing --\x3e \n \x3c!-- <audio autoplay id="voiceover" src="https://eyetrackingdata.blob.core.windows.net/public/Audios/deviceConfig.mp3"></audio> --\x3e\n <audio autoplay id="voiceover"></audio>\n\n </body>\n\n<script data-dynamic>\nvar deviceConfig = {};\n\n// hide the pid box if the app is running on a URL that contains "roar.education" (i.e. prod)\n// TODO: gse-roar-admin-staging is for dashboard testing, remove before deploying to prod\nconst hidePIDBox = new URL(window.location).origin.includes("roar.education") || new URL(window.location).origin.includes("gse-roar-admin-staging");\n\nvar voiceover = document.getElementById(\'voiceover\'); // TO DO: Doesn\'t have enough time to load? Only plays if the consent screen shows up first\n\nRemoteCalibrator.init();\n\nvar desktop = document.documentElement;\nvar finalCheckButton = document.getElementById("Final-Check")\nvar finalCheckButtonAudio = document.getElementById("Final-Check-Audio")\nvar confirmButton = document.getElementById("confirmButton");\nvar cardFullscreen = document.getElementById("card-fullscreen");\nvar cardScreenSize = document.getElementById("card-screen-size");\nvar cardDistanceScreen = document.getElementById("card-distance-screen");\nvar cardcamera = document.getElementById("card-camera");\nvar cardwebcamCenter = document.getElementById("card-webcam-center");\nvar cardheightcamera = document.getElementById("card-height-camera")\nvar cardfinalcheck = document.getElementById("card-final-check");\nvar cardfinalcheckaudio = document.getElementById("card-final-check-audio");\nvar heightInput_textbox = document.getElementById("heightInput")\nvar idInput_textbox = document.getElementById("idInput")\nvar idInput_textbox = document.getElementById("idInput");\nvar idInput_label = document.querySelector(\'label[for="idInput"]\');\n\nif (hidePIDBox === true) {\n idInput_textbox.style.display = \'none\';\n idInput_label.style.display = \'none\';\n}\n\nvar video = document.querySelector("#videoElement");\nvar deviceConfigs = {}\n\nvar audioDetected = false;\nvar fullScreen = false;\nvar screenSizeCalibrated = false;\nvar cameraStarted = false;\nvar HeightWebcamEntered = false;\nvar finalcheck = false;\nvar webcamCentered = false;\nvar normalizedFocalLength = 0;\nvar prolificID;\nvar screenWidth=0;\nvar screenHeight=0;\nvar screenWidthPX=window.screen.width;\nvar screenHeightPX=window.screen.height;\nvar webcamHeight=0;\nvar distance = 0;\nvar webcamInfo;\nvar bEyeTracking = true;\n\n\nfunction makeid(length) {\n var result = \'\';\n var characters = \'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\';\n var charactersLength = characters.length;\n for ( var i = 0; i < length; i++ ) {\n result += characters.charAt(Math.floor(Math.random() * \n charactersLength));\n }\n return result;\n}\n\nfunction selectDevice() {\n const dropdown = document.getElementById("deviceList");\n const selectedValue = dropdown.options[dropdown.selectedIndex].value;\n\n // Check if the selected device is in deviceConfig, default to "custom" otherwise\n const selectedDeviceConfig =\n deviceConfigs[selectedValue] || deviceConfigs.custom;\n\n console.log(selectedDeviceConfig)\n // Call the handleDevice function with the selected device\'s configuration\n document.getElementById("findDevice").style.backgroundColor = "#bcf5bc";\n handleDevice(selectedDeviceConfig);\n\n}\n\n\n\nfunction openFullscreen() {\n if (desktop.requestFullscreen) {\n desktop.requestFullscreen();\n } else if (desktop.webkitRequestFullscreen) { /* Safari */\n desktop.webkitRequestFullscreen();\n } else if (desktop.msRequestFullscreen) { /* IE11 */\n desktop.msRequestFullscreen();\n }\n\n screenWidthPX = window.screen.width;\n screenHeightPX = window.screen.height;\n\n fullScreen = true\n cardFullscreen.style.backgroundColor = \'#bcf5bc\'\n\n checkAllComplete()\n}\n\nfunction getScreenSize(){\n RemoteCalibrator.screenSize({}, data => {\n console.log(`ScreenWidth: ${data.value.screenWidthCm}cm.`)\n console.log(`ScreenHeight: ${data.value.screenHeightCm}cm.`)\n\n screenWidth = data.value.screenWidthCm\n screenHeight = data.value.screenHeightCm\n\n if (screenWidth!=null && screenHeight!=null) {\n screenSizeCalibrated = true\n cardScreenSize.style.backgroundColor = \'#bcf5bc\'\n console.log(screenSizeCalibrated)\n }\n checkAllComplete()\n }) \n}\n\n\nfunction getwebcamCentered(){\n webcamCentered = true\n cardwebcamCenter.style.backgroundColor = \'#bcf5bc\'\n checkAllComplete()\n}\n\nfunction getHeightWebcam(){\n if (heightInput_textbox.value>0){\n HeightWebcamEntered = true\n webcamHeight = heightInput_textbox.value\n heightInput_textbox.disabled = true\n cardheightcamera.style.backgroundColor = \'#bcf5bc\'\n }\n checkAllComplete()\n}\n\nfunction finalCheckComplete(){\n let userConfirmed = true\n if (!audioDetected) {\n userConfirmed = confirm("We couldn\'t hear you, are you sure your microphone is working? Click OK to continue anyway, or Cancel to check your settings.");\n }\n if (userConfirmed) {\n finalcheck = true\n if (cardfinalcheck) {\n cardfinalcheck.style.backgroundColor = \'#bcf5bc\'\n }\n if (cardfinalcheckaudio) {\n cardfinalcheckaudio.style.backgroundColor = \'#bcf5bc\'\n }\n checkAllComplete()\n }\n}\n\n\nasync function setupMediaStream(requestVideo) {\n const audioContext = new AudioContext();\n const canvas = requestVideo ? document.getElementById(\'audio-visualization\') : document.getElementById(\'audio-visualization-audioonly\');\n const ctx = canvas.getContext(\'2d\');\n\n const mediaConstraints = {\n audio: true\n };\n \n if (requestVideo) {\n mediaConstraints.video = {\n width: { ideal: 1920 }, \n height: { ideal: 1080 }, \n frameRate: { ideal: 60, max: 60 },\n facingMode: "user"\n };\n }\n\n const cameraStream = await navigator.mediaDevices.getUserMedia(mediaConstraints);\n\n if (requestVideo && cameraStream.getVideoTracks().length > 0) {\n const { width, height } = cameraStream.getVideoTracks()[0].getSettings();\n const videoTrack = cameraStream.getVideoTracks()[0];\n webcamInfo = videoTrack.getCapabilities\n ? videoTrack.getCapabilities()\n : {};\n\n webcamInfo[\'image_width\'] = width\n webcamInfo[\'image_height\'] = height\n\n console.log(`${width}x${height}`); // Log video resolution\n\n const video = document.querySelector(\'video\');\n video.srcObject = cameraStream;\n video.muted = true; // Mute the video element to prevent audio playback\n\n if (height > 0) {\n cardcamera.style.backgroundColor = \'#bcf5bc\';\n cameraStarted = true;\n video.style.backgroundColor = \'#bcf5bc\';\n finalCheckButton.disabled = false;\n checkAllComplete();\n } else {\n video.style.backgroundColor = \'#FA8072\';\n alert("Your webcam does not meet our resolution standards");\n }\n } else if (!requestVideo) {\n // Audio-only mode\n const cardaudio = document.getElementById("card-audio");\n if (cardaudio) {\n cardaudio.style.backgroundColor = \'#bcf5bc\';\n }\n \n cameraStarted = true;\n if (finalCheckButtonAudio) {\n finalCheckButtonAudio.disabled = false;\n }\n checkAllComplete();\n }\n\n // Set up audio analyser\n const micSource = audioContext.createMediaStreamSource(cameraStream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n micSource.connect(analyser);\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n\n function draw() {\n requestAnimationFrame(draw);\n analyser.getByteTimeDomainData(dataArray);\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n\n ctx.lineWidth = 2;\n ctx.strokeStyle = \'rgb(0, 0, 0)\';\n ctx.beginPath();\n\n const sliceWidth = canvas.width * 1.0 / bufferLength;\n let x = 0;\n let sum = 0;\n\n for (let i = 0; i < bufferLength; i++) {\n const v = dataArray[i] / 128.0;\n const y = v * canvas.height / 2;\n\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n\n sum += (dataArray[i] - 128) * (dataArray[i] - 128); // Summing for RMS calculation\n x += sliceWidth;\n }\n\n ctx.lineTo(canvas.width, canvas.height / 2);\n ctx.stroke();\n let rms = Math.sqrt(sum / bufferLength);\n if (rms > 0.01) {\n audioDetected = true; // Update the audioDetected flag if audio is sufficiently loud\n }\n\n }\n\n draw(); // Start the drawing function\n}\n\ndocument.querySelector("#start-camera").addEventListener(\'click\', async () => {\n await setupMediaStream(true);\n});\n\ndocument.querySelector("#start-audio").addEventListener(\'click\', async () => {\n await setupMediaStream(false);\n});\n\n\nfunction checkAllComplete() {\n const hasCollapsedCards = Array.from(document.querySelectorAll(\'.card-title\')).some(card => \n card.closest(\'.card\').style.display === \'none\' || card.closest(\'.card\').offsetParent === null\n );\n const hasCameraCollapsedCards = Array.from(document.querySelectorAll(\'[id*="-cameracollapsableCards"]\')).every(element => \n element.style.display === \'none\' || element.offsetParent === null\n );\n\n const allConditionsMet = fullScreen && screenSizeCalibrated && cameraStarted && webcamCentered && HeightWebcamEntered && finalcheck;\n const minimalConditionsMet = cameraStarted && finalcheck && screenSizeCalibrated\n const bareConditionsMet = screenSizeCalibrated && cameraStarted && finalcheck\n \n let conditionsMet = false;\n if (bEyeTracking) {\n // Eye tracking mode: require camera access (cameraStarted) and finalcheck\n conditionsMet = (hasCollapsedCards && minimalConditionsMet) || (!hasCollapsedCards && allConditionsMet);\n } else {\n // Audio-only mode: require microphone access (cameraStarted) and finalcheck\n conditionsMet = hasCameraCollapsedCards && bareConditionsMet;\n }\n \n if (conditionsMet) {\n confirmButton.classList.remove(\'btn-secondary\')\n confirmButton.classList.add(\'btn-primary\')\n confirmButton.disabled = false;\n }\n}\n\n\n\n\n// function continueToTest(){\n// video.remove()\n// prolificID = idInput_textbox.value.trim() ? idInput_textbox.value : makeid(10);\n\n// localStorage.prolificID = prolificID\n// localStorage.screenHeight = screenHeight\n// localStorage.screenWidth = screenWidth\n// localStorage.webcamHeight = webcamHeight\n// localStorage.distance = distance\n// window.location.href = "criticalSpacingMenu_six.html";\n\n// }\n\n<\/script>',document.body.appendChild(t),await Fr(t),qr(Gr),Nr(t),function(e){""!==e.firekit.task.variantParams.deviceConfigFile&&collapseCards("Toggle");const n=Dr(e.firekit.task.variantParams.bEyeTracking);if(window.bEyeTracking=n,n){collapseCamera();const e=document.getElementById("access-cameracollapsableCards"),n=document.getElementById("access-audiocollapsableCards"),t=document.getElementById("check-cameracollapsableCards"),i=document.getElementById("check-audiocollapsableCards");e&&(e.style.display="block"),t&&(t.style.display="block"),n&&(n.style.display="none"),i&&(i.style.display="none")}else{collapseCamera();const e=document.getElementById("access-cameracollapsableCards"),n=document.getElementById("access-audiocollapsableCards"),t=document.getElementById("check-audiocollapsableCards");e&&(e.style.display="none"),n&&(n.style.display="block"),t&&(t.style.display="block")}""!==e.firekit.user.assessmentPid&&inputParticipantName(e.firekit.user.assessmentPid);var t=document.getElementById("voiceover");if(t.src="https://storage.googleapis.com/roav-ran/en/shared/audio/configureDeviceViewAudio.mp3",""!==e.firekit.task.variantParams.deviceConfigFile){var i=`https://eyetrackingdata.blob.core.windows.net/public/config/${e.firekit.task.variantParams.deviceConfigFile}.json`;updateDeviceConfigFromJSON(i)}t.play()}(e),Ur(be.store.data[be.language].translation),await new Promise((i=>{const s=document.getElementById("confirmButton");s&&s.addEventListener("click",(async()=>{try{var s=idInput_textbox.value.trim()?idInput_textbox.value:makeid(10);s!==e.firekit.user.assessmentPid&&e.firekit.updateUser({assessmentPid:s}),nc(),o.session.set("id",s),o.session.set("deviceConfig",{screenWidth:parseFloat(screenWidth),screenHeight:parseFloat(screenHeight),screenWidthPX:parseFloat(screenWidthPX),screenHeightPX:parseFloat(screenHeightPX),webcamHeight:parseFloat(webcamHeight),normalizedFocalLength:parseFloat(normalizedFocalLength),deviceInfo:Jr(),webcamInfo:webcamInfo,bEyeTracking:Dr(e.firekit.task.variantParams.bEyeTracking),storeVideo:Dr(e.firekit.task.variantParams.storeVideo),startTime:Date.now(),timed:e.firekit.task.variantParams.timed}),t.innerHTML=n,zr(Gr),Vr(),t.remove(),i()}catch(e){window.console.log("Error:",e)}}))}))}var dc='<script src="https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/face_mesh.min.js"><\/script>\n\n<script data-dynamic>\n var irisMetrics;\n var headMetrics;\n var headCoordinates;\n var leftEyeCoordinates = [];\n var rightEyeCoordinates = [];\n var movingContour;\n var fixedContour;\n var canvasContour;\n var focalLengthMultiple;\n var headMetrics_array = [];\n var irisMetrics_array = [];\n var mediaRecorder;\n var mediaChunks = [];\n var leftEyectx;\n var rightEyectx;\n var normalizedFocalLength;\n var blueCircle;\n var inferenceRetries = 0;\n var maxInferenceRetries = 100;\n\n var inputVideo = document.getElementsByClassName("inputVideo")[0];\n var headCanvas = document.getElementById("headCanvas");\n var headCtx = headCanvas.getContext("2d");\n\n var faceMesh = new FaceMesh({\n locateFile: (file) => {\n return `https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/${file}`;\n },\n });\n\n faceMesh.setOptions({\n selfieMode: true,\n enableFaceGeometry: false,\n maxNumFaces: 1,\n refineLandmarks: true,\n minDetectionConfidence: 0.5,\n minTrackingConfidence: 0.5,\n });\n\n faceMesh.onResults(onResultsFaceMesh);\n\n async function runInference() {\n await faceMesh.send({ image: inputVideo });\n try {\n if (!leftEyeCoordinates || leftEyeCoordinates.length === 0 || !rightEyeCoordinates || rightEyeCoordinates.length === 0) {\n inferenceRetries++;\n if (inferenceRetries > maxInferenceRetries) {\n console.warn("Max inference retries reached. Stopping eye tracking.");\n continueProcessing = false;\n return;\n }\n throw new Error("No face detected");\n }\n inferenceRetries = 0;\n let input1, input2, kpsTensor;\n let [upper_left_x, upper_left_y, width, height] = convertToYolo(\n leftEyeCoordinates,\n inputVideo.videoWidth,\n inputVideo.videoHeight,\n );\n let kps = [\n upper_left_x / inputVideo.videoWidth,\n upper_left_y / inputVideo.videoHeight,\n width / inputVideo.videoWidth,\n height / inputVideo.videoHeight,\n ];\n\n leftEyectx.drawImage(\n inputVideo,\n Math.max(0, inputVideo.videoWidth - upper_left_x - width),\n Math.max(0, upper_left_y),\n Math.max(0, width),\n Math.max(0, height),\n 0,\n 0,\n 128,\n 128,\n );\n\n [upper_left_x, upper_left_y, width, height] = convertToYolo(\n rightEyeCoordinates,\n inputVideo.videoWidth,\n inputVideo.videoHeight,\n );\n kps.push(\n upper_left_x / inputVideo.videoWidth,\n upper_left_y / inputVideo.videoHeight,\n width / inputVideo.videoWidth,\n height / inputVideo.videoHeight,\n );\n rightEyectx.drawImage(\n inputVideo,\n Math.max(0, inputVideo.videoWidth - upper_left_x - width),\n Math.max(0, upper_left_y),\n Math.max(0, width),\n Math.max(0, height),\n 0,\n 0,\n 128,\n 128,\n );\n\n imageData = leftEyectx.getImageData(0, 0, 128, 128);\n let preprocessedData = preprocess(imageData.data, 128, 128);\n input1 = new Tensor(preprocessedData, "float32", [1, 3, 128, 128]);\n imageData = rightEyectx.getImageData(0, 0, 128, 128);\n preprocessedData = preprocess(imageData.data, 128, 128);\n input2 = new Tensor(preprocessedData, "float32", [1, 3, 128, 128]);\n preprocessedData = preprocess_kps(kps);\n kpsTensor = new Tensor(preprocessedData, "float32", [1, 8]);\n\n myWorker.postMessage({\n input1: input1,\n input2: input2,\n kpsTensor: kpsTensor,\n });\n } catch (error) {\n console.log(error)\n if (inferenceRetries < maxInferenceRetries) {\n setTimeout(runInference, 50);\n } else {\n console.warn("Max inference retries reached. Stopping eye tracking.");\n continueProcessing = false;\n }\n }\n }\n\n myWorker.onmessage = async (e) => {\n if (e.data.error) {\n console.error("Error from worker:", e.data.error);\n } else {\n if (typeof runAfterEveryFrame === \'function\') {\n runAfterEveryFrame((output = e.data));\n }\n }\n\n if (continueProcessing) {\n runInference();\n }\n };\n<\/script>\n';function gc(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var mc=function(e){for(var n=new Array(e),t=0;t<e;++t)n[t]=t;return n},vc=function(e){return null!=e&&(gc(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&gc(e.slice(0,0))}(e)||!!e._isBuffer)},hc="undefined"!=typeof Float64Array;function fc(e,n){return e[0]-n[0]}function xc(){var e,n=this.stride,t=new Array(n.length);for(e=0;e<t.length;++e)t[e]=[Math.abs(n[e]),e];t.sort(fc);var i=new Array(t.length);for(e=0;e<i.length;++e)i[e]=t[e][1];return i}function bc(e,n){var t=["View",n,"d",e].join("");n<0&&(t="View_Nil"+e);var i="generic"===e;if(-1===n){var s="function "+t+"(a){this.data=a;};var proto="+t+".prototype;proto.dtype='"+e+"';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new "+t+"(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_"+t+"(a){return new "+t+"(a);}";return new Function(s)()}if(0===n){s="function "+t+"(a,d) {this.data = a;this.offset = d};var proto="+t+".prototype;proto.dtype='"+e+"';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function "+t+"_copy() {return new "+t+"(this.data,this.offset)};proto.pick=function "+t+"_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function "+t+"_get(){return "+(i?"this.data.get(this.offset)":"this.data[this.offset]")+"};proto.set=function "+t+"_set(v){return "+(i?"this.data.set(this.offset,v)":"this.data[this.offset]=v")+"};return function construct_"+t+"(a,b,c,d){return new "+t+"(a,d)}";return new Function("TrivialArray",s)(yc[e][0])}s=["'use strict'"];var a=mc(n),o=a.map((function(e){return"i"+e})),r="this.offset+"+a.map((function(e){return"this.stride["+e+"]*i"+e})).join("+"),c=a.map((function(e){return"b"+e})).join(","),l=a.map((function(e){return"c"+e})).join(",");s.push("function "+t+"(a,"+c+","+l+",d){this.data=a","this.shape=["+c+"]","this.stride=["+l+"]","this.offset=d|0}","var proto="+t+".prototype","proto.dtype='"+e+"'","proto.dimension="+n),s.push("Object.defineProperty(proto,'size',{get:function "+t+"_size(){return "+a.map((function(e){return"this.shape["+e+"]"})).join("*"),"}})"),1===n?s.push("proto.order=[0]"):(s.push("Object.defineProperty(proto,'order',{get:"),n<4?(s.push("function "+t+"_order(){"),2===n?s.push("return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})"):3===n&&s.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):s.push("ORDER})")),s.push("proto.set=function "+t+"_set("+o.join(",")+",v){"),i?s.push("return this.data.set("+r+",v)}"):s.push("return this.data["+r+"]=v}"),s.push("proto.get=function "+t+"_get("+o.join(",")+"){"),i?s.push("return this.data.get("+r+")}"):s.push("return this.data["+r+"]}"),s.push("proto.index=function "+t+"_index(",o.join(),"){return "+r+"}"),s.push("proto.hi=function "+t+"_hi("+o.join(",")+"){return new "+t+"(this.data,"+a.map((function(e){return["(typeof i",e,"!=='number'||i",e,"<0)?this.shape[",e,"]:i",e,"|0"].join("")})).join(",")+","+a.map((function(e){return"this.stride["+e+"]"})).join(",")+",this.offset)}");var p=a.map((function(e){return"a"+e+"=this.shape["+e+"]"})),u=a.map((function(e){return"c"+e+"=this.stride["+e+"]"}));s.push("proto.lo=function "+t+"_lo("+o.join(",")+"){var b=this.offset,d=0,"+p.join(",")+","+u.join(","));for(var d=0;d<n;++d)s.push("if(typeof i"+d+"==='number'&&i"+d+">=0){d=i"+d+"|0;b+=c"+d+"*d;a"+d+"-=d}");s.push("return new "+t+"(this.data,"+a.map((function(e){return"a"+e})).join(",")+","+a.map((function(e){return"c"+e})).join(",")+",b)}"),s.push("proto.step=function "+t+"_step("+o.join(",")+"){var "+a.map((function(e){return"a"+e+"=this.shape["+e+"]"})).join(",")+","+a.map((function(e){return"b"+e+"=this.stride["+e+"]"})).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(d=0;d<n;++d)s.push("if(typeof i"+d+"==='number'){d=i"+d+"|0;if(d<0){c+=b"+d+"*(a"+d+"-1);a"+d+"=ceil(-a"+d+"/d)}else{a"+d+"=ceil(a"+d+"/d)}b"+d+"*=d}");s.push("return new "+t+"(this.data,"+a.map((function(e){return"a"+e})).join(",")+","+a.map((function(e){return"b"+e})).join(",")+",c)}");var g=new Array(n),m=new Array(n);for(d=0;d<n;++d)g[d]="a[i"+d+"]",m[d]="b[i"+d+"]";s.push("proto.transpose=function "+t+"_transpose("+o+"){"+o.map((function(e,n){return e+"=("+e+"===undefined?"+n+":"+e+"|0)"})).join(";"),"var a=this.shape,b=this.stride;return new "+t+"(this.data,"+g.join(",")+","+m.join(",")+",this.offset)}"),s.push("proto.pick=function "+t+"_pick("+o+"){var a=[],b=[],c=this.offset");for(d=0;d<n;++d)s.push("if(typeof i"+d+"==='number'&&i"+d+">=0){c=(c+this.stride["+d+"]*i"+d+")|0}else{a.push(this.shape["+d+"]);b.push(this.stride["+d+"])}");return s.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),s.push("return function construct_"+t+"(data,shape,stride,offset){return new "+t+"(data,"+a.map((function(e){return"shape["+e+"]"})).join(",")+","+a.map((function(e){return"stride["+e+"]"})).join(",")+",offset)}"),new Function("CTOR_LIST","ORDER",s.join("\n"))(yc[e],xc)}var yc={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],bigint64:[],biguint64:[],buffer:[],generic:[]};var wc=t((function(e,n,t,i){if(void 0===e)return(0,yc.array[0])([]);"number"==typeof e&&(e=[e]),void 0===n&&(n=[e.length]);var s=n.length;if(void 0===t){t=new Array(s);for(var a=s-1,o=1;a>=0;--a)t[a]=o,o*=n[a]}if(void 0===i){i=0;for(a=0;a<s;++a)t[a]<0&&(i-=(n[a]-1)*t[a])}for(var r=function(e){if(vc(e))return"buffer";if(hc)switch(Object.prototype.toString.call(e)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object Uint8ClampedArray]":return"uint8_clamped";case"[object BigInt64Array]":return"bigint64";case"[object BigUint64Array]":return"biguint64"}return Array.isArray(e)?"array":"generic"}(e),c=yc[r];c.length<=s+1;)c.push(bc(r,c.length-1));return(0,c[s+1])(e,n,t,i)})),kc={};var Sc=function(e,n,t){return 0===e.length?e:n?(t||e.sort(n),function(e,n){for(var t=1,i=e.length,s=e[0],a=e[0],o=1;o<i;++o)if(a=s,n(s=e[o],a)){if(o===t){t++;continue}e[t++]=s}return e.length=t,e}(e,n)):(t||e.sort(),function(e){for(var n=1,t=e.length,i=e[0],s=e[0],a=1;a<t;++a,s=i)if(s=i,(i=e[a])!==s){if(a===n){n++;continue}e[n++]=i}return e.length=n,e}(e))};function jc(e,n,t){var i,s,a=e.length,o=n.arrayArgs.length,r=n.indexArgs.length>0,c=[],l=[],p=0,u=0;for(i=0;i<a;++i)l.push(["i",i,"=0"].join(""));for(s=0;s<o;++s)for(i=0;i<a;++i)u=p,p=e[i],0===i?l.push(["d",s,"s",i,"=t",s,"p",p].join("")):l.push(["d",s,"s",i,"=(t",s,"p",p,"-s",u,"*t",s,"p",u,")"].join(""));for(l.length>0&&c.push("var "+l.join(",")),i=a-1;i>=0;--i)p=e[i],c.push(["for(i",i,"=0;i",i,"<s",p,";++i",i,"){"].join(""));for(c.push(t),i=0;i<a;++i){for(u=p,p=e[i],s=0;s<o;++s)c.push(["p",s,"+=d",s,"s",i].join(""));r&&(i>0&&c.push(["index[",u,"]-=s",u].join("")),c.push(["++index[",p,"]"].join(""))),c.push("}")}return c.join("\n")}function _c(e,n,t){for(var i=e.body,s=[],a=[],o=0;o<e.args.length;++o){var r=e.args[o];if(!(r.count<=0)){var c=new RegExp(r.name,"g"),l="",p=n.arrayArgs.indexOf(o);switch(n.argTypes[o]){case"offset":var u=n.offsetArgIndex.indexOf(o);p=n.offsetArgs[u].array,l="+q"+u;case"array":l="p"+p+l;var d="l"+o,g="a"+p;if(0===n.arrayBlockIndices[p])1===r.count?"generic"===t[p]?r.lvalue?(s.push(["var ",d,"=",g,".get(",l,")"].join("")),i=i.replace(c,d),a.push([g,".set(",l,",",d,")"].join(""))):i=i.replace(c,[g,".get(",l,")"].join("")):i=i.replace(c,[g,"[",l,"]"].join("")):"generic"===t[p]?(s.push(["var ",d,"=",g,".get(",l,")"].join("")),i=i.replace(c,d),r.lvalue&&a.push([g,".set(",l,",",d,")"].join(""))):(s.push(["var ",d,"=",g,"[",l,"]"].join("")),i=i.replace(c,d),r.lvalue&&a.push([g,"[",l,"]=",d].join("")));else{for(var m=[r.name],v=[l],h=0;h<Math.abs(n.arrayBlockIndices[p]);h++)m.push("\\s*\\[([^\\]]+)\\]"),v.push("$"+(h+1)+"*t"+p+"b"+h);if(c=new RegExp(m.join(""),"g"),l=v.join("+"),"generic"===t[p])throw new Error("cwise: Generic arrays not supported in combination with blocks!");i=i.replace(c,[g,"[",l,"]"].join(""))}break;case"scalar":i=i.replace(c,"Y"+n.scalarArgs.indexOf(o));break;case"index":i=i.replace(c,"index");break;case"shape":i=i.replace(c,"shape")}}}return[s.join("\n"),i,a.join("\n")].join("\n").trim()}function Cc(e){for(var n=new Array(e.length),t=!0,i=0;i<e.length;++i){var s=e[i],a=s.match(/\d+/);a=a?a[0]:"",0===s.charAt(0)?n[i]="u"+s.charAt(1)+a:n[i]=s.charAt(0)+a,i>0&&(t=t&&n[i]===n[i-1])}return t?n[0]:n.join("")}var Ac=function(e,n){for(var t=n[1].length-Math.abs(e.arrayBlockIndices[0])|0,i=new Array(e.arrayArgs.length),s=new Array(e.arrayArgs.length),a=0;a<e.arrayArgs.length;++a)s[a]=n[2*a],i[a]=n[2*a+1];var o=[],r=[],c=[],l=[],p=[];for(a=0;a<e.arrayArgs.length;++a){e.arrayBlockIndices[a]<0?(c.push(0),l.push(t),o.push(t),r.push(t+e.arrayBlockIndices[a])):(c.push(e.arrayBlockIndices[a]),l.push(e.arrayBlockIndices[a]+t),o.push(0),r.push(e.arrayBlockIndices[a]));for(var u=[],d=0;d<i[a].length;d++)c[a]<=i[a][d]&&i[a][d]<l[a]&&u.push(i[a][d]-c[a]);p.push(u)}var g=["SS"],m=["'use strict'"],v=[];for(d=0;d<t;++d)v.push(["s",d,"=SS[",d,"]"].join(""));for(a=0;a<e.arrayArgs.length;++a){g.push("a"+a),g.push("t"+a),g.push("p"+a);for(d=0;d<t;++d)v.push(["t",a,"p",d,"=t",a,"[",c[a]+d,"]"].join(""));for(d=0;d<Math.abs(e.arrayBlockIndices[a]);++d)v.push(["t",a,"b",d,"=t",a,"[",o[a]+d,"]"].join(""))}for(a=0;a<e.scalarArgs.length;++a)g.push("Y"+a);if(e.shapeArgs.length>0&&v.push("shape=SS.slice(0)"),e.indexArgs.length>0){var h=new Array(t);for(a=0;a<t;++a)h[a]="0";v.push(["index=[",h.join(","),"]"].join(""))}for(a=0;a<e.offsetArgs.length;++a){var f=e.offsetArgs[a],x=[];for(d=0;d<f.offset.length;++d)0!==f.offset[d]&&(1===f.offset[d]?x.push(["t",f.array,"p",d].join("")):x.push([f.offset[d],"*t",f.array,"p",d].join("")));0===x.length?v.push("q"+a+"=0"):v.push(["q",a,"=",x.join("+")].join(""))}var b=Sc([].concat(e.pre.thisVars).concat(e.body.thisVars).concat(e.post.thisVars));for((v=v.concat(b)).length>0&&m.push("var "+v.join(",")),a=0;a<e.arrayArgs.length;++a)m.push("p"+a+"|=0");e.pre.body.length>3&&m.push(_c(e.pre,e,s));var y=_c(e.body,e,s),w=function(e){for(var n=0,t=e[0].length;n<t;){for(var i=1;i<e.length;++i)if(e[i][n]!==e[0][n])return n;++n}return n}(p);w<t?m.push(function(e,n,t,i){for(var s=n.length,a=t.arrayArgs.length,o=t.blockSize,r=t.indexArgs.length>0,c=[],l=0;l<a;++l)c.push(["var offset",l,"=p",l].join(""));for(l=e;l<s;++l)c.push(["for(var j"+l+"=SS[",n[l],"]|0;j",l,">0;){"].join("")),c.push(["if(j",l,"<",o,"){"].join("")),c.push(["s",n[l],"=j",l].join("")),c.push(["j",l,"=0"].join("")),c.push(["}else{s",n[l],"=",o].join("")),c.push(["j",l,"-=",o,"}"].join("")),r&&c.push(["index[",n[l],"]=j",l].join(""));for(l=0;l<a;++l){for(var p=["offset"+l],u=e;u<s;++u)p.push(["j",u,"*t",l,"p",n[u]].join(""));c.push(["p",l,"=(",p.join("+"),")"].join(""))}for(c.push(jc(n,t,i)),l=e;l<s;++l)c.push("}");return c.join("\n")}(w,p[0],e,y)):m.push(jc(p[0],e,y)),e.post.body.length>3&&m.push(_c(e.post,e,s)),e.debug&&console.log("-----Generated cwise routine for ",n,":\n"+m.join("\n")+"\n----------");var k=[e.funcName||"unnamed","_cwise_loop_",i[0].join("s"),"m",w,Cc(s)].join("");return new Function(["function ",k,"(",g.join(","),"){",m.join("\n"),"} return ",k].join(""))()},Ec=Ac;var Rc=function(e){var n=["'use strict'","var CACHED={}"],t=[],i=e.funcName+"_cwise_thunk";n.push(["return function ",i,"(",e.shimArgs.join(","),"){"].join(""));for(var s=[],a=[],o=[["array",e.arrayArgs[0],".shape.slice(",Math.max(0,e.arrayBlockIndices[0]),e.arrayBlockIndices[0]<0?","+e.arrayBlockIndices[0]+")":")"].join("")],r=[],c=[],l=0;l<e.arrayArgs.length;++l){var p=e.arrayArgs[l];t.push(["t",p,"=array",p,".dtype,","r",p,"=array",p,".order"].join("")),s.push("t"+p),s.push("r"+p),a.push("t"+p),a.push("r"+p+".join()"),o.push("array"+p+".data"),o.push("array"+p+".stride"),o.push("array"+p+".offset|0"),l>0&&(r.push("array"+e.arrayArgs[0]+".shape.length===array"+p+".shape.length+"+(Math.abs(e.arrayBlockIndices[0])-Math.abs(e.arrayBlockIndices[l]))),c.push("array"+e.arrayArgs[0]+".shape[shapeIndex+"+Math.max(0,e.arrayBlockIndices[0])+"]===array"+p+".shape[shapeIndex+"+Math.max(0,e.arrayBlockIndices[l])+"]"))}for(e.arrayArgs.length>1&&(n.push("if (!("+r.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same dimensionality!')"),n.push("for(var shapeIndex=array"+e.arrayArgs[0]+".shape.length-"+Math.abs(e.arrayBlockIndices[0])+"; shapeIndex--\x3e0;) {"),n.push("if (!("+c.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same shape!')"),n.push("}")),l=0;l<e.scalarArgs.length;++l)o.push("scalar"+e.scalarArgs[l]);return t.push(["type=[",a.join(","),"].join()"].join("")),t.push("proc=CACHED[type]"),n.push("var "+t.join(",")),n.push(["if(!proc){","CACHED[type]=proc=compile([",s.join(","),"])}","return proc(",o.join(","),")}"].join("")),e.debug&&console.log("-----Generated thunk:\n"+n.join("\n")+"\n----------"),new Function("compile",n.join("\n"))(Ec.bind(void 0,e))};function Lc(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName="",this.pre=null,this.body=null,this.post=null,this.debug=!1}var Mc=function(e){var n=new Lc;n.pre=e.pre,n.body=e.body,n.post=e.post;var t=e.args.slice(0);n.argTypes=t;for(var i=0;i<t.length;++i){var s=t[i];if("array"===s||"object"==typeof s&&s.blockIndices){if(n.argTypes[i]="array",n.arrayArgs.push(i),n.arrayBlockIndices.push(s.blockIndices?s.blockIndices:0),n.shimArgs.push("array"+i),i<n.pre.args.length&&n.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array args");if(i<n.post.args.length&&n.post.args[i].count>0)throw new Error("cwise: post() block may not reference array args")}else if("scalar"===s)n.scalarArgs.push(i),n.shimArgs.push("scalar"+i);else if("index"===s){if(n.indexArgs.push(i),i<n.pre.args.length&&n.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array index");if(i<n.body.args.length&&n.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array index");if(i<n.post.args.length&&n.post.args[i].count>0)throw new Error("cwise: post() block may not reference array index")}else if("shape"===s){if(n.shapeArgs.push(i),i<n.pre.args.length&&n.pre.args[i].lvalue)throw new Error("cwise: pre() block may not write to array shape");if(i<n.body.args.length&&n.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array shape");if(i<n.post.args.length&&n.post.args[i].lvalue)throw new Error("cwise: post() block may not write to array shape")}else{if("object"!=typeof s||!s.offset)throw new Error("cwise: Unknown argument type "+t[i]);n.argTypes[i]="offset",n.offsetArgs.push({array:s.array,offset:s.offset}),n.offsetArgIndex.push(i)}}if(n.arrayArgs.length<=0)throw new Error("cwise: No array arguments specified");if(n.pre.args.length>t.length)throw new Error("cwise: Too many arguments in pre() block");if(n.body.args.length>t.length)throw new Error("cwise: Too many arguments in body() block");if(n.post.args.length>t.length)throw new Error("cwise: Too many arguments in post() block");return n.debug=!!e.printCode||!!e.debug,n.funcName=e.funcName||"cwise",n.blockSize=e.blockSize||64,Rc(n)};!function(e){var n=Mc,t={body:"",args:[],thisVars:[],localVars:[]};function i(e){if(!e)return t;for(var n=0;n<e.args.length;++n){var i=e.args[n];e.args[n]=0===n?{name:i,lvalue:!0,rvalue:!!e.rvalue,count:e.count||1}:{name:i,lvalue:!1,rvalue:!0,count:1}}return e.thisVars||(e.thisVars=[]),e.localVars||(e.localVars=[]),e}function s(e){for(var t=[],s=0;s<e.args.length;++s)t.push("a"+s);return new Function("P",["return function ",e.funcName,"_ndarrayops(",t.join(","),") {P(",t.join(","),");return a0}"].join(""))(function(e){return n({args:e.args,pre:i(e.pre),body:i(e.body),post:i(e.proc),funcName:e.funcName})}(e))}var a={add:"+",sub:"-",mul:"*",div:"/",mod:"%",band:"&",bor:"|",bxor:"^",lshift:"<<",rshift:">>",rrshift:">>>"};!function(){for(var n in a){var t=a[n];e[n]=s({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+t+"c"},funcName:n}),e[n+"eq"]=s({args:["array","array"],body:{args:["a","b"],body:"a"+t+"=b"},rvalue:!0,funcName:n+"eq"}),e[n+"s"]=s({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+t+"s"},funcName:n+"s"}),e[n+"seq"]=s({args:["array","scalar"],body:{args:["a","s"],body:"a"+t+"=s"},rvalue:!0,funcName:n+"seq"})}}();var o={not:"!",bnot:"~",neg:"-",recip:"1.0/"};!function(){for(var n in o){var t=o[n];e[n]=s({args:["array","array"],body:{args:["a","b"],body:"a="+t+"b"},funcName:n}),e[n+"eq"]=s({args:["array"],body:{args:["a"],body:"a="+t+"a"},rvalue:!0,count:2,funcName:n+"eq"})}}();var r={and:"&&",or:"||",eq:"===",neq:"!==",lt:"<",gt:">",leq:"<=",geq:">="};!function(){for(var n in r){var t=r[n];e[n]=s({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+t+"c"},funcName:n}),e[n+"s"]=s({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+t+"s"},funcName:n+"s"}),e[n+"eq"]=s({args:["array","array"],body:{args:["a","b"],body:"a=a"+t+"b"},rvalue:!0,count:2,funcName:n+"eq"}),e[n+"seq"]=s({args:["array","scalar"],body:{args:["a","s"],body:"a=a"+t+"s"},rvalue:!0,count:2,funcName:n+"seq"})}}();var c=["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan"];!function(){for(var n=0;n<c.length;++n){var t=c[n];e[t]=s({args:["array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b)",thisVars:["this_f"]},funcName:t}),e[t+"eq"]=s({args:["array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a"],body:"a=this_f(a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"eq"})}}();var l=["max","min","atan2","pow"];!function(){for(var n=0;n<l.length;++n){var t=l[n];e[t]=s({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:t}),e[t+"s"]=s({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:t+"s"}),e[t+"eq"]=s({args:["array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"eq"}),e[t+"seq"]=s({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"seq"})}}();var p=["atan2","pow"];!function(){for(var n=0;n<p.length;++n){var t=p[n];e[t+"op"]=s({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:t+"op"}),e[t+"ops"]=s({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:t+"ops"}),e[t+"opeq"]=s({args:["array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"opeq"}),e[t+"opseq"]=s({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"opseq"})}}(),e.any=n({args:["array"],pre:t,body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"if(a){return true}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return false"},funcName:"any"}),e.all=n({args:["array"],pre:t,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1}],body:"if(!x){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"all"}),e.sum=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s+=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"sum"}),e.prod=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=1"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s*=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"prod"}),e.norm2squared=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm2squared"}),e.norm2=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return Math.sqrt(this_s)"},funcName:"norm2"}),e.norminf=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:4}],body:"if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norminf"}),e.norm1=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:3}],body:"this_s+=a<0?-a:a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm1"}),e.sup=n({args:["array"],pre:{body:"this_h=-Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),e.inf=n({args:["array"],pre:{body:"this_h=Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),e.argmin=n({args:["index","array","shape"],pre:{body:"{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),e.argmax=n({args:["index","array","shape"],pre:{body:"{this_v=-Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_>this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),e.random=s({args:["array"],pre:{args:[],body:"this_f=Math.random",thisVars:["this_f"]},body:{args:["a"],body:"a=this_f()",thisVars:["this_f"]},funcName:"random"}),e.assign=s({args:["array","array"],body:{args:["a","b"],body:"a=b"},funcName:"assign"}),e.assigns=s({args:["array","scalar"],body:{args:["a","b"],body:"a=b"},funcName:"assigns"}),e.equals=n({args:["array","array"],pre:t,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1},{name:"y",lvalue:!1,rvalue:!0,count:1}],body:"if(x!==y){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"equals"})}(kc);var Ic=t(kc),Dc=[[474,475],[475,476],[476,477],[477,474]],Oc=[[469,470],[470,471],[471,472],[472,469]],Tc=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Pc(e,n,t,i){e.forEach((e=>{const s=n[e[0]].x*t;i(s)}))}function Fc(e,n,t){n.forEach((n=>{const i=e[n];t.push([i.x,i.y])}))}function Nc(e,n,t,i,s){return Math.min(e,n)*s*(t/i)/10}function qc(e){let n=1/0,t=-1/0,i=1/0,s=-1/0;e.forEach((e=>{n=Math.min(n,e[0]),t=Math.max(t,e[0]),i=Math.min(i,e[1]),s=Math.max(s,e[1])}));return{headWidth:t-n,headHeight:s-i,headCenterX:(n+t)/2,headCenterY:(i+s)/2}}function zc(e){let n=0;for(let t=0;t<e.length;t++){const i=(t+1)%e.length;n+=e[t][0]*e[i][1],n-=e[i][0]*e[t][1]}return Math.abs(n/2)}var Vc=Object.freeze({__proto__:null,FACEMESH_FACE_OVAL:Tc,FACEMESH_LEFT_IRIS:Dc,FACEMESH_RIGHT_IRIS:Oc,calculateHeadMetrics:qc,convertToYolo:function(e,n,t){let i=(e[0][0]+e[2][0])/2,s=(e[1][1]+e[3][1])/2,a=e[2][0]-e[0][0],o=e[3][1]-e[1][1],r=[i,s,a,o];return a=r[2]*n,o=r[3]*t,[(r[0]-r[2]/2)*n,(r[1]-r[3]/2)*t,a,o]},defaultDeviceConfig:{screenWidth:30.2,screenHeight:19.6,screenWidthPX:1512,screenHeightPX:892,webcamHeight:2,normalizedFocalLength:1.3},defaultParticipantConfig:{headCenterX:.4383369982242584,headCenterY:.6562557443976402,headHeight:.3467509150505066,headWidth:.17240141332149506,widthLeftIris:29.442644119262695,widthRightIris:29.782133102416992,canvasContour:[[.4412970542907715,.4813721179962158],[.4646510183811188,.4823227524757385],[.48430705070495605,.48748111724853516],[.5025681853294373,.4987863302230835],[.5136374235153198,.5169670581817627],[.5202310681343079,.5401103496551514],[.5239146947860718,.5652479529380798],[.5248485207557678,.5970170497894287],[.5236638784408569,.6280523538589478],[.5220870971679688,.6599369645118713],[.519332766532898,.6945410370826721],[.5138625502586365,.7309722304344177],[.5065117478370667,.7603253722190857],[.4982540011405945,.7814207673072815],[.48702606558799744,.7993608713150024],[.4769010543823242,.8114907741546631],[.46630799770355225,.8215509057044983],[.4544796049594879,.8288376331329346],[.4395001232624054,.8312488794326782],[.42436403036117554,.8285082578659058],[.41225385665893555,.8210300207138062],[.40132373571395874,.8104891777038574],[.3908883333206177,.7982432246208191],[.3792901039123535,.7797933220863342],[.3707539737224579,.7583227753639221],[.36319053173065186,.728979766368866],[.35756009817123413,.6924722790718079],[.35495781898498535,.6577485203742981],[.35378265380859375,.6259740591049194],[.35298871994018555,.594894528388977],[.35470905900001526,.5631847381591797],[.3590857684612274,.5380555391311646],[.3667783737182617,.5149739384651184],[.37868133187294006,.4971347451210022],[.3973395824432373,.4863966703414917],[.41754668951034546,.4818713068962097]]},initEyeTracking:function(e=!1,n=!1){blueCircle=window.document.createElement("div"),blueCircle.setAttribute("id","blueCircle"),blueCircle.style.position="absolute",blueCircle.style.width="20px",blueCircle.style.height="20px",blueCircle.style.backgroundColor="blue",blueCircle.style.borderRadius="50%",blueCircle.style.transform="translate(-50%, -50%)",blueCircle.style.display="none",document.body.appendChild(blueCircle);const t=document.createElement("canvas");t.setAttribute("id","leftEye"),t.setAttribute("width","128"),t.setAttribute("height","128"),t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.display="none",document.body.appendChild(t);const i=document.createElement("canvas");i.setAttribute("id","rightEye"),i.setAttribute("width","128"),i.setAttribute("height","128"),i.style.position="absolute",i.style.top="0",i.style.left="128px",i.style.display="none",document.body.appendChild(i),e&&(t.style.display="block",i.style.display="block"),n&&(blueCircle.style.display="block"),leftEyectx=t.getContext("2d",{willReadFrequently:!0}),rightEyectx=i.getContext("2d",{willReadFrequently:!0})},isAreaWithinRange:function(e,n){const t=zc(e),i=zc(n);return i>=.82*t&&i<=1.17*t},isCentroidInsidePath:function(e,n){return function(e,n){let t=!1;const i=e[0],s=e[1];for(let e=0,a=n.length-1;e<n.length;a=e++){const o=n[e][0],r=n[e][1],c=n[a][0],l=n[a][1];r>s!=l>s&&i<(c-o)*(s-r)/(l-r)+o&&(t=!t)}return t}(function(e){let n=0,t=0;for(let i=0;i<e.length;i++)n+=e[i][0],t+=e[i][1];return[n/e.length,t/e.length]}(n),e)},onResultsFaceMesh:function(e){const n=e.image.width,t=e.image.height,i=[],s=[],a=[];let o=1/0,r=-1/0,c=1/0,l=-1/0;if(headCtx.save(),headCtx.clearRect(0,0,headCanvas.width,headCanvas.height),e.multiFaceLandmarks&&e.multiFaceLandmarks.forEach((e=>{if(Pc(Dc,e,n,(e=>{o=Math.min(o,e),r=Math.max(r,e)})),Pc(Oc,e,n,(e=>{c=Math.min(c,e),l=Math.max(l,e)})),Fc(e,[130,27,243,23],i),Fc(e,[463,257,359,253],s),"undefined"!=typeof canvasContour&&canvasContour){var p=function(e,n,t,i,s,a,o){if(!e)return;const r=[],c=e.map((e=>[e[0]*t,e[1]*i]));return n.beginPath(),c.forEach((([e,t],i)=>{r.push([e,t]),n[0===i?"moveTo":"lineTo"](e,t)})),n.closePath(),n.strokeStyle=s,n.lineWidth=a,n.fillStyle=o,n.stroke(),r}(canvasContour,headCtx,n,t,"rgba(13, 110, 253, 1.0)",3,"transparent");fixedContour=p}var u=function(e,n,t,i,s,a){const o=e.map((e=>{const t=n[e[0]];return a.push([t.x,t.y]),[t.x*i,t.y*s]})),r=[];return t.beginPath(),o.forEach((([e,n],i)=>{r.push([e,n]),t[0===i?"moveTo":"lineTo"](e,n)})),t.closePath(),t.fillStyle="rgba(13, 110, 253, 1.0)",t.fill(),r}(Tc,e,headCtx,n,t,a);movingContour=u})),headCtx.restore(),normalizedFocalLength>0){const e=((Nc(n,t,11.7,r-o,normalizedFocalLength)+Nc(n,t,11.7,l-c,normalizedFocalLength))/2).toFixed(0);current_viewingDistance=e}focalLengthMultiple=Math.min(n,t),irisMetrics={widthLeftIris:r-o,widthRightIris:l-c},headMetrics=qc(a),leftEyeCoordinates=i,rightEyeCoordinates=s,headCoordinates=a},preprocess:function(e,n,t){const i=wc(new Float32Array(e),[n,t,4]),s=wc(new Float32Array(n*t*3),[1,3,t,n]);return Ic.divseq(i,255),Ic.assign(s.pick(0,0,null,null),i.pick(null,null,2)),Ic.assign(s.pick(0,1,null,null),i.pick(null,null,1)),Ic.assign(s.pick(0,2,null,null),i.pick(null,null,0)),new Float32Array(s.data)},preprocess_kps:function(e,n,t){const i=wc(new Float32Array(e),[e.length]),s=wc(new Float32Array(e.length),[1,e.length]);return Ic.assign(s.pick(0,null),i),new Float32Array(s.data)}}),Bc={};const Uc=Object.prototype.toString;function Hc(e){const n=Uc.call(e);return n.endsWith("Array]")&&!n.includes("Big")}var Wc=i(Object.freeze({__proto__:null,isAnyArray:Hc}));var $c=i(Object.freeze({__proto__:null,default:function(e){var n,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Hc(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");if(void 0!==t.output){if(!Hc(t.output))throw new TypeError("output option must be an array if specified");n=t.output}else n=new Array(e.length);var i=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Hc(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");var t=n.fromIndex,i=void 0===t?0:t,s=n.toIndex,a=void 0===s?e.length:s;if(i<0||i>=e.length||!Number.isInteger(i))throw new Error("fromIndex must be a positive integer smaller than length");if(a<=i||a>e.length||!Number.isInteger(a))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=e[i],r=i+1;r<a;r++)e[r]<o&&(o=e[r]);return o}(e),s=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Hc(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");var t=n.fromIndex,i=void 0===t?0:t,s=n.toIndex,a=void 0===s?e.length:s;if(i<0||i>=e.length||!Number.isInteger(i))throw new Error("fromIndex must be a positive integer smaller than length");if(a<=i||a>e.length||!Number.isInteger(a))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=e[i],r=i+1;r<a;r++)e[r]>o&&(o=e[r]);return o}(e);if(i===s)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var a=t.min,o=void 0===a?t.autoMinMax?i:0:a,r=t.max,c=void 0===r?t.autoMinMax?s:1:r;if(o>=c)throw new RangeError("min option must be smaller than max option");for(var l=(c-o)/(s-i),p=0;p<e.length;p++)n[p]=(e[p]-i)*l+o;return n}}));Object.defineProperty(Bc,"__esModule",{value:!0});var Yc=Wc,Kc=$c;const Xc=" ".repeat(2),Gc=" ".repeat(4);function Jc(e,n={}){const{maxRows:t=15,maxColumns:i=10,maxNumSize:s=8,padMinus:a="auto"}=n;return`${e.constructor.name} {\n${Xc}[\n${Gc}${function(e,n,t,i,s){const{rows:a,columns:o}=e,r=Math.min(a,n),c=Math.min(o,t),l=[];if("auto"===s){s=!1;e:for(let n=0;n<r;n++)for(let t=0;t<c;t++)if(e.get(n,t)<0){s=!0;break e}}for(let n=0;n<r;n++){let t=[];for(let a=0;a<c;a++)t.push(Qc(e.get(n,a),i,s));l.push(`${t.join(" ")}`)}c!==o&&(l[l.length-1]+=` ... ${o-t} more columns`);r!==a&&l.push(`... ${a-n} more rows`);return l.join(`\n${Gc}`)}(e,t,i,s,a)}\n${Xc}]\n${Xc}rows: ${e.rows}\n${Xc}columns: ${e.columns}\n}`}function Qc(e,n,t){return(e>=0&&t?` ${Zc(e,n-1)}`:Zc(e,n)).padEnd(n)}function Zc(e,n){let t=e.toString();if(t.length<=n)return t;let i=e.toFixed(n);if(i.length>n&&(i=e.toFixed(Math.max(0,n-(i.length-n)))),i.length<=n&&!i.startsWith("0.000")&&!i.startsWith("-0.000"))return i;let s=e.toExponential(n);return s.length>n&&(s=e.toExponential(Math.max(0,n-(s.length-n)))),s.slice(0)}function el(e,n,t){let i=t?e.rows:e.rows-1;if(n<0||n>i)throw new RangeError("Row index out of range")}function nl(e,n,t){let i=t?e.columns:e.columns-1;if(n<0||n>i)throw new RangeError("Column index out of range")}function tl(e,n){if(n.to1DArray&&(n=n.to1DArray()),n.length!==e.columns)throw new RangeError("vector size must be the same as the number of columns");return n}function il(e,n){if(n.to1DArray&&(n=n.to1DArray()),n.length!==e.rows)throw new RangeError("vector size must be the same as the number of rows");return n}function sl(e,n){if(!Yc.isAnyArray(n))throw new TypeError("row indices must be an array");for(let t=0;t<n.length;t++)if(n[t]<0||n[t]>=e.rows)throw new RangeError("row indices are out of range")}function al(e,n){if(!Yc.isAnyArray(n))throw new TypeError("column indices must be an array");for(let t=0;t<n.length;t++)if(n[t]<0||n[t]>=e.columns)throw new RangeError("column indices are out of range")}function ol(e,n,t,i,s){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(cl("startRow",n),cl("endRow",t),cl("startColumn",i),cl("endColumn",s),n>t||i>s||n<0||n>=e.rows||t<0||t>=e.rows||i<0||i>=e.columns||s<0||s>=e.columns)throw new RangeError("Submatrix indices are out of range")}function rl(e,n=0){let t=[];for(let i=0;i<e;i++)t.push(n);return t}function cl(e,n){if("number"!=typeof n)throw new TypeError(`${e} must be a number`)}function ll(e){if(e.isEmpty())throw new Error("Empty matrix has no elements to index")}class pl{static from1DArray(e,n,t){if(e*n!==t.length)throw new RangeError("data length does not match given dimensions");let i=new dl(e,n);for(let s=0;s<e;s++)for(let e=0;e<n;e++)i.set(s,e,t[s*n+e]);return i}static rowVector(e){let n=new dl(1,e.length);for(let t=0;t<e.length;t++)n.set(0,t,e[t]);return n}static columnVector(e){let n=new dl(e.length,1);for(let t=0;t<e.length;t++)n.set(t,0,e[t]);return n}static zeros(e,n){return new dl(e,n)}static ones(e,n){return new dl(e,n).fill(1)}static rand(e,n,t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{random:i=Math.random}=t;let s=new dl(e,n);for(let t=0;t<e;t++)for(let e=0;e<n;e++)s.set(t,e,i());return s}static randInt(e,n,t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:i=0,max:s=1e3,random:a=Math.random}=t;if(!Number.isInteger(i))throw new TypeError("min must be an integer");if(!Number.isInteger(s))throw new TypeError("max must be an integer");if(i>=s)throw new RangeError("min must be smaller than max");let o=s-i,r=new dl(e,n);for(let t=0;t<e;t++)for(let e=0;e<n;e++){let n=i+Math.round(a()*o);r.set(t,e,n)}return r}static eye(e,n,t){void 0===n&&(n=e),void 0===t&&(t=1);let i=Math.min(e,n),s=this.zeros(e,n);for(let e=0;e<i;e++)s.set(e,e,t);return s}static diag(e,n,t){let i=e.length;void 0===n&&(n=i),void 0===t&&(t=n);let s=Math.min(i,n,t),a=this.zeros(n,t);for(let n=0;n<s;n++)a.set(n,n,e[n]);return a}static min(e,n){e=this.checkMatrix(e),n=this.checkMatrix(n);let t=e.rows,i=e.columns,s=new dl(t,i);for(let a=0;a<t;a++)for(let t=0;t<i;t++)s.set(a,t,Math.min(e.get(a,t),n.get(a,t)));return s}static max(e,n){e=this.checkMatrix(e),n=this.checkMatrix(n);let t=e.rows,i=e.columns,s=new this(t,i);for(let a=0;a<t;a++)for(let t=0;t<i;t++)s.set(a,t,Math.max(e.get(a,t),n.get(a,t)));return s}static checkMatrix(e){return pl.isMatrix(e)?e:new dl(e)}static isMatrix(e){return null!=e&&"Matrix"===e.klass}get size(){return this.rows*this.columns}apply(e){if("function"!=typeof e)throw new TypeError("callback must be a function");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)e.call(this,n,t);return this}to1DArray(){let e=[];for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)e.push(this.get(n,t));return e}to2DArray(){let e=[];for(let n=0;n<this.rows;n++){e.push([]);for(let t=0;t<this.columns;t++)e[n].push(this.get(n,t))}return e}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let e=0;e<this.rows;e++)for(let n=0;n<=e;n++)if(this.get(e,n)!==this.get(n,e))return!1;return!0}return!1}isDistance(){if(!this.isSymmetric())return!1;for(let e=0;e<this.rows;e++)if(0!==this.get(e,e))return!1;return!0}isEchelonForm(){let e=0,n=0,t=-1,i=!0,s=!1;for(;e<this.rows&&i;){for(n=0,s=!1;n<this.columns&&!1===s;)0===this.get(e,n)?n++:1===this.get(e,n)&&n>t?(s=!0,t=n):(i=!1,s=!0);e++}return i}isReducedEchelonForm(){let e=0,n=0,t=-1,i=!0,s=!1;for(;e<this.rows&&i;){for(n=0,s=!1;n<this.columns&&!1===s;)0===this.get(e,n)?n++:1===this.get(e,n)&&n>t?(s=!0,t=n):(i=!1,s=!0);for(let t=n+1;t<this.rows;t++)0!==this.get(e,t)&&(i=!1);e++}return i}echelonForm(){let e=this.clone(),n=0,t=0;for(;n<e.rows&&t<e.columns;){let i=n;for(let s=n;s<e.rows;s++)e.get(s,t)>e.get(i,t)&&(i=s);if(0===e.get(i,t))t++;else{e.swapRows(n,i);let s=e.get(n,t);for(let i=t;i<e.columns;i++)e.set(n,i,e.get(n,i)/s);for(let i=n+1;i<e.rows;i++){let s=e.get(i,t)/e.get(n,t);e.set(i,t,0);for(let a=t+1;a<e.columns;a++)e.set(i,a,e.get(i,a)-e.get(n,a)*s)}n++,t++}}return e}reducedEchelonForm(){let e=this.echelonForm(),n=e.columns,t=e.rows,i=t-1;for(;i>=0;)if(0===e.maxRow(i))i--;else{let s=0,a=!1;for(;s<t&&!1===a;)1===e.get(i,s)?a=!0:s++;for(let t=0;t<i;t++){let a=e.get(t,s);for(let o=s;o<n;o++){let n=e.get(t,o)-a*e.get(i,o);e.set(t,o,n)}}i--}return e}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{rows:n=1,columns:t=1}=e;if(!Number.isInteger(n)||n<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(t)||t<=0)throw new TypeError("columns must be a positive integer");let i=new dl(this.rows*n,this.columns*t);for(let e=0;e<n;e++)for(let n=0;n<t;n++)i.setSubMatrix(this,this.rows*e,this.columns*n);return i}fill(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,e);return this}neg(){return this.mulS(-1)}getRow(e){el(this,e);let n=[];for(let t=0;t<this.columns;t++)n.push(this.get(e,t));return n}getRowVector(e){return dl.rowVector(this.getRow(e))}setRow(e,n){el(this,e),n=tl(this,n);for(let t=0;t<this.columns;t++)this.set(e,t,n[t]);return this}swapRows(e,n){el(this,e),el(this,n);for(let t=0;t<this.columns;t++){let i=this.get(e,t);this.set(e,t,this.get(n,t)),this.set(n,t,i)}return this}getColumn(e){nl(this,e);let n=[];for(let t=0;t<this.rows;t++)n.push(this.get(t,e));return n}getColumnVector(e){return dl.columnVector(this.getColumn(e))}setColumn(e,n){nl(this,e),n=il(this,n);for(let t=0;t<this.rows;t++)this.set(t,e,n[t]);return this}swapColumns(e,n){nl(this,e),nl(this,n);for(let t=0;t<this.rows;t++){let i=this.get(t,e);this.set(t,e,this.get(t,n)),this.set(t,n,i)}return this}addRowVector(e){e=tl(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)+e[t]);return this}subRowVector(e){e=tl(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)-e[t]);return this}mulRowVector(e){e=tl(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)*e[t]);return this}divRowVector(e){e=tl(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)/e[t]);return this}addColumnVector(e){e=il(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)+e[n]);return this}subColumnVector(e){e=il(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)-e[n]);return this}mulColumnVector(e){e=il(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)*e[n]);return this}divColumnVector(e){e=il(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)/e[n]);return this}mulRow(e,n){el(this,e);for(let t=0;t<this.columns;t++)this.set(e,t,this.get(e,t)*n);return this}mulColumn(e,n){nl(this,e);for(let t=0;t<this.rows;t++)this.set(t,e,this.get(t,e)*n);return this}max(e){if(this.isEmpty())return NaN;switch(e){case"row":{const e=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)>e[n]&&(e[n]=this.get(n,t));return e}case"column":{const e=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)>e[t]&&(e[t]=this.get(n,t));return e}case void 0:{let e=this.get(0,0);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)>e&&(e=this.get(n,t));return e}default:throw new Error(`invalid option: ${e}`)}}maxIndex(){ll(this);let e=this.get(0,0),n=[0,0];for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)>e&&(e=this.get(t,i),n[0]=t,n[1]=i);return n}min(e){if(this.isEmpty())return NaN;switch(e){case"row":{const e=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)<e[n]&&(e[n]=this.get(n,t));return e}case"column":{const e=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)<e[t]&&(e[t]=this.get(n,t));return e}case void 0:{let e=this.get(0,0);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)<e&&(e=this.get(n,t));return e}default:throw new Error(`invalid option: ${e}`)}}minIndex(){ll(this);let e=this.get(0,0),n=[0,0];for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)<e&&(e=this.get(t,i),n[0]=t,n[1]=i);return n}maxRow(e){if(el(this,e),this.isEmpty())return NaN;let n=this.get(e,0);for(let t=1;t<this.columns;t++)this.get(e,t)>n&&(n=this.get(e,t));return n}maxRowIndex(e){el(this,e),ll(this);let n=this.get(e,0),t=[e,0];for(let i=1;i<this.columns;i++)this.get(e,i)>n&&(n=this.get(e,i),t[1]=i);return t}minRow(e){if(el(this,e),this.isEmpty())return NaN;let n=this.get(e,0);for(let t=1;t<this.columns;t++)this.get(e,t)<n&&(n=this.get(e,t));return n}minRowIndex(e){el(this,e),ll(this);let n=this.get(e,0),t=[e,0];for(let i=1;i<this.columns;i++)this.get(e,i)<n&&(n=this.get(e,i),t[1]=i);return t}maxColumn(e){if(nl(this,e),this.isEmpty())return NaN;let n=this.get(0,e);for(let t=1;t<this.rows;t++)this.get(t,e)>n&&(n=this.get(t,e));return n}maxColumnIndex(e){nl(this,e),ll(this);let n=this.get(0,e),t=[0,e];for(let i=1;i<this.rows;i++)this.get(i,e)>n&&(n=this.get(i,e),t[0]=i);return t}minColumn(e){if(nl(this,e),this.isEmpty())return NaN;let n=this.get(0,e);for(let t=1;t<this.rows;t++)this.get(t,e)<n&&(n=this.get(t,e));return n}minColumnIndex(e){nl(this,e),ll(this);let n=this.get(0,e),t=[0,e];for(let i=1;i<this.rows;i++)this.get(i,e)<n&&(n=this.get(i,e),t[0]=i);return t}diag(){let e=Math.min(this.rows,this.columns),n=[];for(let t=0;t<e;t++)n.push(this.get(t,t));return n}norm(e="frobenius"){switch(e){case"max":return this.max();case"frobenius":return Math.sqrt(this.dot(this));default:throw new RangeError(`unknown norm type: ${e}`)}}cumulativeSum(){let e=0;for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)e+=this.get(n,t),this.set(n,t,e);return this}dot(e){pl.isMatrix(e)&&(e=e.to1DArray());let n=this.to1DArray();if(n.length!==e.length)throw new RangeError("vectors do not have the same size");let t=0;for(let i=0;i<n.length;i++)t+=n[i]*e[i];return t}mmul(e){e=dl.checkMatrix(e);let n=this.rows,t=this.columns,i=e.columns,s=new dl(n,i),a=new Float64Array(t);for(let o=0;o<i;o++){for(let n=0;n<t;n++)a[n]=e.get(n,o);for(let e=0;e<n;e++){let n=0;for(let i=0;i<t;i++)n+=this.get(e,i)*a[i];s.set(e,o,n)}}return s}strassen2x2(e){e=dl.checkMatrix(e);let n=new dl(2,2);const t=this.get(0,0),i=e.get(0,0),s=this.get(0,1),a=e.get(0,1),o=this.get(1,0),r=e.get(1,0),c=this.get(1,1),l=e.get(1,1),p=(t+c)*(i+l),u=(o+c)*i,d=t*(a-l),g=c*(r-i),m=(t+s)*l,v=p+g-m+(s-c)*(r+l),h=d+m,f=u+g,x=p-u+d+(o-t)*(i+a);return n.set(0,0,v),n.set(0,1,h),n.set(1,0,f),n.set(1,1,x),n}strassen3x3(e){e=dl.checkMatrix(e);let n=new dl(3,3);const t=this.get(0,0),i=this.get(0,1),s=this.get(0,2),a=this.get(1,0),o=this.get(1,1),r=this.get(1,2),c=this.get(2,0),l=this.get(2,1),p=this.get(2,2),u=e.get(0,0),d=e.get(0,1),g=e.get(0,2),m=e.get(1,0),v=e.get(1,1),h=e.get(1,2),f=e.get(2,0),x=e.get(2,1),b=e.get(2,2),y=(t-a)*(-d+v),w=(-t+a+o)*(u-d+v),k=(a+o)*(-u+d),S=t*u,j=(-t+c+l)*(u-g+h),_=(-t+c)*(g-h),C=(c+l)*(-u+g),A=(-s+l+p)*(v+f-x),E=(s-p)*(v-x),R=s*f,L=(l+p)*(-f+x),M=(-s+o+r)*(h+f-b),I=(s-r)*(h-b),D=(o+r)*(-f+b),O=S+R+i*m,T=(t+i+s-a-o-l-p)*v+w+k+S+A+R+L,P=S+j+C+(t+i+s-o-r-c-l)*h+R+M+D,F=y+o*(-u+d+m-v-h-f+b)+w+S+R+M+I,N=y+w+k+S+r*x,q=R+M+I+D+a*g,z=S+j+_+l*(-u+g+m-v-h-f+x)+A+E+R,V=A+E+R+L+c*d,B=S+j+_+C+p*b;return n.set(0,0,O),n.set(0,1,T),n.set(0,2,P),n.set(1,0,F),n.set(1,1,N),n.set(1,2,q),n.set(2,0,z),n.set(2,1,V),n.set(2,2,B),n}mmulStrassen(e){e=dl.checkMatrix(e);let n=this.clone(),t=n.rows,i=n.columns,s=e.rows,a=e.columns;function o(e,n,t){let i=e.rows,s=e.columns;if(i===n&&s===t)return e;{let i=pl.zeros(n,t);return i=i.setSubMatrix(e,0,0),i}}i!==s&&console.warn(`Multiplying ${t} x ${i} and ${s} x ${a} matrix: dimensions do not match.`);let r=Math.max(t,s),c=Math.max(i,a);return n=o(n,r,c),function e(n,t,i,s){if(i<=512||s<=512)return n.mmul(t);i%2==1&&s%2==1?(n=o(n,i+1,s+1),t=o(t,i+1,s+1)):i%2==1?(n=o(n,i+1,s),t=o(t,i+1,s)):s%2==1&&(n=o(n,i,s+1),t=o(t,i,s+1));let a=parseInt(n.rows/2,10),r=parseInt(n.columns/2,10),c=n.subMatrix(0,a-1,0,r-1),l=t.subMatrix(0,a-1,0,r-1),p=n.subMatrix(0,a-1,r,n.columns-1),u=t.subMatrix(0,a-1,r,t.columns-1),d=n.subMatrix(a,n.rows-1,0,r-1),g=t.subMatrix(a,t.rows-1,0,r-1),m=n.subMatrix(a,n.rows-1,r,n.columns-1),v=t.subMatrix(a,t.rows-1,r,t.columns-1),h=e(pl.add(c,m),pl.add(l,v),a,r),f=e(pl.add(d,m),l,a,r),x=e(c,pl.sub(u,v),a,r),b=e(m,pl.sub(g,l),a,r),y=e(pl.add(c,p),v,a,r),w=e(pl.sub(d,c),pl.add(l,u),a,r),k=e(pl.sub(p,m),pl.add(g,v),a,r),S=pl.add(h,b);S.sub(y),S.add(k);let j=pl.add(x,y),_=pl.add(f,b),C=pl.sub(h,f);C.add(x),C.add(w);let A=pl.zeros(2*S.rows,2*S.columns);return A=A.setSubMatrix(S,0,0),A=A.setSubMatrix(j,S.rows,0),A=A.setSubMatrix(_,0,S.columns),A=A.setSubMatrix(C,S.rows,S.columns),A.subMatrix(0,i-1,0,s-1)}(n,e=o(e,r,c),r,c)}scaleRows(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{min:n=0,max:t=1}=e;if(!Number.isFinite(n))throw new TypeError("min must be a number");if(!Number.isFinite(t))throw new TypeError("max must be a number");if(n>=t)throw new RangeError("min must be smaller than max");let i=new dl(this.rows,this.columns);for(let e=0;e<this.rows;e++){const s=this.getRow(e);s.length>0&&Kc(s,{min:n,max:t,output:s}),i.setRow(e,s)}return i}scaleColumns(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{min:n=0,max:t=1}=e;if(!Number.isFinite(n))throw new TypeError("min must be a number");if(!Number.isFinite(t))throw new TypeError("max must be a number");if(n>=t)throw new RangeError("min must be smaller than max");let i=new dl(this.rows,this.columns);for(let e=0;e<this.columns;e++){const s=this.getColumn(e);s.length&&Kc(s,{min:n,max:t,output:s}),i.setColumn(e,s)}return i}flipRows(){const e=Math.ceil(this.columns/2);for(let n=0;n<this.rows;n++)for(let t=0;t<e;t++){let e=this.get(n,t),i=this.get(n,this.columns-1-t);this.set(n,t,i),this.set(n,this.columns-1-t,e)}return this}flipColumns(){const e=Math.ceil(this.rows/2);for(let n=0;n<this.columns;n++)for(let t=0;t<e;t++){let e=this.get(t,n),i=this.get(this.rows-1-t,n);this.set(t,n,i),this.set(this.rows-1-t,n,e)}return this}kroneckerProduct(e){e=dl.checkMatrix(e);let n=this.rows,t=this.columns,i=e.rows,s=e.columns,a=new dl(n*i,t*s);for(let o=0;o<n;o++)for(let n=0;n<t;n++)for(let t=0;t<i;t++)for(let r=0;r<s;r++)a.set(i*o+t,s*n+r,this.get(o,n)*e.get(t,r));return a}kroneckerSum(e){if(e=dl.checkMatrix(e),!this.isSquare()||!e.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let n=this.rows,t=e.rows,i=this.kroneckerProduct(dl.eye(t,t)),s=dl.eye(n,n).kroneckerProduct(e);return i.add(s)}transpose(){let e=new dl(this.columns,this.rows);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)e.set(t,n,this.get(n,t));return e}sortRows(e=ul){for(let n=0;n<this.rows;n++)this.setRow(n,this.getRow(n).sort(e));return this}sortColumns(e=ul){for(let n=0;n<this.columns;n++)this.setColumn(n,this.getColumn(n).sort(e));return this}subMatrix(e,n,t,i){ol(this,e,n,t,i);let s=new dl(n-e+1,i-t+1);for(let a=e;a<=n;a++)for(let n=t;n<=i;n++)s.set(a-e,n-t,this.get(a,n));return s}subMatrixRow(e,n,t){if(void 0===n&&(n=0),void 0===t&&(t=this.columns-1),n>t||n<0||n>=this.columns||t<0||t>=this.columns)throw new RangeError("Argument out of range");let i=new dl(e.length,t-n+1);for(let s=0;s<e.length;s++)for(let a=n;a<=t;a++){if(e[s]<0||e[s]>=this.rows)throw new RangeError(`Row index out of range: ${e[s]}`);i.set(s,a-n,this.get(e[s],a))}return i}subMatrixColumn(e,n,t){if(void 0===n&&(n=0),void 0===t&&(t=this.rows-1),n>t||n<0||n>=this.rows||t<0||t>=this.rows)throw new RangeError("Argument out of range");let i=new dl(t-n+1,e.length);for(let s=0;s<e.length;s++)for(let a=n;a<=t;a++){if(e[s]<0||e[s]>=this.columns)throw new RangeError(`Column index out of range: ${e[s]}`);i.set(a-n,s,this.get(a,e[s]))}return i}setSubMatrix(e,n,t){if((e=dl.checkMatrix(e)).isEmpty())return this;ol(this,n,n+e.rows-1,t,t+e.columns-1);for(let i=0;i<e.rows;i++)for(let s=0;s<e.columns;s++)this.set(n+i,t+s,e.get(i,s));return this}selection(e,n){sl(this,e),al(this,n);let t=new dl(e.length,n.length);for(let i=0;i<e.length;i++){let s=e[i];for(let e=0;e<n.length;e++){let a=n[e];t.set(i,e,this.get(s,a))}}return t}trace(){let e=Math.min(this.rows,this.columns),n=0;for(let t=0;t<e;t++)n+=this.get(t,t);return n}clone(){return this.constructor.copy(this,new dl(this.rows,this.columns))}static copy(e,n){for(const[t,i,s]of e.entries())n.set(t,i,s);return n}sum(e){switch(e){case"row":return function(e){let n=rl(e.rows);for(let t=0;t<e.rows;++t)for(let i=0;i<e.columns;++i)n[t]+=e.get(t,i);return n}(this);case"column":return function(e){let n=rl(e.columns);for(let t=0;t<e.rows;++t)for(let i=0;i<e.columns;++i)n[i]+=e.get(t,i);return n}(this);case void 0:return function(e){let n=0;for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)n+=e.get(t,i);return n}(this);default:throw new Error(`invalid option: ${e}`)}}product(e){switch(e){case"row":return function(e){let n=rl(e.rows,1);for(let t=0;t<e.rows;++t)for(let i=0;i<e.columns;++i)n[t]*=e.get(t,i);return n}(this);case"column":return function(e){let n=rl(e.columns,1);for(let t=0;t<e.rows;++t)for(let i=0;i<e.columns;++i)n[i]*=e.get(t,i);return n}(this);case void 0:return function(e){let n=1;for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)n*=e.get(t,i);return n}(this);default:throw new Error(`invalid option: ${e}`)}}mean(e){const n=this.sum(e);switch(e){case"row":for(let e=0;e<this.rows;e++)n[e]/=this.columns;return n;case"column":for(let e=0;e<this.columns;e++)n[e]/=this.rows;return n;case void 0:return n/this.size;default:throw new Error(`invalid option: ${e}`)}}variance(e,n={}){if("object"==typeof e&&(n=e,e=void 0),"object"!=typeof n)throw new TypeError("options must be an object");const{unbiased:t=!0,mean:i=this.mean(e)}=n;if("boolean"!=typeof t)throw new TypeError("unbiased must be a boolean");switch(e){case"row":if(!Yc.isAnyArray(i))throw new TypeError("mean must be an array");return function(e,n,t){const i=e.rows,s=e.columns,a=[];for(let o=0;o<i;o++){let i=0,r=0,c=0;for(let n=0;n<s;n++)c=e.get(o,n)-t[o],i+=c,r+=c*c;n?a.push((r-i*i/s)/(s-1)):a.push((r-i*i/s)/s)}return a}(this,t,i);case"column":if(!Yc.isAnyArray(i))throw new TypeError("mean must be an array");return function(e,n,t){const i=e.rows,s=e.columns,a=[];for(let o=0;o<s;o++){let s=0,r=0,c=0;for(let n=0;n<i;n++)c=e.get(n,o)-t[o],s+=c,r+=c*c;n?a.push((r-s*s/i)/(i-1)):a.push((r-s*s/i)/i)}return a}(this,t,i);case void 0:if("number"!=typeof i)throw new TypeError("mean must be a number");return function(e,n,t){const i=e.rows,s=e.columns,a=i*s;let o=0,r=0,c=0;for(let n=0;n<i;n++)for(let i=0;i<s;i++)c=e.get(n,i)-t,o+=c,r+=c*c;return n?(r-o*o/a)/(a-1):(r-o*o/a)/a}(this,t,i);default:throw new Error(`invalid option: ${e}`)}}standardDeviation(e,n){"object"==typeof e&&(n=e,e=void 0);const t=this.variance(e,n);if(void 0===e)return Math.sqrt(t);for(let e=0;e<t.length;e++)t[e]=Math.sqrt(t[e]);return t}center(e,n={}){if("object"==typeof e&&(n=e,e=void 0),"object"!=typeof n)throw new TypeError("options must be an object");const{center:t=this.mean(e)}=n;switch(e){case"row":if(!Yc.isAnyArray(t))throw new TypeError("center must be an array");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)-n[t])}(this,t),this;case"column":if(!Yc.isAnyArray(t))throw new TypeError("center must be an array");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)-n[i])}(this,t),this;case void 0:if("number"!=typeof t)throw new TypeError("center must be a number");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)-n)}(this,t),this;default:throw new Error(`invalid option: ${e}`)}}scale(e,n={}){if("object"==typeof e&&(n=e,e=void 0),"object"!=typeof n)throw new TypeError("options must be an object");let t=n.scale;switch(e){case"row":if(void 0===t)t=function(e){const n=[];for(let t=0;t<e.rows;t++){let i=0;for(let n=0;n<e.columns;n++)i+=e.get(t,n)**2/(e.columns-1);n.push(Math.sqrt(i))}return n}(this);else if(!Yc.isAnyArray(t))throw new TypeError("scale must be an array");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)/n[t])}(this,t),this;case"column":if(void 0===t)t=function(e){const n=[];for(let t=0;t<e.columns;t++){let i=0;for(let n=0;n<e.rows;n++)i+=e.get(n,t)**2/(e.rows-1);n.push(Math.sqrt(i))}return n}(this);else if(!Yc.isAnyArray(t))throw new TypeError("scale must be an array");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)/n[i])}(this,t),this;case void 0:if(void 0===t)t=function(e){const n=e.size-1;let t=0;for(let i=0;i<e.columns;i++)for(let s=0;s<e.rows;s++)t+=e.get(s,i)**2/n;return Math.sqrt(t)}(this);else if("number"!=typeof t)throw new TypeError("scale must be a number");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)/n)}(this,t),this;default:throw new Error(`invalid option: ${e}`)}}toString(e){return Jc(this,e)}[Symbol.iterator](){return this.entries()}*entries(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)yield[e,n,this.get(e,n)]}*values(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)yield this.get(e,n)}}function ul(e,n){return e-n}pl.prototype.klass="Matrix","undefined"!=typeof Symbol&&(pl.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return Jc(this)}),pl.random=pl.rand,pl.randomInt=pl.randInt,pl.diagonal=pl.diag,pl.prototype.diagonal=pl.prototype.diag,pl.identity=pl.eye,pl.prototype.negate=pl.prototype.neg,pl.prototype.tensorProduct=pl.prototype.kroneckerProduct;let dl=class e extends pl{data;#e(e,n){if(this.data=[],!(Number.isInteger(n)&&n>=0))throw new TypeError("nColumns must be a positive integer");for(let t=0;t<e;t++)this.data.push(new Float64Array(n));this.rows=e,this.columns=n}constructor(n,t){if(super(),e.isMatrix(n))this.#e(n.rows,n.columns),e.copy(n,this);else if(Number.isInteger(n)&&n>=0)this.#e(n,t);else{if(!Yc.isAnyArray(n))throw new TypeError("First argument must be a positive number or an array");{const e=n;if("number"!=typeof(t=(n=e.length)?e[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let i=0;i<n;i++){if(e[i].length!==t)throw new RangeError("Inconsistent array dimensions");if(!e[i].every((e=>"number"==typeof e)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(e[i]))}this.rows=n,this.columns=t}}}set(e,n,t){return this.data[e][n]=t,this}get(e,n){return this.data[e][n]}removeRow(e){return el(this,e),this.data.splice(e,1),this.rows-=1,this}addRow(e,n){return void 0===n&&(n=e,e=this.rows),el(this,e,!0),n=Float64Array.from(tl(this,n)),this.data.splice(e,0,n),this.rows+=1,this}removeColumn(e){nl(this,e);for(let n=0;n<this.rows;n++){const t=new Float64Array(this.columns-1);for(let i=0;i<e;i++)t[i]=this.data[n][i];for(let i=e+1;i<this.columns;i++)t[i-1]=this.data[n][i];this.data[n]=t}return this.columns-=1,this}addColumn(e,n){void 0===n&&(n=e,e=this.columns),nl(this,e,!0),n=il(this,n);for(let t=0;t<this.rows;t++){const i=new Float64Array(this.columns+1);let s=0;for(;s<e;s++)i[s]=this.data[t][s];for(i[s++]=n[t];s<this.columns+1;s++)i[s]=this.data[t][s-1];this.data[t]=i}return this.columns+=1,this}};!function(e,n){e.prototype.add=function(e){return"number"==typeof e?this.addS(e):this.addM(e)},e.prototype.addS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)+e);return this},e.prototype.addM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)+e.get(n,t));return this},e.add=function(e,t){return new n(e).add(t)},e.prototype.sub=function(e){return"number"==typeof e?this.subS(e):this.subM(e)},e.prototype.subS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)-e);return this},e.prototype.subM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)-e.get(n,t));return this},e.sub=function(e,t){return new n(e).sub(t)},e.prototype.subtract=e.prototype.sub,e.prototype.subtractS=e.prototype.subS,e.prototype.subtractM=e.prototype.subM,e.subtract=e.sub,e.prototype.mul=function(e){return"number"==typeof e?this.mulS(e):this.mulM(e)},e.prototype.mulS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)*e);return this},e.prototype.mulM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)*e.get(n,t));return this},e.mul=function(e,t){return new n(e).mul(t)},e.prototype.multiply=e.prototype.mul,e.prototype.multiplyS=e.prototype.mulS,e.prototype.multiplyM=e.prototype.mulM,e.multiply=e.mul,e.prototype.div=function(e){return"number"==typeof e?this.divS(e):this.divM(e)},e.prototype.divS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)/e);return this},e.prototype.divM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)/e.get(n,t));return this},e.div=function(e,t){return new n(e).div(t)},e.prototype.divide=e.prototype.div,e.prototype.divideS=e.prototype.divS,e.prototype.divideM=e.prototype.divM,e.divide=e.div,e.prototype.mod=function(e){return"number"==typeof e?this.modS(e):this.modM(e)},e.prototype.modS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)%e);return this},e.prototype.modM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)%e.get(n,t));return this},e.mod=function(e,t){return new n(e).mod(t)},e.prototype.modulus=e.prototype.mod,e.prototype.modulusS=e.prototype.modS,e.prototype.modulusM=e.prototype.modM,e.modulus=e.mod,e.prototype.and=function(e){return"number"==typeof e?this.andS(e):this.andM(e)},e.prototype.andS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)&e);return this},e.prototype.andM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)&e.get(n,t));return this},e.and=function(e,t){return new n(e).and(t)},e.prototype.or=function(e){return"number"==typeof e?this.orS(e):this.orM(e)},e.prototype.orS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)|e);return this},e.prototype.orM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)|e.get(n,t));return this},e.or=function(e,t){return new n(e).or(t)},e.prototype.xor=function(e){return"number"==typeof e?this.xorS(e):this.xorM(e)},e.prototype.xorS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)^e);return this},e.prototype.xorM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)^e.get(n,t));return this},e.xor=function(e,t){return new n(e).xor(t)},e.prototype.leftShift=function(e){return"number"==typeof e?this.leftShiftS(e):this.leftShiftM(e)},e.prototype.leftShiftS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)<<e);return this},e.prototype.leftShiftM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)<<e.get(n,t));return this},e.leftShift=function(e,t){return new n(e).leftShift(t)},e.prototype.signPropagatingRightShift=function(e){return"number"==typeof e?this.signPropagatingRightShiftS(e):this.signPropagatingRightShiftM(e)},e.prototype.signPropagatingRightShiftS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)>>e);return this},e.prototype.signPropagatingRightShiftM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)>>e.get(n,t));return this},e.signPropagatingRightShift=function(e,t){return new n(e).signPropagatingRightShift(t)},e.prototype.rightShift=function(e){return"number"==typeof e?this.rightShiftS(e):this.rightShiftM(e)},e.prototype.rightShiftS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)>>>e);return this},e.prototype.rightShiftM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)>>>e.get(n,t));return this},e.rightShift=function(e,t){return new n(e).rightShift(t)},e.prototype.zeroFillRightShift=e.prototype.rightShift,e.prototype.zeroFillRightShiftS=e.prototype.rightShiftS,e.prototype.zeroFillRightShiftM=e.prototype.rightShiftM,e.zeroFillRightShift=e.rightShift,e.prototype.not=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,~this.get(e,n));return this},e.not=function(e){return new n(e).not()},e.prototype.abs=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.abs(this.get(e,n)));return this},e.abs=function(e){return new n(e).abs()},e.prototype.acos=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.acos(this.get(e,n)));return this},e.acos=function(e){return new n(e).acos()},e.prototype.acosh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.acosh(this.get(e,n)));return this},e.acosh=function(e){return new n(e).acosh()},e.prototype.asin=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.asin(this.get(e,n)));return this},e.asin=function(e){return new n(e).asin()},e.prototype.asinh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.asinh(this.get(e,n)));return this},e.asinh=function(e){return new n(e).asinh()},e.prototype.atan=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.atan(this.get(e,n)));return this},e.atan=function(e){return new n(e).atan()},e.prototype.atanh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.atanh(this.get(e,n)));return this},e.atanh=function(e){return new n(e).atanh()},e.prototype.cbrt=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cbrt(this.get(e,n)));return this},e.cbrt=function(e){return new n(e).cbrt()},e.prototype.ceil=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.ceil(this.get(e,n)));return this},e.ceil=function(e){return new n(e).ceil()},e.prototype.clz32=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.clz32(this.get(e,n)));return this},e.clz32=function(e){return new n(e).clz32()},e.prototype.cos=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cos(this.get(e,n)));return this},e.cos=function(e){return new n(e).cos()},e.prototype.cosh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cosh(this.get(e,n)));return this},e.cosh=function(e){return new n(e).cosh()},e.prototype.exp=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.exp(this.get(e,n)));return this},e.exp=function(e){return new n(e).exp()},e.prototype.expm1=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.expm1(this.get(e,n)));return this},e.expm1=function(e){return new n(e).expm1()},e.prototype.floor=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.floor(this.get(e,n)));return this},e.floor=function(e){return new n(e).floor()},e.prototype.fround=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.fround(this.get(e,n)));return this},e.fround=function(e){return new n(e).fround()},e.prototype.log=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log(this.get(e,n)));return this},e.log=function(e){return new n(e).log()},e.prototype.log1p=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log1p(this.get(e,n)));return this},e.log1p=function(e){return new n(e).log1p()},e.prototype.log10=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log10(this.get(e,n)));return this},e.log10=function(e){return new n(e).log10()},e.prototype.log2=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log2(this.get(e,n)));return this},e.log2=function(e){return new n(e).log2()},e.prototype.round=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.round(this.get(e,n)));return this},e.round=function(e){return new n(e).round()},e.prototype.sign=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sign(this.get(e,n)));return this},e.sign=function(e){return new n(e).sign()},e.prototype.sin=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sin(this.get(e,n)));return this},e.sin=function(e){return new n(e).sin()},e.prototype.sinh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sinh(this.get(e,n)));return this},e.sinh=function(e){return new n(e).sinh()},e.prototype.sqrt=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sqrt(this.get(e,n)));return this},e.sqrt=function(e){return new n(e).sqrt()},e.prototype.tan=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.tan(this.get(e,n)));return this},e.tan=function(e){return new n(e).tan()},e.prototype.tanh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.tanh(this.get(e,n)));return this},e.tanh=function(e){return new n(e).tanh()},e.prototype.trunc=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.trunc(this.get(e,n)));return this},e.trunc=function(e){return new n(e).trunc()},e.pow=function(e,t){return new n(e).pow(t)},e.prototype.pow=function(e){return"number"==typeof e?this.powS(e):this.powM(e)},e.prototype.powS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)**e);return this},e.prototype.powM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)**e.get(n,t));return this}}(pl,dl);class gl extends pl{#n;get size(){return this.#n.size}get rows(){return this.#n.rows}get columns(){return this.#n.columns}get diagonalSize(){return this.rows}static isSymmetricMatrix(e){return dl.isMatrix(e)&&"SymmetricMatrix"===e.klassType}static zeros(e){return new this(e)}static ones(e){return new this(e).fill(1)}constructor(e){if(super(),dl.isMatrix(e)){if(!e.isSymmetric())throw new TypeError("not symmetric data");this.#n=dl.copy(e,new dl(e.rows,e.rows))}else if(Number.isInteger(e)&&e>=0)this.#n=new dl(e,e);else if(this.#n=new dl(e),!this.isSymmetric())throw new TypeError("not symmetric data")}clone(){const e=new gl(this.diagonalSize);for(const[n,t,i]of this.upperRightEntries())e.set(n,t,i);return e}toMatrix(){return new dl(this)}get(e,n){return this.#n.get(e,n)}set(e,n,t){return this.#n.set(e,n,t),this.#n.set(n,e,t),this}removeCross(e){return this.#n.removeRow(e),this.#n.removeColumn(e),this}addCross(e,n){void 0===n&&(n=e,e=this.diagonalSize);const t=n.slice();return t.splice(e,1),this.#n.addRow(e,t),this.#n.addColumn(e,n),this}applyMask(e){if(e.length!==this.diagonalSize)throw new RangeError("Mask size do not match with matrix size");const n=[];for(const[t,i]of e.entries())i||n.push(t);n.reverse();for(const e of n)this.removeCross(e);return this}toCompact(){const{diagonalSize:e}=this,n=new Array(e*(e+1)/2);for(let t=0,i=0,s=0;s<n.length;s++)n[s]=this.get(i,t),++t>=e&&(t=++i);return n}static fromCompact(e){const n=e.length,t=(Math.sqrt(8*n+1)-1)/2;if(!Number.isInteger(t))throw new TypeError(`This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(e)}`);const i=new gl(t);for(let s=0,a=0,o=0;o<n;o++)i.set(s,a,e[o]),++s>=t&&(s=++a);return i}*upperRightEntries(){for(let e=0,n=0;e<this.diagonalSize;void 0){const t=this.get(e,n);yield[e,n,t],++n>=this.diagonalSize&&(n=++e)}}*upperRightValues(){for(let e=0,n=0;e<this.diagonalSize;void 0){const t=this.get(e,n);yield t,++n>=this.diagonalSize&&(n=++e)}}}gl.prototype.klassType="SymmetricMatrix";class ml extends gl{static isDistanceMatrix(e){return gl.isSymmetricMatrix(e)&&"DistanceMatrix"===e.klassSubType}constructor(e){if(super(e),!this.isDistance())throw new TypeError("Provided arguments do no produce a distance matrix")}set(e,n,t){return e===n&&(t=0),super.set(e,n,t)}addCross(e,n){return void 0===n&&(n=e,e=this.diagonalSize),(n=n.slice())[e]=0,super.addCross(e,n)}toSymmetricMatrix(){return new gl(this)}clone(){const e=new ml(this.diagonalSize);for(const[n,t,i]of this.upperRightEntries())n!==t&&e.set(n,t,i);return e}toCompact(){const{diagonalSize:e}=this,n=new Array((e-1)*e/2);for(let t=1,i=0,s=0;s<n.length;s++)n[s]=this.get(i,t),++t>=e&&(t=1+ ++i);return n}static fromCompact(e){const n=e.length;if(0===n)return new this(0);const t=(Math.sqrt(8*n+1)+1)/2;if(!Number.isInteger(t))throw new TypeError(`This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(e)}`);const i=new this(t);for(let s=1,a=0,o=0;o<n;o++)i.set(s,a,e[o]),++s>=t&&(s=1+ ++a);return i}}ml.prototype.klassSubType="DistanceMatrix";class vl extends pl{constructor(e,n,t){super(),this.matrix=e,this.rows=n,this.columns=t}}class hl extends vl{constructor(e,n,t){sl(e,n),al(e,t),super(e,n.length,t.length),this.rowIndices=n,this.columnIndices=t}set(e,n,t){return this.matrix.set(this.rowIndices[e],this.columnIndices[n],t),this}get(e,n){return this.matrix.get(this.rowIndices[e],this.columnIndices[n])}}class fl extends pl{constructor(e,n={}){const{rows:t=1}=n;if(e.length%t!=0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=t,this.columns=e.length/t,this.data=e}set(e,n,t){let i=this._calculateIndex(e,n);return this.data[i]=t,this}get(e,n){let t=this._calculateIndex(e,n);return this.data[t]}_calculateIndex(e,n){return e*this.columns+n}}class xl extends pl{constructor(e){super(),this.data=e,this.rows=e.length,this.columns=e[0].length}set(e,n,t){return this.data[e][n]=t,this}get(e,n){return this.data[e][n]}}class bl{constructor(e){let n,t,i,s,a,o,r,c,l,p=(e=xl.checkMatrix(e)).clone(),u=p.rows,d=p.columns,g=new Float64Array(u),m=1;for(n=0;n<u;n++)g[n]=n;for(c=new Float64Array(u),t=0;t<d;t++){for(n=0;n<u;n++)c[n]=p.get(n,t);for(n=0;n<u;n++){for(l=Math.min(n,t),a=0,i=0;i<l;i++)a+=p.get(n,i)*c[i];c[n]-=a,p.set(n,t,c[n])}for(s=t,n=t+1;n<u;n++)Math.abs(c[n])>Math.abs(c[s])&&(s=n);if(s!==t){for(i=0;i<d;i++)o=p.get(s,i),p.set(s,i,p.get(t,i)),p.set(t,i,o);r=g[s],g[s]=g[t],g[t]=r,m=-m}if(t<u&&0!==p.get(t,t))for(n=t+1;n<u;n++)p.set(n,t,p.get(n,t)/p.get(t,t))}this.LU=p,this.pivotVector=g,this.pivotSign=m}isSingular(){let e=this.LU,n=e.columns;for(let t=0;t<n;t++)if(0===e.get(t,t))return!0;return!1}solve(e){e=dl.checkMatrix(e);let n=this.LU;if(n.rows!==e.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let t,i,s,a=e.columns,o=e.subMatrixRow(this.pivotVector,0,a-1),r=n.columns;for(s=0;s<r;s++)for(t=s+1;t<r;t++)for(i=0;i<a;i++)o.set(t,i,o.get(t,i)-o.get(s,i)*n.get(t,s));for(s=r-1;s>=0;s--){for(i=0;i<a;i++)o.set(s,i,o.get(s,i)/n.get(s,s));for(t=0;t<s;t++)for(i=0;i<a;i++)o.set(t,i,o.get(t,i)-o.get(s,i)*n.get(t,s))}return o}get determinant(){let e=this.LU;if(!e.isSquare())throw new Error("Matrix must be square");let n=this.pivotSign,t=e.columns;for(let i=0;i<t;i++)n*=e.get(i,i);return n}get lowerTriangularMatrix(){let e=this.LU,n=e.rows,t=e.columns,i=new dl(n,t);for(let s=0;s<n;s++)for(let n=0;n<t;n++)s>n?i.set(s,n,e.get(s,n)):s===n?i.set(s,n,1):i.set(s,n,0);return i}get upperTriangularMatrix(){let e=this.LU,n=e.rows,t=e.columns,i=new dl(n,t);for(let s=0;s<n;s++)for(let n=0;n<t;n++)s<=n?i.set(s,n,e.get(s,n)):i.set(s,n,0);return i}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function yl(e,n){let t=0;return Math.abs(e)>Math.abs(n)?(t=n/e,Math.abs(e)*Math.sqrt(1+t*t)):0!==n?(t=e/n,Math.abs(n)*Math.sqrt(1+t*t)):0}class wl{constructor(e){let n,t,i,s,a=(e=xl.checkMatrix(e)).clone(),o=e.rows,r=e.columns,c=new Float64Array(r);for(i=0;i<r;i++){let e=0;for(n=i;n<o;n++)e=yl(e,a.get(n,i));if(0!==e){for(a.get(i,i)<0&&(e=-e),n=i;n<o;n++)a.set(n,i,a.get(n,i)/e);for(a.set(i,i,a.get(i,i)+1),t=i+1;t<r;t++){for(s=0,n=i;n<o;n++)s+=a.get(n,i)*a.get(n,t);for(s=-s/a.get(i,i),n=i;n<o;n++)a.set(n,t,a.get(n,t)+s*a.get(n,i))}}c[i]=-e}this.QR=a,this.Rdiag=c}solve(e){e=dl.checkMatrix(e);let n=this.QR,t=n.rows;if(e.rows!==t)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let i,s,a,o,r=e.columns,c=e.clone(),l=n.columns;for(a=0;a<l;a++)for(s=0;s<r;s++){for(o=0,i=a;i<t;i++)o+=n.get(i,a)*c.get(i,s);for(o=-o/n.get(a,a),i=a;i<t;i++)c.set(i,s,c.get(i,s)+o*n.get(i,a))}for(a=l-1;a>=0;a--){for(s=0;s<r;s++)c.set(a,s,c.get(a,s)/this.Rdiag[a]);for(i=0;i<a;i++)for(s=0;s<r;s++)c.set(i,s,c.get(i,s)-c.get(a,s)*n.get(i,a))}return c.subMatrix(0,l-1,0,r-1)}isFullRank(){let e=this.QR.columns;for(let n=0;n<e;n++)if(0===this.Rdiag[n])return!1;return!0}get upperTriangularMatrix(){let e,n,t=this.QR,i=t.columns,s=new dl(i,i);for(e=0;e<i;e++)for(n=0;n<i;n++)e<n?s.set(e,n,t.get(e,n)):e===n?s.set(e,n,this.Rdiag[e]):s.set(e,n,0);return s}get orthogonalMatrix(){let e,n,t,i,s=this.QR,a=s.rows,o=s.columns,r=new dl(a,o);for(t=o-1;t>=0;t--){for(e=0;e<a;e++)r.set(e,t,0);for(r.set(t,t,1),n=t;n<o;n++)if(0!==s.get(t,t)){for(i=0,e=t;e<a;e++)i+=s.get(e,t)*r.get(e,n);for(i=-i/s.get(t,t),e=t;e<a;e++)r.set(e,n,r.get(e,n)+i*s.get(e,t))}}return r}}class kl{constructor(e,n={}){if((e=xl.checkMatrix(e)).isEmpty())throw new Error("Matrix must be non-empty");let t=e.rows,i=e.columns;const{computeLeftSingularVectors:s=!0,computeRightSingularVectors:a=!0,autoTranspose:o=!1}=n;let r,c=Boolean(s),l=Boolean(a),p=!1;if(t<i)if(o){r=e.transpose(),t=r.rows,i=r.columns,p=!0;let n=c;c=l,l=n}else r=e.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else r=e.clone();let u=Math.min(t,i),d=Math.min(t+1,i),g=new Float64Array(d),m=new dl(t,u),v=new dl(i,i),h=new Float64Array(i),f=new Float64Array(t),x=new Float64Array(d);for(let e=0;e<d;e++)x[e]=e;let b=Math.min(t-1,i),y=Math.max(0,Math.min(i-2,t)),w=Math.max(b,y);for(let e=0;e<w;e++){if(e<b){g[e]=0;for(let n=e;n<t;n++)g[e]=yl(g[e],r.get(n,e));if(0!==g[e]){r.get(e,e)<0&&(g[e]=-g[e]);for(let n=e;n<t;n++)r.set(n,e,r.get(n,e)/g[e]);r.set(e,e,r.get(e,e)+1)}g[e]=-g[e]}for(let n=e+1;n<i;n++){if(e<b&&0!==g[e]){let i=0;for(let s=e;s<t;s++)i+=r.get(s,e)*r.get(s,n);i=-i/r.get(e,e);for(let s=e;s<t;s++)r.set(s,n,r.get(s,n)+i*r.get(s,e))}h[n]=r.get(e,n)}if(c&&e<b)for(let n=e;n<t;n++)m.set(n,e,r.get(n,e));if(e<y){h[e]=0;for(let n=e+1;n<i;n++)h[e]=yl(h[e],h[n]);if(0!==h[e]){h[e+1]<0&&(h[e]=0-h[e]);for(let n=e+1;n<i;n++)h[n]/=h[e];h[e+1]+=1}if(h[e]=-h[e],e+1<t&&0!==h[e]){for(let n=e+1;n<t;n++)f[n]=0;for(let n=e+1;n<t;n++)for(let t=e+1;t<i;t++)f[n]+=h[t]*r.get(n,t);for(let n=e+1;n<i;n++){let i=-h[n]/h[e+1];for(let s=e+1;s<t;s++)r.set(s,n,r.get(s,n)+i*f[s])}}if(l)for(let n=e+1;n<i;n++)v.set(n,e,h[n])}}let k=Math.min(i,t+1);if(b<i&&(g[b]=r.get(b,b)),t<k&&(g[k-1]=0),y+1<k&&(h[y]=r.get(y,k-1)),h[k-1]=0,c){for(let e=b;e<u;e++){for(let n=0;n<t;n++)m.set(n,e,0);m.set(e,e,1)}for(let e=b-1;e>=0;e--)if(0!==g[e]){for(let n=e+1;n<u;n++){let i=0;for(let s=e;s<t;s++)i+=m.get(s,e)*m.get(s,n);i=-i/m.get(e,e);for(let s=e;s<t;s++)m.set(s,n,m.get(s,n)+i*m.get(s,e))}for(let n=e;n<t;n++)m.set(n,e,-m.get(n,e));m.set(e,e,1+m.get(e,e));for(let n=0;n<e-1;n++)m.set(n,e,0)}else{for(let n=0;n<t;n++)m.set(n,e,0);m.set(e,e,1)}}if(l)for(let e=i-1;e>=0;e--){if(e<y&&0!==h[e])for(let n=e+1;n<i;n++){let t=0;for(let s=e+1;s<i;s++)t+=v.get(s,e)*v.get(s,n);t=-t/v.get(e+1,e);for(let s=e+1;s<i;s++)v.set(s,n,v.get(s,n)+t*v.get(s,e))}for(let n=0;n<i;n++)v.set(n,e,0);v.set(e,e,1)}let S=k-1,j=Number.EPSILON;for(;k>0;){let e,n;for(e=k-2;e>=-1&&-1!==e;e--){const n=Number.MIN_VALUE+j*Math.abs(g[e]+Math.abs(g[e+1]));if(Math.abs(h[e])<=n||Number.isNaN(h[e])){h[e]=0;break}}if(e===k-2)n=4;else{let t;for(t=k-1;t>=e&&t!==e;t--){let n=(t!==k?Math.abs(h[t]):0)+(t!==e+1?Math.abs(h[t-1]):0);if(Math.abs(g[t])<=j*n){g[t]=0;break}}t===e?n=3:t===k-1?n=1:(n=2,e=t)}switch(e++,n){case 1:{let n=h[k-2];h[k-2]=0;for(let t=k-2;t>=e;t--){let s=yl(g[t],n),a=g[t]/s,o=n/s;if(g[t]=s,t!==e&&(n=-o*h[t-1],h[t-1]=a*h[t-1]),l)for(let e=0;e<i;e++)s=a*v.get(e,t)+o*v.get(e,k-1),v.set(e,k-1,-o*v.get(e,t)+a*v.get(e,k-1)),v.set(e,t,s)}break}case 2:{let n=h[e-1];h[e-1]=0;for(let i=e;i<k;i++){let s=yl(g[i],n),a=g[i]/s,o=n/s;if(g[i]=s,n=-o*h[i],h[i]=a*h[i],c)for(let n=0;n<t;n++)s=a*m.get(n,i)+o*m.get(n,e-1),m.set(n,e-1,-o*m.get(n,i)+a*m.get(n,e-1)),m.set(n,i,s)}break}case 3:{const n=Math.max(Math.abs(g[k-1]),Math.abs(g[k-2]),Math.abs(h[k-2]),Math.abs(g[e]),Math.abs(h[e])),s=g[k-1]/n,a=g[k-2]/n,o=h[k-2]/n,r=g[e]/n,p=h[e]/n,u=((a+s)*(a-s)+o*o)/2,d=s*o*(s*o);let f=0;0===u&&0===d||(f=u<0?0-Math.sqrt(u*u+d):Math.sqrt(u*u+d),f=d/(u+f));let x=(r+s)*(r-s)+f,b=r*p;for(let n=e;n<k-1;n++){let s=yl(x,b);0===s&&(s=Number.MIN_VALUE);let a=x/s,o=b/s;if(n!==e&&(h[n-1]=s),x=a*g[n]+o*h[n],h[n]=a*h[n]-o*g[n],b=o*g[n+1],g[n+1]=a*g[n+1],l)for(let e=0;e<i;e++)s=a*v.get(e,n)+o*v.get(e,n+1),v.set(e,n+1,-o*v.get(e,n)+a*v.get(e,n+1)),v.set(e,n,s);if(s=yl(x,b),0===s&&(s=Number.MIN_VALUE),a=x/s,o=b/s,g[n]=s,x=a*h[n]+o*g[n+1],g[n+1]=-o*h[n]+a*g[n+1],b=o*h[n+1],h[n+1]=a*h[n+1],c&&n<t-1)for(let e=0;e<t;e++)s=a*m.get(e,n)+o*m.get(e,n+1),m.set(e,n+1,-o*m.get(e,n)+a*m.get(e,n+1)),m.set(e,n,s)}h[k-2]=x;break}case 4:if(g[e]<=0&&(g[e]=g[e]<0?-g[e]:0,l))for(let n=0;n<=S;n++)v.set(n,e,-v.get(n,e));for(;e<S&&!(g[e]>=g[e+1]);){let n=g[e];if(g[e]=g[e+1],g[e+1]=n,l&&e<i-1)for(let t=0;t<i;t++)n=v.get(t,e+1),v.set(t,e+1,v.get(t,e)),v.set(t,e,n);if(c&&e<t-1)for(let i=0;i<t;i++)n=m.get(i,e+1),m.set(i,e+1,m.get(i,e)),m.set(i,e,n);e++}k--}}if(p){let e=v;v=m,m=e}this.m=t,this.n=i,this.s=g,this.U=m,this.V=v}solve(e){let n=e,t=this.threshold,i=this.s.length,s=dl.zeros(i,i);for(let e=0;e<i;e++)Math.abs(this.s[e])<=t?s.set(e,e,0):s.set(e,e,1/this.s[e]);let a=this.U,o=this.rightSingularVectors,r=o.mmul(s),c=o.rows,l=a.rows,p=dl.zeros(c,l);for(let e=0;e<c;e++)for(let n=0;n<l;n++){let t=0;for(let s=0;s<i;s++)t+=r.get(e,s)*a.get(n,s);p.set(e,n,t)}return p.mmul(n)}solveForDiagonal(e){return this.solve(dl.diag(e))}inverse(){let e=this.V,n=this.threshold,t=e.rows,i=e.columns,s=new dl(t,this.s.length);for(let a=0;a<t;a++)for(let t=0;t<i;t++)Math.abs(this.s[t])>n&&s.set(a,t,e.get(a,t)/this.s[t]);let a=this.U,o=a.rows,r=a.columns,c=new dl(t,o);for(let e=0;e<t;e++)for(let n=0;n<o;n++){let t=0;for(let i=0;i<r;i++)t+=s.get(e,i)*a.get(n,i);c.set(e,n,t)}return c}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let e=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,n=0,t=this.s;for(let i=0,s=t.length;i<s;i++)t[i]>e&&n++;return n}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return dl.diag(this.s)}}function Sl(e,n,t=!1){return e=xl.checkMatrix(e),n=xl.checkMatrix(n),t?new kl(e).solve(n):e.isSquare()?new bl(e).solve(n):new wl(e).solve(n)}function jl(e,n){let t=[];for(let i=0;i<e;i++)i!==n&&t.push(i);return t}function _l(e,n,t,i=1e-9,s=1e-9){if(e>s)return new Array(n.rows+1).fill(0);{let e=n.addRow(t,[0]);for(let n=0;n<e.rows;n++)Math.abs(e.get(n,0))<i&&e.set(n,0,0);return e.to1DArray()}}class Cl{constructor(e,n={}){const{assumeSymmetric:t=!1}=n;if(!(e=xl.checkMatrix(e)).isSquare())throw new Error("Matrix is not a square matrix");if(e.isEmpty())throw new Error("Matrix must be non-empty");let i,s,a=e.columns,o=new dl(a,a),r=new Float64Array(a),c=new Float64Array(a),l=e,p=!1;if(p=!!t||e.isSymmetric(),p){for(i=0;i<a;i++)for(s=0;s<a;s++)o.set(i,s,l.get(i,s));!function(e,n,t,i){let s,a,o,r,c,l,p,u;for(c=0;c<e;c++)t[c]=i.get(e-1,c);for(r=e-1;r>0;r--){for(u=0,o=0,l=0;l<r;l++)u+=Math.abs(t[l]);if(0===u)for(n[r]=t[r-1],c=0;c<r;c++)t[c]=i.get(r-1,c),i.set(r,c,0),i.set(c,r,0);else{for(l=0;l<r;l++)t[l]/=u,o+=t[l]*t[l];for(s=t[r-1],a=Math.sqrt(o),s>0&&(a=-a),n[r]=u*a,o-=s*a,t[r-1]=s-a,c=0;c<r;c++)n[c]=0;for(c=0;c<r;c++){for(s=t[c],i.set(c,r,s),a=n[c]+i.get(c,c)*s,l=c+1;l<=r-1;l++)a+=i.get(l,c)*t[l],n[l]+=i.get(l,c)*s;n[c]=a}for(s=0,c=0;c<r;c++)n[c]/=o,s+=n[c]*t[c];for(p=s/(o+o),c=0;c<r;c++)n[c]-=p*t[c];for(c=0;c<r;c++){for(s=t[c],a=n[c],l=c;l<=r-1;l++)i.set(l,c,i.get(l,c)-(s*n[l]+a*t[l]));t[c]=i.get(r-1,c),i.set(r,c,0)}}t[r]=o}for(r=0;r<e-1;r++){if(i.set(e-1,r,i.get(r,r)),i.set(r,r,1),o=t[r+1],0!==o){for(l=0;l<=r;l++)t[l]=i.get(l,r+1)/o;for(c=0;c<=r;c++){for(a=0,l=0;l<=r;l++)a+=i.get(l,r+1)*i.get(l,c);for(l=0;l<=r;l++)i.set(l,c,i.get(l,c)-a*t[l])}}for(l=0;l<=r;l++)i.set(l,r+1,0)}for(c=0;c<e;c++)t[c]=i.get(e-1,c),i.set(e-1,c,0);i.set(e-1,e-1,1),n[0]=0}(a,c,r,o),function(e,n,t,i){let s,a,o,r,c,l,p,u,d,g,m,v,h,f,x,b;for(o=1;o<e;o++)n[o-1]=n[o];n[e-1]=0;let y=0,w=0,k=Number.EPSILON;for(l=0;l<e;l++){for(w=Math.max(w,Math.abs(t[l])+Math.abs(n[l])),p=l;p<e&&!(Math.abs(n[p])<=k*w);)p++;if(p>l)do{for(s=t[l],u=(t[l+1]-s)/(2*n[l]),d=yl(u,1),u<0&&(d=-d),t[l]=n[l]/(u+d),t[l+1]=n[l]*(u+d),g=t[l+1],a=s-t[l],o=l+2;o<e;o++)t[o]-=a;for(y+=a,u=t[p],m=1,v=m,h=m,f=n[l+1],x=0,b=0,o=p-1;o>=l;o--)for(h=v,v=m,b=x,s=m*n[o],a=m*u,d=yl(u,n[o]),n[o+1]=x*d,x=n[o]/d,m=u/d,u=m*t[o]-x*s,t[o+1]=a+x*(m*s+x*t[o]),c=0;c<e;c++)a=i.get(c,o+1),i.set(c,o+1,x*i.get(c,o)+m*a),i.set(c,o,m*i.get(c,o)-x*a);u=-x*b*h*f*n[l]/g,n[l]=x*u,t[l]=m*u}while(Math.abs(n[l])>k*w);t[l]=t[l]+y,n[l]=0}for(o=0;o<e-1;o++){for(c=o,u=t[o],r=o+1;r<e;r++)t[r]<u&&(c=r,u=t[r]);if(c!==o)for(t[c]=t[o],t[o]=u,r=0;r<e;r++)u=i.get(r,o),i.set(r,o,i.get(r,c)),i.set(r,c,u)}}(a,c,r,o)}else{let e=new dl(a,a),n=new Float64Array(a);for(s=0;s<a;s++)for(i=0;i<a;i++)e.set(i,s,l.get(i,s));!function(e,n,t,i){let s,a,o,r,c,l,p,u=0,d=e-1;for(l=u+1;l<=d-1;l++){for(p=0,r=l;r<=d;r++)p+=Math.abs(n.get(r,l-1));if(0!==p){for(o=0,r=d;r>=l;r--)t[r]=n.get(r,l-1)/p,o+=t[r]*t[r];for(a=Math.sqrt(o),t[l]>0&&(a=-a),o-=t[l]*a,t[l]=t[l]-a,c=l;c<e;c++){for(s=0,r=d;r>=l;r--)s+=t[r]*n.get(r,c);for(s/=o,r=l;r<=d;r++)n.set(r,c,n.get(r,c)-s*t[r])}for(r=0;r<=d;r++){for(s=0,c=d;c>=l;c--)s+=t[c]*n.get(r,c);for(s/=o,c=l;c<=d;c++)n.set(r,c,n.get(r,c)-s*t[c])}t[l]=p*t[l],n.set(l,l-1,p*a)}}for(r=0;r<e;r++)for(c=0;c<e;c++)i.set(r,c,r===c?1:0);for(l=d-1;l>=u+1;l--)if(0!==n.get(l,l-1)){for(r=l+1;r<=d;r++)t[r]=n.get(r,l-1);for(c=l;c<=d;c++){for(a=0,r=l;r<=d;r++)a+=t[r]*i.get(r,c);for(a=a/t[l]/n.get(l,l-1),r=l;r<=d;r++)i.set(r,c,i.get(r,c)+a*t[r])}}}(a,e,n,o),function(e,n,t,i,s){let a,o,r,c,l,p,u,d,g,m,v,h,f,x,b,y=e-1,w=0,k=e-1,S=Number.EPSILON,j=0,_=0,C=0,A=0,E=0,R=0,L=0,M=0;for(a=0;a<e;a++)for((a<w||a>k)&&(t[a]=s.get(a,a),n[a]=0),o=Math.max(a-1,0);o<e;o++)_+=Math.abs(s.get(a,o));for(;y>=w;){for(c=y;c>w&&(R=Math.abs(s.get(c-1,c-1))+Math.abs(s.get(c,c)),0===R&&(R=_),!(Math.abs(s.get(c,c-1))<S*R));)c--;if(c===y)s.set(y,y,s.get(y,y)+j),t[y]=s.get(y,y),n[y]=0,y--,M=0;else if(c===y-1){if(u=s.get(y,y-1)*s.get(y-1,y),C=(s.get(y-1,y-1)-s.get(y,y))/2,A=C*C+u,L=Math.sqrt(Math.abs(A)),s.set(y,y,s.get(y,y)+j),s.set(y-1,y-1,s.get(y-1,y-1)+j),d=s.get(y,y),A>=0){for(L=C>=0?C+L:C-L,t[y-1]=d+L,t[y]=t[y-1],0!==L&&(t[y]=d-u/L),n[y-1]=0,n[y]=0,d=s.get(y,y-1),R=Math.abs(d)+Math.abs(L),C=d/R,A=L/R,E=Math.sqrt(C*C+A*A),C/=E,A/=E,o=y-1;o<e;o++)L=s.get(y-1,o),s.set(y-1,o,A*L+C*s.get(y,o)),s.set(y,o,A*s.get(y,o)-C*L);for(a=0;a<=y;a++)L=s.get(a,y-1),s.set(a,y-1,A*L+C*s.get(a,y)),s.set(a,y,A*s.get(a,y)-C*L);for(a=w;a<=k;a++)L=i.get(a,y-1),i.set(a,y-1,A*L+C*i.get(a,y)),i.set(a,y,A*i.get(a,y)-C*L)}else t[y-1]=d+C,t[y]=d+C,n[y-1]=L,n[y]=-L;y-=2,M=0}else{if(d=s.get(y,y),g=0,u=0,c<y&&(g=s.get(y-1,y-1),u=s.get(y,y-1)*s.get(y-1,y)),10===M){for(j+=d,a=w;a<=y;a++)s.set(a,a,s.get(a,a)-d);R=Math.abs(s.get(y,y-1))+Math.abs(s.get(y-1,y-2)),d=g=.75*R,u=-.4375*R*R}if(30===M&&(R=(g-d)/2,R=R*R+u,R>0)){for(R=Math.sqrt(R),g<d&&(R=-R),R=d-u/((g-d)/2+R),a=w;a<=y;a++)s.set(a,a,s.get(a,a)-R);j+=R,d=g=u=.964}for(M+=1,l=y-2;l>=c&&(L=s.get(l,l),E=d-L,R=g-L,C=(E*R-u)/s.get(l+1,l)+s.get(l,l+1),A=s.get(l+1,l+1)-L-E-R,E=s.get(l+2,l+1),R=Math.abs(C)+Math.abs(A)+Math.abs(E),C/=R,A/=R,E/=R,l!==c)&&!(Math.abs(s.get(l,l-1))*(Math.abs(A)+Math.abs(E))<S*(Math.abs(C)*(Math.abs(s.get(l-1,l-1))+Math.abs(L)+Math.abs(s.get(l+1,l+1)))));)l--;for(a=l+2;a<=y;a++)s.set(a,a-2,0),a>l+2&&s.set(a,a-3,0);for(r=l;r<=y-1&&(x=r!==y-1,r!==l&&(C=s.get(r,r-1),A=s.get(r+1,r-1),E=x?s.get(r+2,r-1):0,d=Math.abs(C)+Math.abs(A)+Math.abs(E),0!==d&&(C/=d,A/=d,E/=d)),0!==d);r++)if(R=Math.sqrt(C*C+A*A+E*E),C<0&&(R=-R),0!==R){for(r!==l?s.set(r,r-1,-R*d):c!==l&&s.set(r,r-1,-s.get(r,r-1)),C+=R,d=C/R,g=A/R,L=E/R,A/=C,E/=C,o=r;o<e;o++)C=s.get(r,o)+A*s.get(r+1,o),x&&(C+=E*s.get(r+2,o),s.set(r+2,o,s.get(r+2,o)-C*L)),s.set(r,o,s.get(r,o)-C*d),s.set(r+1,o,s.get(r+1,o)-C*g);for(a=0;a<=Math.min(y,r+3);a++)C=d*s.get(a,r)+g*s.get(a,r+1),x&&(C+=L*s.get(a,r+2),s.set(a,r+2,s.get(a,r+2)-C*E)),s.set(a,r,s.get(a,r)-C),s.set(a,r+1,s.get(a,r+1)-C*A);for(a=w;a<=k;a++)C=d*i.get(a,r)+g*i.get(a,r+1),x&&(C+=L*i.get(a,r+2),i.set(a,r+2,i.get(a,r+2)-C*E)),i.set(a,r,i.get(a,r)-C),i.set(a,r+1,i.get(a,r+1)-C*A)}}}if(0===_)return;for(y=e-1;y>=0;y--)if(C=t[y],A=n[y],0===A)for(c=y,s.set(y,y,1),a=y-1;a>=0;a--){for(u=s.get(a,a)-C,E=0,o=c;o<=y;o++)E+=s.get(a,o)*s.get(o,y);if(n[a]<0)L=u,R=E;else if(c=a,0===n[a]?s.set(a,y,0!==u?-E/u:-E/(S*_)):(d=s.get(a,a+1),g=s.get(a+1,a),A=(t[a]-C)*(t[a]-C)+n[a]*n[a],p=(d*R-L*E)/A,s.set(a,y,p),s.set(a+1,y,Math.abs(d)>Math.abs(L)?(-E-u*p)/d:(-R-g*p)/L)),p=Math.abs(s.get(a,y)),S*p*p>1)for(o=a;o<=y;o++)s.set(o,y,s.get(o,y)/p)}else if(A<0)for(c=y-1,Math.abs(s.get(y,y-1))>Math.abs(s.get(y-1,y))?(s.set(y-1,y-1,A/s.get(y,y-1)),s.set(y-1,y,-(s.get(y,y)-C)/s.get(y,y-1))):(b=Al(0,-s.get(y-1,y),s.get(y-1,y-1)-C,A),s.set(y-1,y-1,b[0]),s.set(y-1,y,b[1])),s.set(y,y-1,0),s.set(y,y,1),a=y-2;a>=0;a--){for(m=0,v=0,o=c;o<=y;o++)m+=s.get(a,o)*s.get(o,y-1),v+=s.get(a,o)*s.get(o,y);if(u=s.get(a,a)-C,n[a]<0)L=u,E=m,R=v;else if(c=a,0===n[a]?(b=Al(-m,-v,u,A),s.set(a,y-1,b[0]),s.set(a,y,b[1])):(d=s.get(a,a+1),g=s.get(a+1,a),h=(t[a]-C)*(t[a]-C)+n[a]*n[a]-A*A,f=2*(t[a]-C)*A,0===h&&0===f&&(h=S*_*(Math.abs(u)+Math.abs(A)+Math.abs(d)+Math.abs(g)+Math.abs(L))),b=Al(d*E-L*m+A*v,d*R-L*v-A*m,h,f),s.set(a,y-1,b[0]),s.set(a,y,b[1]),Math.abs(d)>Math.abs(L)+Math.abs(A)?(s.set(a+1,y-1,(-m-u*s.get(a,y-1)+A*s.get(a,y))/d),s.set(a+1,y,(-v-u*s.get(a,y)-A*s.get(a,y-1))/d)):(b=Al(-E-g*s.get(a,y-1),-R-g*s.get(a,y),L,A),s.set(a+1,y-1,b[0]),s.set(a+1,y,b[1]))),p=Math.max(Math.abs(s.get(a,y-1)),Math.abs(s.get(a,y))),S*p*p>1)for(o=a;o<=y;o++)s.set(o,y-1,s.get(o,y-1)/p),s.set(o,y,s.get(o,y)/p)}for(a=0;a<e;a++)if(a<w||a>k)for(o=a;o<e;o++)i.set(a,o,s.get(a,o));for(o=e-1;o>=w;o--)for(a=w;a<=k;a++){for(L=0,r=w;r<=Math.min(o,k);r++)L+=i.get(a,r)*s.get(r,o);i.set(a,o,L)}}(a,c,r,o,e)}this.n=a,this.e=c,this.d=r,this.V=o}get realEigenvalues(){return Array.from(this.d)}get imaginaryEigenvalues(){return Array.from(this.e)}get eigenvectorMatrix(){return this.V}get diagonalMatrix(){let e,n,t=this.n,i=this.e,s=this.d,a=new dl(t,t);for(e=0;e<t;e++){for(n=0;n<t;n++)a.set(e,n,0);a.set(e,e,s[e]),i[e]>0?a.set(e,e+1,i[e]):i[e]<0&&a.set(e,e-1,i[e])}return a}}function Al(e,n,t,i){let s,a;return Math.abs(t)>Math.abs(i)?(s=i/t,a=t+s*i,[(e+s*n)/a,(n-s*e)/a]):(s=t/i,a=i+s*t,[(s*e+n)/a,(s*n-e)/a])}class El{constructor(e){if(!(e=xl.checkMatrix(e)).isSymmetric())throw new Error("Matrix is not symmetric");let n,t,i,s=e,a=s.rows,o=new dl(a,a),r=!0;for(t=0;t<a;t++){let e=0;for(i=0;i<t;i++){let a=0;for(n=0;n<i;n++)a+=o.get(i,n)*o.get(t,n);a=(s.get(t,i)-a)/o.get(i,i),o.set(t,i,a),e+=a*a}for(e=s.get(t,t)-e,r&=e>0,o.set(t,t,Math.sqrt(Math.max(e,0))),i=t+1;i<a;i++)o.set(t,i,0)}this.L=o,this.positiveDefinite=Boolean(r)}isPositiveDefinite(){return this.positiveDefinite}solve(e){e=xl.checkMatrix(e);let n=this.L,t=n.rows;if(e.rows!==t)throw new Error("Matrix dimensions do not match");if(!1===this.isPositiveDefinite())throw new Error("Matrix is not positive definite");let i,s,a,o=e.columns,r=e.clone();for(a=0;a<t;a++)for(s=0;s<o;s++){for(i=0;i<a;i++)r.set(a,s,r.get(a,s)-r.get(i,s)*n.get(a,i));r.set(a,s,r.get(a,s)/n.get(a,a))}for(a=t-1;a>=0;a--)for(s=0;s<o;s++){for(i=a+1;i<t;i++)r.set(a,s,r.get(a,s)-r.get(i,s)*n.get(i,a));r.set(a,s,r.get(a,s)/n.get(a,a))}return r}get lowerTriangularMatrix(){return this.L}}class Rl{constructor(e,n={}){e=xl.checkMatrix(e);let{Y:t}=n;const{scaleScores:i=!1,maxIterations:s=1e3,terminationCriteria:a=1e-10}=n;let o;if(t){if(t=Yc.isAnyArray(t)&&"number"==typeof t[0]?dl.columnVector(t):xl.checkMatrix(t),t.rows!==e.rows)throw new Error("Y should have the same number of rows as X");o=t.getColumnVector(0)}else o=e.getColumnVector(0);let r,c,l,p,u=1;for(let n=0;n<s&&u>a;n++)l=e.transpose().mmul(o).div(o.transpose().mmul(o).get(0,0)),l=l.div(l.norm()),r=e.mmul(l).div(l.transpose().mmul(l).get(0,0)),n>0&&(u=r.clone().sub(p).pow(2).sum()),p=r.clone(),t?(c=t.transpose().mmul(r).div(r.transpose().mmul(r).get(0,0)),c=c.div(c.norm()),o=t.mmul(c).div(c.transpose().mmul(c).get(0,0))):o=r;if(t){let n=e.transpose().mmul(r).div(r.transpose().mmul(r).get(0,0));n=n.div(n.norm());let i=e.clone().sub(r.clone().mmul(n.transpose())),s=o.transpose().mmul(r).div(r.transpose().mmul(r).get(0,0)),a=t.clone().sub(r.clone().mulS(s.get(0,0)).mmul(c.transpose()));this.t=r,this.p=n.transpose(),this.w=l.transpose(),this.q=c,this.u=o,this.s=r.transpose().mmul(r),this.xResidual=i,this.yResidual=a,this.betas=s}else this.w=l.transpose(),this.s=r.transpose().mmul(r).sqrt(),this.t=i?r.clone().div(this.s.get(0,0)):r,this.xResidual=e.sub(r.mmul(l.transpose()))}}Bc.AbstractMatrix=pl,Bc.CHO=El,Bc.CholeskyDecomposition=El,Bc.DistanceMatrix=ml,Bc.EVD=Cl,Bc.EigenvalueDecomposition=Cl,Bc.LU=bl,Bc.LuDecomposition=bl;var Ll=Bc.Matrix=dl;Bc.MatrixColumnSelectionView=class extends vl{constructor(e,n){al(e,n),super(e,e.rows,n.length),this.columnIndices=n}set(e,n,t){return this.matrix.set(e,this.columnIndices[n],t),this}get(e,n){return this.matrix.get(e,this.columnIndices[n])}},Bc.MatrixColumnView=class extends vl{constructor(e,n){nl(e,n),super(e,e.rows,1),this.column=n}set(e,n,t){return this.matrix.set(e,this.column,t),this}get(e){return this.matrix.get(e,this.column)}},Bc.MatrixFlipColumnView=class extends vl{constructor(e){super(e,e.rows,e.columns)}set(e,n,t){return this.matrix.set(e,this.columns-n-1,t),this}get(e,n){return this.matrix.get(e,this.columns-n-1)}},Bc.MatrixFlipRowView=class extends vl{constructor(e){super(e,e.rows,e.columns)}set(e,n,t){return this.matrix.set(this.rows-e-1,n,t),this}get(e,n){return this.matrix.get(this.rows-e-1,n)}},Bc.MatrixRowSelectionView=class extends vl{constructor(e,n){sl(e,n),super(e,n.length,e.columns),this.rowIndices=n}set(e,n,t){return this.matrix.set(this.rowIndices[e],n,t),this}get(e,n){return this.matrix.get(this.rowIndices[e],n)}},Bc.MatrixRowView=class extends vl{constructor(e,n){el(e,n),super(e,1,e.columns),this.row=n}set(e,n,t){return this.matrix.set(this.row,n,t),this}get(e,n){return this.matrix.get(this.row,n)}},Bc.MatrixSelectionView=hl,Bc.MatrixSubView=class extends vl{constructor(e,n,t,i,s){ol(e,n,t,i,s),super(e,t-n+1,s-i+1),this.startRow=n,this.startColumn=i}set(e,n,t){return this.matrix.set(this.startRow+e,this.startColumn+n,t),this}get(e,n){return this.matrix.get(this.startRow+e,this.startColumn+n)}};var Ml=Bc.MatrixTransposeView=class extends vl{constructor(e){super(e,e.columns,e.rows)}set(e,n,t){return this.matrix.set(n,e,t),this}get(e,n){return this.matrix.get(n,e)}};Bc.NIPALS=Rl,Bc.Nipals=Rl,Bc.QR=wl,Bc.QrDecomposition=wl,Bc.SVD=kl,Bc.SingularValueDecomposition=kl,Bc.SymmetricMatrix=gl,Bc.WrapperMatrix1D=fl,Bc.WrapperMatrix2D=xl,Bc.correlation=function(e,n=e,t={}){e=new dl(e);let i=!1;if("object"!=typeof n||dl.isMatrix(n)||Yc.isAnyArray(n)?n=new dl(n):(t=n,n=e,i=!0),e.rows!==n.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:s=!0,scale:a=!0}=t;s&&(e.center("column"),i||n.center("column")),a&&(e.scale("column"),i||n.scale("column"));const o=e.standardDeviation("column",{unbiased:!0}),r=i?o:n.standardDeviation("column",{unbiased:!0}),c=e.transpose().mmul(n);for(let n=0;n<c.rows;n++)for(let t=0;t<c.columns;t++)c.set(n,t,c.get(n,t)*(1/(o[n]*r[t]))*(1/(e.rows-1)));return c},Bc.covariance=function(e,n=e,t={}){e=new dl(e);let i=!1;if("object"!=typeof n||dl.isMatrix(n)||Yc.isAnyArray(n)?n=new dl(n):(t=n,n=e,i=!0),e.rows!==n.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:s=!0}=t;s&&(e=e.center("column"),i||(n=n.center("column")));const a=e.transpose().mmul(n);for(let n=0;n<a.rows;n++)for(let t=0;t<a.columns;t++)a.set(n,t,a.get(n,t)*(1/(e.rows-1)));return a};var Il=Bc.default=dl;Bc.determinant=function e(n){if((n=dl.checkMatrix(n)).isSquare()){if(0===n.columns)return 1;let t,i,s,a;if(2===n.columns)return t=n.get(0,0),i=n.get(0,1),s=n.get(1,0),a=n.get(1,1),t*a-i*s;if(3===n.columns){let a,o,r;return a=new hl(n,[1,2],[1,2]),o=new hl(n,[1,2],[0,2]),r=new hl(n,[1,2],[0,1]),t=n.get(0,0),i=n.get(0,1),s=n.get(0,2),t*e(a)-i*e(o)+s*e(r)}return new bl(n).determinant}throw Error("determinant can only be calculated for a square matrix")},Bc.inverse=function(e,n=!1){return e=xl.checkMatrix(e),n?new kl(e).inverse():Sl(e,dl.eye(e.rows))},Bc.linearDependencies=function(e,n={}){const{thresholdValue:t=1e-9,thresholdError:i=1e-9}=n;let s=(e=dl.checkMatrix(e)).rows,a=new dl(s,s);for(let n=0;n<s;n++){let o=dl.columnVector(e.getRow(n)),r=e.subMatrixRow(jl(s,n)).transpose(),c=new kl(r).solve(o),l=dl.sub(o,r.mmul(c)).abs().max();a.setRow(n,_l(l,c,n,t,i))}return a},Bc.pseudoInverse=function(e,n=Number.EPSILON){if((e=dl.checkMatrix(e)).isEmpty())return e.transpose();let t=new kl(e,{autoTranspose:!0}),i=t.leftSingularVectors,s=t.rightSingularVectors,a=t.diagonal;for(let e=0;e<a.length;e++)Math.abs(a[e])>n?a[e]=1/a[e]:a[e]=0;return s.mmul(dl.diag(a).mmul(i.transpose()))};var Dl=Bc.solve=Sl;Bc.wrap=function(e,n){if(Yc.isAnyArray(e))return e[0]&&Yc.isAnyArray(e[0])?new xl(e):new fl(e,n);throw new Error("the argument is not an array")};const Ol=Ll,Tl=Ml;Il.Matrix&&Il.Matrix;const Pl=Dl;function Fl(e,n){if(!Hc(e)||!Hc(n))throw new TypeError("x and y must be arrays");if(e.length!==n.length)throw new RangeError("x and y arrays must have the same length")}class Nl{constructor(){if(new.target===Nl)throw new Error("BaseRegression must be subclassed")}predict(e){if("number"==typeof e)return this._predict(e);if(Hc(e)){const n=[];for(const t of e)n.push(this._predict(t));return n}throw new TypeError("x must be a number or array")}_predict(e){throw new Error("_predict must be implemented")}train(){}toString(e){return""}toLaTeX(e){return""}score(e,n){Fl(e,n);const t=e.length,i=new Array(t);for(let n=0;n<t;n++)i[n]=this._predict(e[n]);let s=0,a=0,o=0,r=0,c=0,l=0,p=0;for(let e=0;e<t;e++)s+=i[e],a+=n[e],c+=i[e]*i[e],l+=n[e]*n[e],p+=i[e]*n[e],0!==n[e]&&(o+=(n[e]-i[e])*(n[e]-i[e])/n[e]),r+=(n[e]-i[e])*(n[e]-i[e]);const u=(t*p-s*a)/Math.sqrt((t*c-s*s)*(t*l-a*a));return{r:u,r2:u*u,chi2:o,rmsd:Math.sqrt(r/t)}}}function ql(e,n){return e<0?(e=0-e,"number"==typeof n?`- ${e.toPrecision(n)}`:`- ${e.toString()}`):"number"==typeof n?e.toPrecision(n):e.toString()}class zl extends Nl{constructor(e,n,t,i={}){if(super(),!0===e)this.degree=n.degree,this.powers=n.powers,this.coefficients=n.coefficients;else{Fl(e,n);const s=function(e,n,t,i={}){const s=e.length;let{interceptAtZero:a=!1}=i,o=[];if(Array.isArray(t))o=t,a=!1;else if("number"==typeof t)if(a){o=new Array(t);for(let e=0;e<t;e++)o[e]=e+1}else{o=new Array(t+1);for(let e=0;e<=t;e++)o[e]=e}const r=o.length,c=new Ol(s,r),l=new Ol([n]);for(let n=0;n<r;n++)for(let t=0;t<s;t++)0===o[n]?c.set(t,n,1):c.set(t,n,e[t]**o[n]);const p=new Tl(c),u=p.mmul(c),d=p.mmul(new Tl(l));return{coefficients:Pl(u,d).to1DArray(),degree:Math.max(...o),powers:o}}(e,n,t,i);this.degree=s.degree,this.powers=s.powers,this.coefficients=s.coefficients}}_predict(e){let n=0;for(let t=0;t<this.powers.length;t++)n+=this.coefficients[t]*e**this.powers[t];return n}toJSON(){return{name:"polynomialRegression",degree:this.degree,powers:this.powers,coefficients:this.coefficients}}toString(e){return this._toFormula(e,!1)}toLaTeX(e){return this._toFormula(e,!0)}_toFormula(e,n){let t="^",i="",s=" * ";n&&(t="^{",i="}",s="");let a="",o="";for(let n=0;n<this.coefficients.length;n++)o="",0!==this.coefficients[n]&&(o=0===this.powers[n]?ql(this.coefficients[n],e):1===this.powers[n]?`${ql(this.coefficients[n],e)+s}x`:`${ql(this.coefficients[n],e)+s}x${t}${this.powers[n]}${i}`,this.coefficients[n]>0&&n!==this.coefficients.length-1?o=` + ${o}`:n!==this.coefficients.length-1&&(o=` ${o}`)),a=o+a;return a.startsWith("+")&&(a=a.slice(1)),`f(x) = ${a}`}static load(e){if("polynomialRegression"!==e.name)throw new TypeError("not a polynomial regression model");return new zl(!0,e)}}async function Vl(e){var n=new Worker(new URL("worker.fc9db56f.js",import.meta.url),{type:"module"});window.myWorker=n;var t='<!doctype html>\n<html lang="en">\n <head>\n <link\n href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"\n rel="stylesheet"\n integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"\n crossorigin="anonymous"\n />\n <meta charset="UTF-8" />\n <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n <script src="https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js"><\/script>\n </head>\n\n <style>\n body {\n margin: 0;\n min-height: 100vh; /* Ensure body takes the full viewport height */\n display: flex; /* Enable Flexbox */\n justify-content: center; /* Center content horizontally */\n align-items: center; /* Center content vertically */\n font-family: sans-serif;\n }\n\n stim {\n position: absolute;\n height: auto;\n cursor: pointer;\n }\n\n #instruction {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #confirmContainer {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #stimulus {\n position: absolute;\n width: 25px;\n height: 25px;\n background-color: #1e90ff;\n border-radius: 50%;\n display: block; /* Initially hidden */\n transform: translate(-50%, -50%);\n }\n\n #headCanvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n #canvas-container {\n position: relative;\n width: 300px;\n height: 300px;\n top: 30px;\n margin: 0 auto;\n }\n </style>\n\n <body>\n \x3c!-- Center Instructions Panel --\x3e\n <div id="calibrationContentArea">\n <div class="row gap-2" id="instruction">\n \n </div>\n </div> \n\n <div id="stimulus"></div>\n <div id="canvas-container" style="display: none">\n <canvas\n id="headCanvas"\n class="frame"\n style="position: relative; display: none"\n ></canvas>\n </div>\n\n \x3c!-- Confirm Button --\x3e\n <div class="row gap-2" id="confirmContainer" style="display: none">\n <div class="card-body" style="text-align: center">\n <h3>Calibration complete!</h3>\n <button type="button" class="btn btn-primary" id="confirmButton">\n Continue\n </button>\n </div>\n </div>\n\n <div class="panel-block" style="display: block" ;>\n <video class="inputVideo" style="display: none"></video>\n </div>\n\n <audio autoplay id="voiceover"></audio>\n\n <script data-dynamic>\n\n // ----------- required -------------------\n function runAfterEveryFrame(output) {\n if (recordEyeMovements) {\n _gridCoordinates.push({\n x: parseFloat(stimulus.style.left),\n y: parseFloat(stimulus.style.top),\n });\n _eyeCoordinates.push({\n x: output.output.cpuData[0] * 100 - 50,\n y: output.output.cpuData[1] * 100,\n });\n _calibrationData.push(calibrationData);\n let time = new Date().getTime();\n _timeData.push(time);\n }\n }\n\n function pageCompleted() {\n continueProcessing = false;\n recordEyeMovements = false;\n const event = new Event("pageComplete");\n document.dispatchEvent(event);\n }\n\n var recordEyeMovements = false;\n var calibrationData = 1;\n var continueProcessing = true;\n\n var deviceConfig = store.session.get("deviceConfig");\n var _gridCoordinates = [];\n var _parentDir = store.session.get("id");\n var _videoURL = "";\n\n var IMAGE_SIZE = 640;\n var upperbound_x = 96;\n var lowerbound_x = 2;\n var upperbound_y = 96;\n var lowerbound_y = 2;\n var stimulus = document.getElementById("stimulus");\n var x = 0;\n var y = 0;\n var counter = 0;\n var incX = 0.15 * 2;\n var incY = 0.02 * 2;\n var timeArray = [];\n var xArray = [];\n var yArray = [];\n var _eyeCoordinates = [];\n var _calibrationData = [];\n var _timeData = [];\n var fixationStimulus_x = [30, 50, 70];\n var fixationStimulus_y = [20, 40, 60];\n\n async function startTest() {\n await runInference();\n openFullscreen();\n updateCountdown(initStimulus);\n }\n\n async function initStimulus() {\n document.getElementById("stimulus").style.display = "block";\n await startRecording();\n recordEyeMovements = true;\n moveStimulus();\n }\n\n async function moveStimulus() {\n counter = counter + 1;\n if (x > upperbound_x) {\n incX = -0.15 * 2;\n } else if (x < lowerbound_x) {\n incX = 0.15 * 2;\n }\n\n if (y > upperbound_y) {\n incY = -0.02 * 2;\n } else if (y < lowerbound_y) {\n incY = 0.02 * 2;\n }\n x = x + incX;\n y = y + incY;\n let time = new Date().getTime();\n\n timeArray.push(time);\n xArray.push(x);\n yArray.push(y);\n\n stimulus.style.left = `${x}%`; // Adjust for half of the cell width\n stimulus.style.top = `${y}%`; // Adjust for half of the cell height\n\n if (y < 75) {\n setTimeout(moveStimulus, 10);\n } else {\n calibrationData = 0;\n\n await stopRecording();\n pageCompleted();\n // setTimeout(fixationStimulus, 10);\n }\n }\n\n async function fixationStimulus() {\n for (let x of fixationStimulus_x) {\n for (let y of fixationStimulus_y) {\n let time = new Date().getTime();\n timeArray.push(time);\n xArray.push(x);\n yArray.push(y);\n\n stimulus.style.left = `${x}%`; // Adjust for half of the cell width\n stimulus.style.top = `${y}%`; // Adjust for half of the cell height\n\n // Wait for 4 seconds before moving to the next position\n await new Promise((resolve) => setTimeout(resolve, 4000));\n }\n }\n\n await stopRecording();\n pageCompleted();\n }\n <\/script>\n </body>\n</html>\n';"short"===e.firekit.task.variantParams.calibrationType&&(t='<!doctype html>\n<html lang="en">\n <head>\n <link\n href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"\n rel="stylesheet"\n integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"\n crossorigin="anonymous"\n />\n <meta charset="UTF-8" />\n <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n <script src="https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js"><\/script>\n </head>\n\n <style>\n body {\n margin: 0;\n min-height: 100vh; /* Ensure body takes the full viewport height */\n display: flex; /* Enable Flexbox */\n justify-content: center; /* Center content horizontally */\n align-items: center; /* Center content vertically */\n font-family: sans-serif;\n }\n\n\n .bubble {\n position: absolute;\n border-radius: 50%;\n animation: spin 2s linear infinite;\n }\n\n\n .piece {\n width: 10px;\n height: 10px;\n background-color: inherit;\n border-radius: 50%;\n position: absolute;\n transform: translate(-50%, -50%);\n opacity: 0;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg); /* Constant speed */\n }\n }\n\n .spin {\n animation: spin 2s linear infinite;\n }\n\n stim {\n position: absolute;\n height: auto;\n cursor: pointer;\n }\n\n #instruction {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #confirmContainer {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #stimulus {\n position: absolute;\n /* animation: pulsate 1s infinite; */\n /* animation: spin 2s linear infinite; */\n width: 25px;\n height: 50px;\n background-color: #1e90ff;\n border-radius: 50%;\n display: block; /* Initially hidden */\n transform: translate(-50%, -50%);\n visibility: hidden;\n }\n\n #headCanvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n #canvas-container {\n position: relative;\n width: 300px;\n height: 300px;\n top: 30px;\n margin: 0 auto;\n }\n\n @keyframes pulsate {\n 0% {\n transform: scale(1) translate(-50%, -50%);\n }\n 50% {\n transform: scale(1.2) translate(-50%, -50%);\n }\n 100% {\n transform: scale(1) translate(-50%, -50%);\n }\n }\n\n @keyframes burst {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 100% {\n transform: translate(var(--dx), var(--dy)) scale(0.5);\n opacity: 0;\n }\n }\n\n </style>\n\n <body>\n \x3c!-- Center Instructions Panel --\x3e\n <div id="calibrationContentArea">\n <div class="row gap-2" id="instruction">\n </div>\n </div> \n\n <div id="stimulus" class="pulsating-disc"></div>\n <div id="canvas-container" style="display: none">\n <canvas\n id="headCanvas"\n class="frame"\n style="position: relative; display: none"\n ></canvas>\n </div>\n\n \x3c!-- Confirm Button --\x3e\n <div class="row gap-2" id="confirmContainer" style="display: none">\n <div class="card-body" style="text-align: center">\n <h3>Calibration complete!</h3>\n <button type="button" class="btn btn-primary" id="confirmButton">\n Continue\n </button>\n </div>\n </div>\n\n <div class="panel-block" style="display: block" ;>\n <video class="inputVideo" style="display: none"></video>\n </div>\n\n <audio autoplay id="voiceover"></audio>\n\n <script data-dynamic>\n\n // ----------- required -------------------\n function runAfterEveryFrame(output) {\n if (recordEyeMovements) {\n _gridCoordinates.push({\n x: parseFloat(stimulus.style.left),\n y: parseFloat(stimulus.style.top),\n });\n _eyeCoordinates.push({\n x: output.output.cpuData[0] * 100 - 50,\n y: output.output.cpuData[1] * 100,\n });\n _calibrationData.push(calibrationData);\n let time = new Date().getTime();\n _timeData.push(time);\n }\n }\n \n\n function pageCompleted() {\n continueProcessing = false;\n recordEyeMovements = false;\n const event = new Event("pageComplete");\n document.dispatchEvent(event);\n }\n\n var current_viewingDistance = 0;\n var recordEyeMovements = false;\n var calibrationData = 1;\n var continueProcessing = true;\n var deviceConfig = store.session.get("deviceConfig");\n var _gridCoordinates = [];\n var _parentDir = store.session.get("id");\n var _videoURL = "";\n\n var IMAGE_SIZE = 640;\n var upperbound_x = 96;\n var lowerbound_x = 2;\n var upperbound_y = 96;\n var lowerbound_y = 2;\n var stimulus = document.getElementById("stimulus");\n var x = 0;\n var y = 0;\n var counter = 0;\n var incX = 0.15 * 2;\n var incY = 0.02 * 2;\n var timeArray = [];\n var xArray = [];\n var yArray = [];\n var _eyeCoordinates = [];\n var _calibrationData = [];\n var _timeData = [];\n var fixationStimulus_x = [30, 50, 70];\n var fixationStimulus_y = [20, 40, 60];\n\n async function startTest() {\n await runInference();\n openFullscreen();\n stimulus.classList.add(\'spin\')\n updateCountdown(initStimulus);\n }\n\n async function initStimulus() {\n document.getElementById("stimulus").style.display = "block";\n await startRecording();\n recordEyeMovements = true;\n stimulus.style.visibility = \'visible\';\n moveStimulus();\n }\n\n\n // Function to create the burst effect\n function createBurstEffect(x,y,size=50) {\n const numPieces = 8; // Number of pieces\n // Play the burst audio\n const burstAudio = new Audio(\'https://eyetrackingdata.blob.core.windows.net/public/Audios/feedbackCorrect.mp3\'); // Replace with your audio file path\n burstAudio.play();\n for (let i = 0; i < numPieces; i++) {\n const piece = document.createElement(\'div\');\n piece.style.position = \'absolute\';\n piece.style.transform = \'translate(-50%, -50%)\';\n piece.classList.add(\'piece\');\n piece.style.backgroundColor = \'#1e90ff\';\n piece.style.left = `${x + size / 2 - 5}px`;\n piece.style.top = `${y + size / 4 - 5}px`;\n\n // Random direction for each piece\n const angle = (i / numPieces) * Math.PI * 2;\n const dx = Math.cos(angle) * size + \'px\';\n const dy = Math.sin(angle) * size + \'px\';\n\n // Set custom properties for animation\n piece.style.setProperty(\'--dx\', dx);\n piece.style.setProperty(\'--dy\', dy);\n piece.style.animation = `burst 0.8s ease-out forwards`;\n document.body.appendChild(piece);\n // Remove the piece after animation ends\n // Hide the element\n stimulus.style.visibility = \'hidden\';\n setTimeout(() => piece.remove(), 800);\n\n }\n // Show the element again after 200ms\n setTimeout(() => {\n stimulus.style.visibility = \'visible\';\n stimulus.classList.add(\'spin\')\n // setTimeout(() => {\n // stimulus.classList.add(\'spin\'); // Add the spin class after 500ms\n // }, 200);\n }, 800); // 200ms delayue)\n\n \n // Remove the bubble after bursting\n }\n\n // Define the locations with repetition to cover 3 seconds at 10ms intervals\n var locations = [\n { x: 25, y: 25 }, // Location 1 (25,25)\n { x: 75, y: 25 }, // Location 2 (25,25)\n { x: 25, y: 65 }, // Location 3 (25,25)\n { x: 75, y: 65 }, // Location 4 (25,25)\n // { x: 50, y: 50 }, // Location 5 (25,50)\n ];\n\n // Create an array that repeats each location enough times to cover 3 seconds at 10ms intervals\n var sequence = [];\n locations.forEach((loc) => {\n for (let i = 0; i < 6; i++) { // 6 iterations for 3 seconds at 500ms intervals\n sequence.push(loc);\n }\n });\n\n async function moveStimulus() {\n if (counter < (sequence.length-1)) {\n let point = document.getElementById("point");\n stimulus.style.left = `${sequence[counter].x}%`; // Adjust for half of the cell width\n stimulus.style.top = `${sequence[counter].y}%`; // Adjust for half of the cell height\n \n counter += 1;\n // Toggle recording of eye movements\n if (counter % 6 <= 1) { // First 500ms\n if (counter>2 & counter % 6 == 0){\n var leftInPixels = (sequence[counter-1].x / 100) * document.body.offsetWidth;;\n var topInPixels = (sequence[counter-1].y / 100) * document.body.offsetHeight;;\n if (stimulus.classList.contains(\'spin\')) {\n stimulus.classList.remove(\'spin\');\n }\n createBurstEffect(leftInPixels-12.5,topInPixels+12.5)\n }\n recordEyeMovements = false;\n } else {\n recordEyeMovements = true;\n }\n // console.log(\'counter\',counter,counter%6,recordEyeMovements,stimulus.style.left ,`${sequence[counter].x}%`)\n\n setTimeout(moveStimulus, 500); // Call this function every 500ms\n } else {\n calibrationData = 0;\n await stopRecording();\n continueProcessing = false;\n recordEyeMovements = false;\n var leftInPixels = (sequence[counter-1].x / 100) * document.body.offsetWidth;;\n var topInPixels = (sequence[counter-1].y / 100) * document.body.offsetHeight;;\n createBurstEffect(leftInPixels-12.5,topInPixels+12.5)\n setTimeout(() => pageCompleted(), 500); // Proper callback structure\n }\n }\n // async function moveStimulus() {\n // counter = counter + 1;\n // if (x > upperbound_x) {\n // incX = -0.15 * 2;\n // } else if (x < lowerbound_x) {\n // incX = 0.15 * 2;\n // }\n\n // if (y > upperbound_y) {\n // incY = -0.02 * 2;\n // } else if (y < lowerbound_y) {\n // incY = 0.02 * 2;\n // }\n // x = x + incX;\n // y = y + incY;\n // let time = new Date().getTime();\n\n // timeArray.push(time);\n // xArray.push(x);\n // yArray.push(y);\n\n // stimulus.style.left = `${x}%`; // Adjust for half of the cell width\n // stimulus.style.top = `${y}%`; // Adjust for half of the cell height\n\n // if (y < 75) {\n // setTimeout(moveStimulus, 10);\n // } else {\n // calibrationData = 0;\n\n // await stopRecording();\n // pageCompleted();\n // // setTimeout(fixationStimulus, 10);\n // }\n // }\n\n async function fixationStimulus() {\n for (let x of fixationStimulus_x) {\n for (let y of fixationStimulus_y) {\n let time = new Date().getTime();\n timeArray.push(time);\n xArray.push(x);\n yArray.push(y);\n\n stimulus.style.left = `${x}%`; // Adjust for half of the cell width\n stimulus.style.top = `${y}%`; // Adjust for half of the cell height\n\n // Wait for 4 seconds before moving to the next position\n await new Promise((resolve) => setTimeout(resolve, 4000));\n }\n }\n\n await stopRecording();\n pageCompleted();\n }\n <\/script>\n </body>\n</html>\n');const i=document.createElement("div");i.innerHTML=dc;const s=document.createElement("div");s.style.position="fixed",s.style.top="0",s.style.left="0",s.style.width="100%",s.style.height="100%",qr(pc),qr(Vc),s.innerHTML=t;const a=Hr;document.body.appendChild(s),await Fr(s),await Fr(i),Nr(i),Nr(s),async function(e){initEyeTracking(!1);try{const e=o.session.get("deviceConfig"),n=e.bEyeTracking,t=e.storeVideo;await giveAccess(n,t)}catch(e){console.error("Camera access failed:",e)}startTest()}(),Ur(be.store.data[be.language].translation),await new Promise((n=>{document.addEventListener("pageComplete",(async()=>{s.innerHTML=a,Br(s);var t=_eyeCoordinates.filter(((e,n)=>1==_calibrationData[n])),i=_gridCoordinates.filter(((e,n)=>1==_calibrationData[n]));let r=null,c=!1;if(t.length>=2&&i.length>=2)try{r=function(e,n){const t=new zl(e.map((e=>e.x)),n.map((e=>e.x)),1),i=new zl(e.map((e=>e.y)),n.map((e=>e.y)),1);return{x_regressor:t.coefficients,y_regressor:i.coefficients}}(t,i),function(e){o.session.set("x_coef",e.x_regressor[1]),o.session.set("x_intercept",e.x_regressor[0]),o.session.set("y_coef",e.y_regressor[1]),o.session.set("y_intercept",e.y_regressor[0])}(r),c=!0}catch(e){console.warn("Calibration failed due to insufficient or invalid data:",e),console.warn("Proceeding without eye tracking calibration.")}else console.warn("Insufficient calibration data collected. Face detection may have failed."),console.warn("Proceeding without eye tracking calibration.");await async function(e,n,t){console.log("Test Finished");const i=(new Date).getTime();await stopRecording();var s="RAN_eyeCalibration_"+t.toString()+"_"+i+".webm";try{let i=null;Dr(window.deviceConfig.storeVideo)&&(i=await saveRecordings({filename:s,deviceConfig:window.deviceConfig,config:e,metadata:{}}));const a={assessment_type:"MEP",assessment_stage:"eyeCalibration",recordedVideo:s,distance:t,regressors:n,stimulusPosition:_gridCoordinates,eyeCoordinates:_eyeCoordinates,calibrationData:_calibrationData,uploadURL:i,_timeData:_timeData,parentDir:o.session.get("id"),deviceConfig:o.session.get("deviceConfig"),participantConfig:o.session.get("participantConfig"),correct:1};e.firekit.writeTrial(a)}catch(e){console.error("Error in saveRecordings:",e)}}(e,r,50),zr(pc),zr(Vc),s.remove(),Vr(),n()}),{once:!0})}))}var Bl=5,Ul=10,Hl=24.75,Wl=13;function $l(e){let n,t,i,s;if(e.screenWidth>0&&e.screenHeight>0){const i=Wl/Bl;n=Hl/Ul*(e.screenWidthPX/e.screenWidth),t=i*(e.screenHeightPX/e.screenHeight)}else{const i=.8*e.screenWidthPX,s=.8*e.screenHeightPX;n=i/Ul,t=s/Bl}i=n*Ul,s=t*Bl;const a=(e.screenWidthPX-i)/2,o=(e.screenHeightPX-s)/2,r=[];for(let e=0;e<Bl;e++)for(let i=0;i<Ul;i++){const s=a+i*n+n/2,c=o+e*t+t/2;r.push({x:s,y:c,width:n,height:t})}return r}function Yl(e){const n=[...new Set(e.stimulus)],t=[];for(;t.length<9;){const e=t[t.length-1],i=n.filter((n=>n!==e));t.push(i[Math.floor(Math.random()*i.length)])}return t}function Kl(e,n,t){const i=document.getElementById("grid-container");"Practice"===type?(Ul=3,Bl=3,Hl=2.475*3,Wl=2.6*3,e=$l(deviceConfig),n=Yl(t)):(Ul=10,Bl=5,Hl=24.75,Wl=13,e=$l(deviceConfig));const s=Bl*Ul;for(let a=0;a<s;a++){const s=document.createElement("div"),{x:o,y:r,width:c,height:l}=e[a];s.style.width=`${c}px`,s.style.height=`${l}px`,s.style.left=`${o}px`,s.style.top=`${r}px`,s.style.position="absolute",s.style.transform="translate(-50%, -50%)",s.style.display="flex",s.style.justifyContent="center",s.style.alignItems="center";const p=n[a],u=document.createElement("img");u.src=`${t.dir}/${p}`,u.style.width="50%",u.style.height="auto",s.appendChild(u),i.appendChild(s);const d=u.getBoundingClientRect();d.x=d.x+d.width/2,d.y=d.y+d.height/2;const g={x:parseFloat(s.style.left),y:parseFloat(s.style.top),width:parseFloat(s.style.width),height:parseFloat(s.style.height),stim_x:d.x,stim_y:d.y,stim_width:d.width,stim_height:d.height};_gridCoordinates.push(g),_shuffledImages.push(p.slice(0,-4))}}async function Xl(){return new Promise((e=>{const n=()=>{inputVideo&&inputVideo.videoWidth>0&&inputVideo.videoHeight>0?e():setTimeout(n,100)};n()}))}var Gl=4;function Jl(e){0==--Gl?(document.getElementById("instruction").style.display="none",document.getElementById("grid-container").style.visibility="visible",Gl=4,trialRunnning=!0):(document.getElementById("instruction").innerHTML="<h1>"+Gl+"</h1>",setTimeout((function(){Jl()}),1e3))}var Ql=Object.freeze({__proto__:null,get countdown(){return Gl},generateGridCoordinates:$l,generatePracticeStimuli:Yl,generateStimulusOrder:function(e){const n=Bl*Ul,t=e.stimulus.slice(),i=Math.ceil(n/t.length),s=[];for(let e=0;e<i;e++){const e=t.sort((()=>Math.random()-.5));s.push(...e)}for(let e=1;e<s.length;e++)if(s[e]===s[e-1]){const n=s[e];s[e]=s[e+1],s[e+1]=n}return s.slice(0,n)},get gridHeightCM(){return Wl},get gridWidthCM(){return Hl},get numCols(){return Ul},get numRows(){return Bl},populateGrid:Kl,startTest:async function(e){if(e)try{await Xl(),continueProcessing=!0,runInference()}catch(e){console.warn("Eye tracking inference failed, continuing without eye tracking:",e),continueProcessing=!1}openFullscreen(),startRecording(),Kl(gridCoordinates,shuffledImages,testConfig),Jl(),setTimeout((function(){document.querySelector(".finish-button").disabled=!1}),5e3)},updateCountdown:Jl,waitForVideoReady:Xl});async function Zl(e,n,t={}){var i=new Worker(new URL("worker.fc9db56f.js",import.meta.url),{type:"module"});window.myWorker=i;const s=document.createElement("div");s.innerHTML=dc;const a=document.createElement("div");a.style.position="fixed",a.style.top="0",a.style.left="0",a.style.width="100%",a.style.height="100%",window.deviceConfig=o.session.get("deviceConfig");const{bEyeTracking:r,storeVideo:c}=window.deviceConfig;qr(Ql),qr(pc),qr(Vc),a.innerHTML='<!DOCTYPE html>\n<html lang="en">\n<head>\n <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>Image and Audio Recording</title>\n\n \x3c!-- <script data-dynamic src="./RAN.js"><\/script> --\x3e\n</head>\n\n<style> \n body {\n margin: 0;\n min-height: 100vh; /* Ensure body takes the full viewport height */\n display: flex; /* Enable Flexbox */\n justify-content: center; /* Center content horizontally */\n align-items: center; /* Center content vertically */\n font-family: sans-serif;\n }\n\n stim {\n position: absolute;\n height: auto;\n cursor: pointer;\n }\n\n #instruction {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #confirmContainer {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #headCanvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n #canvas-container {\n position: relative;\n width: 300px;\n height: 300px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n }\n\n /* TODO: Using RAN Intro Container temporarily */\n #ran-intro-container {\n position: fixed;\n top: 0; left: 0;\n width: 100vw; height: 100vh;\n }\n</style>\n\n\n<body> \n <div id="grid-container" style="position: absolute; width: 100%; height: 100%; visibility: hidden;"></div>\n <div id="canvas-container" style="visibility: hidden">\n <h5 id="message"></h5>\n <canvas id="headCanvas" class="frame" style="position: relative"></canvas>\n </div>\n \x3c!-- Countdown display (used by updateCountdown in RAN.js after intro hides) --\x3e\n <div id="instruction"></div>\n\n \x3c!-- Intro Panel --\x3e\n <div id="ran-intro-container" class="container-fluid h-100"> \n <div class="static-container">\n <div class="header-container--ran"> \n <h2 class="header"></h2>\n <h3 class="subtitle"></h3>\n </div>\n <img class="lion-char" src="https://storage.googleapis.com/roav-ran/shared/assets/pointingLeftLionAge12.webp" alt="Lion character">\n <p class="next-text"></p>\n </div>\n </div>\n\n \x3c!-- Continue Button (shown during intro, hidden once test starts) --\x3e\n <button class="next-button" disabled aria-label="Start"></button>\n\n\n <div class="panel-block" style="display: block" ;>\n <video class="inputVideo" style="display: none"></video>\n </div>\n \n \x3c!-- Audio Playing --\x3e \n <audio autoplay id="voiceover"> </audio>\n \n \x3c!--TODO: Check if we need this--\x3e\n \x3c!-- Confirm Button --\x3e\n \x3c!--<div class="row gap-2" id="confirmContainer" style="display: none;">\n <div class="card-body" style="text-align: center;">\n <h3> <span id="capName"></span> Test Complete </h3>\n <button type="button" class="btn btn-primary" id="confirmButton">Back to Menu</button>\n </div>\n </div>--\x3e\n\n \x3c!-- Finish Button --\x3e\n <button class="finish-button" disabled aria-label="Finish"></button>\n\n<script data-dynamic>\n\nvar deviceConfig = store.session.get(\'deviceConfig\')\n// var deviceConfig = {screenWidth: 29, screenHeight: 16.2, screenWidthPX: 960, screenHeightPX: 540, webcamHeight: 0.5}\nvar testConfig = store.session.get(\'testConfig\')\n// var testConfig = {dir: "https://eyetrackingdata.blob.core.windows.net/public/assets/Letter",\n// stimulus : ["C.svg", "D.svg", "H.svg", "K.svg", "N.svg", "O.svg", "R.svg", "S.svg", "V.svg", "Z.svg"],\n// sizecm: 2}\n\nif (testConfig && testConfig[\'testname\'] === \'Letters\') {\n var subtestText = [\'Letter\', \'letter\']\n} else {\n var subtestText = [\'Number\', \'number\']\n}\n\nvar nextButton = document.querySelector(\'.next-button\');\nvoiceover.addEventListener(\'ended\', function() {\n nextButton.disabled = false;\n});\n// Fallback: enable button after 5 seconds if audio fails or has no src\nvar _audioFallbackTimer = setTimeout(function() {\n nextButton.disabled = false;\n}, 7000);\nnextButton.addEventListener(\'click\', function() {\n pre_startTest();\n});\n\nvar desktop = document.documentElement;\nvar canvasContainer = document.getElementById("canvas-container");\nvar camera_stream;\nvar mediaRecorder;\nvar mediaChunks = [];\nvar current_viewingDistance;\n\nvar clickedTests = store.session.get(\'clickedTests\') || [];\nif (type!==\'Practice\') {\nclickedTests.push(testConfig[\'testname\'])\n}\n\nstore.session.set(\'clickedTests\',clickedTests)\n\nvar gridCoordinates = generateGridCoordinates(deviceConfig)\nvar shuffledImages = testConfig.stimulus; \n// var shuffledImages = generateStimulusOrder(testConfig)\n \nvar _gridCoordinates = []\n// gridCoordinates\nvar _shuffledImages = []\n// shuffledImages.map(filename => filename.split(\'.\')[0]);\nvar _parentDir = store.session.get("id")\nvar _videoURL = \'\'\nvar _deviceConfig = deviceConfig\nvar _testConfig = testConfig\n\nvar x_coef =\nstore.session.get("x_coef") !== null\n ? store.session.get("x_coef")\n : -3.49; // Default value can be 0 or any other default you choose\nvar x_intercept =\nstore.session.get("x_intercept") !== null\n ? store.session.get("x_intercept")\n : 45; // Default value can be 0\nvar y_coef =\nstore.session.get("y_coef") !== null ? store.session.get("y_coef") : 0; // Default value can be 0\nvar y_intercept =\nstore.session.get("y_intercept") !== null\n ? store.session.get("y_intercept")\n : 0; // Default value can be 0\n\n\nvar xpreds = []\nvar ypreds = []\nvar eyetTimer = []\nvar trialRunnning = false\nvar continueProcessing = false\nfunction pre_startTest(){\n clearTimeout(_audioFallbackTimer);\n voiceover.pause();\n voiceover.currentTime = 0;\n document.querySelector(\'.container-fluid.h-100\').style.display = \'none\';\n document.querySelector(\'.next-button\').style.display = \'none\';\n document.querySelector(\'.finish-button\').style.display = \'flex\';\n startTest(deviceConfig.bEyeTracking);\n }\n\nfunction runAfterEveryFrame(output) {\n var xpred =\n ((x_coef * (output.output.cpuData[0] * 100 - 50) + x_intercept) *\n screen.width) /\n 100;\n var ypred = ((y_coef*((output.output.cpuData[1]*100)) + y_intercept) * screen.height) /100;\n if (trialRunnning) {\n xpreds.push(xpred);\n ypreds.push(ypred);\n eyetTimer.push(Date.now()); // corrected from \'eyetTimer\' and \'data.now()\' to \'eyeTimer\' and \'Date.now()\'\n }\n }\n\n\n\n\n<\/script>\n\n</body>\n</html>';const l=Hr;document.body.appendChild(a),window.type=e,await Fr(a),await Fr(s),Nr(s),Nr(a),async function(e,n,t,i){initEyeTracking(!1),await giveAccess(n,t),document.querySelector(".header").innerHTML=(i.header.text??"").replace(/\n/g,"<br>"),document.querySelector(".subtitle").innerHTML=(i.subtitle.text??"").replace(/\n/g,"<br>"),document.querySelector(".next-text").textContent=i.footer.text??"";var s=document.getElementById("voiceover"),a=[i.header?.audioSrc,i.subtitle?.audioSrc,i.footer?.audioSrc].filter(Boolean);function o(e){if(0!==e.length){var[n,...t]=e;s.src=n,t.length>0&&s.addEventListener("ended",(function(){o(t)}),{once:!0}),s.play().catch((function(){}))}}a.length>0?o(a):s.src=""}(0,r,c,t);const p=new AbortController;await new Promise((e=>{document.body.addEventListener("click",(async function(t){t.target.classList.contains("finish-button")&&(window.continueProcessing=!1,a.innerHTML=l,Br(a),await ep(n,{stimulus:_shuffledImages}),a.remove(),p.abort(),function(e){zr(e);document.querySelectorAll("button").forEach((e=>{if(e.parentNode){const n=e.cloneNode(!0);e.parentNode.replaceChild(n,e)}})),Vr();for(;document.body.firstChild;)document.body.removeChild(document.body.firstChild)}(Ql),e())}),{signal:p.signal})}))}async function ep(e,n){console.log("Test Finished"),await stopRecording();let t=null;const i=(new Date).getTime(),s="RAN_"+testConfig.testname+"_"+i+".webm";try{t=await saveRecordings({filename:s,deviceConfig:window.deviceConfig,config:e,metadata:n})}catch(e){console.error("Error in saveRecordings:",e)}const a={assessment_type:testConfig.testname,assessment_stage:type,stimulusPosition:_gridCoordinates,stimulus:n.stimulus,recordedVideo:s,parentDir:_parentDir,uploadURL:t,xpreds:xpreds,ypreds:ypreds,eyetTimer:eyetTimer,correct:1,deviceConfig:_deviceConfig,testConfig:_testConfig};await e.firekit.writeTrial(a)}async function np(e){const n=Hr,t=document.createElement("div");t.innerHTML=n,document.body.appendChild(t);const i=["https://eyetrackingdata.blob.core.windows.net/public/Images/squareAddition_white.png","./views/eyetracking_google.onnx",`https://eyetrackingdata.blob.core.windows.net/public/Audios/${be.language}/calibration.mp3`,"https://eyetrackingdata.blob.core.windows.net/public/Images/eyecalibration.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/eyecalibration_short.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/parent-help-icon.png","https://eyetrackingdata.blob.core.windows.net/public/Images/webcamCentered.jpg","https://eyetrackingdata.blob.core.windows.net/public/Images/webcamPosition.PNG","https://eyetrackingdata.blob.core.windows.net/public/Images/badlighting.jpg","https://eyetrackingdata.blob.core.windows.net/public/Images/glassesReflection.jpg","https://eyetrackingdata.blob.core.windows.net/public/Images/goodPosition.jpg",`https://eyetrackingdata.blob.core.windows.net/public/Audios/${be.language}/deviceConfig.mp3`,"https://eyetrackingdata.blob.core.windows.net/public/Audios/deviceConfig.mp3","https://eyetrackingdata.blob.core.windows.net/public/Images/squareAddition.png",`https://eyetrackingdata.blob.core.windows.net/public/Audios/${be.language}/headCalibration.mp3`,"https://eyetrackingdata.blob.core.windows.net/public/Audios/letterStoryCalibration.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberStoryCalibration.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterCalibration.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterPractice.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterTest.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberCalibration.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberPractice.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberTest.mp3","https://eyetrackingdata.blob.core.windows.net/public/Images/letter-practice-reading-order.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/letter-test-reading-order.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/number-practice-reading-order.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/number-test-reading-order.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/squareAddition_white.png","https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js","https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css","https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/face_mesh_solution_simd_wasm_bin.wasm","https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/face_mesh_solution_packed_assets.data","https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/face_mesh_solution_simd_wasm_bin.js"],s=["https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-default.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-panicked.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-unsure.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-confused.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-smile.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-happy.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-bye.png","https://eyetrackingdata.blob.core.windows.net/public/Images/space-ship-control.png","https://eyetrackingdata.blob.core.windows.net/public/Images/purple-planet.png","https://eyetrackingdata.blob.core.windows.net/public/Images/orange-planet.png","https://eyetrackingdata.blob.core.windows.net/public/Audios/intro.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/intro2.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/intro3.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterStoryPractice.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberStoryPractice.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterStoryTest.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberStoryTest.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/end.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/end2.mp3"],a=[...new Set(e.story?[...i,...s]:i)];await function(e,n){return new Promise(((t,i)=>{let s=0;e.forEach((a=>{if("fetch"==="fetch")fetch(a).then((e=>{e.ok?o():r()})).catch(r);else console.error("Unknown asset type:",a),r();function o(){s++,s==e.length&&(n.remove(),t())}function r(e){console.error("Error loading asset:",a,e),i(e)}}))}))}(a,t),console.log("All assets preloaded.")}function tp(){window.instructionAbortController&&(window.instructionAbortController.abort(),delete window.instructionAbortController),Vr()}async function ip(e,n){Array.isArray(e)||(e=[e]);const t=document.createElement("div");t.innerHTML='<!DOCTYPE html>\n<html lang="en">\n<head>\n <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n</head>\n\n<body>\n <div class="container-fluid h-100">\n <div class="static-container">\n <h2 class="header--center"></h2>\n <img class="lion-char" src="https://storage.googleapis.com/roav-ran/shared/assets/pointingLeftLionAge12.webp" alt="Lion character">\n <p class="next-text"></p>\n </div>\n <button class="next-button" id="info-next-button" aria-label="Continue"></button>\n </div>\n <audio id="voiceover"></audio>\n</body>\n\n<script data-dynamic>\n var slideIndex = 0;\n var slides = window.infoSlides || [];\n var infoSignal = window.infoSlideAbortController\n ? window.infoSlideAbortController.signal\n : undefined;\n var voiceover = document.getElementById(\'voiceover\');\n\n document.querySelector(\'.next-button\').addEventListener(\'click\', function () {\n voiceover.pause();\n showSlide(++slideIndex);\n }, { signal: infoSignal });\n\n showSlide(slideIndex);\n\n function showSlide(index) {\n if (index >= slides.length) {\n document.dispatchEvent(new Event(\'pageComplete\'));\n return;\n }\n\n var slide = slides[index];\n document.querySelector(\'.header--center\').textContent = slide.header.text || \'\';\n document.querySelector(\'.next-text\').textContent = slide.footer.text || \'\';\n\n var btn = document.querySelector(\'.next-button\');\n if (slide.showButton === false) {\n btn.classList.add(\'hidden\');\n } else {\n btn.classList.remove(\'hidden\');\n }\n\n var headerSrc = slide.header && slide.header.audioSrc;\n var footerSrc = slide.footer && slide.footer.audioSrc;\n\n if (headerSrc || footerSrc) {\n btn.disabled = true;\n }\n\n if (headerSrc) {\n voiceover.src = headerSrc;\n voiceover.addEventListener(\'ended\', function onHeaderEnded() {\n if (footerSrc) {\n voiceover.src = footerSrc;\n voiceover.addEventListener(\'ended\', function () {\n btn.disabled = false;\n }, { once: true, signal: infoSignal });\n voiceover.play().catch(function () {});\n } else {\n btn.disabled = false;\n }\n }, { once: true, signal: infoSignal });\n voiceover.play().catch(function () {});\n } else if (footerSrc) {\n voiceover.src = footerSrc;\n voiceover.addEventListener(\'ended\', function () {\n btn.disabled = false;\n }, { once: true, signal: infoSignal });\n voiceover.play().catch(function () {});\n }\n }\n<\/script>\n</html>\n',document.body.appendChild(t),window.infoSlides=e,window.infoSlideAbortController=new AbortController,await Fr(t),Nr(t),await new Promise((e=>{document.addEventListener("pageComplete",(()=>{t.remove(),function(){window.infoSlideAbortController&&(window.infoSlideAbortController.abort(),delete window.infoSlideAbortController);delete window.infoSlides,Vr()}(),e()}),{once:!0})}))}async function sp(e,n){const t=document.createElement("div");t.innerHTML='<!DOCTYPE html>\n<html lang="en">\n<head>\n <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n</head>\n\n<body>\n <div class="container-fluid h-100">\n <div class="static-container">\n \x3c!-- <h2 class="header--center"></h2> --\x3e\n <div class="speech-bubble" role="status"></div>\n <img class="lion-char" src="https://storage.googleapis.com/roav-ran/shared/assets/sadLionAge12.webp" alt="Lion character">\n <p class="next-text"></p>\n </div>\n <button class="next-button" id="mic-fail-next-button" aria-label="Continue"></button>\n </div>\n <audio id="voiceover"></audio>\n</body>\n\n<script data-dynamic>\n var slide = window.micFailSlide || {};\n var micFailSignal = window.micFailAbortController\n ? window.micFailAbortController.signal\n : undefined;\n var voiceover = document.getElementById(\'voiceover\');\n\n document.querySelector(\'.speech-bubble\').innerHTML = (slide.header && slide.header.text) || \'\';\n document.querySelector(\'.next-text\').textContent = (slide.footer && slide.footer.text) || \'\';\n\n document.querySelector(\'.next-button\').addEventListener(\'click\', function () {\n voiceover.pause();\n document.dispatchEvent(new Event(\'pageComplete\'));\n }, { signal: micFailSignal });\n\n var headerSrc = slide.header && slide.header.audioSrc;\n var footerSrc = slide.footer && slide.footer.audioSrc;\n\n if (headerSrc) {\n voiceover.src = headerSrc;\n voiceover.addEventListener(\'ended\', function () {\n if (footerSrc) {\n voiceover.src = footerSrc;\n voiceover.play().catch(function () {});\n }\n }, { once: true, signal: micFailSignal });\n voiceover.play().catch(function () {});\n } else if (footerSrc) {\n voiceover.src = footerSrc;\n voiceover.play().catch(function () {});\n }\n<\/script>\n</html>\n',document.body.appendChild(t),window.micFailSlide=e,window.micFailAbortController=new AbortController,await Fr(t),Nr(t),await new Promise((e=>{document.addEventListener("pageComplete",(()=>{t.remove(),function(){window.micFailAbortController&&(window.micFailAbortController.abort(),delete window.micFailAbortController);delete window.micFailSlide,Vr()}(),e()}),{once:!0})}))}async function ap(e,n){await sc(!1,!1);const t=document.createElement("div");t.innerHTML="<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n</head>\n\n<style>\n #stimulus-grid {\n position: absolute;\n top: 30%;\n left: 3%;\n display: grid;\n grid-template-columns: repeat(3, auto);\n gap: clamp(8px, 2vw, 24px) clamp(16px, 4vw, 56px);\n align-items: center;\n width: 60%;\n }\n\n .stimulus-cell {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: clamp(6px, 1.2vw, 16px);\n border-radius: 14px;\n transition: background-color 0.15s ease;\n }\n\n .stimulus-cell.highlighted {\n background-color: #f5d9a8;\n }\n\n .stimulus-cell img {\n height: clamp(80px, 18vh, 200px);\n width: auto;\n display: block;\n }\n</style>\n\n<body>\n <div class=\"container-fluid h-100\">\n <div class=\"static-container\">\n <div class=\"header-container--practice-intro\"> \n <h2 class=\"header\"></h2>\n <h3 class=\"subtitle--practice-intro\"></h3>\n </div>\n <div id=\"stimulus-grid\"></div>\n <img class=\"lion-char-practice-intro\" src=\"https://storage.googleapis.com/roav-ran/shared/assets/pointingLeftLionAge12.webp\" alt=\"Lion character\">\n </div>\n </div>\n <button disabled class=\"next-button\" aria-label=\"Continue\"></button>\n <audio id=\"practice-intro-audio\"></audio>\n</body>\n\n<script data-dynamic>\n var cfg = window.practiceIntroConfig || {};\n var stimuliImages = cfg.assets.stimuli.images || [];\n var stimuliAudios = cfg.assets.stimuli.audioSrcs || [];\n var stimulusDir = cfg.stimulusDir || '';\n var practiceSignal = window.practiceIntroAbortController\n ? window.practiceIntroAbortController.signal\n : undefined;\n\n var FALLBACK_DELAY_MS = 1200;\n var userSpoke = false;\n var animFrameId = null;\n var micStream = null;\n var mediaRecorder;\n var mediaChunks = [];\n var timeoutId = null;\n\n function stripSsml(str) {\n return (str || '').replace(/<[^>]*>/g, '').trim();\n }\n\n function playAudio(src, onEnded) {\n if (src) {\n audio.src = src;\n audio.currentTime = 0;\n var handler = function () {\n audio.removeEventListener('ended', handler);\n onEnded();\n };\n audio.addEventListener('ended', handler, { signal: practiceSignal });\n audio.play().catch(function () {\n audio.removeEventListener('ended', handler);\n setTimeout(onEnded, FALLBACK_DELAY_MS);\n });\n } else {\n setTimeout(onEnded, FALLBACK_DELAY_MS);\n }\n }\n\n // Build the stimulus grid\n var grid = document.getElementById('stimulus-grid');\n stimuliImages.forEach(function (filename) {\n var cell = document.createElement('div');\n cell.className = 'stimulus-cell';\n var img = document.createElement('img');\n img.src = stimulusDir + '/' + filename;\n img.alt = filename.replace('.svg', '');\n cell.appendChild(img);\n grid.appendChild(cell);\n });\n\n var cells = grid.querySelectorAll('.stimulus-cell');\n var audio = document.getElementById('practice-intro-audio');\n var title = document.querySelector('.header');\n var subtitle = document.querySelector('.subtitle--practice-intro');\n var nextBtn = document.querySelector('.next-button');\n\n nextBtn.addEventListener('click', async function () {\n nextBtn.disabled = true;\n cleanupAudio();\n if (window.endPractice) {\n await window.endPractice();\n } else {\n document.dispatchEvent(new Event('pageComplete'));\n }\n }, { signal: practiceSignal });\n\n // Phase 1: show header text, play header audio; next button stays disabled\n title.innerHTML = stripSsml(cfg.assets.header.text);\n playAudio(cfg.assets.header.audioSrc, function () {\n highlightStep(0);\n });\n\n // Phase 2: play each stimulus audio sequentially, highlighting the matching cell\n function highlightStep(index) {\n cells.forEach(function (c) { c.classList.remove('highlighted'); });\n if (index >= stimuliImages.length) {\n showHeader2Phase();\n return;\n }\n cells[index].classList.add('highlighted');\n playAudio(stimuliAudios[index] || '', function () {\n highlightStep(index + 1);\n });\n }\n\n // Phase 3: remove highlights, play header2 audio with header2 text\n function showHeader2Phase() {\n var header2Text = cfg.assets.header2.text || '';\n var breakMatch = header2Text.match(/^(.*?)<break[^>]*\\/>(.*)$/s);\n if (breakMatch) {\n title.innerHTML = breakMatch[1].trim();\n subtitle.innerHTML = breakMatch[2].trim();\n subtitle.style.display = 'block';\n } else {\n title.innerHTML = stripSsml(header2Text);\n }\n playAudio(cfg.assets.header2.audioSrc, function () {\n showPracticePhase();\n });\n }\n\n // Phase 4: start RMS mic detection; enable next button when user speaks\n function showPracticePhase() {\n nextBtn.disabled = true;\n setupMediaStream();\n if (window.startPracticeRecording) window.startPracticeRecording();\n }\n\n async function setupMediaStream() {\n try {\n const audioContext = new AudioContext();\n micStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n\n const micSource = audioContext.createMediaStreamSource(micStream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n micSource.connect(analyser);\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n\n function detectAudio() {\n analyser.getByteTimeDomainData(dataArray);\n let sum = 0;\n for (let i = 0; i < bufferLength; i++) {\n sum += (dataArray[i] - 128) * (dataArray[i] - 128);\n }\n const rms = Math.sqrt(sum / bufferLength);\n if (rms > 10.0) {\n if (timeoutId !== null) { clearTimeout(timeoutId); timeoutId = null; }\n userSpoke = true;\n nextBtn.disabled = false;\n return;\n }\n animFrameId = requestAnimationFrame(detectAudio);\n }\n\n animFrameId = requestAnimationFrame(detectAudio);\n timeoutId = setTimeout(function () {\n if (!userSpoke) {\n nextBtn.disabled = false;\n }\n }, 5000);\n } catch (err) {\n console.error('Microphone access failed:', err);\n nextBtn.disabled = false;\n }\n }\n\n function cleanupAudio() {\n if (timeoutId !== null) { clearTimeout(timeoutId); timeoutId = null; }\n if (animFrameId !== null) { cancelAnimationFrame(animFrameId); animFrameId = null; }\n if (micStream !== null) { micStream.getTracks().forEach(function (t) { t.stop(); }); micStream = null; }\n }\n<\/script>\n</html>\n",window.practiceIntroConfig=e,window.practiceIntroAbortController=new AbortController,window.startPracticeRecording=oc,window.endPractice=async function(){await rc();const e=(new Date).getTime(),t="RAN_practice_"+window.practiceIntroConfig.assets.ranType+"_"+e+".webm";try{await cc({filename:t,deviceConfig:window.deviceConfig,config:n,metadata:{stimulus:"practice"}})}catch(e){console.error("Error saving practice recording:",e)}document.dispatchEvent(new Event("pageComplete"))},document.body.appendChild(t),await Fr(t),Nr(t),await new Promise((e=>{document.addEventListener("pageComplete",(()=>{t.remove(),function(){window.practiceIntroAbortController&&(window.practiceIntroAbortController.abort(),delete window.practiceIntroAbortController);delete window.practiceIntroConfig,delete window.startPracticeRecording,delete window.endPractice,Vr()}(),e()}),{once:!0})}))}var op={subtestOrder:["Letters","Numbers"],infoSlideView:{welcome:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/welcomeHeader.mp3",text:"Welcome to Letters and Numbers"},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/welcomeFooter.mp3",text:"Let's get started! Click the yellow button to continue."},showButton:!0},calibrationIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/calibrationIntroHeader.mp3",text:"You will see blue circles show up on the screen. Look at them until they pop!"},footer:{text:"Click the yellow button to continue."},showButton:!0},calibrationEnd:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/calibrationEndHeader.mp3",text:"Great job! Today, you are going to help me \n read some letters and numbers."},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/calibrationEndFooter.mp3",text:"Let's start with letters! Click the yellow button to continue."},showButton:!0},guidedPracticeLetters:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/guidedPracticeLetters.mp3",text:"Now let's try to do more than one letter at a time!"},footer:{text:"Click the yellow button to continue."},showButton:!0},guidedPracticeNumbers:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/guidedPracticeNumbers.mp3",text:"Nice Job!\n Now, we are going to read some numbers."},footer:{text:"Click the yellow button to continue."},showButton:!0},assessmentEnd:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/assessmentEndHeader.mp3",text:"You did an amazing job reading\nletters and numbers today!"},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/assessmentEndFooter.mp3",text:"You are all done with this game!"},showButton:!0}},micFailView:{header:{text:"Uh-Oh! I can't hear you.<br />Please exit the game and try again later.",audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/micFailViewHeader.mp3"},footer:{text:"Click the yellow button to exit.",audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/micFailViewFooter.mp3"}},instructionView:{maxFeedbackRetries:3,letterB:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterBHeader.mp3",text:"The name of the letter is B. Can you say B?"},footer:{text:"Click the yellow button to continue."}},letterD:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterDHeader.mp3",text:"Awesome! Can you tell me the name of this letter?"},footer:{text:"Click the yellow button to continue."}},feedback:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/feedbackHeader.mp3",text:"I can't hear you. Can you say it again?"},footer:{text:"Click the yellow button to continue."}}},practiceView:{letter:{ranType:"Letters",header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterHeader.mp3",text:"Watch me say these letter names first!"},header2:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterHeader2.mp3",text:"Your turn! Start from the left and read each one as fast as you can."},stimuli:{audioSrcs:["https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/M.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/A.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/Z.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/X.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/Z.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/F.mp3"],images:["M.svg","A.svg","Z.svg","X.svg","Z.svg","F.svg"]},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}},number:{ranType:"Numbers",header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/numberHeader.mp3",text:"Watch me say these numbers first!"},header2:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/numberHeader2.mp3",text:"Your turn! Start from the left and read each one as fast as you can."},stimuli:{audioSrcs:["https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/one.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/four.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/three.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/five.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/nine.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/two.mp3"],images:["one.svg","four.svg","three.svg","five.svg","nine.svg","two.svg"]},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}}},ranView:{letter:{practiceIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/practiceIntroHeader.mp3",text:"Great job! Now let's practice."},subtitle:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterPracticeIntroSubtitle.mp3",text:"Remember to read the letters as fast as you can."},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}},testIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterTestIntroHeader.mp3",text:"Perfect!\n Let's try saying more letter names!"},subtitle:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/testIntroSubtitle.mp3",text:"Remember to read as fast as you can."},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}}},number:{practiceIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/practiceIntroHeader.mp3",text:"Great job!\nNow let's practice."},subtitle:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/numberPracticeIntroSubtitle.mp3",text:"Remember to read the numbers as fast as you can!"},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}},testIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/numberTestIntroHeader.mp3",text:"Perfect!\nLet's try saying more numbers!"},subtitle:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/testIntroSubtitle.mp3",text:"Remember to read as fast as you can."},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}}}}};window.store=o,window.i18next=be;class rp{constructor(e,n,t,i){this.gameParams=n,this.userParams=t,this.firekit=e,this.displayElement=i}async init(){}async run(){this.gameParams.consent&&await async function(){const e=document.createElement("div");e.innerHTML='<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n\n\x3c!-- <h5 style="text-align:left;">\n Stanford University Research Consent Form\n <span style="float:right;">\n For IRB Use Only\n </span>\n</h5>\n\n<h5 style="text-align:left;">\n Protocol Director: Jason D. Yeatman, Ph.D.\n <span style="float:right;">\n Approval Date: October 31, 2023\n </span>\n</h5>\n\n<h5 style="text-align:left;">\n Protocol Title: Plasticity and Reading\n <span style="float:right;">\n Expiration Date: October 31, 2024\n </span>\n</h5> --\x3e\n\n<style>\n body {\n margin: 20px; /* Adjust the margin size as needed */\n }\n</style>\n\n<body>\n<h3 style="text-align: center;"> STANFORD UNIVERSITY CONSENT FORM </h3>\n\n<h4 style="text-align: center;"> Stanford University Reading & Dyslexia Research Program: Behavioral Testing </h4>\n\n<blockquote>\n<h4 id="principal-investigator-">Principal Investigator:</h4>\n<p>Jason D. Yeatman </p>\n<p>Associate Professor</p>\n<p>Graduate School of Education</p>\n<p>School of Medicine, Division of Developmental Behavioral Pediatrics</p>\n<h4 id="contact-">Contact:</h4>\n<p>readingresearch@stanford.edu</p>\n<p><a href="https://dyslexia.stanford.edu/">https://dyslexia.stanford.edu/</a> </p>\n</blockquote>\n<h4 id="purpose-of-the-study">PURPOSE OF THE STUDY</h4>\n<p>Data collected through games in the web-browser will help researchers understand relationships between academic skills, reading proficiency, cognition, perception, and/or attitudes towards reading and school in individuals with a broad range of reading skills.</p>\n<h4 id="study-procedures">STUDY PROCEDURES</h4>\n<p>In this study, you or your child will be asked to complete computer tasks via a computer screen. An eye-tracking software will request access to your webcam and will be used to measure eye movements. You will be asked to provide verbal responses in which case the web browser will request access to your computer microphone. You or your child may be asked to complete multiple activities in one session depending on the study. </p>\n<h4 id="privacy-or-data-collection">PRIVACY OR DATA COLLECTION</h4>\n<p>We will do our best to ensure your privacy. Data that is collected through this online experiment is stored separately from identifying information such as your name. For the sake of payment, sometimes we store an email address you provide, but this is stored separately from the responses that are recorded in the online experiment. Each participant is assigned a code and that is used rather than names. This is called “coded data” and we try to ensure that the identity of our research participants is kept confidential. Data collected as part of this study may be used for many years to help discover trends in the population and explore changes due to development and education. In addition, coded data may be shared online or with collaborators to allow for new and unforeseen discoveries. Researchers may choose to include coded data in publications to support findings, or they may choose to release coded data alongside findings for replicability.</p>\n<p>We will collect mouse and click data, scrolling behavior, scores earned, button presses and their timestamps, time spent on each page, audio recordings, or other data that may be derived from your behavior on our page. This data will be stored on servers. The eye-tracking software will use your webcam to track your eyes. This software will record and save video data for future analysis. Once analysis has been completed, the video data will be deleted. Incomplete data may be logged if you quit out of the experiment early. If you would like to void your data, you may request it through our contact email.</p>\n<h4 id="compensation">COMPENSATION</h4>\n<p>We value [your/your child’s] participation. A Tango gift card will be sent through email upon completion of this study. Specific reward amounts will be indicated on the task card and/or study invitation, which you can view before launching the task or scheduling the appointment. If you or your child is completing these activities as part of another study, the compensation rate will remain consistent with the rate of the study you or your child is enrolled in. </p>\n<p>Please note that the gift card system we use to pay participants is not affiliated with Stanford and we will need to input your name and email into this system to send you the electronic gift card payment. If you feel uncomfortable with this process, please let us know before signing the consent form. Depending on the study, we may be able to look into other forms of payment for you.</p>\n<h4 id="risks-stress-or-discomfort">RISKS, STRESS, OR DISCOMFORT</h4>\n<p>If there is any reason to believe you are/your child is not safe to participate in any of the tasks, please contact us at readingresearch@stanford.edu. Some people may experience some physical discomfort or boredom due to being asked to sit for long periods. For computer tasks, some people may also experience dry eyes or eye fatigue. For some tasks that are untimed, breaks can be taken as needed during the session.</p>\n<h4 id="contact-information">CONTACT INFORMATION</h4>\n<p>If you have any additional questions or concerns about our research, feel free to email us at readingresearch@stanford.edu. We will be more than happy to help!</p>\n<p>For general information regarding questions or concerns about [your/your child’s] rights as a research participant, please call 1-866-680-2906 to reach the Administrative Panel on Human Subjects in Medical Research, Stanford University.</p>\n<form id="consentForm">\n <p>\n <input type="checkbox" id="webcamConsent" name="consent">\n I confirm that I have a webcam, and I agree to have my webcam track my eyes. I understand that the webcam will record or save video data and that it will be deleted once analysis is complete.\n </p>\n <p>\n <input type="checkbox" id="voiceConsent" name="consent">\n I agree to have my voice recorded. This data will only be used for data scoring purposes, will be stored securely, and will not be shared with others outside the lab.\n </p>\n <p>\n <input type="checkbox" id="participationConsent" name="consent">\n I agree to participate in this research. Participation in this research is voluntary, and I can stop at any time without penalty. I feel that I understand what I am getting into, and I know I am free to leave the experiment at any time by simply closing the web browser.\n </p>\n <button id="confirmButton" disabled>Continue to test</button>\n</form>\n</body>\n\n<h5 class="card-title" style="display: none;"></h5>\n\n<script>\n document.getElementById(\'consentForm\').addEventListener(\'change\', function() {\n var checkboxes = document.querySelectorAll(\'input[type="checkbox"][name="consent"]\');\n var allChecked = Array.from(checkboxes).every(checkbox => checkbox.checked);\n document.getElementById(\'confirmButton\').disabled = !allChecked;\n });\n<\/script>\n\n',document.body.appendChild(e),await Fr(e),Nr(e),await new Promise((n=>{const t=document.getElementById("confirmButton");t&&t.addEventListener("click",(()=>{Vr(),e.remove(),n()}))}))}(),await this.firekit.startRun();const e=await(async(e,n,t,i)=>{const s=er(er({...n,...t},nr),tr),{userMetadata:a={},audioFeedback:o,grade:r,language:c=be.language,skipInstructions:l,practiceCorpus:p,stimulusCorpus:u,sequentialPractice:d,sequentialStimulus:g,buttonLayout:m,numberOfTrials:v,storyCorpus:h,taskName:f,stimulusBlocks:x,numOfPracticeTrials:b,storyOption:y,keyHelpers:w}=s;"en"!==c&&be.changeLanguage(c);const k={userMetadata:{...a,grade:r},audioFeedback:o||"neutral",skipInstructions:l??!0,startTime:new Date,firekit:e,displayElement:i||null,practiceCorpus:p??"math-item-bank-practice-pz",stimulusCorpus:u??"math-item-bank-pz",sequentialPractice:d??!0,sequentialStimulus:g??!0,buttonLayout:m||"default",numberOfTrials:v??10,task:f??"egma-math",stimulusBlocks:x??3,numOfPracticeTrials:b??2,storyOption:y,story:Or(y,r),keyHelpers:w??!0};console.log("this is grade:",r),console.log("this is storyOption:",y);const S=Object.fromEntries(Object.entries(n).map((([e,n])=>[e,"story"===e?n:k[e]??n])));return await k.firekit.updateTaskParams(S),null!==k.pid&&await k.firekit.updateUser({assessmentPid:k.pid,...a}),k})(this.firekit,this.gameParams,this.userParams,this.displayElement);o.session.set("config",e),await np(e),await uc(e),Dr(this.gameParams.bEyeTracking)?(await ip([op.infoSlideView.welcome,op.infoSlideView.calibrationIntro]),await Vl(e),await ip(op.infoSlideView.calibrationEnd)):await ip([op.infoSlideView.welcome,op.infoSlideView.calibrationEnd]);if((await async function(e,n){const t=document.createElement("div");return t.innerHTML="<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n</head>\n\n<style>\n #stimulus-letter {\n height: 30%;\n }\n</style>\n\n<body>\n <div class=\"container-fluid h-100\">\n <div class=\"static-container\"> \n <div class=\"speech-bubble\" role=\"status\"></div>\n <img class=\"lion-char-instructions\" src=\"https://storage.googleapis.com/roav-ran/shared/assets/pointingRightLionAge12.webp\" alt=\"Lion character\">\n \x3c!--TODO: Add alt--\x3e\n <img id=\"stimulus-letter\">\n \x3c!--TODO: Extract to constants--\x3e\n <p class=\"next-text\">Click the yellow button to continue.</p>\n \x3c!-- Audio Playing --\x3e \n <audio autoplay id=\"voiceover\"> </audio>\n <button class=\"next-button\" aria-label=\"Continue\"></button>\n </div>\n </div>\n <audio id=\"voiceover\"></audio>\n</body>\n\n<script data-dynamic>\n\n var counter = 0;\n var userSpoke = false;\n var animFrameId = null;\n var micStream = null;\n var timeoutId = null;\n var feedbackRetryCount = 0;\n var maxFeedbackRetries = (window.instructionStage && window.instructionStage.maxFeedbackRetries) || 3;\n var instructionSignal = window.instructionAbortController\n ? window.instructionAbortController.signal\n : undefined;\n\n var nextButton = document.querySelector('.next-button');\n var nextText = document.querySelector('.next-text');\n nextButton.disabled = true;\n nextText.textContent = '';\n nextButton.addEventListener('click', function () {\n startNextView();\n }, { signal: instructionSignal });\n\n var voiceover = document.getElementById('voiceover');\n voiceover.addEventListener('ended', function () {\n setupMediaStream();\n }, { signal: instructionSignal });\n\n // Show first slide immediately\n startNextView();\n\n function startNextView() {\n \n counter++;\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (animFrameId !== null) {\n cancelAnimationFrame(animFrameId);\n animFrameId = null;\n }\n if (micStream !== null) {\n micStream.getTracks().forEach(function (track) { track.stop(); });\n micStream = null;\n }\n var speechBubble = document.querySelector('.speech-bubble');\n var stimulusLetter = document.getElementById('stimulus-letter');\n var voiceover = document.getElementById('voiceover');\n\n if (window.instructionStage) {\n\n if (userSpoke && (counter === 2 || counter === 4)) counter += 1; // skip feedback if user spoke\n\n switch (counter) {\n case 1:\n userSpoke = false; // reset for next time\n nextButton.disabled = true;\n nextText.textContent = '';\n // Teaching slide: introduce the letter B\n speechBubble.innerHTML = window.instructionStage.letterB.header.text;\n stimulusLetter.src = 'https://storage.googleapis.com/roav-ran/shared/Letters/B.svg';\n voiceover.src = window.instructionStage.letterB.header.audioSrc;\n break;\n case 2:\n // \"I can't hear you\" retry for letter B\n feedbackRetryCount = 1;\n userSpoke = false;\n nextButton.disabled = true;\n nextText.textContent = '';\n speechBubble.innerHTML = window.instructionStage.feedback.header.text;\n stimulusLetter.src = 'https://storage.googleapis.com/roav-ran/shared/Letters/B.svg';\n voiceover.src = window.instructionStage.feedback.header.audioSrc;\n break;\n case 3:\n // Practice prompt: ask student to identify the letter D\n feedbackRetryCount = 0;\n userSpoke = false;\n nextButton.disabled = true;\n nextText.textContent = '';\n speechBubble.innerHTML = window.instructionStage.letterD.header.text;\n stimulusLetter.src = 'https://storage.googleapis.com/roav-ran/shared/Letters/D.svg';\n voiceover.src = window.instructionStage.letterD.header.audioSrc;\n break;\n case 4:\n // \"I can't hear you\" retry for letter D\n feedbackRetryCount = 1;\n userSpoke = false;\n nextButton.disabled = true;\n nextText.textContent = '';\n speechBubble.innerHTML = window.instructionStage.feedback.header.text;\n stimulusLetter.src = 'https://storage.googleapis.com/roav-ran/shared/Letters/D.svg';\n voiceover.src = window.instructionStage.feedback.header.audioSrc;\n break;\n default:\n counter = 0;\n pageCompleted();\n return;\n }\n }\n\n if (voiceover.src && voiceover.src !== window.location.href) {\n voiceover.play();\n }\n }\n\n async function setupMediaStream() {\n try {\n const audioContext = new AudioContext();\n micStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n\n const micSource = audioContext.createMediaStreamSource(micStream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n micSource.connect(analyser);\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n\n function detectAudio() {\n analyser.getByteTimeDomainData(dataArray);\n let sum = 0;\n for (let i = 0; i < bufferLength; i++) {\n sum += (dataArray[i] - 128) * (dataArray[i] - 128);\n }\n const rms = Math.sqrt(sum / bufferLength);\n // console.log('RMS:', rms);\n if (rms > 10.0) {\n // This is for testing audio thresholds\n // console.log('Audio detected with RMS:', rms);\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n userSpoke = true;\n nextButton.disabled = false;\n nextText.textContent = 'Click the yellow button to continue.';\n }\n animFrameId = requestAnimationFrame(detectAudio);\n }\n\n animFrameId = requestAnimationFrame(detectAudio);\n timeoutId = setTimeout(function () {\n if (!userSpoke) {\n if ((counter === 2 || counter === 4) && feedbackRetryCount < maxFeedbackRetries) {\n feedbackRetryCount++;\n restartCurrentFeedbackSlide();\n } else if (counter === 2 || counter === 4) {\n pageFailedMic();\n } else {\n startNextView();\n }\n }\n }, 5000);\n } catch (err) {\n console.error('Microphone access failed:', err);\n }\n }\n\n function restartCurrentFeedbackSlide() {\n if (animFrameId !== null) { cancelAnimationFrame(animFrameId); animFrameId = null; }\n if (micStream !== null) { micStream.getTracks().forEach(function (t) { t.stop(); }); micStream = null; }\n userSpoke = false;\n var vo = document.getElementById('voiceover');\n vo.currentTime = 0;\n vo.play();\n }\n\n function pageFailedMic() {\n if (timeoutId !== null) { clearTimeout(timeoutId); timeoutId = null; }\n if (animFrameId !== null) { cancelAnimationFrame(animFrameId); animFrameId = null; }\n if (micStream !== null) { micStream.getTracks().forEach(function (t) { t.stop(); }); micStream = null; }\n document.dispatchEvent(new Event('instructionMicFailed'));\n }\n\n function pageCompleted() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (animFrameId !== null) {\n cancelAnimationFrame(animFrameId);\n animFrameId = null;\n }\n if (micStream !== null) {\n micStream.getTracks().forEach(function (track) { track.stop(); });\n micStream = null;\n }\n document.dispatchEvent(new Event('pageComplete'));\n }\n\n<\/script>\n</html>\n",document.body.appendChild(t),window.instructionStage=e,window.instructionAbortController=new AbortController,await Fr(t),Nr(t),new Promise((e=>{document.addEventListener("pageComplete",(()=>{t.remove(),tp(),e({micFailed:!1})}),{once:!0}),document.addEventListener("instructionMicFailed",(()=>{t.remove(),tp(),e({micFailed:!0})}),{once:!0})}))}(op.instructionView)).micFailed)return lc(),await sp(op.micFailView),await e.firekit.updateEngagementFlags(["noAudioDetected"],!1),await e.firekit.abortRun(),"aborted";await ip(op.infoSlideView.guidedPracticeLetters);const n={Letters:{dir:"https://storage.googleapis.com/roav-ran/shared/Letters",stimulus:Lr[Math.floor(Math.random()*Lr.length)],sizecm:2,testname:"Letters"},Numbers:{dir:"https://storage.googleapis.com/roav-ran/shared/Numbers",stimulus:Mr[Math.floor(Math.random()*Mr.length)],sizecm:2,testname:"Numbers"}},t=op.subtestOrder;for(let a=0;a<t.length;a++){const r=t[a];if(o.session.set("testConfig",n[r]),"Letters"===r)var i={assets:op.practiceView.letter,stimulusDir:"https://storage.googleapis.com/roav-ran/shared/Letters"},s=op.ranView.letter;else i={assets:op.practiceView.number,stimulusDir:"https://storage.googleapis.com/roav-ran/shared/Numbers"},s=op.ranView.number;await ap(i,e),await Zl("Practice",e,s.practiceIntro),await Zl("Test",e,s.testIntro),a<t.length-1&&"Letters"===r&&await ip(op.infoSlideView.guidedPracticeNumbers)}return await ip(op.infoSlideView.assessmentEnd),await e.firekit.updateEngagementFlags([],!0),await e.firekit.finishRun(),"success"}}export{rp as default};
|
|
11
|
-
//# sourceMappingURL=index.
|
|
10
|
+
!function(n){var t,i,s,a=or,o=e.extname,r=/^\s*([^;\s]*)(?:;|\s|$)/,c=/^text\//i;function l(e){if(!e||"string"!=typeof e)return!1;var n=r.exec(e),t=n&&a[n[1].toLowerCase()];return t&&t.charset?t.charset:!(!n||!c.test(n[1]))&&"UTF-8"}n.charset=l,n.charsets={lookup:l},n.contentType=function(e){if(!e||"string"!=typeof e)return!1;var t=-1===e.indexOf("/")?n.lookup(e):e;if(!t)return!1;if(-1===t.indexOf("charset")){var i=n.charset(t);i&&(t+="; charset="+i.toLowerCase())}return t},n.extension=function(e){if(!e||"string"!=typeof e)return!1;var t=r.exec(e),i=t&&n.extensions[t[1].toLowerCase()];if(!i||!i.length)return!1;return i[0]},n.extensions=Object.create(null),n.lookup=function(e){if(!e||"string"!=typeof e)return!1;var t=o("x."+e).toLowerCase().substr(1);if(!t)return!1;return n.types[t]||!1},n.types=Object.create(null),t=n.extensions,i=n.types,s=["nginx","apache",void 0,"iana"],Object.keys(a).forEach((function(e){var n=a[e],o=n.extensions;if(o&&o.length){t[e]=o;for(var r=0;r<o.length;r++){var c=o[r];if(i[c]){var l=s.indexOf(a[i[c]].source),p=s.indexOf(n.source);if("application/octet-stream"!==i[c]&&(l>p||l===p&&"application/"===i[c].substr(0,12)))continue}i[c]=e}}}))}({});"function"==typeof SuppressedError&&SuppressedError;var rr,cr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};class lr extends Error{constructor(e="The global `jsPsych` variable is no longer available in jsPsych v7."){super(`${e} Please follow the migration guide at https://www.jspsych.org/7.0/support/migration-v7/ to update your experiment.`),this.name="MigrationError"}}window.jsPsych={get init(){throw new lr("`jsPsych.init()` was replaced by `initJsPsych()` in jsPsych v7.")},get data(){throw new lr},get randomization(){throw new lr},get turk(){throw new lr},get pluginAPI(){throw new lr},get ALL_KEYS(){throw new lr('jsPsych.ALL_KEYS was replaced by the "ALL_KEYS" string in jsPsych v7.')},get NO_KEYS(){throw new lr('jsPsych.NO_KEYS was replaced by the "NO_KEYS" string in jsPsych v7.')}},function(e){e[e.BOOL=0]="BOOL",e[e.STRING=1]="STRING",e[e.INT=2]="INT",e[e.FLOAT=3]="FLOAT",e[e.FUNCTION=4]="FUNCTION",e[e.KEY=5]="KEY",e[e.KEYS=6]="KEYS",e[e.SELECT=7]="SELECT",e[e.HTML_STRING=8]="HTML_STRING",e[e.IMAGE=9]="IMAGE",e[e.AUDIO=10]="AUDIO",e[e.VIDEO=11]="VIDEO",e[e.OBJECT=12]="OBJECT",e[e.COMPLEX=13]="COMPLEX",e[e.TIMELINE=14]="TIMELINE"}(rr||(rr={})),rr.OBJECT,rr.FUNCTION,rr.FUNCTION,rr.FUNCTION,rr.INT,rr.STRING,rr.COMPLEX,rr.AUDIO,rr.IMAGE,rr.VIDEO;var pr={exports:{}};!function(e,n,t){function i(e){var n=this,t=function(){var e=4022871197,n=function(n){n=String(n);for(var t=0;t<n.length;t++){var i=.02519603282416938*(e+=n.charCodeAt(t));i-=e=i>>>0,e=(i*=e)>>>0,e+=4294967296*(i-=e)}return 2.3283064365386963e-10*(e>>>0)};return n}();n.next=function(){var e=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=e-(n.c=0|e)},n.c=1,n.s0=t(" "),n.s1=t(" "),n.s2=t(" "),n.s0-=t(e),n.s0<0&&(n.s0+=1),n.s1-=t(e),n.s1<0&&(n.s1+=1),n.s2-=t(e),n.s2<0&&(n.s2+=1),t=null}function s(e,n){return n.c=e.c,n.s0=e.s0,n.s1=e.s1,n.s2=e.s2,n}function a(e,n){var t=new i(e),a=n&&n.state,o=t.next;return o.int32=function(){return 4294967296*t.next()|0},o.double=function(){return o()+11102230246251565e-32*(2097152*o()|0)},o.quick=o,a&&("object"==typeof a&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.alea=a}(0,pr,!1);var ur=pr.exports,dr={exports:{}};!function(e,n,t){function i(e){var n=this,t="";n.x=0,n.y=0,n.z=0,n.w=0,n.next=function(){var e=n.x^n.x<<11;return n.x=n.y,n.y=n.z,n.z=n.w,n.w^=n.w>>>19^e^e>>>8},e===(0|e)?n.x=e:t+=e;for(var i=0;i<t.length+64;i++)n.x^=0|t.charCodeAt(i),n.next()}function s(e,n){return n.x=e.x,n.y=e.y,n.z=e.z,n.w=e.w,n}function a(e,n){var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&("object"==typeof a&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.xor128=a}(0,dr,!1);var gr=dr.exports,mr={exports:{}};!function(e,n,t){function i(e){var n=this,t="";n.next=function(){var e=n.x^n.x>>>2;return n.x=n.y,n.y=n.z,n.z=n.w,n.w=n.v,(n.d=n.d+362437|0)+(n.v=n.v^n.v<<4^e^e<<1)|0},n.x=0,n.y=0,n.z=0,n.w=0,n.v=0,e===(0|e)?n.x=e:t+=e;for(var i=0;i<t.length+64;i++)n.x^=0|t.charCodeAt(i),i==t.length&&(n.d=n.x<<10^n.x>>>4),n.next()}function s(e,n){return n.x=e.x,n.y=e.y,n.z=e.z,n.w=e.w,n.v=e.v,n.d=e.d,n}function a(e,n){var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&("object"==typeof a&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.xorwow=a}(0,mr,!1);var vr=mr.exports,hr={exports:{}};!function(e,n,t){function i(e){var n=this;n.next=function(){var e,t,i=n.x,s=n.i;return e=i[s],t=(e^=e>>>7)^e<<24,t^=(e=i[s+1&7])^e>>>10,t^=(e=i[s+3&7])^e>>>3,t^=(e=i[s+4&7])^e<<7,e=i[s+7&7],t^=(e^=e<<13)^e<<9,i[s]=t,n.i=s+1&7,t},function(e,n){var t,i=[];if(n===(0|n))i[0]=n;else for(n=""+n,t=0;t<n.length;++t)i[7&t]=i[7&t]<<15^n.charCodeAt(t)+i[t+1&7]<<13;for(;i.length<8;)i.push(0);for(t=0;t<8&&0===i[t];++t);for(8==t?i[7]=-1:i[t],e.x=i,e.i=0,t=256;t>0;--t)e.next()}(n,e)}function s(e,n){return n.x=e.x.slice(),n.i=e.i,n}function a(e,n){null==e&&(e=+new Date);var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&(a.x&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.xorshift7=a}(0,hr,!1);var fr=hr.exports,xr={exports:{}};!function(e,n,t){function i(e){var n=this;n.next=function(){var e,t,i=n.w,s=n.X,a=n.i;return n.w=i=i+1640531527|0,t=s[a+34&127],e=s[a=a+1&127],t^=t<<13,e^=e<<17,t^=t>>>15,e^=e>>>12,t=s[a]=t^e,n.i=a,t+(i^i>>>16)|0},function(e,n){var t,i,s,a,o,r=[],c=128;for(n===(0|n)?(i=n,n=null):(n+="\0",i=0,c=Math.max(c,n.length)),s=0,a=-32;a<c;++a)n&&(i^=n.charCodeAt((a+32)%n.length)),0===a&&(o=i),i^=i<<10,i^=i>>>15,i^=i<<4,i^=i>>>13,a>=0&&(o=o+1640531527|0,s=0==(t=r[127&a]^=i+o)?s+1:0);for(s>=128&&(r[127&(n&&n.length||0)]=-1),s=127,a=512;a>0;--a)i=r[s+34&127],t=r[s=s+1&127],i^=i<<13,t^=t<<17,i^=i>>>15,t^=t>>>12,r[s]=i^t;e.w=o,e.X=r,e.i=s}(n,e)}function s(e,n){return n.i=e.i,n.w=e.w,n.X=e.X.slice(),n}function a(e,n){null==e&&(e=+new Date);var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&(a.X&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.xor4096=a}(0,xr,!1);var br=xr.exports,yr={exports:{}};!function(e,n,t){function i(e){var n=this,t="";n.next=function(){var e=n.b,t=n.c,i=n.d,s=n.a;return e=e<<25^e>>>7^t,t=t-i|0,i=i<<24^i>>>8^s,s=s-e|0,n.b=e=e<<20^e>>>12^t,n.c=t=t-i|0,n.d=i<<16^t>>>16^s,n.a=s-e|0},n.a=0,n.b=0,n.c=-1640531527,n.d=1367130551,e===Math.floor(e)?(n.a=e/4294967296|0,n.b=0|e):t+=e;for(var i=0;i<t.length+20;i++)n.b^=0|t.charCodeAt(i),n.next()}function s(e,n){return n.a=e.a,n.b=e.b,n.c=e.c,n.d=e.d,n}function a(e,n){var t=new i(e),a=n&&n.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=t.next,o.quick=o,a&&("object"==typeof a&&s(a,t),o.state=function(){return s(t,{})}),o}n&&n.exports?n.exports=a:t&&t.amd?t((function(){return a})):this.tychei=a}(0,yr,!1);var wr=yr.exports,kr={exports:{}};!function(e){!function(n,t,i){var s,a=256,o="random",r=i.pow(a,6),c=i.pow(2,52),l=2*c,p=a-1;function u(e,p,u){var f=[],x=v(m((p=1==p?{entropy:!0}:p||{}).entropy?[e,h(t)]:null==e?function(){try{var e;return s&&(e=s.randomBytes)?e=e(a):(e=new Uint8Array(a),(n.crypto||n.msCrypto).getRandomValues(e)),h(e)}catch(e){var i=n.navigator,o=i&&i.plugins;return[+new Date,n,o,n.screen,h(t)]}}():e,3),f),b=new d(f),y=function(){for(var e=b.g(6),n=r,t=0;e<c;)e=(e+t)*a,n*=a,t=b.g(1);for(;e>=l;)e/=2,n/=2,t>>>=1;return(e+t)/n};return y.int32=function(){return 0|b.g(4)},y.quick=function(){return b.g(4)/4294967296},y.double=y,v(h(b.S),t),(p.pass||u||function(e,n,t,s){return s&&(s.S&&g(s,b),e.state=function(){return g(b,{})}),t?(i[o]=e,n):e})(y,x,"global"in p?p.global:this==i,p.state)}function d(e){var n,t=e.length,i=this,s=0,o=i.i=i.j=0,r=i.S=[];for(t||(e=[t++]);s<a;)r[s]=s++;for(s=0;s<a;s++)r[s]=r[o=p&o+e[s%t]+(n=r[s])],r[o]=n;(i.g=function(e){for(var n,t=0,s=i.i,o=i.j,r=i.S;e--;)n=r[s=p&s+1],t=t*a+r[p&(r[s]=r[o=p&o+n])+(r[o]=n)];return i.i=s,i.j=o,t})(a)}function g(e,n){return n.i=e.i,n.j=e.j,n.S=e.S.slice(),n}function m(e,n){var t,i=[],s=typeof e;if(n&&"object"==s)for(t in e)try{i.push(m(e[t],n-1))}catch(e){}return i.length?i:"string"==s?e:e+"\0"}function v(e,n){for(var t,i=e+"",s=0;s<i.length;)n[p&s]=p&(t^=19*n[p&s])+i.charCodeAt(s++);return h(n)}function h(e){return String.fromCharCode.apply(0,e)}if(v(i.random(),t),e.exports){e.exports=u;try{s=require("crypto")}catch(e){}}else i["seed"+o]=u}("undefined"!=typeof self?self:cr,[],Math)}(kr);var Sr=ur,jr=gr,_r=vr,Cr=fr,Ar=br,Er=wr,Rr=kr.exports;Rr.alea=Sr,Rr.xor128=jr,Rr.xorwow=_r,Rr.xorshift7=Cr,Rr.xor4096=Ar,Rr.tychei=Er;"undefined"!=typeof window&&window.hasOwnProperty("webkitAudioContext")&&!window.hasOwnProperty("AudioContext")&&(window.AudioContext=webkitAudioContext),rr.BOOL,rr.TIMELINE,rr.STRING,rr.STRING,rr.STRING,rr.HTML_STRING,rr.BOOL,rr.BOOL,rr.HTML_STRING,rr.BOOL,rr.INT,rr.FUNCTION,rr.FUNCTION;const Lr=[["D.svg","A.svg","L.svg","S.svg","R.svg","L.svg","A.svg","S.svg","L.svg","S.svg","R.svg","L.svg","D.svg","R.svg","D.svg","A.svg","R.svg","D.svg","R.svg","A.svg","D.svg","S.svg","L.svg","S.svg","R.svg","D.svg","A.svg","S.svg","L.svg","R.svg","L.svg","A.svg","R.svg","A.svg","D.svg","A.svg","S.svg","L.svg","D.svg","S.svg","A.svg","R.svg","S.svg","L.svg","A.svg","D.svg","L.svg","S.svg","R.svg","D.svg"],["A.svg","L.svg","R.svg","D.svg","R.svg","A.svg","S.svg","R.svg","D.svg","A.svg","S.svg","A.svg","D.svg","R.svg","D.svg","L.svg","R.svg","L.svg","S.svg","L.svg","D.svg","S.svg","L.svg","A.svg","S.svg","R.svg","S.svg","A.svg","D.svg","A.svg","R.svg","L.svg","R.svg","S.svg","L.svg","D.svg","A.svg","S.svg","R.svg","L.svg","D.svg","A.svg","L.svg","D.svg","R.svg","S.svg","D.svg","L.svg","S.svg","A.svg"],["D.svg","L.svg","S.svg","A.svg","D.svg","R.svg","L.svg","A.svg","R.svg","D.svg","L.svg","S.svg","L.svg","D.svg","A.svg","L.svg","D.svg","S.svg","D.svg","L.svg","S.svg","R.svg","A.svg","R.svg","S.svg","A.svg","R.svg","A.svg","S.svg","R.svg","L.svg","S.svg","D.svg","S.svg","R.svg","L.svg","A.svg","L.svg","R.svg","D.svg","A.svg","D.svg","S.svg","L.svg","A.svg","R.svg","D.svg","R.svg","S.svg","A.svg"],["S.svg","L.svg","R.svg","D.svg","R.svg","A.svg","S.svg","A.svg","R.svg","L.svg","D.svg","R.svg","D.svg","S.svg","L.svg","R.svg","A.svg","D.svg","S.svg","D.svg","R.svg","D.svg","A.svg","L.svg","R.svg","S.svg","D.svg","R.svg","L.svg","A.svg","S.svg","L.svg","S.svg","R.svg","A.svg","L.svg","A.svg","D.svg","A.svg","L.svg","R.svg","S.svg","A.svg","D.svg","L.svg","A.svg","S.svg","L.svg","S.svg","D.svg"],["L.svg","A.svg","D.svg","S.svg","D.svg","A.svg","D.svg","R.svg","L.svg","R.svg","D.svg","S.svg","A.svg","R.svg","L.svg","D.svg","R.svg","S.svg","R.svg","A.svg","S.svg","R.svg","L.svg","A.svg","D.svg","S.svg","L.svg","A.svg","S.svg","L.svg","D.svg","S.svg","A.svg","R.svg","L.svg","D.svg","S.svg","L.svg","R.svg","A.svg","S.svg","D.svg","R.svg","L.svg","D.svg","A.svg","L.svg","S.svg","A.svg","R.svg"],["D.svg","L.svg","S.svg","R.svg","D.svg","A.svg","R.svg","L.svg","S.svg","A.svg","R.svg","S.svg","R.svg","D.svg","S.svg","R.svg","L.svg","D.svg","R.svg","D.svg","A.svg","L.svg","S.svg","A.svg","D.svg","L.svg","D.svg","A.svg","S.svg","A.svg","L.svg","S.svg","R.svg","D.svg","L.svg","A.svg","R.svg","S.svg","L.svg","D.svg","A.svg","L.svg","A.svg","S.svg","D.svg","R.svg","S.svg","R.svg","A.svg","L.svg"],["D.svg","R.svg","A.svg","R.svg","L.svg","S.svg","A.svg","D.svg","L.svg","S.svg","L.svg","A.svg","L.svg","S.svg","A.svg","R.svg","S.svg","L.svg","D.svg","L.svg","A.svg","R.svg","S.svg","R.svg","D.svg","S.svg","A.svg","R.svg","L.svg","R.svg","S.svg","A.svg","D.svg","S.svg","R.svg","D.svg","S.svg","L.svg","D.svg","A.svg","D.svg","L.svg","A.svg","L.svg","D.svg","R.svg","D.svg","S.svg","A.svg","R.svg"],["L.svg","A.svg","R.svg","D.svg","R.svg","L.svg","A.svg","D.svg","L.svg","S.svg","A.svg","S.svg","D.svg","S.svg","A.svg","S.svg","D.svg","L.svg","S.svg","D.svg","R.svg","A.svg","L.svg","A.svg","D.svg","R.svg","L.svg","R.svg","D.svg","A.svg","L.svg","S.svg","D.svg","R.svg","L.svg","A.svg","R.svg","L.svg","S.svg","R.svg","S.svg","L.svg","A.svg","S.svg","D.svg","R.svg","A.svg","R.svg","D.svg","S.svg"],["S.svg","A.svg","R.svg","D.svg","L.svg","S.svg","D.svg","R.svg","S.svg","A.svg","L.svg","R.svg","S.svg","L.svg","A.svg","D.svg","S.svg","A.svg","R.svg","S.svg","D.svg","A.svg","D.svg","S.svg","R.svg","A.svg","L.svg","D.svg","L.svg","R.svg","S.svg","D.svg","L.svg","D.svg","S.svg","L.svg","R.svg","A.svg","S.svg","D.svg","L.svg","A.svg","R.svg","A.svg","L.svg","D.svg","A.svg","R.svg","L.svg","R.svg"],["R.svg","A.svg","S.svg","L.svg","S.svg","D.svg","R.svg","A.svg","S.svg","D.svg","A.svg","L.svg","D.svg","R.svg","L.svg","R.svg","A.svg","S.svg","R.svg","L.svg","D.svg","S.svg","L.svg","S.svg","R.svg","L.svg","R.svg","D.svg","A.svg","D.svg","S.svg","L.svg","R.svg","L.svg","D.svg","R.svg","L.svg","A.svg","D.svg","S.svg","A.svg","S.svg","D.svg","A.svg","L.svg","D.svg","A.svg","S.svg","R.svg","A.svg"],["L.svg","R.svg","D.svg","A.svg","S.svg","D.svg","L.svg","A.svg","R.svg","S.svg","A.svg","S.svg","L.svg","S.svg","D.svg","A.svg","S.svg","D.svg","S.svg","R.svg","D.svg","R.svg","A.svg","L.svg","R.svg","L.svg","D.svg","L.svg","A.svg","S.svg","A.svg","D.svg","R.svg","S.svg","A.svg","R.svg","L.svg","A.svg","R.svg","D.svg","L.svg","R.svg","L.svg","A.svg","S.svg","D.svg","R.svg","S.svg","D.svg","L.svg"],["D.svg","A.svg","L.svg","S.svg","R.svg","S.svg","A.svg","R.svg","S.svg","R.svg","L.svg","S.svg","D.svg","A.svg","S.svg","D.svg","R.svg","L.svg","D.svg","S.svg","R.svg","A.svg","L.svg","D.svg","R.svg","L.svg","A.svg","S.svg","A.svg","R.svg","L.svg","D.svg","A.svg","L.svg","S.svg","D.svg","R.svg","A.svg","L.svg","D.svg","S.svg","R.svg","L.svg","A.svg","D.svg","R.svg","L.svg","D.svg","A.svg","S.svg"],["R.svg","A.svg","L.svg","D.svg","A.svg","S.svg","A.svg","L.svg","S.svg","A.svg","D.svg","L.svg","A.svg","S.svg","R.svg","D.svg","S.svg","D.svg","R.svg","L.svg","R.svg","A.svg","R.svg","D.svg","A.svg","R.svg","L.svg","R.svg","S.svg","A.svg","S.svg","L.svg","D.svg","S.svg","D.svg","A.svg","D.svg","L.svg","R.svg","D.svg","R.svg","S.svg","L.svg","D.svg","S.svg","L.svg","A.svg","R.svg","L.svg","S.svg"],["R.svg","L.svg","A.svg","R.svg","L.svg","D.svg","S.svg","D.svg","A.svg","R.svg","D.svg","A.svg","S.svg","L.svg","R.svg","S.svg","A.svg","L.svg","S.svg","D.svg","S.svg","R.svg","L.svg","D.svg","S.svg","L.svg","D.svg","R.svg","L.svg","A.svg","D.svg","S.svg","D.svg","R.svg","A.svg","D.svg","R.svg","L.svg","A.svg","S.svg","A.svg","R.svg","A.svg","S.svg","L.svg","A.svg","S.svg","R.svg","L.svg","D.svg"],["L.svg","R.svg","A.svg","S.svg","L.svg","D.svg","S.svg","D.svg","R.svg","A.svg","D.svg","L.svg","R.svg","D.svg","A.svg","S.svg","R.svg","A.svg","D.svg","L.svg","A.svg","R.svg","S.svg","A.svg","L.svg","A.svg","D.svg","L.svg","S.svg","D.svg","S.svg","L.svg","R.svg","S.svg","R.svg","L.svg","R.svg","A.svg","L.svg","S.svg","A.svg","R.svg","D.svg","L.svg","S.svg","D.svg","A.svg","S.svg","R.svg","D.svg"],["A.svg","D.svg","S.svg","L.svg","D.svg","S.svg","R.svg","D.svg","A.svg","S.svg","R.svg","S.svg","A.svg","R.svg","S.svg","D.svg","L.svg","A.svg","R.svg","L.svg","D.svg","A.svg","D.svg","S.svg","L.svg","R.svg","D.svg","L.svg","S.svg","A.svg","S.svg","L.svg","R.svg","A.svg","R.svg","L.svg","R.svg","A.svg","D.svg","S.svg","L.svg","R.svg","S.svg","D.svg","L.svg","D.svg","A.svg","R.svg","L.svg","A.svg"],["S.svg","R.svg","S.svg","L.svg","D.svg","A.svg","L.svg","A.svg","R.svg","S.svg","R.svg","A.svg","L.svg","A.svg","R.svg","L.svg","S.svg","L.svg","A.svg","D.svg","A.svg","L.svg","S.svg","D.svg","A.svg","S.svg","D.svg","R.svg","D.svg","S.svg","R.svg","D.svg","R.svg","L.svg","D.svg","A.svg","R.svg","D.svg","L.svg","R.svg","A.svg","L.svg","D.svg","R.svg","A.svg","S.svg","L.svg","S.svg","D.svg","S.svg"],["L.svg","R.svg","S.svg","R.svg","A.svg","D.svg","S.svg","R.svg","L.svg","S.svg","D.svg","L.svg","A.svg","D.svg","L.svg","S.svg","D.svg","L.svg","D.svg","R.svg","A.svg","S.svg","D.svg","R.svg","S.svg","R.svg","A.svg","D.svg","R.svg","L.svg","D.svg","L.svg","S.svg","A.svg","R.svg","L.svg","D.svg","A.svg","L.svg","A.svg","S.svg","R.svg","A.svg","D.svg","S.svg","A.svg","L.svg","S.svg","A.svg","R.svg"],["S.svg","A.svg","L.svg","R.svg","A.svg","S.svg","D.svg","L.svg","A.svg","S.svg","R.svg","L.svg","S.svg","L.svg","R.svg","A.svg","S.svg","R.svg","L.svg","R.svg","A.svg","S.svg","D.svg","R.svg","L.svg","D.svg","A.svg","S.svg","D.svg","L.svg","R.svg","D.svg","S.svg","L.svg","D.svg","S.svg","D.svg","R.svg","A.svg","D.svg","L.svg","S.svg","R.svg","D.svg","A.svg","D.svg","L.svg","A.svg","R.svg","A.svg"],["A.svg","S.svg","R.svg","D.svg","L.svg","S.svg","R.svg","L.svg","A.svg","D.svg","L.svg","D.svg","S.svg","R.svg","A.svg","R.svg","S.svg","A.svg","R.svg","L.svg","R.svg","A.svg","D.svg","S.svg","L.svg","A.svg","D.svg","R.svg","L.svg","A.svg","D.svg","R.svg","S.svg","L.svg","D.svg","S.svg","R.svg","A.svg","S.svg","D.svg","L.svg","S.svg","D.svg","A.svg","L.svg","R.svg","D.svg","S.svg","L.svg","A.svg"]],Mr=[["two.svg","nine.svg","two.svg","seven.svg","two.svg","six.svg","seven.svg","four.svg","six.svg","four.svg","seven.svg","two.svg","four.svg","six.svg","seven.svg","four.svg","two.svg","six.svg","two.svg","nine.svg","two.svg","four.svg","two.svg","seven.svg","six.svg","nine.svg","seven.svg","nine.svg","four.svg","six.svg","nine.svg","six.svg","seven.svg","nine.svg","four.svg","seven.svg","two.svg","four.svg","six.svg","nine.svg","two.svg","nine.svg","six.svg","four.svg","seven.svg","nine.svg","six.svg","nine.svg","four.svg","seven.svg"],["six.svg","four.svg","seven.svg","two.svg","nine.svg","six.svg","four.svg","seven.svg","two.svg","four.svg","two.svg","seven.svg","two.svg","four.svg","seven.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","nine.svg","four.svg","nine.svg","six.svg","two.svg","six.svg","seven.svg","six.svg","two.svg","nine.svg","seven.svg","nine.svg","four.svg","seven.svg","six.svg","seven.svg","four.svg","two.svg","nine.svg","seven.svg","six.svg","four.svg","two.svg","nine.svg","seven.svg","six.svg","two.svg","four.svg","six.svg","nine.svg"],["six.svg","four.svg","six.svg","seven.svg","nine.svg","four.svg","two.svg","six.svg","nine.svg","two.svg","four.svg","seven.svg","four.svg","nine.svg","two.svg","six.svg","four.svg","seven.svg","two.svg","seven.svg","nine.svg","six.svg","two.svg","seven.svg","four.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","seven.svg","two.svg","four.svg","six.svg","seven.svg","six.svg","two.svg","nine.svg","six.svg","four.svg","nine.svg","six.svg","two.svg","seven.svg","four.svg","nine.svg","seven.svg","two.svg","nine.svg","seven.svg"],["four.svg","nine.svg","two.svg","four.svg","seven.svg","nine.svg","seven.svg","two.svg","six.svg","four.svg","seven.svg","four.svg","six.svg","nine.svg","six.svg","two.svg","six.svg","seven.svg","nine.svg","seven.svg","six.svg","two.svg","nine.svg","two.svg","four.svg","nine.svg","seven.svg","nine.svg","four.svg","two.svg","seven.svg","nine.svg","six.svg","four.svg","two.svg","seven.svg","two.svg","six.svg","nine.svg","seven.svg","four.svg","six.svg","seven.svg","nine.svg","six.svg","four.svg","six.svg","two.svg","four.svg","two.svg"],["six.svg","four.svg","seven.svg","six.svg","two.svg","six.svg","seven.svg","six.svg","two.svg","six.svg","seven.svg","nine.svg","four.svg","two.svg","nine.svg","four.svg","nine.svg","two.svg","nine.svg","seven.svg","nine.svg","four.svg","two.svg","four.svg","seven.svg","nine.svg","two.svg","seven.svg","two.svg","six.svg","two.svg","seven.svg","four.svg","six.svg","nine.svg","seven.svg","four.svg","nine.svg","six.svg","nine.svg","four.svg","six.svg","two.svg","seven.svg","six.svg","two.svg","nine.svg","four.svg","seven.svg","four.svg"],["four.svg","nine.svg","seven.svg","two.svg","six.svg","four.svg","nine.svg","two.svg","six.svg","seven.svg","nine.svg","six.svg","four.svg","seven.svg","four.svg","nine.svg","two.svg","six.svg","nine.svg","six.svg","seven.svg","two.svg","seven.svg","four.svg","nine.svg","two.svg","seven.svg","four.svg","six.svg","nine.svg","four.svg","seven.svg","two.svg","six.svg","seven.svg","four.svg","nine.svg","seven.svg","two.svg","six.svg","two.svg","four.svg","six.svg","nine.svg","two.svg","six.svg","four.svg","two.svg","nine.svg","seven.svg"],["six.svg","two.svg","four.svg","six.svg","seven.svg","nine.svg","four.svg","nine.svg","two.svg","seven.svg","two.svg","nine.svg","seven.svg","nine.svg","six.svg","seven.svg","six.svg","two.svg","nine.svg","four.svg","six.svg","four.svg","two.svg","seven.svg","four.svg","two.svg","nine.svg","six.svg","seven.svg","six.svg","nine.svg","seven.svg","four.svg","two.svg","seven.svg","nine.svg","six.svg","four.svg","six.svg","two.svg","four.svg","two.svg","seven.svg","six.svg","nine.svg","four.svg","seven.svg","two.svg","four.svg","nine.svg"],["nine.svg","two.svg","four.svg","seven.svg","nine.svg","two.svg","six.svg","four.svg","six.svg","seven.svg","two.svg","seven.svg","nine.svg","four.svg","two.svg","nine.svg","four.svg","seven.svg","nine.svg","two.svg","four.svg","nine.svg","seven.svg","six.svg","seven.svg","four.svg","six.svg","four.svg","seven.svg","six.svg","nine.svg","six.svg","four.svg","nine.svg","six.svg","two.svg","four.svg","two.svg","nine.svg","two.svg","six.svg","four.svg","two.svg","six.svg","seven.svg","six.svg","nine.svg","seven.svg","two.svg","seven.svg"],["six.svg","seven.svg","two.svg","four.svg","seven.svg","four.svg","nine.svg","six.svg","two.svg","six.svg","four.svg","two.svg","six.svg","seven.svg","nine.svg","two.svg","six.svg","nine.svg","seven.svg","two.svg","six.svg","four.svg","seven.svg","six.svg","seven.svg","nine.svg","seven.svg","four.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","seven.svg","nine.svg","two.svg","four.svg","nine.svg","six.svg","two.svg","nine.svg","seven.svg","two.svg","four.svg","six.svg","four.svg","two.svg","four.svg","nine.svg","seven.svg"],["six.svg","nine.svg","six.svg","seven.svg","six.svg","four.svg","two.svg","nine.svg","four.svg","seven.svg","two.svg","six.svg","seven.svg","two.svg","nine.svg","six.svg","seven.svg","four.svg","nine.svg","two.svg","nine.svg","four.svg","two.svg","seven.svg","six.svg","four.svg","six.svg","nine.svg","six.svg","four.svg","seven.svg","two.svg","nine.svg","two.svg","seven.svg","nine.svg","two.svg","four.svg","two.svg","seven.svg","six.svg","four.svg","two.svg","seven.svg","nine.svg","four.svg","six.svg","nine.svg","seven.svg","four.svg"],["nine.svg","four.svg","nine.svg","six.svg","two.svg","seven.svg","four.svg","six.svg","nine.svg","four.svg","seven.svg","two.svg","six.svg","two.svg","seven.svg","six.svg","two.svg","four.svg","two.svg","six.svg","four.svg","nine.svg","two.svg","four.svg","six.svg","four.svg","seven.svg","two.svg","seven.svg","four.svg","nine.svg","four.svg","six.svg","two.svg","four.svg","nine.svg","six.svg","seven.svg","nine.svg","two.svg","seven.svg","nine.svg","seven.svg","six.svg","nine.svg","seven.svg","two.svg","six.svg","seven.svg","nine.svg"],["four.svg","two.svg","six.svg","seven.svg","two.svg","six.svg","two.svg","four.svg","nine.svg","seven.svg","two.svg","four.svg","seven.svg","nine.svg","six.svg","two.svg","nine.svg","six.svg","seven.svg","nine.svg","six.svg","nine.svg","two.svg","four.svg","seven.svg","four.svg","six.svg","seven.svg","nine.svg","two.svg","four.svg","seven.svg","four.svg","six.svg","nine.svg","seven.svg","four.svg","six.svg","two.svg","seven.svg","nine.svg","six.svg","seven.svg","nine.svg","four.svg","two.svg","nine.svg","four.svg","six.svg","two.svg"],["four.svg","nine.svg","six.svg","four.svg","seven.svg","two.svg","nine.svg","six.svg","seven.svg","two.svg","nine.svg","six.svg","seven.svg","six.svg","two.svg","nine.svg","six.svg","seven.svg","two.svg","four.svg","six.svg","seven.svg","two.svg","four.svg","nine.svg","seven.svg","four.svg","two.svg","four.svg","seven.svg","nine.svg","six.svg","four.svg","nine.svg","six.svg","nine.svg","two.svg","four.svg","two.svg","six.svg","two.svg","nine.svg","six.svg","two.svg","seven.svg","four.svg","seven.svg","nine.svg","seven.svg","four.svg"],["seven.svg","four.svg","two.svg","nine.svg","six.svg","seven.svg","four.svg","six.svg","seven.svg","nine.svg","four.svg","seven.svg","nine.svg","two.svg","seven.svg","four.svg","seven.svg","two.svg","six.svg","seven.svg","six.svg","four.svg","six.svg","nine.svg","two.svg","seven.svg","two.svg","nine.svg","four.svg","six.svg","nine.svg","six.svg","four.svg","two.svg","nine.svg","two.svg","four.svg","six.svg","two.svg","nine.svg","seven.svg","two.svg","nine.svg","four.svg","six.svg","seven.svg","six.svg","four.svg","nine.svg","two.svg"],["six.svg","four.svg","two.svg","six.svg","seven.svg","four.svg","nine.svg","six.svg","two.svg","seven.svg","nine.svg","two.svg","four.svg","seven.svg","four.svg","two.svg","seven.svg","two.svg","nine.svg","six.svg","seven.svg","four.svg","nine.svg","four.svg","two.svg","four.svg","six.svg","nine.svg","two.svg","nine.svg","six.svg","two.svg","seven.svg","six.svg","nine.svg","seven.svg","nine.svg","two.svg","four.svg","six.svg","seven.svg","four.svg","nine.svg","seven.svg","four.svg","six.svg","two.svg","seven.svg","six.svg","nine.svg"],["six.svg","nine.svg","seven.svg","two.svg","four.svg","nine.svg","two.svg","seven.svg","nine.svg","seven.svg","two.svg","seven.svg","six.svg","four.svg","nine.svg","six.svg","four.svg","two.svg","seven.svg","nine.svg","six.svg","two.svg","four.svg","nine.svg","two.svg","four.svg","six.svg","seven.svg","two.svg","six.svg","seven.svg","four.svg","six.svg","four.svg","nine.svg","two.svg","four.svg","two.svg","nine.svg","seven.svg","six.svg","nine.svg","seven.svg","two.svg","four.svg","seven.svg","nine.svg","six.svg","four.svg","six.svg"],["seven.svg","four.svg","nine.svg","two.svg","six.svg","two.svg","seven.svg","two.svg","six.svg","four.svg","six.svg","nine.svg","two.svg","nine.svg","seven.svg","six.svg","nine.svg","seven.svg","four.svg","seven.svg","nine.svg","six.svg","nine.svg","four.svg","two.svg","nine.svg","two.svg","four.svg","six.svg","nine.svg","four.svg","seven.svg","six.svg","two.svg","seven.svg","two.svg","four.svg","seven.svg","nine.svg","seven.svg","six.svg","four.svg","seven.svg","six.svg","two.svg","four.svg","nine.svg","two.svg","four.svg","six.svg"],["six.svg","seven.svg","four.svg","two.svg","nine.svg","four.svg","two.svg","four.svg","six.svg","nine.svg","two.svg","four.svg","six.svg","nine.svg","four.svg","six.svg","four.svg","two.svg","seven.svg","six.svg","seven.svg","nine.svg","two.svg","six.svg","nine.svg","seven.svg","six.svg","seven.svg","two.svg","nine.svg","four.svg","six.svg","seven.svg","four.svg","two.svg","four.svg","seven.svg","nine.svg","seven.svg","six.svg","two.svg","nine.svg","six.svg","two.svg","seven.svg","nine.svg","two.svg","four.svg","nine.svg","seven.svg"],["four.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","seven.svg","two.svg","six.svg","nine.svg","two.svg","six.svg","two.svg","seven.svg","six.svg","seven.svg","two.svg","six.svg","two.svg","seven.svg","nine.svg","seven.svg","four.svg","six.svg","four.svg","nine.svg","seven.svg","four.svg","nine.svg","six.svg","two.svg","four.svg","seven.svg","nine.svg","two.svg","six.svg","four.svg","nine.svg","two.svg","seven.svg","four.svg","seven.svg","nine.svg","six.svg","seven.svg","four.svg","two.svg","four.svg","nine.svg","six.svg"],["six.svg","seven.svg","four.svg","nine.svg","two.svg","seven.svg","two.svg","six.svg","two.svg","seven.svg","two.svg","nine.svg","six.svg","four.svg","nine.svg","four.svg","seven.svg","two.svg","four.svg","nine.svg","six.svg","two.svg","seven.svg","nine.svg","six.svg","two.svg","nine.svg","four.svg","nine.svg","six.svg","seven.svg","six.svg","four.svg","seven.svg","nine.svg","seven.svg","four.svg","two.svg","six.svg","nine.svg","four.svg","two.svg","six.svg","two.svg","seven.svg","four.svg","seven.svg","nine.svg","four.svg","six.svg"]];function Ir(e,n=!1){return null==e?n:"true"===e.trim().toLowerCase()}function Dr(e){return"string"==typeof e?Ir(e):"boolean"==typeof e&&e}const Or=(e,n)=>{let t;var i,s=("string"!=typeof(i=e)&&(i=String(i)),i.toLocaleLowerCase());return t=["true","false"].includes(s)?Ir(s):!(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:13,i=Number(e);if(null!=e){if(Number.isNaN(i)){var s={k:0,tk:0,pk:0,preschool:0,prekindergarten:0,transitionalkindergarten:0,kindergarten:0,infanttoddler:0,infant:0,toddler:0,first:1,firstgrade:1,second:2,secondgrade:2,third:3,thirdgrade:3,fourth:4,fourthgrade:4,fifth:5,fifthgrade:5,sixth:6,sixthgrade:6,seventh:7,seventhgrade:7,eighth:8,eighthgrade:8,ninth:9,ninthgrade:9,tenth:10,tenthgrade:10,eleventh:11,eleventhgrade:11,twelfth:12,twelfthgrade:12,freshman:9,sophomore:10,junior:11,senior:12,postgraduate:13,university:13,graduate:13,master:13,doctorate:13,masters:13}[e.toLowerCase().replace(/\s/g,"").replace(/-/g,"")];if(void 0===s)return;return s<n?n:s>t?t:s}return i<n?n:i>t?t:i}}(n)>=6),t};const Tr=new Map;function Pr(e){const n=new URL(e,document.baseURI).href;if(Tr.has(n))return Tr.get(n);const t=new Promise(((e,t)=>{const i=document.createElement("script");i.src=n,i.dataset.dynamic="true",i.onload=()=>{e()},i.onerror=e=>{Tr.delete(n),t(e)},document.head.appendChild(i)}));return Tr.set(n,t),t}async function Fr(e){const n=e.getElementsByTagName("script");for(let e=0;e<n.length;e++){const t=n[e];t.src&&await Pr(t.src)}}function Nr(e){const n=e.getElementsByTagName("script");for(let e=0;e<n.length;e++){const t=document.createElement("script");t.text=n[e].text,document.head.appendChild(t).parentNode.removeChild(t)}}function qr(e){Object.keys(e).forEach((n=>{window[n]=e[n]}))}function zr(e){Object.keys(e).forEach((e=>{const n=Object.getOwnPropertyDescriptor(window,e);n&&n.configurable?delete window[e]:console.log(`Cannot remove ${e} from window; it may be non-configurable.`)}))}function Vr(e){document.querySelectorAll("script[data-dynamic]").forEach((n=>{e&&!e(n)||n.parentNode.removeChild(n)}))}function Br(e){e.style.position="",e.style.top="",e.style.left="",e.style.width="",e.style.height=""}function Ur(e){Object.keys(e).forEach((n=>{const t=CSS.escape?CSS.escape(n):n.replace(/([^\w-])/g,"\\$1"),i=document.querySelector(`[data-alt-id="${t}"]`);i&&(i.textContent=e[n])}))}var Hr='<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">\n <style>\n body {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100vh;\n margin: 0;\n background-color: #ffffff; /* White background */\n color: #000000; /* Black text */\n }\n\n .loading-container {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 20px;\n border-radius: 10px;\n background: rgba(0, 0, 0, 0.05); /* Slight gray tint to differentiate from the white background */\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Soft shadow for depth */\n }\n\n .loading-spinner {\n border: 8px solid rgba(0, 0, 0, 0.1); /* Lighter border for the spinner */\n border-top: 8px solid #0d6efd; /* Blue color for active part of the spinner */\n border-radius: 50%;\n width: 80px;\n height: 80px;\n animation: spin 1s linear infinite;\n margin-bottom: 20px;\n }\n\n h2 {\n font-weight: 400;\n letter-spacing: 1px;\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n </style>\n</head>\n<body>\n <div class="loading-container">\n <div class="loading-spinner"></div>\n <h2>Loading...</h2>\n </div>\n</body>\n</html>\n';function Wr(){const e=document.getElementById("deviceList"),n=document.getElementById("findDevice-collapsableCards");e.innerHTML="";const t=document.createElement("option");t.value="",t.text="",e.add(t);const i=Object.keys(deviceConfigs);if(i.forEach((n=>{const t=document.createElement("option");t.value=n,t.text=n.charAt(0).toUpperCase()+n.slice(1),e.add(t)})),1===i.length){$r(deviceConfigs[i[0]]),n&&(n.style.display="none",Yr())}else n&&(n.style.display="block")}function $r(e){console.log("You selected a "+e.deviceName),screenHeight=e.screenHeight,screenWidth=e.screenWidth,webcamHeight=e.webcamHeight,screenSizeCalibrated=e.screenSizeCalibrated,webcamCentered=e.webcamCentered,HeightWebcamEntered=e.HeightWebcamEntered,heightInput_textbox.value=webcamHeight,heightInput_textbox.disabled=HeightWebcamEntered,e.hasOwnProperty("normalizedFocalLength")&&(normalizedFocalLength=e.normalizedFocalLength),checkAllComplete()}function Yr(){var e=document.querySelectorAll(".card-title"),n=1;e.forEach((function(e){"none"!==e.parentElement.parentElement.style.display&&null!==e.parentElement.parentElement.offsetParent&&(e.textContent=e.textContent.replace(/\(\d+\)/,"("+n+")"),n++)}))}var Kr,Xr,Gr=Object.freeze({__proto__:null,collapseCamera:function(e=!0){document.querySelectorAll('[id*="-cameracollapsableCards"]').forEach((n=>{n.style.display=e?"none":""})),Yr()},collapseCards:function(e=!0){document.querySelectorAll('[id*="-collapsableCards"]').forEach((n=>{n.style.display="Toggle"===e?"none"===n.style.display?"":"none":e?"none":""})),Yr()},handleDevice:$r,inputParticipantName:function(e){var n=document.getElementById("idInput");n.value=e,n.disabled=!0},updateCardNumbers:Yr,updateDeviceConfigFromJSON:async function(e){try{const n=await fetch(e),t=await n.json();deviceConfigs=t,Wr()}catch(e){console.error("Error fetching or parsing JSON:",e)}},updateDropdownOptions:Wr});function Jr(){const e=window.navigator,n=window.screen,t={userAgent:e.userAgent,platform:e.platform,language:e.language,deviceMemory:e.deviceMemory||"Not available",hardwareConcurrency:e.hardwareConcurrency,maxTouchPoints:e.maxTouchPoints,cookiesEnabled:e.cookieEnabled,webDriver:e.webdriver,onlineStatus:e.onLine,gpu:"Not available"},i={width:n.width,height:n.height,colorDepth:n.colorDepth,pixelDepth:n.pixelDepth,retinaDisplay:window.matchMedia("(-webkit-min-device-pixel-ratio: 2)").matches,landscapeOrientation:window.matchMedia("(orientation: landscape)").matches},s=document.createElement("canvas"),a=s.getContext("webgl")||s.getContext("experimental-webgl");if(a){const e=a.getExtension("WEBGL_debug_renderer_info");t.gpu=e?a.getParameter(e.UNMASKED_RENDERER_WEBGL):"Not available"}return{device:t,screen:i}}var Qr,Zr=document.documentElement,ec={};function nc(){Zr.requestFullscreen?Zr.requestFullscreen():Zr.webkitRequestFullscreen?Zr.webkitRequestFullscreen():Zr.msRequestFullscreen&&Zr.msRequestFullscreen()}var tc=4;function ic(e){const n="video"===e?["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm","video/mp4"]:["audio/webm;codecs=opus","audio/webm","audio/ogg","audio/mp4"];for(const e of n)if(MediaRecorder.isTypeSupported(e))return e;return null}async function sc(e=!1,n=!1){try{const t={};(e||n)&&(t.video={width:{ideal:1280,min:640},height:{ideal:720,min:480},frameRate:{ideal:30,min:15}}),t.audio=!0;const i=await navigator.mediaDevices.getUserMedia(t);return Qr=i,ec={bEyeTracking:e,storeVideo:n},(e||n)&&inputVideo&&(inputVideo.srcObject=i,inputVideo.muted=!0,inputVideo.play(),inputVideo.addEventListener("loadedmetadata",(function(){Kr=inputVideo.videoWidth,Xr=inputVideo.videoHeight,headCanvas&&(headCanvas.width=Kr,headCanvas.height=Xr)}))),{success:!0}}catch(e){throw console.error("Error accessing media devices:",e),e}}function ac(e){const n={one:"1",two:"2",three:"3",four:"4",five:"5",six:"6",seven:"7",eight:"8",nine:"9"},t={...e};return Array.isArray(t.stimulus)&&(t.stimulus=t.stimulus.reduce(((e,t)=>e+(n[t.toLowerCase()]||t)),"")),{stimImages:t.stimulus,...t}}async function oc(){let e,n;mediaChunks=[],mediaRecorder&&"recording"===mediaRecorder.state&&mediaRecorder.stop();try{if(ec.storeVideo){if(e=Qr,n=ic("video"),!n)throw new Error("No supported video MIME type found for MediaRecorder")}else{const t=Qr.getAudioTracks();if(!(t.length>0))return void console.error("No audio tracks available for recording");if(e=new MediaStream(t),n=ic("audio"),!n)throw new Error("No supported audio MIME type found for MediaRecorder")}}catch(e){return void console.error("Error setting up recording stream:",e)}console.log("MIME Type:",n),mediaRecorder=new MediaRecorder(e,{mimeType:n,videoBitsPerSecond:25e5,audioBitsPerSecond:128e3}),mediaRecorder.ondataavailable=e=>{console.log("Media chunk size:",e.data.size),e.data.size>0&&mediaChunks.push(e.data)},mediaRecorder.onstop=async()=>{console.log("Recording stopped, blob created")},mediaRecorder.start()}async function rc(){try{await new Promise((e=>{mediaRecorder&&"recording"===mediaRecorder.state?(mediaRecorder.onstop=e,mediaRecorder.stop()):e()}))}catch(e){console.error("Error stopping media recorder:",e)}}async function cc({filename:e,deviceConfig:n,config:t,metadata:i}){let s;console.log("media chunks",mediaChunks),s=n.storeVideo?"video/webm":"audio/webm";const a=new Blob(mediaChunks,{type:s});if(!(a.size>0))return console.error("No media data recorded."),null;console.log("Media recorded successfully. Size:",a.size,"bytes");try{return await t.firekit.uploadFileOrBlobToStorage({filename:e,assessmentPid:store.session.get("id"),fileOrBlob:a,customMetadata:ac(i)})}catch(e){return console.error("Error uploading media:",e),null}}function lc(){Qr&&(Qr.getTracks().forEach((e=>{e.stop()})),Qr=null);const e=document.getElementsByClassName("inputVideo")[0];if(e&&e.srcObject){e.srcObject.getTracks().forEach((e=>{e.stop()})),e.srcObject=null}window.mediaRecorder&&"inactive"!==window.mediaRecorder.state&&(window.mediaRecorder.stop(),window.mediaRecorder=null),window.micStream&&window.micStream.getTracks&&(window.micStream.getTracks().forEach((e=>e.stop())),window.micStream=null)}var pc=Object.freeze({__proto__:null,get countdown(){return tc},giveAccess:sc,openFullscreen:nc,get orig_img_height(){return Xr},get orig_img_width(){return Kr},saveRecordings:cc,startRecording:oc,stopMediaStreams:lc,stopRecording:rc,updateCountdown:function e(n){0===--tc?(document.getElementById("instruction").style.display="none","function"==typeof n&&(n(),tc=4)):(document.getElementById("instruction").innerHTML="<h1>"+tc+"</h1>",setTimeout((function(){e(n)}),1e3))}});async function uc(e){const n=Hr,t=document.createElement("div");t.innerHTML='\x3c!-- Scripts --\x3e\n<script data-dynamic src="https://cdn.jsdelivr.net/npm/remote-calibrator@latest"><\/script>\n<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n\n\x3c!-- CSS --\x3e\n<style>\n\nbody {\n margin: 0;\n}\n\n .column {\n float: left;\n padding: 10px;\n}\n\n.left, .right {\n width: 33%;\n}\n\n.middle {\n width: 33%;\n}\n\n.row:after {\n content: "";\n display: table;\n clear: both;\n}\n\n.container {\n width: 75%; /* Set the width for the container */\n margin: auto; /* Center the container if needed */\n}\n\n #audio-visualization {\n width: 100%; /* Both elements fill the container */\n height: 100px; /* Set a fixed height for the canvas */\n\n /* display: block; Ensure they are not inline */\n}\n\n#audio-visualization-audioonly {\n width:100%;\n height: 100px; /* Set a fixed height for the canvas */\n}\n\n</style>\n\n\x3c!-- HTML --\x3e\n<body id="body">\n\n <div class="px-4 py-5 my-5 text-center" style="display: block;">\n <h1 class="display-5 fw-bold" id="title" data-alt-id="configureDevice">Configure Device</h1>\n <h5 data-alt-id="configureDevice_text1"> To get started, we will need to set up a few things. </h5>\n <h5 data-alt-id="configureDevice_text2"> If you’re not sure what to do, ask an adult to help you with this part. </h5>\n <img src="https://storage.googleapis.com/roav-ran/shared/assets/legacy/parent-help-icon.png" width="10%">\n <div class="col-lg-6 mx-auto" style="margin-top: -8vh;">\n <p class="lead mt-3 mb-5"></p>\n\n \x3c!-- Preconfigured Devices --\x3e\n <div class="d-grid gap-2 justify-content-center">\n\n <div class="row gap-2" id="findDevice-collapsableCards" style="display: none;">\n <div class="col">\n <div\n class="card"\n style="width: 42rem; height: 11rem"\n id="findDevice"\n >\n <div class="card-body">\n <h5 class="card-title" data-alt-id="chooseDevice">(1) Choose Device</h5>\n <p class="card-text" data-alt-id="chooseDevice_text1">\n Please select the device you are taking the test on.\n </p>\n <select id="deviceList" onchange="selectDevice()"></select>\n </div>\n </div>\n </div>\n </div>\n\n\n\n \x3c!-- ROW 1: Full Screen | Get Screen Size --\x3e\n <div class="row gap-2" id="screenSize-collapsableCards">\n <div class="col" >\n <div class="card" style="width:20rem; height:11rem" id="card-fullscreen">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="fullScreen">(1) Full Screen</h5>\n <p class="card-text" data-alt-id="fullScreen_text1">Do not exit out of \'Full Screen\' mode for the remainder of this study.</p>\n <button type="button" class="btn btn-primary" id="fullscreen" onclick="openFullscreen()" data-alt-id="fullScreen_text2">Make Fullscreen</button>\n </div>\n </div>\n </div>\n <div class="col">\n <div class="card" style="width:20rem;height:11rem" id="card-screen-size">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="screenSize">(2) Screen Size</h5>\n <p class="card-text" data-alt-id="screenSize_text1">We need this to calibrate your device\'s screen size.</p>\n <button type="button" class="btn btn-primary" id="measureScreen" onclick="getScreenSize()" data-alt-id="screenSize_text2">Measure Screen Size</button>\n </div>\n </div>\n </div>\n </div>\n\n\n \x3c!-- ROW 2: Webcam Centered | Height of Webcam --\x3e\n <div class="row gap-2" id="webcam-collapsableCards">\n <div class="col">\n <div class="card" style="width: 20rem;" id="card-webcam-center">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="webcamCentered">(3) Is your webcam centred?</h5>\n <h6 class="card-subtitle mb-2 text-muted" data-alt-id="webcamCentered_text1">It is expected that for laptops the webcam is already centred.</h6>\n <p class="card-text" data-alt-id="webcamCentered_text2">If you are using a separate webcam, please centre this in the middle (as seen in the image below).</p>\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/webcamCentered.jpg" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <button type="button" class="btn btn-primary" id="measureDistanceFromScreeen" onclick="getwebcamCentered()" data-alt-id="webcamCentered_text3">My Webcam is Centered</button>\n </div>\n </div>\n </div>\n <div class="col">\n <div class="card" style="width: 20rem;" id="card-height-camera">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="webcamHeight">(4) Height of Webcam</h5>\n <p class="card-text" data-alt-id="webcamHeight_text1">This is the distance between the centre of your webcam\'s lens and the top bezel of your screen (image provided for example)</p>\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/webcamPosition.PNG" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <label for="heightInput" data-alt-id="webcamHeight_text2">Height in cm:</label>\n <input type="number" id="heightInput" name="heightInput" required\n minlength="1" maxlength="8" size="10" value="2">\n </br></br>\n <button type="button" class="btn btn-primary" id="getHeightbutton" onclick="getHeightWebcam()" data-alt-id="webcamHeight_text3">Done</button>\n </div>\n </div>\n </div>\n </div>\n\n\n <div class="row gap-2" id="access-cameracollapsableCards">\n <div class="col">\n <div class="card" style="width: 42rem;height:11rem" id="card-camera">\n <div class="card-body">\n <h5 class="card-title" id="camera-access-title" data-alt-id="cameraAccess">(5) Camera Access</h5>\n <p class="card-text" id="camera-access-text" data-alt-id="cameraAccess_text1">Please provide access to your camera to record your eye movements.</p>\n <button type="button" class="btn btn-primary" id="start-camera" data-alt-id="cameraAccess_text2">Provide Access</button>\n </div>\n </div>\n </div>\n </div>\n \n <div class="row gap-2" id="access-audiocollapsableCards" style="display: none;">\n <div class="col">\n <div class="card" style="width: 42rem;height:11rem" id="card-audio">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="audioAccess">(3) Audio Access</h5>\n <p class="card-text" data-alt-id="audioAccess_text1">Please provide access to your microphone to record audio.</p>\n <button type="button" class="btn btn-primary" id="start-audio" data-alt-id="audioAccess_text2">Provide Access</button>\n </div>\n </div>\n </div>\n </div>\n\n\n \x3c!-- ROW 4: Check Recording --\x3e\n <div class="row gap-2" style="padding-top:1rem;" id="check-cameracollapsableCards">\n <div class="col">\n <div class="card" style="width:42rem" id="card-final-check">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="finalChecks">(6) Final Checks</h5>\n <p id="finalChecks_text" data-alt-id="finalChecks_text1">Please ensure your video is well-lit and centered. Speak at a normal volume to check the audio level below.</p>\n\n <div id="video-quality-checks">\n <div class="column left">\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/badlighting.jpg" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <b data-alt-id="badLighting">Bad Lighting</b> ❌</br>\n <span data-alt-id="badLightingDescription">(Make sure eyes and face are clearly visible)</span>\n </div>\n <div class="column middle">\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/glassesReflection.jpg" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <b data-alt-id="glassesOn">Glasses On</b> ❌</br>\n <span data-alt-id="removeGlasses">(Remove Glasses)</span>\n </div>\n <div class="column middle">\n <img src="https://eyetrackingdata.blob.core.windows.net/public/Images/goodPosition.jpg" alt="center webcam" width="100%" style="padding-bottom:10px;">\n <b data-alt-id="idealView">Ideal View</b> ✔ ️</br>\n <span data-alt-id="idealViewDescription">(Face close to camera and centered with clear view of eyes)</span>\n </div>\n </div>\n <div class="container">\n <video autoplay="true" id="videoElement" style="width:100%; background-color: darkgray;"></video>\n <canvas id="audio-visualization" width="640" height="100"></canvas>\n </div>\n\n <button type="button" class="btn btn-primary" id="Final-Check" onclick="finalCheckComplete()" data-alt-id="finalChecks_text2" disabled>I\'m Looking and Sounding Great</button>\n </div>\n </div>\n </div> \n </div>\n \n \x3c!-- ROW 4b: Audio-Only Final Check --\x3e\n <div class="row gap-2" style="padding-top:1rem; display: none;" id="check-audiocollapsableCards">\n <div class="col">\n <div class="card" style="width:42rem" id="card-final-check-audio">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="finalChecks">(4) Final Checks</h5>\n <p id="finalChecks_audioOnly_text2" data-alt-id="finalChecks_audioOnly_text1">Speak at a normal volume to check the audio level below.</p>\n <div class="container">\n <canvas id="audio-visualization-audioonly" width="640" height="100"></canvas>\n </div>\n\n <button type="button" class="btn btn-primary" id="Final-Check-Audio" onclick="finalCheckComplete()" data-alt-id="finalChecks_text2" disabled>I\'m Sounding Great</button>\n </div>\n </div>\n </div> \n </div>\n \n\n \x3c!-- ROW 5: User Details --\x3e\n <div class="row gap-2" style="padding-top:1rem;">\n <div class="col">\n <div class="card" style="width:42rem" id="card-camera">\n <div class="card-body">\n <h5 class="card-title" data-alt-id="readytostart">(8) Ready to Start?</h5>\n <label for="idInput" data-alt-id="readytostart_text1">Participant ID:</label>\n <input type="text" id="idInput" name="idInput" required\n minlength="1" maxlength="100" size="10">\n </br></br>\n <button type="button" class="btn btn-primary" id="confirmButton" data-alt-id="readytostart_text2" disabled>Continue</button>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n \x3c!-- Audio Playing --\x3e \n \x3c!-- <audio autoplay id="voiceover" src="https://eyetrackingdata.blob.core.windows.net/public/Audios/deviceConfig.mp3"></audio> --\x3e\n <audio autoplay id="voiceover"></audio>\n\n </body>\n\n<script data-dynamic>\nvar deviceConfig = {};\n\n// hide the pid box if the app is running on a URL that contains "roar.education" (i.e. prod)\n// TODO: gse-roar-admin-staging is for dashboard testing, remove before deploying to prod\nconst hidePIDBox = new URL(window.location).origin.includes("roar.education") || new URL(window.location).origin.includes("gse-roar-admin-staging");\n\nvar voiceover = document.getElementById(\'voiceover\'); // TO DO: Doesn\'t have enough time to load? Only plays if the consent screen shows up first\n\nRemoteCalibrator.init();\n\nvar desktop = document.documentElement;\nvar finalCheckButton = document.getElementById("Final-Check")\nvar finalCheckButtonAudio = document.getElementById("Final-Check-Audio")\nvar confirmButton = document.getElementById("confirmButton");\nvar cardFullscreen = document.getElementById("card-fullscreen");\nvar cardScreenSize = document.getElementById("card-screen-size");\nvar cardDistanceScreen = document.getElementById("card-distance-screen");\nvar cardcamera = document.getElementById("card-camera");\nvar cardwebcamCenter = document.getElementById("card-webcam-center");\nvar cardheightcamera = document.getElementById("card-height-camera")\nvar cardfinalcheck = document.getElementById("card-final-check");\nvar cardfinalcheckaudio = document.getElementById("card-final-check-audio");\nvar heightInput_textbox = document.getElementById("heightInput")\nvar idInput_textbox = document.getElementById("idInput")\nvar idInput_textbox = document.getElementById("idInput");\nvar idInput_label = document.querySelector(\'label[for="idInput"]\');\n\nif (hidePIDBox === true) {\n idInput_textbox.style.display = \'none\';\n idInput_label.style.display = \'none\';\n}\n\nvar video = document.querySelector("#videoElement");\nvar deviceConfigs = {}\n\nvar audioDetected = false;\nvar fullScreen = false;\nvar screenSizeCalibrated = false;\nvar cameraStarted = false;\nvar HeightWebcamEntered = false;\nvar finalcheck = false;\nvar webcamCentered = false;\nvar normalizedFocalLength = 0;\nvar prolificID;\nvar screenWidth=0;\nvar screenHeight=0;\nvar screenWidthPX=window.screen.width;\nvar screenHeightPX=window.screen.height;\nvar webcamHeight=0;\nvar distance = 0;\nvar webcamInfo;\nvar bEyeTracking = true;\n\n\nfunction makeid(length) {\n var result = \'\';\n var characters = \'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\';\n var charactersLength = characters.length;\n for ( var i = 0; i < length; i++ ) {\n result += characters.charAt(Math.floor(Math.random() * \n charactersLength));\n }\n return result;\n}\n\nfunction selectDevice() {\n const dropdown = document.getElementById("deviceList");\n const selectedValue = dropdown.options[dropdown.selectedIndex].value;\n\n // Check if the selected device is in deviceConfig, default to "custom" otherwise\n const selectedDeviceConfig =\n deviceConfigs[selectedValue] || deviceConfigs.custom;\n\n console.log(selectedDeviceConfig)\n // Call the handleDevice function with the selected device\'s configuration\n document.getElementById("findDevice").style.backgroundColor = "#bcf5bc";\n handleDevice(selectedDeviceConfig);\n\n}\n\n\n\nfunction openFullscreen() {\n if (desktop.requestFullscreen) {\n desktop.requestFullscreen();\n } else if (desktop.webkitRequestFullscreen) { /* Safari */\n desktop.webkitRequestFullscreen();\n } else if (desktop.msRequestFullscreen) { /* IE11 */\n desktop.msRequestFullscreen();\n }\n\n screenWidthPX = window.screen.width;\n screenHeightPX = window.screen.height;\n\n fullScreen = true\n cardFullscreen.style.backgroundColor = \'#bcf5bc\'\n\n checkAllComplete()\n}\n\nfunction getScreenSize(){\n RemoteCalibrator.screenSize({}, data => {\n console.log(`ScreenWidth: ${data.value.screenWidthCm}cm.`)\n console.log(`ScreenHeight: ${data.value.screenHeightCm}cm.`)\n\n screenWidth = data.value.screenWidthCm\n screenHeight = data.value.screenHeightCm\n\n if (screenWidth!=null && screenHeight!=null) {\n screenSizeCalibrated = true\n cardScreenSize.style.backgroundColor = \'#bcf5bc\'\n console.log(screenSizeCalibrated)\n }\n checkAllComplete()\n }) \n}\n\n\nfunction getwebcamCentered(){\n webcamCentered = true\n cardwebcamCenter.style.backgroundColor = \'#bcf5bc\'\n checkAllComplete()\n}\n\nfunction getHeightWebcam(){\n if (heightInput_textbox.value>0){\n HeightWebcamEntered = true\n webcamHeight = heightInput_textbox.value\n heightInput_textbox.disabled = true\n cardheightcamera.style.backgroundColor = \'#bcf5bc\'\n }\n checkAllComplete()\n}\n\nfunction finalCheckComplete(){\n let userConfirmed = true\n if (!audioDetected) {\n userConfirmed = confirm("We couldn\'t hear you, are you sure your microphone is working? Click OK to continue anyway, or Cancel to check your settings.");\n }\n if (userConfirmed) {\n finalcheck = true\n if (cardfinalcheck) {\n cardfinalcheck.style.backgroundColor = \'#bcf5bc\'\n }\n if (cardfinalcheckaudio) {\n cardfinalcheckaudio.style.backgroundColor = \'#bcf5bc\'\n }\n checkAllComplete()\n }\n}\n\n\nasync function setupMediaStream(requestVideo) {\n const audioContext = new AudioContext();\n const canvas = requestVideo ? document.getElementById(\'audio-visualization\') : document.getElementById(\'audio-visualization-audioonly\');\n const ctx = canvas.getContext(\'2d\');\n\n const mediaConstraints = {\n audio: true\n };\n \n if (requestVideo) {\n mediaConstraints.video = {\n width: { ideal: 1920 }, \n height: { ideal: 1080 }, \n frameRate: { ideal: 60, max: 60 },\n facingMode: "user"\n };\n }\n\n const cameraStream = await navigator.mediaDevices.getUserMedia(mediaConstraints);\n\n if (requestVideo && cameraStream.getVideoTracks().length > 0) {\n const { width, height } = cameraStream.getVideoTracks()[0].getSettings();\n const videoTrack = cameraStream.getVideoTracks()[0];\n webcamInfo = videoTrack.getCapabilities\n ? videoTrack.getCapabilities()\n : {};\n\n webcamInfo[\'image_width\'] = width\n webcamInfo[\'image_height\'] = height\n\n console.log(`${width}x${height}`); // Log video resolution\n\n const video = document.querySelector(\'video\');\n video.srcObject = cameraStream;\n video.muted = true; // Mute the video element to prevent audio playback\n\n if (height > 0) {\n cardcamera.style.backgroundColor = \'#bcf5bc\';\n cameraStarted = true;\n video.style.backgroundColor = \'#bcf5bc\';\n finalCheckButton.disabled = false;\n checkAllComplete();\n } else {\n video.style.backgroundColor = \'#FA8072\';\n alert("Your webcam does not meet our resolution standards");\n }\n } else if (!requestVideo) {\n // Audio-only mode\n const cardaudio = document.getElementById("card-audio");\n if (cardaudio) {\n cardaudio.style.backgroundColor = \'#bcf5bc\';\n }\n \n cameraStarted = true;\n if (finalCheckButtonAudio) {\n finalCheckButtonAudio.disabled = false;\n }\n checkAllComplete();\n }\n\n // Set up audio analyser\n const micSource = audioContext.createMediaStreamSource(cameraStream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n micSource.connect(analyser);\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n\n function draw() {\n requestAnimationFrame(draw);\n analyser.getByteTimeDomainData(dataArray);\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n\n ctx.lineWidth = 2;\n ctx.strokeStyle = \'rgb(0, 0, 0)\';\n ctx.beginPath();\n\n const sliceWidth = canvas.width * 1.0 / bufferLength;\n let x = 0;\n let sum = 0;\n\n for (let i = 0; i < bufferLength; i++) {\n const v = dataArray[i] / 128.0;\n const y = v * canvas.height / 2;\n\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n\n sum += (dataArray[i] - 128) * (dataArray[i] - 128); // Summing for RMS calculation\n x += sliceWidth;\n }\n\n ctx.lineTo(canvas.width, canvas.height / 2);\n ctx.stroke();\n let rms = Math.sqrt(sum / bufferLength);\n if (rms > 0.01) {\n audioDetected = true; // Update the audioDetected flag if audio is sufficiently loud\n }\n\n }\n\n draw(); // Start the drawing function\n}\n\ndocument.querySelector("#start-camera").addEventListener(\'click\', async () => {\n await setupMediaStream(true);\n});\n\ndocument.querySelector("#start-audio").addEventListener(\'click\', async () => {\n await setupMediaStream(false);\n});\n\n\nfunction checkAllComplete() {\n const hasCollapsedCards = Array.from(document.querySelectorAll(\'.card-title\')).some(card => \n card.closest(\'.card\').style.display === \'none\' || card.closest(\'.card\').offsetParent === null\n );\n const hasCameraCollapsedCards = Array.from(document.querySelectorAll(\'[id*="-cameracollapsableCards"]\')).every(element => \n element.style.display === \'none\' || element.offsetParent === null\n );\n\n const allConditionsMet = fullScreen && screenSizeCalibrated && cameraStarted && webcamCentered && HeightWebcamEntered && finalcheck;\n const minimalConditionsMet = cameraStarted && finalcheck && screenSizeCalibrated\n const bareConditionsMet = screenSizeCalibrated && cameraStarted && finalcheck\n \n let conditionsMet = false;\n if (bEyeTracking) {\n // Eye tracking mode: require camera access (cameraStarted) and finalcheck\n conditionsMet = (hasCollapsedCards && minimalConditionsMet) || (!hasCollapsedCards && allConditionsMet);\n } else {\n // Audio-only mode: require microphone access (cameraStarted) and finalcheck\n conditionsMet = hasCameraCollapsedCards && bareConditionsMet;\n }\n \n if (conditionsMet) {\n confirmButton.classList.remove(\'btn-secondary\')\n confirmButton.classList.add(\'btn-primary\')\n confirmButton.disabled = false;\n }\n}\n\n\n\n\n// function continueToTest(){\n// video.remove()\n// prolificID = idInput_textbox.value.trim() ? idInput_textbox.value : makeid(10);\n\n// localStorage.prolificID = prolificID\n// localStorage.screenHeight = screenHeight\n// localStorage.screenWidth = screenWidth\n// localStorage.webcamHeight = webcamHeight\n// localStorage.distance = distance\n// window.location.href = "criticalSpacingMenu_six.html";\n\n// }\n\n<\/script>',document.body.appendChild(t),await Fr(t),qr(Gr),Nr(t),function(e){""!==e.firekit.task.variantParams.deviceConfigFile&&collapseCards("Toggle");const n=Dr(e.firekit.task.variantParams.bEyeTracking);if(window.bEyeTracking=n,n){collapseCamera();const e=document.getElementById("access-cameracollapsableCards"),n=document.getElementById("access-audiocollapsableCards"),t=document.getElementById("check-cameracollapsableCards"),i=document.getElementById("check-audiocollapsableCards");e&&(e.style.display="block"),t&&(t.style.display="block"),n&&(n.style.display="none"),i&&(i.style.display="none")}else{collapseCamera();const e=document.getElementById("access-cameracollapsableCards"),n=document.getElementById("access-audiocollapsableCards"),t=document.getElementById("check-audiocollapsableCards");e&&(e.style.display="none"),n&&(n.style.display="block"),t&&(t.style.display="block")}""!==e.firekit.user.assessmentPid&&inputParticipantName(e.firekit.user.assessmentPid);var t=document.getElementById("voiceover");if(t.src="https://storage.googleapis.com/roav-ran/en/shared/audio/configureDeviceViewAudio.mp3",""!==e.firekit.task.variantParams.deviceConfigFile){var i=`https://eyetrackingdata.blob.core.windows.net/public/config/${e.firekit.task.variantParams.deviceConfigFile}.json`;updateDeviceConfigFromJSON(i)}t.play()}(e),Ur(be.store.data[be.language].translation),await new Promise((i=>{const s=document.getElementById("confirmButton");s&&s.addEventListener("click",(async()=>{try{var s=idInput_textbox.value.trim()?idInput_textbox.value:makeid(10);s!==e.firekit.user.assessmentPid&&e.firekit.updateUser({assessmentPid:s}),nc(),o.session.set("id",s),o.session.set("deviceConfig",{screenWidth:parseFloat(screenWidth),screenHeight:parseFloat(screenHeight),screenWidthPX:parseFloat(screenWidthPX),screenHeightPX:parseFloat(screenHeightPX),webcamHeight:parseFloat(webcamHeight),normalizedFocalLength:parseFloat(normalizedFocalLength),deviceInfo:Jr(),webcamInfo:webcamInfo,bEyeTracking:Dr(e.firekit.task.variantParams.bEyeTracking),storeVideo:Dr(e.firekit.task.variantParams.storeVideo),startTime:Date.now(),timed:e.firekit.task.variantParams.timed}),t.innerHTML=n,zr(Gr),Vr(),t.remove(),i()}catch(e){window.console.log("Error:",e)}}))}))}var dc='<script src="https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/face_mesh.min.js"><\/script>\n\n<script data-dynamic>\n var irisMetrics;\n var headMetrics;\n var headCoordinates;\n var leftEyeCoordinates = [];\n var rightEyeCoordinates = [];\n var movingContour;\n var fixedContour;\n var canvasContour;\n var focalLengthMultiple;\n var headMetrics_array = [];\n var irisMetrics_array = [];\n var mediaRecorder;\n var mediaChunks = [];\n var leftEyectx;\n var rightEyectx;\n var normalizedFocalLength;\n var blueCircle;\n var inferenceRetries = 0;\n var maxInferenceRetries = 100;\n\n var inputVideo = document.getElementsByClassName("inputVideo")[0];\n var headCanvas = document.getElementById("headCanvas");\n var headCtx = headCanvas.getContext("2d");\n\n var faceMesh = new FaceMesh({\n locateFile: (file) => {\n return `https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/${file}`;\n },\n });\n\n faceMesh.setOptions({\n selfieMode: true,\n enableFaceGeometry: false,\n maxNumFaces: 1,\n refineLandmarks: true,\n minDetectionConfidence: 0.5,\n minTrackingConfidence: 0.5,\n });\n\n faceMesh.onResults(onResultsFaceMesh);\n\n async function runInference() {\n await faceMesh.send({ image: inputVideo });\n try {\n if (!leftEyeCoordinates || leftEyeCoordinates.length === 0 || !rightEyeCoordinates || rightEyeCoordinates.length === 0) {\n inferenceRetries++;\n if (inferenceRetries > maxInferenceRetries) {\n console.warn("Max inference retries reached. Stopping eye tracking.");\n continueProcessing = false;\n return;\n }\n throw new Error("No face detected");\n }\n inferenceRetries = 0;\n let input1, input2, kpsTensor;\n let [upper_left_x, upper_left_y, width, height] = convertToYolo(\n leftEyeCoordinates,\n inputVideo.videoWidth,\n inputVideo.videoHeight,\n );\n let kps = [\n upper_left_x / inputVideo.videoWidth,\n upper_left_y / inputVideo.videoHeight,\n width / inputVideo.videoWidth,\n height / inputVideo.videoHeight,\n ];\n\n leftEyectx.drawImage(\n inputVideo,\n Math.max(0, inputVideo.videoWidth - upper_left_x - width),\n Math.max(0, upper_left_y),\n Math.max(0, width),\n Math.max(0, height),\n 0,\n 0,\n 128,\n 128,\n );\n\n [upper_left_x, upper_left_y, width, height] = convertToYolo(\n rightEyeCoordinates,\n inputVideo.videoWidth,\n inputVideo.videoHeight,\n );\n kps.push(\n upper_left_x / inputVideo.videoWidth,\n upper_left_y / inputVideo.videoHeight,\n width / inputVideo.videoWidth,\n height / inputVideo.videoHeight,\n );\n rightEyectx.drawImage(\n inputVideo,\n Math.max(0, inputVideo.videoWidth - upper_left_x - width),\n Math.max(0, upper_left_y),\n Math.max(0, width),\n Math.max(0, height),\n 0,\n 0,\n 128,\n 128,\n );\n\n imageData = leftEyectx.getImageData(0, 0, 128, 128);\n let preprocessedData = preprocess(imageData.data, 128, 128);\n input1 = new Tensor(preprocessedData, "float32", [1, 3, 128, 128]);\n imageData = rightEyectx.getImageData(0, 0, 128, 128);\n preprocessedData = preprocess(imageData.data, 128, 128);\n input2 = new Tensor(preprocessedData, "float32", [1, 3, 128, 128]);\n preprocessedData = preprocess_kps(kps);\n kpsTensor = new Tensor(preprocessedData, "float32", [1, 8]);\n\n myWorker.postMessage({\n input1: input1,\n input2: input2,\n kpsTensor: kpsTensor,\n });\n } catch (error) {\n console.log(error)\n if (inferenceRetries < maxInferenceRetries) {\n setTimeout(runInference, 50);\n } else {\n console.warn("Max inference retries reached. Stopping eye tracking.");\n continueProcessing = false;\n }\n }\n }\n\n myWorker.onmessage = async (e) => {\n if (e.data.error) {\n console.error("Error from worker:", e.data.error);\n } else {\n if (typeof runAfterEveryFrame === \'function\') {\n runAfterEveryFrame((output = e.data));\n }\n }\n\n if (continueProcessing) {\n runInference();\n }\n };\n<\/script>\n';function gc(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var mc=function(e){for(var n=new Array(e),t=0;t<e;++t)n[t]=t;return n},vc=function(e){return null!=e&&(gc(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&gc(e.slice(0,0))}(e)||!!e._isBuffer)},hc="undefined"!=typeof Float64Array;function fc(e,n){return e[0]-n[0]}function xc(){var e,n=this.stride,t=new Array(n.length);for(e=0;e<t.length;++e)t[e]=[Math.abs(n[e]),e];t.sort(fc);var i=new Array(t.length);for(e=0;e<i.length;++e)i[e]=t[e][1];return i}function bc(e,n){var t=["View",n,"d",e].join("");n<0&&(t="View_Nil"+e);var i="generic"===e;if(-1===n){var s="function "+t+"(a){this.data=a;};var proto="+t+".prototype;proto.dtype='"+e+"';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new "+t+"(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_"+t+"(a){return new "+t+"(a);}";return new Function(s)()}if(0===n){s="function "+t+"(a,d) {this.data = a;this.offset = d};var proto="+t+".prototype;proto.dtype='"+e+"';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function "+t+"_copy() {return new "+t+"(this.data,this.offset)};proto.pick=function "+t+"_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function "+t+"_get(){return "+(i?"this.data.get(this.offset)":"this.data[this.offset]")+"};proto.set=function "+t+"_set(v){return "+(i?"this.data.set(this.offset,v)":"this.data[this.offset]=v")+"};return function construct_"+t+"(a,b,c,d){return new "+t+"(a,d)}";return new Function("TrivialArray",s)(yc[e][0])}s=["'use strict'"];var a=mc(n),o=a.map((function(e){return"i"+e})),r="this.offset+"+a.map((function(e){return"this.stride["+e+"]*i"+e})).join("+"),c=a.map((function(e){return"b"+e})).join(","),l=a.map((function(e){return"c"+e})).join(",");s.push("function "+t+"(a,"+c+","+l+",d){this.data=a","this.shape=["+c+"]","this.stride=["+l+"]","this.offset=d|0}","var proto="+t+".prototype","proto.dtype='"+e+"'","proto.dimension="+n),s.push("Object.defineProperty(proto,'size',{get:function "+t+"_size(){return "+a.map((function(e){return"this.shape["+e+"]"})).join("*"),"}})"),1===n?s.push("proto.order=[0]"):(s.push("Object.defineProperty(proto,'order',{get:"),n<4?(s.push("function "+t+"_order(){"),2===n?s.push("return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})"):3===n&&s.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):s.push("ORDER})")),s.push("proto.set=function "+t+"_set("+o.join(",")+",v){"),i?s.push("return this.data.set("+r+",v)}"):s.push("return this.data["+r+"]=v}"),s.push("proto.get=function "+t+"_get("+o.join(",")+"){"),i?s.push("return this.data.get("+r+")}"):s.push("return this.data["+r+"]}"),s.push("proto.index=function "+t+"_index(",o.join(),"){return "+r+"}"),s.push("proto.hi=function "+t+"_hi("+o.join(",")+"){return new "+t+"(this.data,"+a.map((function(e){return["(typeof i",e,"!=='number'||i",e,"<0)?this.shape[",e,"]:i",e,"|0"].join("")})).join(",")+","+a.map((function(e){return"this.stride["+e+"]"})).join(",")+",this.offset)}");var p=a.map((function(e){return"a"+e+"=this.shape["+e+"]"})),u=a.map((function(e){return"c"+e+"=this.stride["+e+"]"}));s.push("proto.lo=function "+t+"_lo("+o.join(",")+"){var b=this.offset,d=0,"+p.join(",")+","+u.join(","));for(var d=0;d<n;++d)s.push("if(typeof i"+d+"==='number'&&i"+d+">=0){d=i"+d+"|0;b+=c"+d+"*d;a"+d+"-=d}");s.push("return new "+t+"(this.data,"+a.map((function(e){return"a"+e})).join(",")+","+a.map((function(e){return"c"+e})).join(",")+",b)}"),s.push("proto.step=function "+t+"_step("+o.join(",")+"){var "+a.map((function(e){return"a"+e+"=this.shape["+e+"]"})).join(",")+","+a.map((function(e){return"b"+e+"=this.stride["+e+"]"})).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(d=0;d<n;++d)s.push("if(typeof i"+d+"==='number'){d=i"+d+"|0;if(d<0){c+=b"+d+"*(a"+d+"-1);a"+d+"=ceil(-a"+d+"/d)}else{a"+d+"=ceil(a"+d+"/d)}b"+d+"*=d}");s.push("return new "+t+"(this.data,"+a.map((function(e){return"a"+e})).join(",")+","+a.map((function(e){return"b"+e})).join(",")+",c)}");var g=new Array(n),m=new Array(n);for(d=0;d<n;++d)g[d]="a[i"+d+"]",m[d]="b[i"+d+"]";s.push("proto.transpose=function "+t+"_transpose("+o+"){"+o.map((function(e,n){return e+"=("+e+"===undefined?"+n+":"+e+"|0)"})).join(";"),"var a=this.shape,b=this.stride;return new "+t+"(this.data,"+g.join(",")+","+m.join(",")+",this.offset)}"),s.push("proto.pick=function "+t+"_pick("+o+"){var a=[],b=[],c=this.offset");for(d=0;d<n;++d)s.push("if(typeof i"+d+"==='number'&&i"+d+">=0){c=(c+this.stride["+d+"]*i"+d+")|0}else{a.push(this.shape["+d+"]);b.push(this.stride["+d+"])}");return s.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),s.push("return function construct_"+t+"(data,shape,stride,offset){return new "+t+"(data,"+a.map((function(e){return"shape["+e+"]"})).join(",")+","+a.map((function(e){return"stride["+e+"]"})).join(",")+",offset)}"),new Function("CTOR_LIST","ORDER",s.join("\n"))(yc[e],xc)}var yc={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],bigint64:[],biguint64:[],buffer:[],generic:[]};var wc=t((function(e,n,t,i){if(void 0===e)return(0,yc.array[0])([]);"number"==typeof e&&(e=[e]),void 0===n&&(n=[e.length]);var s=n.length;if(void 0===t){t=new Array(s);for(var a=s-1,o=1;a>=0;--a)t[a]=o,o*=n[a]}if(void 0===i){i=0;for(a=0;a<s;++a)t[a]<0&&(i-=(n[a]-1)*t[a])}for(var r=function(e){if(vc(e))return"buffer";if(hc)switch(Object.prototype.toString.call(e)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object Uint8ClampedArray]":return"uint8_clamped";case"[object BigInt64Array]":return"bigint64";case"[object BigUint64Array]":return"biguint64"}return Array.isArray(e)?"array":"generic"}(e),c=yc[r];c.length<=s+1;)c.push(bc(r,c.length-1));return(0,c[s+1])(e,n,t,i)})),kc={};var Sc=function(e,n,t){return 0===e.length?e:n?(t||e.sort(n),function(e,n){for(var t=1,i=e.length,s=e[0],a=e[0],o=1;o<i;++o)if(a=s,n(s=e[o],a)){if(o===t){t++;continue}e[t++]=s}return e.length=t,e}(e,n)):(t||e.sort(),function(e){for(var n=1,t=e.length,i=e[0],s=e[0],a=1;a<t;++a,s=i)if(s=i,(i=e[a])!==s){if(a===n){n++;continue}e[n++]=i}return e.length=n,e}(e))};function jc(e,n,t){var i,s,a=e.length,o=n.arrayArgs.length,r=n.indexArgs.length>0,c=[],l=[],p=0,u=0;for(i=0;i<a;++i)l.push(["i",i,"=0"].join(""));for(s=0;s<o;++s)for(i=0;i<a;++i)u=p,p=e[i],0===i?l.push(["d",s,"s",i,"=t",s,"p",p].join("")):l.push(["d",s,"s",i,"=(t",s,"p",p,"-s",u,"*t",s,"p",u,")"].join(""));for(l.length>0&&c.push("var "+l.join(",")),i=a-1;i>=0;--i)p=e[i],c.push(["for(i",i,"=0;i",i,"<s",p,";++i",i,"){"].join(""));for(c.push(t),i=0;i<a;++i){for(u=p,p=e[i],s=0;s<o;++s)c.push(["p",s,"+=d",s,"s",i].join(""));r&&(i>0&&c.push(["index[",u,"]-=s",u].join("")),c.push(["++index[",p,"]"].join(""))),c.push("}")}return c.join("\n")}function _c(e,n,t){for(var i=e.body,s=[],a=[],o=0;o<e.args.length;++o){var r=e.args[o];if(!(r.count<=0)){var c=new RegExp(r.name,"g"),l="",p=n.arrayArgs.indexOf(o);switch(n.argTypes[o]){case"offset":var u=n.offsetArgIndex.indexOf(o);p=n.offsetArgs[u].array,l="+q"+u;case"array":l="p"+p+l;var d="l"+o,g="a"+p;if(0===n.arrayBlockIndices[p])1===r.count?"generic"===t[p]?r.lvalue?(s.push(["var ",d,"=",g,".get(",l,")"].join("")),i=i.replace(c,d),a.push([g,".set(",l,",",d,")"].join(""))):i=i.replace(c,[g,".get(",l,")"].join("")):i=i.replace(c,[g,"[",l,"]"].join("")):"generic"===t[p]?(s.push(["var ",d,"=",g,".get(",l,")"].join("")),i=i.replace(c,d),r.lvalue&&a.push([g,".set(",l,",",d,")"].join(""))):(s.push(["var ",d,"=",g,"[",l,"]"].join("")),i=i.replace(c,d),r.lvalue&&a.push([g,"[",l,"]=",d].join("")));else{for(var m=[r.name],v=[l],h=0;h<Math.abs(n.arrayBlockIndices[p]);h++)m.push("\\s*\\[([^\\]]+)\\]"),v.push("$"+(h+1)+"*t"+p+"b"+h);if(c=new RegExp(m.join(""),"g"),l=v.join("+"),"generic"===t[p])throw new Error("cwise: Generic arrays not supported in combination with blocks!");i=i.replace(c,[g,"[",l,"]"].join(""))}break;case"scalar":i=i.replace(c,"Y"+n.scalarArgs.indexOf(o));break;case"index":i=i.replace(c,"index");break;case"shape":i=i.replace(c,"shape")}}}return[s.join("\n"),i,a.join("\n")].join("\n").trim()}function Cc(e){for(var n=new Array(e.length),t=!0,i=0;i<e.length;++i){var s=e[i],a=s.match(/\d+/);a=a?a[0]:"",0===s.charAt(0)?n[i]="u"+s.charAt(1)+a:n[i]=s.charAt(0)+a,i>0&&(t=t&&n[i]===n[i-1])}return t?n[0]:n.join("")}var Ac=function(e,n){for(var t=n[1].length-Math.abs(e.arrayBlockIndices[0])|0,i=new Array(e.arrayArgs.length),s=new Array(e.arrayArgs.length),a=0;a<e.arrayArgs.length;++a)s[a]=n[2*a],i[a]=n[2*a+1];var o=[],r=[],c=[],l=[],p=[];for(a=0;a<e.arrayArgs.length;++a){e.arrayBlockIndices[a]<0?(c.push(0),l.push(t),o.push(t),r.push(t+e.arrayBlockIndices[a])):(c.push(e.arrayBlockIndices[a]),l.push(e.arrayBlockIndices[a]+t),o.push(0),r.push(e.arrayBlockIndices[a]));for(var u=[],d=0;d<i[a].length;d++)c[a]<=i[a][d]&&i[a][d]<l[a]&&u.push(i[a][d]-c[a]);p.push(u)}var g=["SS"],m=["'use strict'"],v=[];for(d=0;d<t;++d)v.push(["s",d,"=SS[",d,"]"].join(""));for(a=0;a<e.arrayArgs.length;++a){g.push("a"+a),g.push("t"+a),g.push("p"+a);for(d=0;d<t;++d)v.push(["t",a,"p",d,"=t",a,"[",c[a]+d,"]"].join(""));for(d=0;d<Math.abs(e.arrayBlockIndices[a]);++d)v.push(["t",a,"b",d,"=t",a,"[",o[a]+d,"]"].join(""))}for(a=0;a<e.scalarArgs.length;++a)g.push("Y"+a);if(e.shapeArgs.length>0&&v.push("shape=SS.slice(0)"),e.indexArgs.length>0){var h=new Array(t);for(a=0;a<t;++a)h[a]="0";v.push(["index=[",h.join(","),"]"].join(""))}for(a=0;a<e.offsetArgs.length;++a){var f=e.offsetArgs[a],x=[];for(d=0;d<f.offset.length;++d)0!==f.offset[d]&&(1===f.offset[d]?x.push(["t",f.array,"p",d].join("")):x.push([f.offset[d],"*t",f.array,"p",d].join("")));0===x.length?v.push("q"+a+"=0"):v.push(["q",a,"=",x.join("+")].join(""))}var b=Sc([].concat(e.pre.thisVars).concat(e.body.thisVars).concat(e.post.thisVars));for((v=v.concat(b)).length>0&&m.push("var "+v.join(",")),a=0;a<e.arrayArgs.length;++a)m.push("p"+a+"|=0");e.pre.body.length>3&&m.push(_c(e.pre,e,s));var y=_c(e.body,e,s),w=function(e){for(var n=0,t=e[0].length;n<t;){for(var i=1;i<e.length;++i)if(e[i][n]!==e[0][n])return n;++n}return n}(p);w<t?m.push(function(e,n,t,i){for(var s=n.length,a=t.arrayArgs.length,o=t.blockSize,r=t.indexArgs.length>0,c=[],l=0;l<a;++l)c.push(["var offset",l,"=p",l].join(""));for(l=e;l<s;++l)c.push(["for(var j"+l+"=SS[",n[l],"]|0;j",l,">0;){"].join("")),c.push(["if(j",l,"<",o,"){"].join("")),c.push(["s",n[l],"=j",l].join("")),c.push(["j",l,"=0"].join("")),c.push(["}else{s",n[l],"=",o].join("")),c.push(["j",l,"-=",o,"}"].join("")),r&&c.push(["index[",n[l],"]=j",l].join(""));for(l=0;l<a;++l){for(var p=["offset"+l],u=e;u<s;++u)p.push(["j",u,"*t",l,"p",n[u]].join(""));c.push(["p",l,"=(",p.join("+"),")"].join(""))}for(c.push(jc(n,t,i)),l=e;l<s;++l)c.push("}");return c.join("\n")}(w,p[0],e,y)):m.push(jc(p[0],e,y)),e.post.body.length>3&&m.push(_c(e.post,e,s)),e.debug&&console.log("-----Generated cwise routine for ",n,":\n"+m.join("\n")+"\n----------");var k=[e.funcName||"unnamed","_cwise_loop_",i[0].join("s"),"m",w,Cc(s)].join("");return new Function(["function ",k,"(",g.join(","),"){",m.join("\n"),"} return ",k].join(""))()},Ec=Ac;var Rc=function(e){var n=["'use strict'","var CACHED={}"],t=[],i=e.funcName+"_cwise_thunk";n.push(["return function ",i,"(",e.shimArgs.join(","),"){"].join(""));for(var s=[],a=[],o=[["array",e.arrayArgs[0],".shape.slice(",Math.max(0,e.arrayBlockIndices[0]),e.arrayBlockIndices[0]<0?","+e.arrayBlockIndices[0]+")":")"].join("")],r=[],c=[],l=0;l<e.arrayArgs.length;++l){var p=e.arrayArgs[l];t.push(["t",p,"=array",p,".dtype,","r",p,"=array",p,".order"].join("")),s.push("t"+p),s.push("r"+p),a.push("t"+p),a.push("r"+p+".join()"),o.push("array"+p+".data"),o.push("array"+p+".stride"),o.push("array"+p+".offset|0"),l>0&&(r.push("array"+e.arrayArgs[0]+".shape.length===array"+p+".shape.length+"+(Math.abs(e.arrayBlockIndices[0])-Math.abs(e.arrayBlockIndices[l]))),c.push("array"+e.arrayArgs[0]+".shape[shapeIndex+"+Math.max(0,e.arrayBlockIndices[0])+"]===array"+p+".shape[shapeIndex+"+Math.max(0,e.arrayBlockIndices[l])+"]"))}for(e.arrayArgs.length>1&&(n.push("if (!("+r.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same dimensionality!')"),n.push("for(var shapeIndex=array"+e.arrayArgs[0]+".shape.length-"+Math.abs(e.arrayBlockIndices[0])+"; shapeIndex--\x3e0;) {"),n.push("if (!("+c.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same shape!')"),n.push("}")),l=0;l<e.scalarArgs.length;++l)o.push("scalar"+e.scalarArgs[l]);return t.push(["type=[",a.join(","),"].join()"].join("")),t.push("proc=CACHED[type]"),n.push("var "+t.join(",")),n.push(["if(!proc){","CACHED[type]=proc=compile([",s.join(","),"])}","return proc(",o.join(","),")}"].join("")),e.debug&&console.log("-----Generated thunk:\n"+n.join("\n")+"\n----------"),new Function("compile",n.join("\n"))(Ec.bind(void 0,e))};function Lc(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName="",this.pre=null,this.body=null,this.post=null,this.debug=!1}var Mc=function(e){var n=new Lc;n.pre=e.pre,n.body=e.body,n.post=e.post;var t=e.args.slice(0);n.argTypes=t;for(var i=0;i<t.length;++i){var s=t[i];if("array"===s||"object"==typeof s&&s.blockIndices){if(n.argTypes[i]="array",n.arrayArgs.push(i),n.arrayBlockIndices.push(s.blockIndices?s.blockIndices:0),n.shimArgs.push("array"+i),i<n.pre.args.length&&n.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array args");if(i<n.post.args.length&&n.post.args[i].count>0)throw new Error("cwise: post() block may not reference array args")}else if("scalar"===s)n.scalarArgs.push(i),n.shimArgs.push("scalar"+i);else if("index"===s){if(n.indexArgs.push(i),i<n.pre.args.length&&n.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array index");if(i<n.body.args.length&&n.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array index");if(i<n.post.args.length&&n.post.args[i].count>0)throw new Error("cwise: post() block may not reference array index")}else if("shape"===s){if(n.shapeArgs.push(i),i<n.pre.args.length&&n.pre.args[i].lvalue)throw new Error("cwise: pre() block may not write to array shape");if(i<n.body.args.length&&n.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array shape");if(i<n.post.args.length&&n.post.args[i].lvalue)throw new Error("cwise: post() block may not write to array shape")}else{if("object"!=typeof s||!s.offset)throw new Error("cwise: Unknown argument type "+t[i]);n.argTypes[i]="offset",n.offsetArgs.push({array:s.array,offset:s.offset}),n.offsetArgIndex.push(i)}}if(n.arrayArgs.length<=0)throw new Error("cwise: No array arguments specified");if(n.pre.args.length>t.length)throw new Error("cwise: Too many arguments in pre() block");if(n.body.args.length>t.length)throw new Error("cwise: Too many arguments in body() block");if(n.post.args.length>t.length)throw new Error("cwise: Too many arguments in post() block");return n.debug=!!e.printCode||!!e.debug,n.funcName=e.funcName||"cwise",n.blockSize=e.blockSize||64,Rc(n)};!function(e){var n=Mc,t={body:"",args:[],thisVars:[],localVars:[]};function i(e){if(!e)return t;for(var n=0;n<e.args.length;++n){var i=e.args[n];e.args[n]=0===n?{name:i,lvalue:!0,rvalue:!!e.rvalue,count:e.count||1}:{name:i,lvalue:!1,rvalue:!0,count:1}}return e.thisVars||(e.thisVars=[]),e.localVars||(e.localVars=[]),e}function s(e){for(var t=[],s=0;s<e.args.length;++s)t.push("a"+s);return new Function("P",["return function ",e.funcName,"_ndarrayops(",t.join(","),") {P(",t.join(","),");return a0}"].join(""))(function(e){return n({args:e.args,pre:i(e.pre),body:i(e.body),post:i(e.proc),funcName:e.funcName})}(e))}var a={add:"+",sub:"-",mul:"*",div:"/",mod:"%",band:"&",bor:"|",bxor:"^",lshift:"<<",rshift:">>",rrshift:">>>"};!function(){for(var n in a){var t=a[n];e[n]=s({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+t+"c"},funcName:n}),e[n+"eq"]=s({args:["array","array"],body:{args:["a","b"],body:"a"+t+"=b"},rvalue:!0,funcName:n+"eq"}),e[n+"s"]=s({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+t+"s"},funcName:n+"s"}),e[n+"seq"]=s({args:["array","scalar"],body:{args:["a","s"],body:"a"+t+"=s"},rvalue:!0,funcName:n+"seq"})}}();var o={not:"!",bnot:"~",neg:"-",recip:"1.0/"};!function(){for(var n in o){var t=o[n];e[n]=s({args:["array","array"],body:{args:["a","b"],body:"a="+t+"b"},funcName:n}),e[n+"eq"]=s({args:["array"],body:{args:["a"],body:"a="+t+"a"},rvalue:!0,count:2,funcName:n+"eq"})}}();var r={and:"&&",or:"||",eq:"===",neq:"!==",lt:"<",gt:">",leq:"<=",geq:">="};!function(){for(var n in r){var t=r[n];e[n]=s({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+t+"c"},funcName:n}),e[n+"s"]=s({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+t+"s"},funcName:n+"s"}),e[n+"eq"]=s({args:["array","array"],body:{args:["a","b"],body:"a=a"+t+"b"},rvalue:!0,count:2,funcName:n+"eq"}),e[n+"seq"]=s({args:["array","scalar"],body:{args:["a","s"],body:"a=a"+t+"s"},rvalue:!0,count:2,funcName:n+"seq"})}}();var c=["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan"];!function(){for(var n=0;n<c.length;++n){var t=c[n];e[t]=s({args:["array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b)",thisVars:["this_f"]},funcName:t}),e[t+"eq"]=s({args:["array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a"],body:"a=this_f(a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"eq"})}}();var l=["max","min","atan2","pow"];!function(){for(var n=0;n<l.length;++n){var t=l[n];e[t]=s({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:t}),e[t+"s"]=s({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:t+"s"}),e[t+"eq"]=s({args:["array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"eq"}),e[t+"seq"]=s({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"seq"})}}();var p=["atan2","pow"];!function(){for(var n=0;n<p.length;++n){var t=p[n];e[t+"op"]=s({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:t+"op"}),e[t+"ops"]=s({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:t+"ops"}),e[t+"opeq"]=s({args:["array","array"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"opeq"}),e[t+"opseq"]=s({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+t,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:t+"opseq"})}}(),e.any=n({args:["array"],pre:t,body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"if(a){return true}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return false"},funcName:"any"}),e.all=n({args:["array"],pre:t,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1}],body:"if(!x){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"all"}),e.sum=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s+=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"sum"}),e.prod=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=1"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s*=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"prod"}),e.norm2squared=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm2squared"}),e.norm2=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return Math.sqrt(this_s)"},funcName:"norm2"}),e.norminf=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:4}],body:"if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norminf"}),e.norm1=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:3}],body:"this_s+=a<0?-a:a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm1"}),e.sup=n({args:["array"],pre:{body:"this_h=-Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),e.inf=n({args:["array"],pre:{body:"this_h=Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),e.argmin=n({args:["index","array","shape"],pre:{body:"{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),e.argmax=n({args:["index","array","shape"],pre:{body:"{this_v=-Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_>this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),e.random=s({args:["array"],pre:{args:[],body:"this_f=Math.random",thisVars:["this_f"]},body:{args:["a"],body:"a=this_f()",thisVars:["this_f"]},funcName:"random"}),e.assign=s({args:["array","array"],body:{args:["a","b"],body:"a=b"},funcName:"assign"}),e.assigns=s({args:["array","scalar"],body:{args:["a","b"],body:"a=b"},funcName:"assigns"}),e.equals=n({args:["array","array"],pre:t,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1},{name:"y",lvalue:!1,rvalue:!0,count:1}],body:"if(x!==y){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"equals"})}(kc);var Ic=t(kc),Dc=[[474,475],[475,476],[476,477],[477,474]],Oc=[[469,470],[470,471],[471,472],[472,469]],Tc=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Pc(e,n,t,i){e.forEach((e=>{const s=n[e[0]].x*t;i(s)}))}function Fc(e,n,t){n.forEach((n=>{const i=e[n];t.push([i.x,i.y])}))}function Nc(e,n,t,i,s){return Math.min(e,n)*s*(t/i)/10}function qc(e){let n=1/0,t=-1/0,i=1/0,s=-1/0;e.forEach((e=>{n=Math.min(n,e[0]),t=Math.max(t,e[0]),i=Math.min(i,e[1]),s=Math.max(s,e[1])}));return{headWidth:t-n,headHeight:s-i,headCenterX:(n+t)/2,headCenterY:(i+s)/2}}function zc(e){let n=0;for(let t=0;t<e.length;t++){const i=(t+1)%e.length;n+=e[t][0]*e[i][1],n-=e[i][0]*e[t][1]}return Math.abs(n/2)}var Vc=Object.freeze({__proto__:null,FACEMESH_FACE_OVAL:Tc,FACEMESH_LEFT_IRIS:Dc,FACEMESH_RIGHT_IRIS:Oc,calculateHeadMetrics:qc,convertToYolo:function(e,n,t){let i=(e[0][0]+e[2][0])/2,s=(e[1][1]+e[3][1])/2,a=e[2][0]-e[0][0],o=e[3][1]-e[1][1],r=[i,s,a,o];return a=r[2]*n,o=r[3]*t,[(r[0]-r[2]/2)*n,(r[1]-r[3]/2)*t,a,o]},defaultDeviceConfig:{screenWidth:30.2,screenHeight:19.6,screenWidthPX:1512,screenHeightPX:892,webcamHeight:2,normalizedFocalLength:1.3},defaultParticipantConfig:{headCenterX:.4383369982242584,headCenterY:.6562557443976402,headHeight:.3467509150505066,headWidth:.17240141332149506,widthLeftIris:29.442644119262695,widthRightIris:29.782133102416992,canvasContour:[[.4412970542907715,.4813721179962158],[.4646510183811188,.4823227524757385],[.48430705070495605,.48748111724853516],[.5025681853294373,.4987863302230835],[.5136374235153198,.5169670581817627],[.5202310681343079,.5401103496551514],[.5239146947860718,.5652479529380798],[.5248485207557678,.5970170497894287],[.5236638784408569,.6280523538589478],[.5220870971679688,.6599369645118713],[.519332766532898,.6945410370826721],[.5138625502586365,.7309722304344177],[.5065117478370667,.7603253722190857],[.4982540011405945,.7814207673072815],[.48702606558799744,.7993608713150024],[.4769010543823242,.8114907741546631],[.46630799770355225,.8215509057044983],[.4544796049594879,.8288376331329346],[.4395001232624054,.8312488794326782],[.42436403036117554,.8285082578659058],[.41225385665893555,.8210300207138062],[.40132373571395874,.8104891777038574],[.3908883333206177,.7982432246208191],[.3792901039123535,.7797933220863342],[.3707539737224579,.7583227753639221],[.36319053173065186,.728979766368866],[.35756009817123413,.6924722790718079],[.35495781898498535,.6577485203742981],[.35378265380859375,.6259740591049194],[.35298871994018555,.594894528388977],[.35470905900001526,.5631847381591797],[.3590857684612274,.5380555391311646],[.3667783737182617,.5149739384651184],[.37868133187294006,.4971347451210022],[.3973395824432373,.4863966703414917],[.41754668951034546,.4818713068962097]]},initEyeTracking:function(e=!1,n=!1){blueCircle=window.document.createElement("div"),blueCircle.setAttribute("id","blueCircle"),blueCircle.style.position="absolute",blueCircle.style.width="20px",blueCircle.style.height="20px",blueCircle.style.backgroundColor="blue",blueCircle.style.borderRadius="50%",blueCircle.style.transform="translate(-50%, -50%)",blueCircle.style.display="none",document.body.appendChild(blueCircle);const t=document.createElement("canvas");t.setAttribute("id","leftEye"),t.setAttribute("width","128"),t.setAttribute("height","128"),t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.display="none",document.body.appendChild(t);const i=document.createElement("canvas");i.setAttribute("id","rightEye"),i.setAttribute("width","128"),i.setAttribute("height","128"),i.style.position="absolute",i.style.top="0",i.style.left="128px",i.style.display="none",document.body.appendChild(i),e&&(t.style.display="block",i.style.display="block"),n&&(blueCircle.style.display="block"),leftEyectx=t.getContext("2d",{willReadFrequently:!0}),rightEyectx=i.getContext("2d",{willReadFrequently:!0})},isAreaWithinRange:function(e,n){const t=zc(e),i=zc(n);return i>=.82*t&&i<=1.17*t},isCentroidInsidePath:function(e,n){return function(e,n){let t=!1;const i=e[0],s=e[1];for(let e=0,a=n.length-1;e<n.length;a=e++){const o=n[e][0],r=n[e][1],c=n[a][0],l=n[a][1];r>s!=l>s&&i<(c-o)*(s-r)/(l-r)+o&&(t=!t)}return t}(function(e){let n=0,t=0;for(let i=0;i<e.length;i++)n+=e[i][0],t+=e[i][1];return[n/e.length,t/e.length]}(n),e)},onResultsFaceMesh:function(e){const n=e.image.width,t=e.image.height,i=[],s=[],a=[];let o=1/0,r=-1/0,c=1/0,l=-1/0;if(headCtx.save(),headCtx.clearRect(0,0,headCanvas.width,headCanvas.height),e.multiFaceLandmarks&&e.multiFaceLandmarks.forEach((e=>{if(Pc(Dc,e,n,(e=>{o=Math.min(o,e),r=Math.max(r,e)})),Pc(Oc,e,n,(e=>{c=Math.min(c,e),l=Math.max(l,e)})),Fc(e,[130,27,243,23],i),Fc(e,[463,257,359,253],s),"undefined"!=typeof canvasContour&&canvasContour){var p=function(e,n,t,i,s,a,o){if(!e)return;const r=[],c=e.map((e=>[e[0]*t,e[1]*i]));return n.beginPath(),c.forEach((([e,t],i)=>{r.push([e,t]),n[0===i?"moveTo":"lineTo"](e,t)})),n.closePath(),n.strokeStyle=s,n.lineWidth=a,n.fillStyle=o,n.stroke(),r}(canvasContour,headCtx,n,t,"rgba(13, 110, 253, 1.0)",3,"transparent");fixedContour=p}var u=function(e,n,t,i,s,a){const o=e.map((e=>{const t=n[e[0]];return a.push([t.x,t.y]),[t.x*i,t.y*s]})),r=[];return t.beginPath(),o.forEach((([e,n],i)=>{r.push([e,n]),t[0===i?"moveTo":"lineTo"](e,n)})),t.closePath(),t.fillStyle="rgba(13, 110, 253, 1.0)",t.fill(),r}(Tc,e,headCtx,n,t,a);movingContour=u})),headCtx.restore(),normalizedFocalLength>0){const e=((Nc(n,t,11.7,r-o,normalizedFocalLength)+Nc(n,t,11.7,l-c,normalizedFocalLength))/2).toFixed(0);current_viewingDistance=e}focalLengthMultiple=Math.min(n,t),irisMetrics={widthLeftIris:r-o,widthRightIris:l-c},headMetrics=qc(a),leftEyeCoordinates=i,rightEyeCoordinates=s,headCoordinates=a},preprocess:function(e,n,t){const i=wc(new Float32Array(e),[n,t,4]),s=wc(new Float32Array(n*t*3),[1,3,t,n]);return Ic.divseq(i,255),Ic.assign(s.pick(0,0,null,null),i.pick(null,null,2)),Ic.assign(s.pick(0,1,null,null),i.pick(null,null,1)),Ic.assign(s.pick(0,2,null,null),i.pick(null,null,0)),new Float32Array(s.data)},preprocess_kps:function(e,n,t){const i=wc(new Float32Array(e),[e.length]),s=wc(new Float32Array(e.length),[1,e.length]);return Ic.assign(s.pick(0,null),i),new Float32Array(s.data)}}),Bc={};const Uc=Object.prototype.toString;function Hc(e){const n=Uc.call(e);return n.endsWith("Array]")&&!n.includes("Big")}var Wc=i(Object.freeze({__proto__:null,isAnyArray:Hc}));var $c=i(Object.freeze({__proto__:null,default:function(e){var n,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Hc(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");if(void 0!==t.output){if(!Hc(t.output))throw new TypeError("output option must be an array if specified");n=t.output}else n=new Array(e.length);var i=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Hc(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");var t=n.fromIndex,i=void 0===t?0:t,s=n.toIndex,a=void 0===s?e.length:s;if(i<0||i>=e.length||!Number.isInteger(i))throw new Error("fromIndex must be a positive integer smaller than length");if(a<=i||a>e.length||!Number.isInteger(a))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=e[i],r=i+1;r<a;r++)e[r]<o&&(o=e[r]);return o}(e),s=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Hc(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");var t=n.fromIndex,i=void 0===t?0:t,s=n.toIndex,a=void 0===s?e.length:s;if(i<0||i>=e.length||!Number.isInteger(i))throw new Error("fromIndex must be a positive integer smaller than length");if(a<=i||a>e.length||!Number.isInteger(a))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=e[i],r=i+1;r<a;r++)e[r]>o&&(o=e[r]);return o}(e);if(i===s)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var a=t.min,o=void 0===a?t.autoMinMax?i:0:a,r=t.max,c=void 0===r?t.autoMinMax?s:1:r;if(o>=c)throw new RangeError("min option must be smaller than max option");for(var l=(c-o)/(s-i),p=0;p<e.length;p++)n[p]=(e[p]-i)*l+o;return n}}));Object.defineProperty(Bc,"__esModule",{value:!0});var Yc=Wc,Kc=$c;const Xc=" ".repeat(2),Gc=" ".repeat(4);function Jc(e,n={}){const{maxRows:t=15,maxColumns:i=10,maxNumSize:s=8,padMinus:a="auto"}=n;return`${e.constructor.name} {\n${Xc}[\n${Gc}${function(e,n,t,i,s){const{rows:a,columns:o}=e,r=Math.min(a,n),c=Math.min(o,t),l=[];if("auto"===s){s=!1;e:for(let n=0;n<r;n++)for(let t=0;t<c;t++)if(e.get(n,t)<0){s=!0;break e}}for(let n=0;n<r;n++){let t=[];for(let a=0;a<c;a++)t.push(Qc(e.get(n,a),i,s));l.push(`${t.join(" ")}`)}c!==o&&(l[l.length-1]+=` ... ${o-t} more columns`);r!==a&&l.push(`... ${a-n} more rows`);return l.join(`\n${Gc}`)}(e,t,i,s,a)}\n${Xc}]\n${Xc}rows: ${e.rows}\n${Xc}columns: ${e.columns}\n}`}function Qc(e,n,t){return(e>=0&&t?` ${Zc(e,n-1)}`:Zc(e,n)).padEnd(n)}function Zc(e,n){let t=e.toString();if(t.length<=n)return t;let i=e.toFixed(n);if(i.length>n&&(i=e.toFixed(Math.max(0,n-(i.length-n)))),i.length<=n&&!i.startsWith("0.000")&&!i.startsWith("-0.000"))return i;let s=e.toExponential(n);return s.length>n&&(s=e.toExponential(Math.max(0,n-(s.length-n)))),s.slice(0)}function el(e,n,t){let i=t?e.rows:e.rows-1;if(n<0||n>i)throw new RangeError("Row index out of range")}function nl(e,n,t){let i=t?e.columns:e.columns-1;if(n<0||n>i)throw new RangeError("Column index out of range")}function tl(e,n){if(n.to1DArray&&(n=n.to1DArray()),n.length!==e.columns)throw new RangeError("vector size must be the same as the number of columns");return n}function il(e,n){if(n.to1DArray&&(n=n.to1DArray()),n.length!==e.rows)throw new RangeError("vector size must be the same as the number of rows");return n}function sl(e,n){if(!Yc.isAnyArray(n))throw new TypeError("row indices must be an array");for(let t=0;t<n.length;t++)if(n[t]<0||n[t]>=e.rows)throw new RangeError("row indices are out of range")}function al(e,n){if(!Yc.isAnyArray(n))throw new TypeError("column indices must be an array");for(let t=0;t<n.length;t++)if(n[t]<0||n[t]>=e.columns)throw new RangeError("column indices are out of range")}function ol(e,n,t,i,s){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(cl("startRow",n),cl("endRow",t),cl("startColumn",i),cl("endColumn",s),n>t||i>s||n<0||n>=e.rows||t<0||t>=e.rows||i<0||i>=e.columns||s<0||s>=e.columns)throw new RangeError("Submatrix indices are out of range")}function rl(e,n=0){let t=[];for(let i=0;i<e;i++)t.push(n);return t}function cl(e,n){if("number"!=typeof n)throw new TypeError(`${e} must be a number`)}function ll(e){if(e.isEmpty())throw new Error("Empty matrix has no elements to index")}class pl{static from1DArray(e,n,t){if(e*n!==t.length)throw new RangeError("data length does not match given dimensions");let i=new dl(e,n);for(let s=0;s<e;s++)for(let e=0;e<n;e++)i.set(s,e,t[s*n+e]);return i}static rowVector(e){let n=new dl(1,e.length);for(let t=0;t<e.length;t++)n.set(0,t,e[t]);return n}static columnVector(e){let n=new dl(e.length,1);for(let t=0;t<e.length;t++)n.set(t,0,e[t]);return n}static zeros(e,n){return new dl(e,n)}static ones(e,n){return new dl(e,n).fill(1)}static rand(e,n,t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{random:i=Math.random}=t;let s=new dl(e,n);for(let t=0;t<e;t++)for(let e=0;e<n;e++)s.set(t,e,i());return s}static randInt(e,n,t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:i=0,max:s=1e3,random:a=Math.random}=t;if(!Number.isInteger(i))throw new TypeError("min must be an integer");if(!Number.isInteger(s))throw new TypeError("max must be an integer");if(i>=s)throw new RangeError("min must be smaller than max");let o=s-i,r=new dl(e,n);for(let t=0;t<e;t++)for(let e=0;e<n;e++){let n=i+Math.round(a()*o);r.set(t,e,n)}return r}static eye(e,n,t){void 0===n&&(n=e),void 0===t&&(t=1);let i=Math.min(e,n),s=this.zeros(e,n);for(let e=0;e<i;e++)s.set(e,e,t);return s}static diag(e,n,t){let i=e.length;void 0===n&&(n=i),void 0===t&&(t=n);let s=Math.min(i,n,t),a=this.zeros(n,t);for(let n=0;n<s;n++)a.set(n,n,e[n]);return a}static min(e,n){e=this.checkMatrix(e),n=this.checkMatrix(n);let t=e.rows,i=e.columns,s=new dl(t,i);for(let a=0;a<t;a++)for(let t=0;t<i;t++)s.set(a,t,Math.min(e.get(a,t),n.get(a,t)));return s}static max(e,n){e=this.checkMatrix(e),n=this.checkMatrix(n);let t=e.rows,i=e.columns,s=new this(t,i);for(let a=0;a<t;a++)for(let t=0;t<i;t++)s.set(a,t,Math.max(e.get(a,t),n.get(a,t)));return s}static checkMatrix(e){return pl.isMatrix(e)?e:new dl(e)}static isMatrix(e){return null!=e&&"Matrix"===e.klass}get size(){return this.rows*this.columns}apply(e){if("function"!=typeof e)throw new TypeError("callback must be a function");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)e.call(this,n,t);return this}to1DArray(){let e=[];for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)e.push(this.get(n,t));return e}to2DArray(){let e=[];for(let n=0;n<this.rows;n++){e.push([]);for(let t=0;t<this.columns;t++)e[n].push(this.get(n,t))}return e}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let e=0;e<this.rows;e++)for(let n=0;n<=e;n++)if(this.get(e,n)!==this.get(n,e))return!1;return!0}return!1}isDistance(){if(!this.isSymmetric())return!1;for(let e=0;e<this.rows;e++)if(0!==this.get(e,e))return!1;return!0}isEchelonForm(){let e=0,n=0,t=-1,i=!0,s=!1;for(;e<this.rows&&i;){for(n=0,s=!1;n<this.columns&&!1===s;)0===this.get(e,n)?n++:1===this.get(e,n)&&n>t?(s=!0,t=n):(i=!1,s=!0);e++}return i}isReducedEchelonForm(){let e=0,n=0,t=-1,i=!0,s=!1;for(;e<this.rows&&i;){for(n=0,s=!1;n<this.columns&&!1===s;)0===this.get(e,n)?n++:1===this.get(e,n)&&n>t?(s=!0,t=n):(i=!1,s=!0);for(let t=n+1;t<this.rows;t++)0!==this.get(e,t)&&(i=!1);e++}return i}echelonForm(){let e=this.clone(),n=0,t=0;for(;n<e.rows&&t<e.columns;){let i=n;for(let s=n;s<e.rows;s++)e.get(s,t)>e.get(i,t)&&(i=s);if(0===e.get(i,t))t++;else{e.swapRows(n,i);let s=e.get(n,t);for(let i=t;i<e.columns;i++)e.set(n,i,e.get(n,i)/s);for(let i=n+1;i<e.rows;i++){let s=e.get(i,t)/e.get(n,t);e.set(i,t,0);for(let a=t+1;a<e.columns;a++)e.set(i,a,e.get(i,a)-e.get(n,a)*s)}n++,t++}}return e}reducedEchelonForm(){let e=this.echelonForm(),n=e.columns,t=e.rows,i=t-1;for(;i>=0;)if(0===e.maxRow(i))i--;else{let s=0,a=!1;for(;s<t&&!1===a;)1===e.get(i,s)?a=!0:s++;for(let t=0;t<i;t++){let a=e.get(t,s);for(let o=s;o<n;o++){let n=e.get(t,o)-a*e.get(i,o);e.set(t,o,n)}}i--}return e}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{rows:n=1,columns:t=1}=e;if(!Number.isInteger(n)||n<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(t)||t<=0)throw new TypeError("columns must be a positive integer");let i=new dl(this.rows*n,this.columns*t);for(let e=0;e<n;e++)for(let n=0;n<t;n++)i.setSubMatrix(this,this.rows*e,this.columns*n);return i}fill(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,e);return this}neg(){return this.mulS(-1)}getRow(e){el(this,e);let n=[];for(let t=0;t<this.columns;t++)n.push(this.get(e,t));return n}getRowVector(e){return dl.rowVector(this.getRow(e))}setRow(e,n){el(this,e),n=tl(this,n);for(let t=0;t<this.columns;t++)this.set(e,t,n[t]);return this}swapRows(e,n){el(this,e),el(this,n);for(let t=0;t<this.columns;t++){let i=this.get(e,t);this.set(e,t,this.get(n,t)),this.set(n,t,i)}return this}getColumn(e){nl(this,e);let n=[];for(let t=0;t<this.rows;t++)n.push(this.get(t,e));return n}getColumnVector(e){return dl.columnVector(this.getColumn(e))}setColumn(e,n){nl(this,e),n=il(this,n);for(let t=0;t<this.rows;t++)this.set(t,e,n[t]);return this}swapColumns(e,n){nl(this,e),nl(this,n);for(let t=0;t<this.rows;t++){let i=this.get(t,e);this.set(t,e,this.get(t,n)),this.set(t,n,i)}return this}addRowVector(e){e=tl(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)+e[t]);return this}subRowVector(e){e=tl(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)-e[t]);return this}mulRowVector(e){e=tl(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)*e[t]);return this}divRowVector(e){e=tl(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)/e[t]);return this}addColumnVector(e){e=il(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)+e[n]);return this}subColumnVector(e){e=il(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)-e[n]);return this}mulColumnVector(e){e=il(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)*e[n]);return this}divColumnVector(e){e=il(this,e);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)/e[n]);return this}mulRow(e,n){el(this,e);for(let t=0;t<this.columns;t++)this.set(e,t,this.get(e,t)*n);return this}mulColumn(e,n){nl(this,e);for(let t=0;t<this.rows;t++)this.set(t,e,this.get(t,e)*n);return this}max(e){if(this.isEmpty())return NaN;switch(e){case"row":{const e=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)>e[n]&&(e[n]=this.get(n,t));return e}case"column":{const e=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)>e[t]&&(e[t]=this.get(n,t));return e}case void 0:{let e=this.get(0,0);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)>e&&(e=this.get(n,t));return e}default:throw new Error(`invalid option: ${e}`)}}maxIndex(){ll(this);let e=this.get(0,0),n=[0,0];for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)>e&&(e=this.get(t,i),n[0]=t,n[1]=i);return n}min(e){if(this.isEmpty())return NaN;switch(e){case"row":{const e=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)<e[n]&&(e[n]=this.get(n,t));return e}case"column":{const e=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)<e[t]&&(e[t]=this.get(n,t));return e}case void 0:{let e=this.get(0,0);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.get(n,t)<e&&(e=this.get(n,t));return e}default:throw new Error(`invalid option: ${e}`)}}minIndex(){ll(this);let e=this.get(0,0),n=[0,0];for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)<e&&(e=this.get(t,i),n[0]=t,n[1]=i);return n}maxRow(e){if(el(this,e),this.isEmpty())return NaN;let n=this.get(e,0);for(let t=1;t<this.columns;t++)this.get(e,t)>n&&(n=this.get(e,t));return n}maxRowIndex(e){el(this,e),ll(this);let n=this.get(e,0),t=[e,0];for(let i=1;i<this.columns;i++)this.get(e,i)>n&&(n=this.get(e,i),t[1]=i);return t}minRow(e){if(el(this,e),this.isEmpty())return NaN;let n=this.get(e,0);for(let t=1;t<this.columns;t++)this.get(e,t)<n&&(n=this.get(e,t));return n}minRowIndex(e){el(this,e),ll(this);let n=this.get(e,0),t=[e,0];for(let i=1;i<this.columns;i++)this.get(e,i)<n&&(n=this.get(e,i),t[1]=i);return t}maxColumn(e){if(nl(this,e),this.isEmpty())return NaN;let n=this.get(0,e);for(let t=1;t<this.rows;t++)this.get(t,e)>n&&(n=this.get(t,e));return n}maxColumnIndex(e){nl(this,e),ll(this);let n=this.get(0,e),t=[0,e];for(let i=1;i<this.rows;i++)this.get(i,e)>n&&(n=this.get(i,e),t[0]=i);return t}minColumn(e){if(nl(this,e),this.isEmpty())return NaN;let n=this.get(0,e);for(let t=1;t<this.rows;t++)this.get(t,e)<n&&(n=this.get(t,e));return n}minColumnIndex(e){nl(this,e),ll(this);let n=this.get(0,e),t=[0,e];for(let i=1;i<this.rows;i++)this.get(i,e)<n&&(n=this.get(i,e),t[0]=i);return t}diag(){let e=Math.min(this.rows,this.columns),n=[];for(let t=0;t<e;t++)n.push(this.get(t,t));return n}norm(e="frobenius"){switch(e){case"max":return this.max();case"frobenius":return Math.sqrt(this.dot(this));default:throw new RangeError(`unknown norm type: ${e}`)}}cumulativeSum(){let e=0;for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)e+=this.get(n,t),this.set(n,t,e);return this}dot(e){pl.isMatrix(e)&&(e=e.to1DArray());let n=this.to1DArray();if(n.length!==e.length)throw new RangeError("vectors do not have the same size");let t=0;for(let i=0;i<n.length;i++)t+=n[i]*e[i];return t}mmul(e){e=dl.checkMatrix(e);let n=this.rows,t=this.columns,i=e.columns,s=new dl(n,i),a=new Float64Array(t);for(let o=0;o<i;o++){for(let n=0;n<t;n++)a[n]=e.get(n,o);for(let e=0;e<n;e++){let n=0;for(let i=0;i<t;i++)n+=this.get(e,i)*a[i];s.set(e,o,n)}}return s}strassen2x2(e){e=dl.checkMatrix(e);let n=new dl(2,2);const t=this.get(0,0),i=e.get(0,0),s=this.get(0,1),a=e.get(0,1),o=this.get(1,0),r=e.get(1,0),c=this.get(1,1),l=e.get(1,1),p=(t+c)*(i+l),u=(o+c)*i,d=t*(a-l),g=c*(r-i),m=(t+s)*l,v=p+g-m+(s-c)*(r+l),h=d+m,f=u+g,x=p-u+d+(o-t)*(i+a);return n.set(0,0,v),n.set(0,1,h),n.set(1,0,f),n.set(1,1,x),n}strassen3x3(e){e=dl.checkMatrix(e);let n=new dl(3,3);const t=this.get(0,0),i=this.get(0,1),s=this.get(0,2),a=this.get(1,0),o=this.get(1,1),r=this.get(1,2),c=this.get(2,0),l=this.get(2,1),p=this.get(2,2),u=e.get(0,0),d=e.get(0,1),g=e.get(0,2),m=e.get(1,0),v=e.get(1,1),h=e.get(1,2),f=e.get(2,0),x=e.get(2,1),b=e.get(2,2),y=(t-a)*(-d+v),w=(-t+a+o)*(u-d+v),k=(a+o)*(-u+d),S=t*u,j=(-t+c+l)*(u-g+h),_=(-t+c)*(g-h),C=(c+l)*(-u+g),A=(-s+l+p)*(v+f-x),E=(s-p)*(v-x),R=s*f,L=(l+p)*(-f+x),M=(-s+o+r)*(h+f-b),I=(s-r)*(h-b),D=(o+r)*(-f+b),O=S+R+i*m,T=(t+i+s-a-o-l-p)*v+w+k+S+A+R+L,P=S+j+C+(t+i+s-o-r-c-l)*h+R+M+D,F=y+o*(-u+d+m-v-h-f+b)+w+S+R+M+I,N=y+w+k+S+r*x,q=R+M+I+D+a*g,z=S+j+_+l*(-u+g+m-v-h-f+x)+A+E+R,V=A+E+R+L+c*d,B=S+j+_+C+p*b;return n.set(0,0,O),n.set(0,1,T),n.set(0,2,P),n.set(1,0,F),n.set(1,1,N),n.set(1,2,q),n.set(2,0,z),n.set(2,1,V),n.set(2,2,B),n}mmulStrassen(e){e=dl.checkMatrix(e);let n=this.clone(),t=n.rows,i=n.columns,s=e.rows,a=e.columns;function o(e,n,t){let i=e.rows,s=e.columns;if(i===n&&s===t)return e;{let i=pl.zeros(n,t);return i=i.setSubMatrix(e,0,0),i}}i!==s&&console.warn(`Multiplying ${t} x ${i} and ${s} x ${a} matrix: dimensions do not match.`);let r=Math.max(t,s),c=Math.max(i,a);return n=o(n,r,c),function e(n,t,i,s){if(i<=512||s<=512)return n.mmul(t);i%2==1&&s%2==1?(n=o(n,i+1,s+1),t=o(t,i+1,s+1)):i%2==1?(n=o(n,i+1,s),t=o(t,i+1,s)):s%2==1&&(n=o(n,i,s+1),t=o(t,i,s+1));let a=parseInt(n.rows/2,10),r=parseInt(n.columns/2,10),c=n.subMatrix(0,a-1,0,r-1),l=t.subMatrix(0,a-1,0,r-1),p=n.subMatrix(0,a-1,r,n.columns-1),u=t.subMatrix(0,a-1,r,t.columns-1),d=n.subMatrix(a,n.rows-1,0,r-1),g=t.subMatrix(a,t.rows-1,0,r-1),m=n.subMatrix(a,n.rows-1,r,n.columns-1),v=t.subMatrix(a,t.rows-1,r,t.columns-1),h=e(pl.add(c,m),pl.add(l,v),a,r),f=e(pl.add(d,m),l,a,r),x=e(c,pl.sub(u,v),a,r),b=e(m,pl.sub(g,l),a,r),y=e(pl.add(c,p),v,a,r),w=e(pl.sub(d,c),pl.add(l,u),a,r),k=e(pl.sub(p,m),pl.add(g,v),a,r),S=pl.add(h,b);S.sub(y),S.add(k);let j=pl.add(x,y),_=pl.add(f,b),C=pl.sub(h,f);C.add(x),C.add(w);let A=pl.zeros(2*S.rows,2*S.columns);return A=A.setSubMatrix(S,0,0),A=A.setSubMatrix(j,S.rows,0),A=A.setSubMatrix(_,0,S.columns),A=A.setSubMatrix(C,S.rows,S.columns),A.subMatrix(0,i-1,0,s-1)}(n,e=o(e,r,c),r,c)}scaleRows(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{min:n=0,max:t=1}=e;if(!Number.isFinite(n))throw new TypeError("min must be a number");if(!Number.isFinite(t))throw new TypeError("max must be a number");if(n>=t)throw new RangeError("min must be smaller than max");let i=new dl(this.rows,this.columns);for(let e=0;e<this.rows;e++){const s=this.getRow(e);s.length>0&&Kc(s,{min:n,max:t,output:s}),i.setRow(e,s)}return i}scaleColumns(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{min:n=0,max:t=1}=e;if(!Number.isFinite(n))throw new TypeError("min must be a number");if(!Number.isFinite(t))throw new TypeError("max must be a number");if(n>=t)throw new RangeError("min must be smaller than max");let i=new dl(this.rows,this.columns);for(let e=0;e<this.columns;e++){const s=this.getColumn(e);s.length&&Kc(s,{min:n,max:t,output:s}),i.setColumn(e,s)}return i}flipRows(){const e=Math.ceil(this.columns/2);for(let n=0;n<this.rows;n++)for(let t=0;t<e;t++){let e=this.get(n,t),i=this.get(n,this.columns-1-t);this.set(n,t,i),this.set(n,this.columns-1-t,e)}return this}flipColumns(){const e=Math.ceil(this.rows/2);for(let n=0;n<this.columns;n++)for(let t=0;t<e;t++){let e=this.get(t,n),i=this.get(this.rows-1-t,n);this.set(t,n,i),this.set(this.rows-1-t,n,e)}return this}kroneckerProduct(e){e=dl.checkMatrix(e);let n=this.rows,t=this.columns,i=e.rows,s=e.columns,a=new dl(n*i,t*s);for(let o=0;o<n;o++)for(let n=0;n<t;n++)for(let t=0;t<i;t++)for(let r=0;r<s;r++)a.set(i*o+t,s*n+r,this.get(o,n)*e.get(t,r));return a}kroneckerSum(e){if(e=dl.checkMatrix(e),!this.isSquare()||!e.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let n=this.rows,t=e.rows,i=this.kroneckerProduct(dl.eye(t,t)),s=dl.eye(n,n).kroneckerProduct(e);return i.add(s)}transpose(){let e=new dl(this.columns,this.rows);for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)e.set(t,n,this.get(n,t));return e}sortRows(e=ul){for(let n=0;n<this.rows;n++)this.setRow(n,this.getRow(n).sort(e));return this}sortColumns(e=ul){for(let n=0;n<this.columns;n++)this.setColumn(n,this.getColumn(n).sort(e));return this}subMatrix(e,n,t,i){ol(this,e,n,t,i);let s=new dl(n-e+1,i-t+1);for(let a=e;a<=n;a++)for(let n=t;n<=i;n++)s.set(a-e,n-t,this.get(a,n));return s}subMatrixRow(e,n,t){if(void 0===n&&(n=0),void 0===t&&(t=this.columns-1),n>t||n<0||n>=this.columns||t<0||t>=this.columns)throw new RangeError("Argument out of range");let i=new dl(e.length,t-n+1);for(let s=0;s<e.length;s++)for(let a=n;a<=t;a++){if(e[s]<0||e[s]>=this.rows)throw new RangeError(`Row index out of range: ${e[s]}`);i.set(s,a-n,this.get(e[s],a))}return i}subMatrixColumn(e,n,t){if(void 0===n&&(n=0),void 0===t&&(t=this.rows-1),n>t||n<0||n>=this.rows||t<0||t>=this.rows)throw new RangeError("Argument out of range");let i=new dl(t-n+1,e.length);for(let s=0;s<e.length;s++)for(let a=n;a<=t;a++){if(e[s]<0||e[s]>=this.columns)throw new RangeError(`Column index out of range: ${e[s]}`);i.set(a-n,s,this.get(a,e[s]))}return i}setSubMatrix(e,n,t){if((e=dl.checkMatrix(e)).isEmpty())return this;ol(this,n,n+e.rows-1,t,t+e.columns-1);for(let i=0;i<e.rows;i++)for(let s=0;s<e.columns;s++)this.set(n+i,t+s,e.get(i,s));return this}selection(e,n){sl(this,e),al(this,n);let t=new dl(e.length,n.length);for(let i=0;i<e.length;i++){let s=e[i];for(let e=0;e<n.length;e++){let a=n[e];t.set(i,e,this.get(s,a))}}return t}trace(){let e=Math.min(this.rows,this.columns),n=0;for(let t=0;t<e;t++)n+=this.get(t,t);return n}clone(){return this.constructor.copy(this,new dl(this.rows,this.columns))}static copy(e,n){for(const[t,i,s]of e.entries())n.set(t,i,s);return n}sum(e){switch(e){case"row":return function(e){let n=rl(e.rows);for(let t=0;t<e.rows;++t)for(let i=0;i<e.columns;++i)n[t]+=e.get(t,i);return n}(this);case"column":return function(e){let n=rl(e.columns);for(let t=0;t<e.rows;++t)for(let i=0;i<e.columns;++i)n[i]+=e.get(t,i);return n}(this);case void 0:return function(e){let n=0;for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)n+=e.get(t,i);return n}(this);default:throw new Error(`invalid option: ${e}`)}}product(e){switch(e){case"row":return function(e){let n=rl(e.rows,1);for(let t=0;t<e.rows;++t)for(let i=0;i<e.columns;++i)n[t]*=e.get(t,i);return n}(this);case"column":return function(e){let n=rl(e.columns,1);for(let t=0;t<e.rows;++t)for(let i=0;i<e.columns;++i)n[i]*=e.get(t,i);return n}(this);case void 0:return function(e){let n=1;for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)n*=e.get(t,i);return n}(this);default:throw new Error(`invalid option: ${e}`)}}mean(e){const n=this.sum(e);switch(e){case"row":for(let e=0;e<this.rows;e++)n[e]/=this.columns;return n;case"column":for(let e=0;e<this.columns;e++)n[e]/=this.rows;return n;case void 0:return n/this.size;default:throw new Error(`invalid option: ${e}`)}}variance(e,n={}){if("object"==typeof e&&(n=e,e=void 0),"object"!=typeof n)throw new TypeError("options must be an object");const{unbiased:t=!0,mean:i=this.mean(e)}=n;if("boolean"!=typeof t)throw new TypeError("unbiased must be a boolean");switch(e){case"row":if(!Yc.isAnyArray(i))throw new TypeError("mean must be an array");return function(e,n,t){const i=e.rows,s=e.columns,a=[];for(let o=0;o<i;o++){let i=0,r=0,c=0;for(let n=0;n<s;n++)c=e.get(o,n)-t[o],i+=c,r+=c*c;n?a.push((r-i*i/s)/(s-1)):a.push((r-i*i/s)/s)}return a}(this,t,i);case"column":if(!Yc.isAnyArray(i))throw new TypeError("mean must be an array");return function(e,n,t){const i=e.rows,s=e.columns,a=[];for(let o=0;o<s;o++){let s=0,r=0,c=0;for(let n=0;n<i;n++)c=e.get(n,o)-t[o],s+=c,r+=c*c;n?a.push((r-s*s/i)/(i-1)):a.push((r-s*s/i)/i)}return a}(this,t,i);case void 0:if("number"!=typeof i)throw new TypeError("mean must be a number");return function(e,n,t){const i=e.rows,s=e.columns,a=i*s;let o=0,r=0,c=0;for(let n=0;n<i;n++)for(let i=0;i<s;i++)c=e.get(n,i)-t,o+=c,r+=c*c;return n?(r-o*o/a)/(a-1):(r-o*o/a)/a}(this,t,i);default:throw new Error(`invalid option: ${e}`)}}standardDeviation(e,n){"object"==typeof e&&(n=e,e=void 0);const t=this.variance(e,n);if(void 0===e)return Math.sqrt(t);for(let e=0;e<t.length;e++)t[e]=Math.sqrt(t[e]);return t}center(e,n={}){if("object"==typeof e&&(n=e,e=void 0),"object"!=typeof n)throw new TypeError("options must be an object");const{center:t=this.mean(e)}=n;switch(e){case"row":if(!Yc.isAnyArray(t))throw new TypeError("center must be an array");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)-n[t])}(this,t),this;case"column":if(!Yc.isAnyArray(t))throw new TypeError("center must be an array");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)-n[i])}(this,t),this;case void 0:if("number"!=typeof t)throw new TypeError("center must be a number");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)-n)}(this,t),this;default:throw new Error(`invalid option: ${e}`)}}scale(e,n={}){if("object"==typeof e&&(n=e,e=void 0),"object"!=typeof n)throw new TypeError("options must be an object");let t=n.scale;switch(e){case"row":if(void 0===t)t=function(e){const n=[];for(let t=0;t<e.rows;t++){let i=0;for(let n=0;n<e.columns;n++)i+=e.get(t,n)**2/(e.columns-1);n.push(Math.sqrt(i))}return n}(this);else if(!Yc.isAnyArray(t))throw new TypeError("scale must be an array");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)/n[t])}(this,t),this;case"column":if(void 0===t)t=function(e){const n=[];for(let t=0;t<e.columns;t++){let i=0;for(let n=0;n<e.rows;n++)i+=e.get(n,t)**2/(e.rows-1);n.push(Math.sqrt(i))}return n}(this);else if(!Yc.isAnyArray(t))throw new TypeError("scale must be an array");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)/n[i])}(this,t),this;case void 0:if(void 0===t)t=function(e){const n=e.size-1;let t=0;for(let i=0;i<e.columns;i++)for(let s=0;s<e.rows;s++)t+=e.get(s,i)**2/n;return Math.sqrt(t)}(this);else if("number"!=typeof t)throw new TypeError("scale must be a number");return function(e,n){for(let t=0;t<e.rows;t++)for(let i=0;i<e.columns;i++)e.set(t,i,e.get(t,i)/n)}(this,t),this;default:throw new Error(`invalid option: ${e}`)}}toString(e){return Jc(this,e)}[Symbol.iterator](){return this.entries()}*entries(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)yield[e,n,this.get(e,n)]}*values(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)yield this.get(e,n)}}function ul(e,n){return e-n}pl.prototype.klass="Matrix","undefined"!=typeof Symbol&&(pl.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return Jc(this)}),pl.random=pl.rand,pl.randomInt=pl.randInt,pl.diagonal=pl.diag,pl.prototype.diagonal=pl.prototype.diag,pl.identity=pl.eye,pl.prototype.negate=pl.prototype.neg,pl.prototype.tensorProduct=pl.prototype.kroneckerProduct;let dl=class e extends pl{data;#e(e,n){if(this.data=[],!(Number.isInteger(n)&&n>=0))throw new TypeError("nColumns must be a positive integer");for(let t=0;t<e;t++)this.data.push(new Float64Array(n));this.rows=e,this.columns=n}constructor(n,t){if(super(),e.isMatrix(n))this.#e(n.rows,n.columns),e.copy(n,this);else if(Number.isInteger(n)&&n>=0)this.#e(n,t);else{if(!Yc.isAnyArray(n))throw new TypeError("First argument must be a positive number or an array");{const e=n;if("number"!=typeof(t=(n=e.length)?e[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let i=0;i<n;i++){if(e[i].length!==t)throw new RangeError("Inconsistent array dimensions");if(!e[i].every((e=>"number"==typeof e)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(e[i]))}this.rows=n,this.columns=t}}}set(e,n,t){return this.data[e][n]=t,this}get(e,n){return this.data[e][n]}removeRow(e){return el(this,e),this.data.splice(e,1),this.rows-=1,this}addRow(e,n){return void 0===n&&(n=e,e=this.rows),el(this,e,!0),n=Float64Array.from(tl(this,n)),this.data.splice(e,0,n),this.rows+=1,this}removeColumn(e){nl(this,e);for(let n=0;n<this.rows;n++){const t=new Float64Array(this.columns-1);for(let i=0;i<e;i++)t[i]=this.data[n][i];for(let i=e+1;i<this.columns;i++)t[i-1]=this.data[n][i];this.data[n]=t}return this.columns-=1,this}addColumn(e,n){void 0===n&&(n=e,e=this.columns),nl(this,e,!0),n=il(this,n);for(let t=0;t<this.rows;t++){const i=new Float64Array(this.columns+1);let s=0;for(;s<e;s++)i[s]=this.data[t][s];for(i[s++]=n[t];s<this.columns+1;s++)i[s]=this.data[t][s-1];this.data[t]=i}return this.columns+=1,this}};!function(e,n){e.prototype.add=function(e){return"number"==typeof e?this.addS(e):this.addM(e)},e.prototype.addS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)+e);return this},e.prototype.addM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)+e.get(n,t));return this},e.add=function(e,t){return new n(e).add(t)},e.prototype.sub=function(e){return"number"==typeof e?this.subS(e):this.subM(e)},e.prototype.subS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)-e);return this},e.prototype.subM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)-e.get(n,t));return this},e.sub=function(e,t){return new n(e).sub(t)},e.prototype.subtract=e.prototype.sub,e.prototype.subtractS=e.prototype.subS,e.prototype.subtractM=e.prototype.subM,e.subtract=e.sub,e.prototype.mul=function(e){return"number"==typeof e?this.mulS(e):this.mulM(e)},e.prototype.mulS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)*e);return this},e.prototype.mulM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)*e.get(n,t));return this},e.mul=function(e,t){return new n(e).mul(t)},e.prototype.multiply=e.prototype.mul,e.prototype.multiplyS=e.prototype.mulS,e.prototype.multiplyM=e.prototype.mulM,e.multiply=e.mul,e.prototype.div=function(e){return"number"==typeof e?this.divS(e):this.divM(e)},e.prototype.divS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)/e);return this},e.prototype.divM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)/e.get(n,t));return this},e.div=function(e,t){return new n(e).div(t)},e.prototype.divide=e.prototype.div,e.prototype.divideS=e.prototype.divS,e.prototype.divideM=e.prototype.divM,e.divide=e.div,e.prototype.mod=function(e){return"number"==typeof e?this.modS(e):this.modM(e)},e.prototype.modS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)%e);return this},e.prototype.modM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)%e.get(n,t));return this},e.mod=function(e,t){return new n(e).mod(t)},e.prototype.modulus=e.prototype.mod,e.prototype.modulusS=e.prototype.modS,e.prototype.modulusM=e.prototype.modM,e.modulus=e.mod,e.prototype.and=function(e){return"number"==typeof e?this.andS(e):this.andM(e)},e.prototype.andS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)&e);return this},e.prototype.andM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)&e.get(n,t));return this},e.and=function(e,t){return new n(e).and(t)},e.prototype.or=function(e){return"number"==typeof e?this.orS(e):this.orM(e)},e.prototype.orS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)|e);return this},e.prototype.orM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)|e.get(n,t));return this},e.or=function(e,t){return new n(e).or(t)},e.prototype.xor=function(e){return"number"==typeof e?this.xorS(e):this.xorM(e)},e.prototype.xorS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)^e);return this},e.prototype.xorM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)^e.get(n,t));return this},e.xor=function(e,t){return new n(e).xor(t)},e.prototype.leftShift=function(e){return"number"==typeof e?this.leftShiftS(e):this.leftShiftM(e)},e.prototype.leftShiftS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)<<e);return this},e.prototype.leftShiftM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)<<e.get(n,t));return this},e.leftShift=function(e,t){return new n(e).leftShift(t)},e.prototype.signPropagatingRightShift=function(e){return"number"==typeof e?this.signPropagatingRightShiftS(e):this.signPropagatingRightShiftM(e)},e.prototype.signPropagatingRightShiftS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)>>e);return this},e.prototype.signPropagatingRightShiftM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)>>e.get(n,t));return this},e.signPropagatingRightShift=function(e,t){return new n(e).signPropagatingRightShift(t)},e.prototype.rightShift=function(e){return"number"==typeof e?this.rightShiftS(e):this.rightShiftM(e)},e.prototype.rightShiftS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)>>>e);return this},e.prototype.rightShiftM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)>>>e.get(n,t));return this},e.rightShift=function(e,t){return new n(e).rightShift(t)},e.prototype.zeroFillRightShift=e.prototype.rightShift,e.prototype.zeroFillRightShiftS=e.prototype.rightShiftS,e.prototype.zeroFillRightShiftM=e.prototype.rightShiftM,e.zeroFillRightShift=e.rightShift,e.prototype.not=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,~this.get(e,n));return this},e.not=function(e){return new n(e).not()},e.prototype.abs=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.abs(this.get(e,n)));return this},e.abs=function(e){return new n(e).abs()},e.prototype.acos=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.acos(this.get(e,n)));return this},e.acos=function(e){return new n(e).acos()},e.prototype.acosh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.acosh(this.get(e,n)));return this},e.acosh=function(e){return new n(e).acosh()},e.prototype.asin=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.asin(this.get(e,n)));return this},e.asin=function(e){return new n(e).asin()},e.prototype.asinh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.asinh(this.get(e,n)));return this},e.asinh=function(e){return new n(e).asinh()},e.prototype.atan=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.atan(this.get(e,n)));return this},e.atan=function(e){return new n(e).atan()},e.prototype.atanh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.atanh(this.get(e,n)));return this},e.atanh=function(e){return new n(e).atanh()},e.prototype.cbrt=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cbrt(this.get(e,n)));return this},e.cbrt=function(e){return new n(e).cbrt()},e.prototype.ceil=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.ceil(this.get(e,n)));return this},e.ceil=function(e){return new n(e).ceil()},e.prototype.clz32=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.clz32(this.get(e,n)));return this},e.clz32=function(e){return new n(e).clz32()},e.prototype.cos=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cos(this.get(e,n)));return this},e.cos=function(e){return new n(e).cos()},e.prototype.cosh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cosh(this.get(e,n)));return this},e.cosh=function(e){return new n(e).cosh()},e.prototype.exp=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.exp(this.get(e,n)));return this},e.exp=function(e){return new n(e).exp()},e.prototype.expm1=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.expm1(this.get(e,n)));return this},e.expm1=function(e){return new n(e).expm1()},e.prototype.floor=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.floor(this.get(e,n)));return this},e.floor=function(e){return new n(e).floor()},e.prototype.fround=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.fround(this.get(e,n)));return this},e.fround=function(e){return new n(e).fround()},e.prototype.log=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log(this.get(e,n)));return this},e.log=function(e){return new n(e).log()},e.prototype.log1p=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log1p(this.get(e,n)));return this},e.log1p=function(e){return new n(e).log1p()},e.prototype.log10=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log10(this.get(e,n)));return this},e.log10=function(e){return new n(e).log10()},e.prototype.log2=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log2(this.get(e,n)));return this},e.log2=function(e){return new n(e).log2()},e.prototype.round=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.round(this.get(e,n)));return this},e.round=function(e){return new n(e).round()},e.prototype.sign=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sign(this.get(e,n)));return this},e.sign=function(e){return new n(e).sign()},e.prototype.sin=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sin(this.get(e,n)));return this},e.sin=function(e){return new n(e).sin()},e.prototype.sinh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sinh(this.get(e,n)));return this},e.sinh=function(e){return new n(e).sinh()},e.prototype.sqrt=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sqrt(this.get(e,n)));return this},e.sqrt=function(e){return new n(e).sqrt()},e.prototype.tan=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.tan(this.get(e,n)));return this},e.tan=function(e){return new n(e).tan()},e.prototype.tanh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.tanh(this.get(e,n)));return this},e.tanh=function(e){return new n(e).tanh()},e.prototype.trunc=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.trunc(this.get(e,n)));return this},e.trunc=function(e){return new n(e).trunc()},e.pow=function(e,t){return new n(e).pow(t)},e.prototype.pow=function(e){return"number"==typeof e?this.powS(e):this.powM(e)},e.prototype.powS=function(e){for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)**e);return this},e.prototype.powM=function(e){if(e=n.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let t=0;t<this.columns;t++)this.set(n,t,this.get(n,t)**e.get(n,t));return this}}(pl,dl);class gl extends pl{#n;get size(){return this.#n.size}get rows(){return this.#n.rows}get columns(){return this.#n.columns}get diagonalSize(){return this.rows}static isSymmetricMatrix(e){return dl.isMatrix(e)&&"SymmetricMatrix"===e.klassType}static zeros(e){return new this(e)}static ones(e){return new this(e).fill(1)}constructor(e){if(super(),dl.isMatrix(e)){if(!e.isSymmetric())throw new TypeError("not symmetric data");this.#n=dl.copy(e,new dl(e.rows,e.rows))}else if(Number.isInteger(e)&&e>=0)this.#n=new dl(e,e);else if(this.#n=new dl(e),!this.isSymmetric())throw new TypeError("not symmetric data")}clone(){const e=new gl(this.diagonalSize);for(const[n,t,i]of this.upperRightEntries())e.set(n,t,i);return e}toMatrix(){return new dl(this)}get(e,n){return this.#n.get(e,n)}set(e,n,t){return this.#n.set(e,n,t),this.#n.set(n,e,t),this}removeCross(e){return this.#n.removeRow(e),this.#n.removeColumn(e),this}addCross(e,n){void 0===n&&(n=e,e=this.diagonalSize);const t=n.slice();return t.splice(e,1),this.#n.addRow(e,t),this.#n.addColumn(e,n),this}applyMask(e){if(e.length!==this.diagonalSize)throw new RangeError("Mask size do not match with matrix size");const n=[];for(const[t,i]of e.entries())i||n.push(t);n.reverse();for(const e of n)this.removeCross(e);return this}toCompact(){const{diagonalSize:e}=this,n=new Array(e*(e+1)/2);for(let t=0,i=0,s=0;s<n.length;s++)n[s]=this.get(i,t),++t>=e&&(t=++i);return n}static fromCompact(e){const n=e.length,t=(Math.sqrt(8*n+1)-1)/2;if(!Number.isInteger(t))throw new TypeError(`This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(e)}`);const i=new gl(t);for(let s=0,a=0,o=0;o<n;o++)i.set(s,a,e[o]),++s>=t&&(s=++a);return i}*upperRightEntries(){for(let e=0,n=0;e<this.diagonalSize;void 0){const t=this.get(e,n);yield[e,n,t],++n>=this.diagonalSize&&(n=++e)}}*upperRightValues(){for(let e=0,n=0;e<this.diagonalSize;void 0){const t=this.get(e,n);yield t,++n>=this.diagonalSize&&(n=++e)}}}gl.prototype.klassType="SymmetricMatrix";class ml extends gl{static isDistanceMatrix(e){return gl.isSymmetricMatrix(e)&&"DistanceMatrix"===e.klassSubType}constructor(e){if(super(e),!this.isDistance())throw new TypeError("Provided arguments do no produce a distance matrix")}set(e,n,t){return e===n&&(t=0),super.set(e,n,t)}addCross(e,n){return void 0===n&&(n=e,e=this.diagonalSize),(n=n.slice())[e]=0,super.addCross(e,n)}toSymmetricMatrix(){return new gl(this)}clone(){const e=new ml(this.diagonalSize);for(const[n,t,i]of this.upperRightEntries())n!==t&&e.set(n,t,i);return e}toCompact(){const{diagonalSize:e}=this,n=new Array((e-1)*e/2);for(let t=1,i=0,s=0;s<n.length;s++)n[s]=this.get(i,t),++t>=e&&(t=1+ ++i);return n}static fromCompact(e){const n=e.length;if(0===n)return new this(0);const t=(Math.sqrt(8*n+1)+1)/2;if(!Number.isInteger(t))throw new TypeError(`This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(e)}`);const i=new this(t);for(let s=1,a=0,o=0;o<n;o++)i.set(s,a,e[o]),++s>=t&&(s=1+ ++a);return i}}ml.prototype.klassSubType="DistanceMatrix";class vl extends pl{constructor(e,n,t){super(),this.matrix=e,this.rows=n,this.columns=t}}class hl extends vl{constructor(e,n,t){sl(e,n),al(e,t),super(e,n.length,t.length),this.rowIndices=n,this.columnIndices=t}set(e,n,t){return this.matrix.set(this.rowIndices[e],this.columnIndices[n],t),this}get(e,n){return this.matrix.get(this.rowIndices[e],this.columnIndices[n])}}class fl extends pl{constructor(e,n={}){const{rows:t=1}=n;if(e.length%t!=0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=t,this.columns=e.length/t,this.data=e}set(e,n,t){let i=this._calculateIndex(e,n);return this.data[i]=t,this}get(e,n){let t=this._calculateIndex(e,n);return this.data[t]}_calculateIndex(e,n){return e*this.columns+n}}class xl extends pl{constructor(e){super(),this.data=e,this.rows=e.length,this.columns=e[0].length}set(e,n,t){return this.data[e][n]=t,this}get(e,n){return this.data[e][n]}}class bl{constructor(e){let n,t,i,s,a,o,r,c,l,p=(e=xl.checkMatrix(e)).clone(),u=p.rows,d=p.columns,g=new Float64Array(u),m=1;for(n=0;n<u;n++)g[n]=n;for(c=new Float64Array(u),t=0;t<d;t++){for(n=0;n<u;n++)c[n]=p.get(n,t);for(n=0;n<u;n++){for(l=Math.min(n,t),a=0,i=0;i<l;i++)a+=p.get(n,i)*c[i];c[n]-=a,p.set(n,t,c[n])}for(s=t,n=t+1;n<u;n++)Math.abs(c[n])>Math.abs(c[s])&&(s=n);if(s!==t){for(i=0;i<d;i++)o=p.get(s,i),p.set(s,i,p.get(t,i)),p.set(t,i,o);r=g[s],g[s]=g[t],g[t]=r,m=-m}if(t<u&&0!==p.get(t,t))for(n=t+1;n<u;n++)p.set(n,t,p.get(n,t)/p.get(t,t))}this.LU=p,this.pivotVector=g,this.pivotSign=m}isSingular(){let e=this.LU,n=e.columns;for(let t=0;t<n;t++)if(0===e.get(t,t))return!0;return!1}solve(e){e=dl.checkMatrix(e);let n=this.LU;if(n.rows!==e.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let t,i,s,a=e.columns,o=e.subMatrixRow(this.pivotVector,0,a-1),r=n.columns;for(s=0;s<r;s++)for(t=s+1;t<r;t++)for(i=0;i<a;i++)o.set(t,i,o.get(t,i)-o.get(s,i)*n.get(t,s));for(s=r-1;s>=0;s--){for(i=0;i<a;i++)o.set(s,i,o.get(s,i)/n.get(s,s));for(t=0;t<s;t++)for(i=0;i<a;i++)o.set(t,i,o.get(t,i)-o.get(s,i)*n.get(t,s))}return o}get determinant(){let e=this.LU;if(!e.isSquare())throw new Error("Matrix must be square");let n=this.pivotSign,t=e.columns;for(let i=0;i<t;i++)n*=e.get(i,i);return n}get lowerTriangularMatrix(){let e=this.LU,n=e.rows,t=e.columns,i=new dl(n,t);for(let s=0;s<n;s++)for(let n=0;n<t;n++)s>n?i.set(s,n,e.get(s,n)):s===n?i.set(s,n,1):i.set(s,n,0);return i}get upperTriangularMatrix(){let e=this.LU,n=e.rows,t=e.columns,i=new dl(n,t);for(let s=0;s<n;s++)for(let n=0;n<t;n++)s<=n?i.set(s,n,e.get(s,n)):i.set(s,n,0);return i}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function yl(e,n){let t=0;return Math.abs(e)>Math.abs(n)?(t=n/e,Math.abs(e)*Math.sqrt(1+t*t)):0!==n?(t=e/n,Math.abs(n)*Math.sqrt(1+t*t)):0}class wl{constructor(e){let n,t,i,s,a=(e=xl.checkMatrix(e)).clone(),o=e.rows,r=e.columns,c=new Float64Array(r);for(i=0;i<r;i++){let e=0;for(n=i;n<o;n++)e=yl(e,a.get(n,i));if(0!==e){for(a.get(i,i)<0&&(e=-e),n=i;n<o;n++)a.set(n,i,a.get(n,i)/e);for(a.set(i,i,a.get(i,i)+1),t=i+1;t<r;t++){for(s=0,n=i;n<o;n++)s+=a.get(n,i)*a.get(n,t);for(s=-s/a.get(i,i),n=i;n<o;n++)a.set(n,t,a.get(n,t)+s*a.get(n,i))}}c[i]=-e}this.QR=a,this.Rdiag=c}solve(e){e=dl.checkMatrix(e);let n=this.QR,t=n.rows;if(e.rows!==t)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let i,s,a,o,r=e.columns,c=e.clone(),l=n.columns;for(a=0;a<l;a++)for(s=0;s<r;s++){for(o=0,i=a;i<t;i++)o+=n.get(i,a)*c.get(i,s);for(o=-o/n.get(a,a),i=a;i<t;i++)c.set(i,s,c.get(i,s)+o*n.get(i,a))}for(a=l-1;a>=0;a--){for(s=0;s<r;s++)c.set(a,s,c.get(a,s)/this.Rdiag[a]);for(i=0;i<a;i++)for(s=0;s<r;s++)c.set(i,s,c.get(i,s)-c.get(a,s)*n.get(i,a))}return c.subMatrix(0,l-1,0,r-1)}isFullRank(){let e=this.QR.columns;for(let n=0;n<e;n++)if(0===this.Rdiag[n])return!1;return!0}get upperTriangularMatrix(){let e,n,t=this.QR,i=t.columns,s=new dl(i,i);for(e=0;e<i;e++)for(n=0;n<i;n++)e<n?s.set(e,n,t.get(e,n)):e===n?s.set(e,n,this.Rdiag[e]):s.set(e,n,0);return s}get orthogonalMatrix(){let e,n,t,i,s=this.QR,a=s.rows,o=s.columns,r=new dl(a,o);for(t=o-1;t>=0;t--){for(e=0;e<a;e++)r.set(e,t,0);for(r.set(t,t,1),n=t;n<o;n++)if(0!==s.get(t,t)){for(i=0,e=t;e<a;e++)i+=s.get(e,t)*r.get(e,n);for(i=-i/s.get(t,t),e=t;e<a;e++)r.set(e,n,r.get(e,n)+i*s.get(e,t))}}return r}}class kl{constructor(e,n={}){if((e=xl.checkMatrix(e)).isEmpty())throw new Error("Matrix must be non-empty");let t=e.rows,i=e.columns;const{computeLeftSingularVectors:s=!0,computeRightSingularVectors:a=!0,autoTranspose:o=!1}=n;let r,c=Boolean(s),l=Boolean(a),p=!1;if(t<i)if(o){r=e.transpose(),t=r.rows,i=r.columns,p=!0;let n=c;c=l,l=n}else r=e.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else r=e.clone();let u=Math.min(t,i),d=Math.min(t+1,i),g=new Float64Array(d),m=new dl(t,u),v=new dl(i,i),h=new Float64Array(i),f=new Float64Array(t),x=new Float64Array(d);for(let e=0;e<d;e++)x[e]=e;let b=Math.min(t-1,i),y=Math.max(0,Math.min(i-2,t)),w=Math.max(b,y);for(let e=0;e<w;e++){if(e<b){g[e]=0;for(let n=e;n<t;n++)g[e]=yl(g[e],r.get(n,e));if(0!==g[e]){r.get(e,e)<0&&(g[e]=-g[e]);for(let n=e;n<t;n++)r.set(n,e,r.get(n,e)/g[e]);r.set(e,e,r.get(e,e)+1)}g[e]=-g[e]}for(let n=e+1;n<i;n++){if(e<b&&0!==g[e]){let i=0;for(let s=e;s<t;s++)i+=r.get(s,e)*r.get(s,n);i=-i/r.get(e,e);for(let s=e;s<t;s++)r.set(s,n,r.get(s,n)+i*r.get(s,e))}h[n]=r.get(e,n)}if(c&&e<b)for(let n=e;n<t;n++)m.set(n,e,r.get(n,e));if(e<y){h[e]=0;for(let n=e+1;n<i;n++)h[e]=yl(h[e],h[n]);if(0!==h[e]){h[e+1]<0&&(h[e]=0-h[e]);for(let n=e+1;n<i;n++)h[n]/=h[e];h[e+1]+=1}if(h[e]=-h[e],e+1<t&&0!==h[e]){for(let n=e+1;n<t;n++)f[n]=0;for(let n=e+1;n<t;n++)for(let t=e+1;t<i;t++)f[n]+=h[t]*r.get(n,t);for(let n=e+1;n<i;n++){let i=-h[n]/h[e+1];for(let s=e+1;s<t;s++)r.set(s,n,r.get(s,n)+i*f[s])}}if(l)for(let n=e+1;n<i;n++)v.set(n,e,h[n])}}let k=Math.min(i,t+1);if(b<i&&(g[b]=r.get(b,b)),t<k&&(g[k-1]=0),y+1<k&&(h[y]=r.get(y,k-1)),h[k-1]=0,c){for(let e=b;e<u;e++){for(let n=0;n<t;n++)m.set(n,e,0);m.set(e,e,1)}for(let e=b-1;e>=0;e--)if(0!==g[e]){for(let n=e+1;n<u;n++){let i=0;for(let s=e;s<t;s++)i+=m.get(s,e)*m.get(s,n);i=-i/m.get(e,e);for(let s=e;s<t;s++)m.set(s,n,m.get(s,n)+i*m.get(s,e))}for(let n=e;n<t;n++)m.set(n,e,-m.get(n,e));m.set(e,e,1+m.get(e,e));for(let n=0;n<e-1;n++)m.set(n,e,0)}else{for(let n=0;n<t;n++)m.set(n,e,0);m.set(e,e,1)}}if(l)for(let e=i-1;e>=0;e--){if(e<y&&0!==h[e])for(let n=e+1;n<i;n++){let t=0;for(let s=e+1;s<i;s++)t+=v.get(s,e)*v.get(s,n);t=-t/v.get(e+1,e);for(let s=e+1;s<i;s++)v.set(s,n,v.get(s,n)+t*v.get(s,e))}for(let n=0;n<i;n++)v.set(n,e,0);v.set(e,e,1)}let S=k-1,j=Number.EPSILON;for(;k>0;){let e,n;for(e=k-2;e>=-1&&-1!==e;e--){const n=Number.MIN_VALUE+j*Math.abs(g[e]+Math.abs(g[e+1]));if(Math.abs(h[e])<=n||Number.isNaN(h[e])){h[e]=0;break}}if(e===k-2)n=4;else{let t;for(t=k-1;t>=e&&t!==e;t--){let n=(t!==k?Math.abs(h[t]):0)+(t!==e+1?Math.abs(h[t-1]):0);if(Math.abs(g[t])<=j*n){g[t]=0;break}}t===e?n=3:t===k-1?n=1:(n=2,e=t)}switch(e++,n){case 1:{let n=h[k-2];h[k-2]=0;for(let t=k-2;t>=e;t--){let s=yl(g[t],n),a=g[t]/s,o=n/s;if(g[t]=s,t!==e&&(n=-o*h[t-1],h[t-1]=a*h[t-1]),l)for(let e=0;e<i;e++)s=a*v.get(e,t)+o*v.get(e,k-1),v.set(e,k-1,-o*v.get(e,t)+a*v.get(e,k-1)),v.set(e,t,s)}break}case 2:{let n=h[e-1];h[e-1]=0;for(let i=e;i<k;i++){let s=yl(g[i],n),a=g[i]/s,o=n/s;if(g[i]=s,n=-o*h[i],h[i]=a*h[i],c)for(let n=0;n<t;n++)s=a*m.get(n,i)+o*m.get(n,e-1),m.set(n,e-1,-o*m.get(n,i)+a*m.get(n,e-1)),m.set(n,i,s)}break}case 3:{const n=Math.max(Math.abs(g[k-1]),Math.abs(g[k-2]),Math.abs(h[k-2]),Math.abs(g[e]),Math.abs(h[e])),s=g[k-1]/n,a=g[k-2]/n,o=h[k-2]/n,r=g[e]/n,p=h[e]/n,u=((a+s)*(a-s)+o*o)/2,d=s*o*(s*o);let f=0;0===u&&0===d||(f=u<0?0-Math.sqrt(u*u+d):Math.sqrt(u*u+d),f=d/(u+f));let x=(r+s)*(r-s)+f,b=r*p;for(let n=e;n<k-1;n++){let s=yl(x,b);0===s&&(s=Number.MIN_VALUE);let a=x/s,o=b/s;if(n!==e&&(h[n-1]=s),x=a*g[n]+o*h[n],h[n]=a*h[n]-o*g[n],b=o*g[n+1],g[n+1]=a*g[n+1],l)for(let e=0;e<i;e++)s=a*v.get(e,n)+o*v.get(e,n+1),v.set(e,n+1,-o*v.get(e,n)+a*v.get(e,n+1)),v.set(e,n,s);if(s=yl(x,b),0===s&&(s=Number.MIN_VALUE),a=x/s,o=b/s,g[n]=s,x=a*h[n]+o*g[n+1],g[n+1]=-o*h[n]+a*g[n+1],b=o*h[n+1],h[n+1]=a*h[n+1],c&&n<t-1)for(let e=0;e<t;e++)s=a*m.get(e,n)+o*m.get(e,n+1),m.set(e,n+1,-o*m.get(e,n)+a*m.get(e,n+1)),m.set(e,n,s)}h[k-2]=x;break}case 4:if(g[e]<=0&&(g[e]=g[e]<0?-g[e]:0,l))for(let n=0;n<=S;n++)v.set(n,e,-v.get(n,e));for(;e<S&&!(g[e]>=g[e+1]);){let n=g[e];if(g[e]=g[e+1],g[e+1]=n,l&&e<i-1)for(let t=0;t<i;t++)n=v.get(t,e+1),v.set(t,e+1,v.get(t,e)),v.set(t,e,n);if(c&&e<t-1)for(let i=0;i<t;i++)n=m.get(i,e+1),m.set(i,e+1,m.get(i,e)),m.set(i,e,n);e++}k--}}if(p){let e=v;v=m,m=e}this.m=t,this.n=i,this.s=g,this.U=m,this.V=v}solve(e){let n=e,t=this.threshold,i=this.s.length,s=dl.zeros(i,i);for(let e=0;e<i;e++)Math.abs(this.s[e])<=t?s.set(e,e,0):s.set(e,e,1/this.s[e]);let a=this.U,o=this.rightSingularVectors,r=o.mmul(s),c=o.rows,l=a.rows,p=dl.zeros(c,l);for(let e=0;e<c;e++)for(let n=0;n<l;n++){let t=0;for(let s=0;s<i;s++)t+=r.get(e,s)*a.get(n,s);p.set(e,n,t)}return p.mmul(n)}solveForDiagonal(e){return this.solve(dl.diag(e))}inverse(){let e=this.V,n=this.threshold,t=e.rows,i=e.columns,s=new dl(t,this.s.length);for(let a=0;a<t;a++)for(let t=0;t<i;t++)Math.abs(this.s[t])>n&&s.set(a,t,e.get(a,t)/this.s[t]);let a=this.U,o=a.rows,r=a.columns,c=new dl(t,o);for(let e=0;e<t;e++)for(let n=0;n<o;n++){let t=0;for(let i=0;i<r;i++)t+=s.get(e,i)*a.get(n,i);c.set(e,n,t)}return c}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let e=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,n=0,t=this.s;for(let i=0,s=t.length;i<s;i++)t[i]>e&&n++;return n}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return dl.diag(this.s)}}function Sl(e,n,t=!1){return e=xl.checkMatrix(e),n=xl.checkMatrix(n),t?new kl(e).solve(n):e.isSquare()?new bl(e).solve(n):new wl(e).solve(n)}function jl(e,n){let t=[];for(let i=0;i<e;i++)i!==n&&t.push(i);return t}function _l(e,n,t,i=1e-9,s=1e-9){if(e>s)return new Array(n.rows+1).fill(0);{let e=n.addRow(t,[0]);for(let n=0;n<e.rows;n++)Math.abs(e.get(n,0))<i&&e.set(n,0,0);return e.to1DArray()}}class Cl{constructor(e,n={}){const{assumeSymmetric:t=!1}=n;if(!(e=xl.checkMatrix(e)).isSquare())throw new Error("Matrix is not a square matrix");if(e.isEmpty())throw new Error("Matrix must be non-empty");let i,s,a=e.columns,o=new dl(a,a),r=new Float64Array(a),c=new Float64Array(a),l=e,p=!1;if(p=!!t||e.isSymmetric(),p){for(i=0;i<a;i++)for(s=0;s<a;s++)o.set(i,s,l.get(i,s));!function(e,n,t,i){let s,a,o,r,c,l,p,u;for(c=0;c<e;c++)t[c]=i.get(e-1,c);for(r=e-1;r>0;r--){for(u=0,o=0,l=0;l<r;l++)u+=Math.abs(t[l]);if(0===u)for(n[r]=t[r-1],c=0;c<r;c++)t[c]=i.get(r-1,c),i.set(r,c,0),i.set(c,r,0);else{for(l=0;l<r;l++)t[l]/=u,o+=t[l]*t[l];for(s=t[r-1],a=Math.sqrt(o),s>0&&(a=-a),n[r]=u*a,o-=s*a,t[r-1]=s-a,c=0;c<r;c++)n[c]=0;for(c=0;c<r;c++){for(s=t[c],i.set(c,r,s),a=n[c]+i.get(c,c)*s,l=c+1;l<=r-1;l++)a+=i.get(l,c)*t[l],n[l]+=i.get(l,c)*s;n[c]=a}for(s=0,c=0;c<r;c++)n[c]/=o,s+=n[c]*t[c];for(p=s/(o+o),c=0;c<r;c++)n[c]-=p*t[c];for(c=0;c<r;c++){for(s=t[c],a=n[c],l=c;l<=r-1;l++)i.set(l,c,i.get(l,c)-(s*n[l]+a*t[l]));t[c]=i.get(r-1,c),i.set(r,c,0)}}t[r]=o}for(r=0;r<e-1;r++){if(i.set(e-1,r,i.get(r,r)),i.set(r,r,1),o=t[r+1],0!==o){for(l=0;l<=r;l++)t[l]=i.get(l,r+1)/o;for(c=0;c<=r;c++){for(a=0,l=0;l<=r;l++)a+=i.get(l,r+1)*i.get(l,c);for(l=0;l<=r;l++)i.set(l,c,i.get(l,c)-a*t[l])}}for(l=0;l<=r;l++)i.set(l,r+1,0)}for(c=0;c<e;c++)t[c]=i.get(e-1,c),i.set(e-1,c,0);i.set(e-1,e-1,1),n[0]=0}(a,c,r,o),function(e,n,t,i){let s,a,o,r,c,l,p,u,d,g,m,v,h,f,x,b;for(o=1;o<e;o++)n[o-1]=n[o];n[e-1]=0;let y=0,w=0,k=Number.EPSILON;for(l=0;l<e;l++){for(w=Math.max(w,Math.abs(t[l])+Math.abs(n[l])),p=l;p<e&&!(Math.abs(n[p])<=k*w);)p++;if(p>l)do{for(s=t[l],u=(t[l+1]-s)/(2*n[l]),d=yl(u,1),u<0&&(d=-d),t[l]=n[l]/(u+d),t[l+1]=n[l]*(u+d),g=t[l+1],a=s-t[l],o=l+2;o<e;o++)t[o]-=a;for(y+=a,u=t[p],m=1,v=m,h=m,f=n[l+1],x=0,b=0,o=p-1;o>=l;o--)for(h=v,v=m,b=x,s=m*n[o],a=m*u,d=yl(u,n[o]),n[o+1]=x*d,x=n[o]/d,m=u/d,u=m*t[o]-x*s,t[o+1]=a+x*(m*s+x*t[o]),c=0;c<e;c++)a=i.get(c,o+1),i.set(c,o+1,x*i.get(c,o)+m*a),i.set(c,o,m*i.get(c,o)-x*a);u=-x*b*h*f*n[l]/g,n[l]=x*u,t[l]=m*u}while(Math.abs(n[l])>k*w);t[l]=t[l]+y,n[l]=0}for(o=0;o<e-1;o++){for(c=o,u=t[o],r=o+1;r<e;r++)t[r]<u&&(c=r,u=t[r]);if(c!==o)for(t[c]=t[o],t[o]=u,r=0;r<e;r++)u=i.get(r,o),i.set(r,o,i.get(r,c)),i.set(r,c,u)}}(a,c,r,o)}else{let e=new dl(a,a),n=new Float64Array(a);for(s=0;s<a;s++)for(i=0;i<a;i++)e.set(i,s,l.get(i,s));!function(e,n,t,i){let s,a,o,r,c,l,p,u=0,d=e-1;for(l=u+1;l<=d-1;l++){for(p=0,r=l;r<=d;r++)p+=Math.abs(n.get(r,l-1));if(0!==p){for(o=0,r=d;r>=l;r--)t[r]=n.get(r,l-1)/p,o+=t[r]*t[r];for(a=Math.sqrt(o),t[l]>0&&(a=-a),o-=t[l]*a,t[l]=t[l]-a,c=l;c<e;c++){for(s=0,r=d;r>=l;r--)s+=t[r]*n.get(r,c);for(s/=o,r=l;r<=d;r++)n.set(r,c,n.get(r,c)-s*t[r])}for(r=0;r<=d;r++){for(s=0,c=d;c>=l;c--)s+=t[c]*n.get(r,c);for(s/=o,c=l;c<=d;c++)n.set(r,c,n.get(r,c)-s*t[c])}t[l]=p*t[l],n.set(l,l-1,p*a)}}for(r=0;r<e;r++)for(c=0;c<e;c++)i.set(r,c,r===c?1:0);for(l=d-1;l>=u+1;l--)if(0!==n.get(l,l-1)){for(r=l+1;r<=d;r++)t[r]=n.get(r,l-1);for(c=l;c<=d;c++){for(a=0,r=l;r<=d;r++)a+=t[r]*i.get(r,c);for(a=a/t[l]/n.get(l,l-1),r=l;r<=d;r++)i.set(r,c,i.get(r,c)+a*t[r])}}}(a,e,n,o),function(e,n,t,i,s){let a,o,r,c,l,p,u,d,g,m,v,h,f,x,b,y=e-1,w=0,k=e-1,S=Number.EPSILON,j=0,_=0,C=0,A=0,E=0,R=0,L=0,M=0;for(a=0;a<e;a++)for((a<w||a>k)&&(t[a]=s.get(a,a),n[a]=0),o=Math.max(a-1,0);o<e;o++)_+=Math.abs(s.get(a,o));for(;y>=w;){for(c=y;c>w&&(R=Math.abs(s.get(c-1,c-1))+Math.abs(s.get(c,c)),0===R&&(R=_),!(Math.abs(s.get(c,c-1))<S*R));)c--;if(c===y)s.set(y,y,s.get(y,y)+j),t[y]=s.get(y,y),n[y]=0,y--,M=0;else if(c===y-1){if(u=s.get(y,y-1)*s.get(y-1,y),C=(s.get(y-1,y-1)-s.get(y,y))/2,A=C*C+u,L=Math.sqrt(Math.abs(A)),s.set(y,y,s.get(y,y)+j),s.set(y-1,y-1,s.get(y-1,y-1)+j),d=s.get(y,y),A>=0){for(L=C>=0?C+L:C-L,t[y-1]=d+L,t[y]=t[y-1],0!==L&&(t[y]=d-u/L),n[y-1]=0,n[y]=0,d=s.get(y,y-1),R=Math.abs(d)+Math.abs(L),C=d/R,A=L/R,E=Math.sqrt(C*C+A*A),C/=E,A/=E,o=y-1;o<e;o++)L=s.get(y-1,o),s.set(y-1,o,A*L+C*s.get(y,o)),s.set(y,o,A*s.get(y,o)-C*L);for(a=0;a<=y;a++)L=s.get(a,y-1),s.set(a,y-1,A*L+C*s.get(a,y)),s.set(a,y,A*s.get(a,y)-C*L);for(a=w;a<=k;a++)L=i.get(a,y-1),i.set(a,y-1,A*L+C*i.get(a,y)),i.set(a,y,A*i.get(a,y)-C*L)}else t[y-1]=d+C,t[y]=d+C,n[y-1]=L,n[y]=-L;y-=2,M=0}else{if(d=s.get(y,y),g=0,u=0,c<y&&(g=s.get(y-1,y-1),u=s.get(y,y-1)*s.get(y-1,y)),10===M){for(j+=d,a=w;a<=y;a++)s.set(a,a,s.get(a,a)-d);R=Math.abs(s.get(y,y-1))+Math.abs(s.get(y-1,y-2)),d=g=.75*R,u=-.4375*R*R}if(30===M&&(R=(g-d)/2,R=R*R+u,R>0)){for(R=Math.sqrt(R),g<d&&(R=-R),R=d-u/((g-d)/2+R),a=w;a<=y;a++)s.set(a,a,s.get(a,a)-R);j+=R,d=g=u=.964}for(M+=1,l=y-2;l>=c&&(L=s.get(l,l),E=d-L,R=g-L,C=(E*R-u)/s.get(l+1,l)+s.get(l,l+1),A=s.get(l+1,l+1)-L-E-R,E=s.get(l+2,l+1),R=Math.abs(C)+Math.abs(A)+Math.abs(E),C/=R,A/=R,E/=R,l!==c)&&!(Math.abs(s.get(l,l-1))*(Math.abs(A)+Math.abs(E))<S*(Math.abs(C)*(Math.abs(s.get(l-1,l-1))+Math.abs(L)+Math.abs(s.get(l+1,l+1)))));)l--;for(a=l+2;a<=y;a++)s.set(a,a-2,0),a>l+2&&s.set(a,a-3,0);for(r=l;r<=y-1&&(x=r!==y-1,r!==l&&(C=s.get(r,r-1),A=s.get(r+1,r-1),E=x?s.get(r+2,r-1):0,d=Math.abs(C)+Math.abs(A)+Math.abs(E),0!==d&&(C/=d,A/=d,E/=d)),0!==d);r++)if(R=Math.sqrt(C*C+A*A+E*E),C<0&&(R=-R),0!==R){for(r!==l?s.set(r,r-1,-R*d):c!==l&&s.set(r,r-1,-s.get(r,r-1)),C+=R,d=C/R,g=A/R,L=E/R,A/=C,E/=C,o=r;o<e;o++)C=s.get(r,o)+A*s.get(r+1,o),x&&(C+=E*s.get(r+2,o),s.set(r+2,o,s.get(r+2,o)-C*L)),s.set(r,o,s.get(r,o)-C*d),s.set(r+1,o,s.get(r+1,o)-C*g);for(a=0;a<=Math.min(y,r+3);a++)C=d*s.get(a,r)+g*s.get(a,r+1),x&&(C+=L*s.get(a,r+2),s.set(a,r+2,s.get(a,r+2)-C*E)),s.set(a,r,s.get(a,r)-C),s.set(a,r+1,s.get(a,r+1)-C*A);for(a=w;a<=k;a++)C=d*i.get(a,r)+g*i.get(a,r+1),x&&(C+=L*i.get(a,r+2),i.set(a,r+2,i.get(a,r+2)-C*E)),i.set(a,r,i.get(a,r)-C),i.set(a,r+1,i.get(a,r+1)-C*A)}}}if(0===_)return;for(y=e-1;y>=0;y--)if(C=t[y],A=n[y],0===A)for(c=y,s.set(y,y,1),a=y-1;a>=0;a--){for(u=s.get(a,a)-C,E=0,o=c;o<=y;o++)E+=s.get(a,o)*s.get(o,y);if(n[a]<0)L=u,R=E;else if(c=a,0===n[a]?s.set(a,y,0!==u?-E/u:-E/(S*_)):(d=s.get(a,a+1),g=s.get(a+1,a),A=(t[a]-C)*(t[a]-C)+n[a]*n[a],p=(d*R-L*E)/A,s.set(a,y,p),s.set(a+1,y,Math.abs(d)>Math.abs(L)?(-E-u*p)/d:(-R-g*p)/L)),p=Math.abs(s.get(a,y)),S*p*p>1)for(o=a;o<=y;o++)s.set(o,y,s.get(o,y)/p)}else if(A<0)for(c=y-1,Math.abs(s.get(y,y-1))>Math.abs(s.get(y-1,y))?(s.set(y-1,y-1,A/s.get(y,y-1)),s.set(y-1,y,-(s.get(y,y)-C)/s.get(y,y-1))):(b=Al(0,-s.get(y-1,y),s.get(y-1,y-1)-C,A),s.set(y-1,y-1,b[0]),s.set(y-1,y,b[1])),s.set(y,y-1,0),s.set(y,y,1),a=y-2;a>=0;a--){for(m=0,v=0,o=c;o<=y;o++)m+=s.get(a,o)*s.get(o,y-1),v+=s.get(a,o)*s.get(o,y);if(u=s.get(a,a)-C,n[a]<0)L=u,E=m,R=v;else if(c=a,0===n[a]?(b=Al(-m,-v,u,A),s.set(a,y-1,b[0]),s.set(a,y,b[1])):(d=s.get(a,a+1),g=s.get(a+1,a),h=(t[a]-C)*(t[a]-C)+n[a]*n[a]-A*A,f=2*(t[a]-C)*A,0===h&&0===f&&(h=S*_*(Math.abs(u)+Math.abs(A)+Math.abs(d)+Math.abs(g)+Math.abs(L))),b=Al(d*E-L*m+A*v,d*R-L*v-A*m,h,f),s.set(a,y-1,b[0]),s.set(a,y,b[1]),Math.abs(d)>Math.abs(L)+Math.abs(A)?(s.set(a+1,y-1,(-m-u*s.get(a,y-1)+A*s.get(a,y))/d),s.set(a+1,y,(-v-u*s.get(a,y)-A*s.get(a,y-1))/d)):(b=Al(-E-g*s.get(a,y-1),-R-g*s.get(a,y),L,A),s.set(a+1,y-1,b[0]),s.set(a+1,y,b[1]))),p=Math.max(Math.abs(s.get(a,y-1)),Math.abs(s.get(a,y))),S*p*p>1)for(o=a;o<=y;o++)s.set(o,y-1,s.get(o,y-1)/p),s.set(o,y,s.get(o,y)/p)}for(a=0;a<e;a++)if(a<w||a>k)for(o=a;o<e;o++)i.set(a,o,s.get(a,o));for(o=e-1;o>=w;o--)for(a=w;a<=k;a++){for(L=0,r=w;r<=Math.min(o,k);r++)L+=i.get(a,r)*s.get(r,o);i.set(a,o,L)}}(a,c,r,o,e)}this.n=a,this.e=c,this.d=r,this.V=o}get realEigenvalues(){return Array.from(this.d)}get imaginaryEigenvalues(){return Array.from(this.e)}get eigenvectorMatrix(){return this.V}get diagonalMatrix(){let e,n,t=this.n,i=this.e,s=this.d,a=new dl(t,t);for(e=0;e<t;e++){for(n=0;n<t;n++)a.set(e,n,0);a.set(e,e,s[e]),i[e]>0?a.set(e,e+1,i[e]):i[e]<0&&a.set(e,e-1,i[e])}return a}}function Al(e,n,t,i){let s,a;return Math.abs(t)>Math.abs(i)?(s=i/t,a=t+s*i,[(e+s*n)/a,(n-s*e)/a]):(s=t/i,a=i+s*t,[(s*e+n)/a,(s*n-e)/a])}class El{constructor(e){if(!(e=xl.checkMatrix(e)).isSymmetric())throw new Error("Matrix is not symmetric");let n,t,i,s=e,a=s.rows,o=new dl(a,a),r=!0;for(t=0;t<a;t++){let e=0;for(i=0;i<t;i++){let a=0;for(n=0;n<i;n++)a+=o.get(i,n)*o.get(t,n);a=(s.get(t,i)-a)/o.get(i,i),o.set(t,i,a),e+=a*a}for(e=s.get(t,t)-e,r&=e>0,o.set(t,t,Math.sqrt(Math.max(e,0))),i=t+1;i<a;i++)o.set(t,i,0)}this.L=o,this.positiveDefinite=Boolean(r)}isPositiveDefinite(){return this.positiveDefinite}solve(e){e=xl.checkMatrix(e);let n=this.L,t=n.rows;if(e.rows!==t)throw new Error("Matrix dimensions do not match");if(!1===this.isPositiveDefinite())throw new Error("Matrix is not positive definite");let i,s,a,o=e.columns,r=e.clone();for(a=0;a<t;a++)for(s=0;s<o;s++){for(i=0;i<a;i++)r.set(a,s,r.get(a,s)-r.get(i,s)*n.get(a,i));r.set(a,s,r.get(a,s)/n.get(a,a))}for(a=t-1;a>=0;a--)for(s=0;s<o;s++){for(i=a+1;i<t;i++)r.set(a,s,r.get(a,s)-r.get(i,s)*n.get(i,a));r.set(a,s,r.get(a,s)/n.get(a,a))}return r}get lowerTriangularMatrix(){return this.L}}class Rl{constructor(e,n={}){e=xl.checkMatrix(e);let{Y:t}=n;const{scaleScores:i=!1,maxIterations:s=1e3,terminationCriteria:a=1e-10}=n;let o;if(t){if(t=Yc.isAnyArray(t)&&"number"==typeof t[0]?dl.columnVector(t):xl.checkMatrix(t),t.rows!==e.rows)throw new Error("Y should have the same number of rows as X");o=t.getColumnVector(0)}else o=e.getColumnVector(0);let r,c,l,p,u=1;for(let n=0;n<s&&u>a;n++)l=e.transpose().mmul(o).div(o.transpose().mmul(o).get(0,0)),l=l.div(l.norm()),r=e.mmul(l).div(l.transpose().mmul(l).get(0,0)),n>0&&(u=r.clone().sub(p).pow(2).sum()),p=r.clone(),t?(c=t.transpose().mmul(r).div(r.transpose().mmul(r).get(0,0)),c=c.div(c.norm()),o=t.mmul(c).div(c.transpose().mmul(c).get(0,0))):o=r;if(t){let n=e.transpose().mmul(r).div(r.transpose().mmul(r).get(0,0));n=n.div(n.norm());let i=e.clone().sub(r.clone().mmul(n.transpose())),s=o.transpose().mmul(r).div(r.transpose().mmul(r).get(0,0)),a=t.clone().sub(r.clone().mulS(s.get(0,0)).mmul(c.transpose()));this.t=r,this.p=n.transpose(),this.w=l.transpose(),this.q=c,this.u=o,this.s=r.transpose().mmul(r),this.xResidual=i,this.yResidual=a,this.betas=s}else this.w=l.transpose(),this.s=r.transpose().mmul(r).sqrt(),this.t=i?r.clone().div(this.s.get(0,0)):r,this.xResidual=e.sub(r.mmul(l.transpose()))}}Bc.AbstractMatrix=pl,Bc.CHO=El,Bc.CholeskyDecomposition=El,Bc.DistanceMatrix=ml,Bc.EVD=Cl,Bc.EigenvalueDecomposition=Cl,Bc.LU=bl,Bc.LuDecomposition=bl;var Ll=Bc.Matrix=dl;Bc.MatrixColumnSelectionView=class extends vl{constructor(e,n){al(e,n),super(e,e.rows,n.length),this.columnIndices=n}set(e,n,t){return this.matrix.set(e,this.columnIndices[n],t),this}get(e,n){return this.matrix.get(e,this.columnIndices[n])}},Bc.MatrixColumnView=class extends vl{constructor(e,n){nl(e,n),super(e,e.rows,1),this.column=n}set(e,n,t){return this.matrix.set(e,this.column,t),this}get(e){return this.matrix.get(e,this.column)}},Bc.MatrixFlipColumnView=class extends vl{constructor(e){super(e,e.rows,e.columns)}set(e,n,t){return this.matrix.set(e,this.columns-n-1,t),this}get(e,n){return this.matrix.get(e,this.columns-n-1)}},Bc.MatrixFlipRowView=class extends vl{constructor(e){super(e,e.rows,e.columns)}set(e,n,t){return this.matrix.set(this.rows-e-1,n,t),this}get(e,n){return this.matrix.get(this.rows-e-1,n)}},Bc.MatrixRowSelectionView=class extends vl{constructor(e,n){sl(e,n),super(e,n.length,e.columns),this.rowIndices=n}set(e,n,t){return this.matrix.set(this.rowIndices[e],n,t),this}get(e,n){return this.matrix.get(this.rowIndices[e],n)}},Bc.MatrixRowView=class extends vl{constructor(e,n){el(e,n),super(e,1,e.columns),this.row=n}set(e,n,t){return this.matrix.set(this.row,n,t),this}get(e,n){return this.matrix.get(this.row,n)}},Bc.MatrixSelectionView=hl,Bc.MatrixSubView=class extends vl{constructor(e,n,t,i,s){ol(e,n,t,i,s),super(e,t-n+1,s-i+1),this.startRow=n,this.startColumn=i}set(e,n,t){return this.matrix.set(this.startRow+e,this.startColumn+n,t),this}get(e,n){return this.matrix.get(this.startRow+e,this.startColumn+n)}};var Ml=Bc.MatrixTransposeView=class extends vl{constructor(e){super(e,e.columns,e.rows)}set(e,n,t){return this.matrix.set(n,e,t),this}get(e,n){return this.matrix.get(n,e)}};Bc.NIPALS=Rl,Bc.Nipals=Rl,Bc.QR=wl,Bc.QrDecomposition=wl,Bc.SVD=kl,Bc.SingularValueDecomposition=kl,Bc.SymmetricMatrix=gl,Bc.WrapperMatrix1D=fl,Bc.WrapperMatrix2D=xl,Bc.correlation=function(e,n=e,t={}){e=new dl(e);let i=!1;if("object"!=typeof n||dl.isMatrix(n)||Yc.isAnyArray(n)?n=new dl(n):(t=n,n=e,i=!0),e.rows!==n.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:s=!0,scale:a=!0}=t;s&&(e.center("column"),i||n.center("column")),a&&(e.scale("column"),i||n.scale("column"));const o=e.standardDeviation("column",{unbiased:!0}),r=i?o:n.standardDeviation("column",{unbiased:!0}),c=e.transpose().mmul(n);for(let n=0;n<c.rows;n++)for(let t=0;t<c.columns;t++)c.set(n,t,c.get(n,t)*(1/(o[n]*r[t]))*(1/(e.rows-1)));return c},Bc.covariance=function(e,n=e,t={}){e=new dl(e);let i=!1;if("object"!=typeof n||dl.isMatrix(n)||Yc.isAnyArray(n)?n=new dl(n):(t=n,n=e,i=!0),e.rows!==n.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:s=!0}=t;s&&(e=e.center("column"),i||(n=n.center("column")));const a=e.transpose().mmul(n);for(let n=0;n<a.rows;n++)for(let t=0;t<a.columns;t++)a.set(n,t,a.get(n,t)*(1/(e.rows-1)));return a};var Il=Bc.default=dl;Bc.determinant=function e(n){if((n=dl.checkMatrix(n)).isSquare()){if(0===n.columns)return 1;let t,i,s,a;if(2===n.columns)return t=n.get(0,0),i=n.get(0,1),s=n.get(1,0),a=n.get(1,1),t*a-i*s;if(3===n.columns){let a,o,r;return a=new hl(n,[1,2],[1,2]),o=new hl(n,[1,2],[0,2]),r=new hl(n,[1,2],[0,1]),t=n.get(0,0),i=n.get(0,1),s=n.get(0,2),t*e(a)-i*e(o)+s*e(r)}return new bl(n).determinant}throw Error("determinant can only be calculated for a square matrix")},Bc.inverse=function(e,n=!1){return e=xl.checkMatrix(e),n?new kl(e).inverse():Sl(e,dl.eye(e.rows))},Bc.linearDependencies=function(e,n={}){const{thresholdValue:t=1e-9,thresholdError:i=1e-9}=n;let s=(e=dl.checkMatrix(e)).rows,a=new dl(s,s);for(let n=0;n<s;n++){let o=dl.columnVector(e.getRow(n)),r=e.subMatrixRow(jl(s,n)).transpose(),c=new kl(r).solve(o),l=dl.sub(o,r.mmul(c)).abs().max();a.setRow(n,_l(l,c,n,t,i))}return a},Bc.pseudoInverse=function(e,n=Number.EPSILON){if((e=dl.checkMatrix(e)).isEmpty())return e.transpose();let t=new kl(e,{autoTranspose:!0}),i=t.leftSingularVectors,s=t.rightSingularVectors,a=t.diagonal;for(let e=0;e<a.length;e++)Math.abs(a[e])>n?a[e]=1/a[e]:a[e]=0;return s.mmul(dl.diag(a).mmul(i.transpose()))};var Dl=Bc.solve=Sl;Bc.wrap=function(e,n){if(Yc.isAnyArray(e))return e[0]&&Yc.isAnyArray(e[0])?new xl(e):new fl(e,n);throw new Error("the argument is not an array")};const Ol=Ll,Tl=Ml;Il.Matrix&&Il.Matrix;const Pl=Dl;function Fl(e,n){if(!Hc(e)||!Hc(n))throw new TypeError("x and y must be arrays");if(e.length!==n.length)throw new RangeError("x and y arrays must have the same length")}class Nl{constructor(){if(new.target===Nl)throw new Error("BaseRegression must be subclassed")}predict(e){if("number"==typeof e)return this._predict(e);if(Hc(e)){const n=[];for(const t of e)n.push(this._predict(t));return n}throw new TypeError("x must be a number or array")}_predict(e){throw new Error("_predict must be implemented")}train(){}toString(e){return""}toLaTeX(e){return""}score(e,n){Fl(e,n);const t=e.length,i=new Array(t);for(let n=0;n<t;n++)i[n]=this._predict(e[n]);let s=0,a=0,o=0,r=0,c=0,l=0,p=0;for(let e=0;e<t;e++)s+=i[e],a+=n[e],c+=i[e]*i[e],l+=n[e]*n[e],p+=i[e]*n[e],0!==n[e]&&(o+=(n[e]-i[e])*(n[e]-i[e])/n[e]),r+=(n[e]-i[e])*(n[e]-i[e]);const u=(t*p-s*a)/Math.sqrt((t*c-s*s)*(t*l-a*a));return{r:u,r2:u*u,chi2:o,rmsd:Math.sqrt(r/t)}}}function ql(e,n){return e<0?(e=0-e,"number"==typeof n?`- ${e.toPrecision(n)}`:`- ${e.toString()}`):"number"==typeof n?e.toPrecision(n):e.toString()}class zl extends Nl{constructor(e,n,t,i={}){if(super(),!0===e)this.degree=n.degree,this.powers=n.powers,this.coefficients=n.coefficients;else{Fl(e,n);const s=function(e,n,t,i={}){const s=e.length;let{interceptAtZero:a=!1}=i,o=[];if(Array.isArray(t))o=t,a=!1;else if("number"==typeof t)if(a){o=new Array(t);for(let e=0;e<t;e++)o[e]=e+1}else{o=new Array(t+1);for(let e=0;e<=t;e++)o[e]=e}const r=o.length,c=new Ol(s,r),l=new Ol([n]);for(let n=0;n<r;n++)for(let t=0;t<s;t++)0===o[n]?c.set(t,n,1):c.set(t,n,e[t]**o[n]);const p=new Tl(c),u=p.mmul(c),d=p.mmul(new Tl(l));return{coefficients:Pl(u,d).to1DArray(),degree:Math.max(...o),powers:o}}(e,n,t,i);this.degree=s.degree,this.powers=s.powers,this.coefficients=s.coefficients}}_predict(e){let n=0;for(let t=0;t<this.powers.length;t++)n+=this.coefficients[t]*e**this.powers[t];return n}toJSON(){return{name:"polynomialRegression",degree:this.degree,powers:this.powers,coefficients:this.coefficients}}toString(e){return this._toFormula(e,!1)}toLaTeX(e){return this._toFormula(e,!0)}_toFormula(e,n){let t="^",i="",s=" * ";n&&(t="^{",i="}",s="");let a="",o="";for(let n=0;n<this.coefficients.length;n++)o="",0!==this.coefficients[n]&&(o=0===this.powers[n]?ql(this.coefficients[n],e):1===this.powers[n]?`${ql(this.coefficients[n],e)+s}x`:`${ql(this.coefficients[n],e)+s}x${t}${this.powers[n]}${i}`,this.coefficients[n]>0&&n!==this.coefficients.length-1?o=` + ${o}`:n!==this.coefficients.length-1&&(o=` ${o}`)),a=o+a;return a.startsWith("+")&&(a=a.slice(1)),`f(x) = ${a}`}static load(e){if("polynomialRegression"!==e.name)throw new TypeError("not a polynomial regression model");return new zl(!0,e)}}async function Vl(e){var n=new Worker(new URL("worker.ad01d7cf.js",import.meta.url),{type:"module"});window.myWorker=n;var t='<!doctype html>\n<html lang="en">\n <head>\n <link\n href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"\n rel="stylesheet"\n integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"\n crossorigin="anonymous"\n />\n <meta charset="UTF-8" />\n <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n <script src="https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js"><\/script>\n </head>\n\n <style>\n body {\n margin: 0;\n min-height: 100vh; /* Ensure body takes the full viewport height */\n display: flex; /* Enable Flexbox */\n justify-content: center; /* Center content horizontally */\n align-items: center; /* Center content vertically */\n font-family: sans-serif;\n }\n\n stim {\n position: absolute;\n height: auto;\n cursor: pointer;\n }\n\n #instruction {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #confirmContainer {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #stimulus {\n position: absolute;\n width: 25px;\n height: 25px;\n background-color: #1e90ff;\n border-radius: 50%;\n display: block; /* Initially hidden */\n transform: translate(-50%, -50%);\n }\n\n #headCanvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n #canvas-container {\n position: relative;\n width: 300px;\n height: 300px;\n top: 30px;\n margin: 0 auto;\n }\n </style>\n\n <body>\n \x3c!-- Center Instructions Panel --\x3e\n <div id="calibrationContentArea">\n <div class="row gap-2" id="instruction">\n \n </div>\n </div> \n\n <div id="stimulus"></div>\n <div id="canvas-container" style="display: none">\n <canvas\n id="headCanvas"\n class="frame"\n style="position: relative; display: none"\n ></canvas>\n </div>\n\n \x3c!-- Confirm Button --\x3e\n <div class="row gap-2" id="confirmContainer" style="display: none">\n <div class="card-body" style="text-align: center">\n <h3>Calibration complete!</h3>\n <button type="button" class="btn btn-primary" id="confirmButton">\n Continue\n </button>\n </div>\n </div>\n\n <div class="panel-block" style="display: block" ;>\n <video class="inputVideo" style="display: none"></video>\n </div>\n\n <audio autoplay id="voiceover"></audio>\n\n <script data-dynamic>\n\n // ----------- required -------------------\n function runAfterEveryFrame(output) {\n if (recordEyeMovements) {\n _gridCoordinates.push({\n x: parseFloat(stimulus.style.left),\n y: parseFloat(stimulus.style.top),\n });\n _eyeCoordinates.push({\n x: output.output.cpuData[0] * 100 - 50,\n y: output.output.cpuData[1] * 100,\n });\n _calibrationData.push(calibrationData);\n let time = new Date().getTime();\n _timeData.push(time);\n }\n }\n\n function pageCompleted() {\n continueProcessing = false;\n recordEyeMovements = false;\n const event = new Event("pageComplete");\n document.dispatchEvent(event);\n }\n\n var recordEyeMovements = false;\n var calibrationData = 1;\n var continueProcessing = true;\n\n var deviceConfig = store.session.get("deviceConfig");\n var _gridCoordinates = [];\n var _parentDir = store.session.get("id");\n var _videoURL = "";\n\n var IMAGE_SIZE = 640;\n var upperbound_x = 96;\n var lowerbound_x = 2;\n var upperbound_y = 96;\n var lowerbound_y = 2;\n var stimulus = document.getElementById("stimulus");\n var x = 0;\n var y = 0;\n var counter = 0;\n var incX = 0.15 * 2;\n var incY = 0.02 * 2;\n var timeArray = [];\n var xArray = [];\n var yArray = [];\n var _eyeCoordinates = [];\n var _calibrationData = [];\n var _timeData = [];\n var fixationStimulus_x = [30, 50, 70];\n var fixationStimulus_y = [20, 40, 60];\n\n async function startTest() {\n await runInference();\n openFullscreen();\n updateCountdown(initStimulus);\n }\n\n async function initStimulus() {\n document.getElementById("stimulus").style.display = "block";\n await startRecording();\n recordEyeMovements = true;\n moveStimulus();\n }\n\n async function moveStimulus() {\n counter = counter + 1;\n if (x > upperbound_x) {\n incX = -0.15 * 2;\n } else if (x < lowerbound_x) {\n incX = 0.15 * 2;\n }\n\n if (y > upperbound_y) {\n incY = -0.02 * 2;\n } else if (y < lowerbound_y) {\n incY = 0.02 * 2;\n }\n x = x + incX;\n y = y + incY;\n let time = new Date().getTime();\n\n timeArray.push(time);\n xArray.push(x);\n yArray.push(y);\n\n stimulus.style.left = `${x}%`; // Adjust for half of the cell width\n stimulus.style.top = `${y}%`; // Adjust for half of the cell height\n\n if (y < 75) {\n setTimeout(moveStimulus, 10);\n } else {\n calibrationData = 0;\n\n await stopRecording();\n pageCompleted();\n // setTimeout(fixationStimulus, 10);\n }\n }\n\n async function fixationStimulus() {\n for (let x of fixationStimulus_x) {\n for (let y of fixationStimulus_y) {\n let time = new Date().getTime();\n timeArray.push(time);\n xArray.push(x);\n yArray.push(y);\n\n stimulus.style.left = `${x}%`; // Adjust for half of the cell width\n stimulus.style.top = `${y}%`; // Adjust for half of the cell height\n\n // Wait for 4 seconds before moving to the next position\n await new Promise((resolve) => setTimeout(resolve, 4000));\n }\n }\n\n await stopRecording();\n pageCompleted();\n }\n <\/script>\n </body>\n</html>\n';"short"===e.firekit.task.variantParams.calibrationType&&(t='<!doctype html>\n<html lang="en">\n <head>\n <link\n href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"\n rel="stylesheet"\n integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"\n crossorigin="anonymous"\n />\n <meta charset="UTF-8" />\n <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n <script src="https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js"><\/script>\n </head>\n\n <style>\n body {\n margin: 0;\n min-height: 100vh; /* Ensure body takes the full viewport height */\n display: flex; /* Enable Flexbox */\n justify-content: center; /* Center content horizontally */\n align-items: center; /* Center content vertically */\n font-family: sans-serif;\n }\n\n\n .bubble {\n position: absolute;\n border-radius: 50%;\n animation: spin 2s linear infinite;\n }\n\n\n .piece {\n width: 10px;\n height: 10px;\n background-color: inherit;\n border-radius: 50%;\n position: absolute;\n transform: translate(-50%, -50%);\n opacity: 0;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg); /* Constant speed */\n }\n }\n\n .spin {\n animation: spin 2s linear infinite;\n }\n\n stim {\n position: absolute;\n height: auto;\n cursor: pointer;\n }\n\n #instruction {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #confirmContainer {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #stimulus {\n position: absolute;\n /* animation: pulsate 1s infinite; */\n /* animation: spin 2s linear infinite; */\n width: 25px;\n height: 50px;\n background-color: #1e90ff;\n border-radius: 50%;\n display: block; /* Initially hidden */\n transform: translate(-50%, -50%);\n visibility: hidden;\n }\n\n #headCanvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n #canvas-container {\n position: relative;\n width: 300px;\n height: 300px;\n top: 30px;\n margin: 0 auto;\n }\n\n @keyframes pulsate {\n 0% {\n transform: scale(1) translate(-50%, -50%);\n }\n 50% {\n transform: scale(1.2) translate(-50%, -50%);\n }\n 100% {\n transform: scale(1) translate(-50%, -50%);\n }\n }\n\n @keyframes burst {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 100% {\n transform: translate(var(--dx), var(--dy)) scale(0.5);\n opacity: 0;\n }\n }\n\n </style>\n\n <body>\n \x3c!-- Center Instructions Panel --\x3e\n <div id="calibrationContentArea">\n <div class="row gap-2" id="instruction">\n </div>\n </div> \n\n <div id="stimulus" class="pulsating-disc"></div>\n <div id="canvas-container" style="display: none">\n <canvas\n id="headCanvas"\n class="frame"\n style="position: relative; display: none"\n ></canvas>\n </div>\n\n \x3c!-- Confirm Button --\x3e\n <div class="row gap-2" id="confirmContainer" style="display: none">\n <div class="card-body" style="text-align: center">\n <h3>Calibration complete!</h3>\n <button type="button" class="btn btn-primary" id="confirmButton">\n Continue\n </button>\n </div>\n </div>\n\n <div class="panel-block" style="display: block" ;>\n <video class="inputVideo" style="display: none"></video>\n </div>\n\n <audio autoplay id="voiceover"></audio>\n\n <script data-dynamic>\n\n // ----------- required -------------------\n function runAfterEveryFrame(output) {\n if (recordEyeMovements) {\n _gridCoordinates.push({\n x: parseFloat(stimulus.style.left),\n y: parseFloat(stimulus.style.top),\n });\n _eyeCoordinates.push({\n x: output.output.cpuData[0] * 100 - 50,\n y: output.output.cpuData[1] * 100,\n });\n _calibrationData.push(calibrationData);\n let time = new Date().getTime();\n _timeData.push(time);\n }\n }\n \n\n function pageCompleted() {\n continueProcessing = false;\n recordEyeMovements = false;\n const event = new Event("pageComplete");\n document.dispatchEvent(event);\n }\n\n var current_viewingDistance = 0;\n var recordEyeMovements = false;\n var calibrationData = 1;\n var continueProcessing = true;\n var deviceConfig = store.session.get("deviceConfig");\n var _gridCoordinates = [];\n var _parentDir = store.session.get("id");\n var _videoURL = "";\n\n var IMAGE_SIZE = 640;\n var upperbound_x = 96;\n var lowerbound_x = 2;\n var upperbound_y = 96;\n var lowerbound_y = 2;\n var stimulus = document.getElementById("stimulus");\n var x = 0;\n var y = 0;\n var counter = 0;\n var incX = 0.15 * 2;\n var incY = 0.02 * 2;\n var timeArray = [];\n var xArray = [];\n var yArray = [];\n var _eyeCoordinates = [];\n var _calibrationData = [];\n var _timeData = [];\n var fixationStimulus_x = [30, 50, 70];\n var fixationStimulus_y = [20, 40, 60];\n\n async function startTest() {\n await runInference();\n openFullscreen();\n stimulus.classList.add(\'spin\')\n updateCountdown(initStimulus);\n }\n\n async function initStimulus() {\n document.getElementById("stimulus").style.display = "block";\n await startRecording();\n recordEyeMovements = true;\n stimulus.style.visibility = \'visible\';\n moveStimulus();\n }\n\n\n // Function to create the burst effect\n function createBurstEffect(x,y,size=50) {\n const numPieces = 8; // Number of pieces\n // Play the burst audio\n const burstAudio = new Audio(\'https://eyetrackingdata.blob.core.windows.net/public/Audios/feedbackCorrect.mp3\'); // Replace with your audio file path\n burstAudio.play();\n for (let i = 0; i < numPieces; i++) {\n const piece = document.createElement(\'div\');\n piece.style.position = \'absolute\';\n piece.style.transform = \'translate(-50%, -50%)\';\n piece.classList.add(\'piece\');\n piece.style.backgroundColor = \'#1e90ff\';\n piece.style.left = `${x + size / 2 - 5}px`;\n piece.style.top = `${y + size / 4 - 5}px`;\n\n // Random direction for each piece\n const angle = (i / numPieces) * Math.PI * 2;\n const dx = Math.cos(angle) * size + \'px\';\n const dy = Math.sin(angle) * size + \'px\';\n\n // Set custom properties for animation\n piece.style.setProperty(\'--dx\', dx);\n piece.style.setProperty(\'--dy\', dy);\n piece.style.animation = `burst 0.8s ease-out forwards`;\n document.body.appendChild(piece);\n // Remove the piece after animation ends\n // Hide the element\n stimulus.style.visibility = \'hidden\';\n setTimeout(() => piece.remove(), 800);\n\n }\n // Show the element again after 200ms\n setTimeout(() => {\n stimulus.style.visibility = \'visible\';\n stimulus.classList.add(\'spin\')\n // setTimeout(() => {\n // stimulus.classList.add(\'spin\'); // Add the spin class after 500ms\n // }, 200);\n }, 800); // 200ms delayue)\n\n \n // Remove the bubble after bursting\n }\n\n // Define the locations with repetition to cover 3 seconds at 10ms intervals\n var locations = [\n { x: 25, y: 25 }, // Location 1 (25,25)\n { x: 75, y: 25 }, // Location 2 (25,25)\n { x: 25, y: 65 }, // Location 3 (25,25)\n { x: 75, y: 65 }, // Location 4 (25,25)\n // { x: 50, y: 50 }, // Location 5 (25,50)\n ];\n\n // Create an array that repeats each location enough times to cover 3 seconds at 10ms intervals\n var sequence = [];\n locations.forEach((loc) => {\n for (let i = 0; i < 6; i++) { // 6 iterations for 3 seconds at 500ms intervals\n sequence.push(loc);\n }\n });\n\n async function moveStimulus() {\n if (counter < (sequence.length-1)) {\n let point = document.getElementById("point");\n stimulus.style.left = `${sequence[counter].x}%`; // Adjust for half of the cell width\n stimulus.style.top = `${sequence[counter].y}%`; // Adjust for half of the cell height\n \n counter += 1;\n // Toggle recording of eye movements\n if (counter % 6 <= 1) { // First 500ms\n if (counter>2 & counter % 6 == 0){\n var leftInPixels = (sequence[counter-1].x / 100) * document.body.offsetWidth;;\n var topInPixels = (sequence[counter-1].y / 100) * document.body.offsetHeight;;\n if (stimulus.classList.contains(\'spin\')) {\n stimulus.classList.remove(\'spin\');\n }\n createBurstEffect(leftInPixels-12.5,topInPixels+12.5)\n }\n recordEyeMovements = false;\n } else {\n recordEyeMovements = true;\n }\n // console.log(\'counter\',counter,counter%6,recordEyeMovements,stimulus.style.left ,`${sequence[counter].x}%`)\n\n setTimeout(moveStimulus, 500); // Call this function every 500ms\n } else {\n calibrationData = 0;\n await stopRecording();\n continueProcessing = false;\n recordEyeMovements = false;\n var leftInPixels = (sequence[counter-1].x / 100) * document.body.offsetWidth;;\n var topInPixels = (sequence[counter-1].y / 100) * document.body.offsetHeight;;\n createBurstEffect(leftInPixels-12.5,topInPixels+12.5)\n setTimeout(() => pageCompleted(), 500); // Proper callback structure\n }\n }\n // async function moveStimulus() {\n // counter = counter + 1;\n // if (x > upperbound_x) {\n // incX = -0.15 * 2;\n // } else if (x < lowerbound_x) {\n // incX = 0.15 * 2;\n // }\n\n // if (y > upperbound_y) {\n // incY = -0.02 * 2;\n // } else if (y < lowerbound_y) {\n // incY = 0.02 * 2;\n // }\n // x = x + incX;\n // y = y + incY;\n // let time = new Date().getTime();\n\n // timeArray.push(time);\n // xArray.push(x);\n // yArray.push(y);\n\n // stimulus.style.left = `${x}%`; // Adjust for half of the cell width\n // stimulus.style.top = `${y}%`; // Adjust for half of the cell height\n\n // if (y < 75) {\n // setTimeout(moveStimulus, 10);\n // } else {\n // calibrationData = 0;\n\n // await stopRecording();\n // pageCompleted();\n // // setTimeout(fixationStimulus, 10);\n // }\n // }\n\n async function fixationStimulus() {\n for (let x of fixationStimulus_x) {\n for (let y of fixationStimulus_y) {\n let time = new Date().getTime();\n timeArray.push(time);\n xArray.push(x);\n yArray.push(y);\n\n stimulus.style.left = `${x}%`; // Adjust for half of the cell width\n stimulus.style.top = `${y}%`; // Adjust for half of the cell height\n\n // Wait for 4 seconds before moving to the next position\n await new Promise((resolve) => setTimeout(resolve, 4000));\n }\n }\n\n await stopRecording();\n pageCompleted();\n }\n <\/script>\n </body>\n</html>\n');const i=document.createElement("div");i.innerHTML=dc;const s=document.createElement("div");s.style.position="fixed",s.style.top="0",s.style.left="0",s.style.width="100%",s.style.height="100%",qr(pc),qr(Vc),s.innerHTML=t;const a=Hr;document.body.appendChild(s),await Fr(s),await Fr(i),Nr(i),Nr(s),async function(e){initEyeTracking(!1);try{const e=o.session.get("deviceConfig"),n=e.bEyeTracking,t=e.storeVideo;await giveAccess(n,t)}catch(e){console.error("Camera access failed:",e)}startTest()}(),Ur(be.store.data[be.language].translation),await new Promise((n=>{document.addEventListener("pageComplete",(async()=>{s.innerHTML=a,Br(s);var t=_eyeCoordinates.filter(((e,n)=>1==_calibrationData[n])),i=_gridCoordinates.filter(((e,n)=>1==_calibrationData[n]));let r=null,c=!1;if(t.length>=2&&i.length>=2)try{r=function(e,n){const t=new zl(e.map((e=>e.x)),n.map((e=>e.x)),1),i=new zl(e.map((e=>e.y)),n.map((e=>e.y)),1);return{x_regressor:t.coefficients,y_regressor:i.coefficients}}(t,i),function(e){o.session.set("x_coef",e.x_regressor[1]),o.session.set("x_intercept",e.x_regressor[0]),o.session.set("y_coef",e.y_regressor[1]),o.session.set("y_intercept",e.y_regressor[0])}(r),c=!0}catch(e){console.warn("Calibration failed due to insufficient or invalid data:",e),console.warn("Proceeding without eye tracking calibration.")}else console.warn("Insufficient calibration data collected. Face detection may have failed."),console.warn("Proceeding without eye tracking calibration.");await async function(e,n,t){console.log("Test Finished");const i=(new Date).getTime();await stopRecording();var s="RAN_eyeCalibration_"+t.toString()+"_"+i+".webm";try{let i=null;Dr(window.deviceConfig.storeVideo)&&(i=await saveRecordings({filename:s,deviceConfig:window.deviceConfig,config:e,metadata:{}}));const a={assessment_type:"MEP",assessment_stage:"eyeCalibration",recordedVideo:s,distance:t,regressors:n,stimulusPosition:_gridCoordinates,eyeCoordinates:_eyeCoordinates,calibrationData:_calibrationData,uploadURL:i,_timeData:_timeData,parentDir:o.session.get("id"),deviceConfig:o.session.get("deviceConfig"),participantConfig:o.session.get("participantConfig"),correct:1};e.firekit.writeTrial(a)}catch(e){console.error("Error in saveRecordings:",e)}}(e,r,50),zr(pc),zr(Vc),s.remove(),Vr(),n()}),{once:!0})}))}var Bl=5,Ul=10,Hl=24.75,Wl=13;function $l(e){let n,t,i,s;if(e.screenWidth>0&&e.screenHeight>0){const i=Wl/Bl;n=Hl/Ul*(e.screenWidthPX/e.screenWidth),t=i*(e.screenHeightPX/e.screenHeight)}else{const i=.8*e.screenWidthPX,s=.8*e.screenHeightPX;n=i/Ul,t=s/Bl}i=n*Ul,s=t*Bl;const a=(e.screenWidthPX-i)/2,o=(e.screenHeightPX-s)/2,r=[];for(let e=0;e<Bl;e++)for(let i=0;i<Ul;i++){const s=a+i*n+n/2,c=o+e*t+t/2;r.push({x:s,y:c,width:n,height:t})}return r}function Yl(e){const n=[...new Set(e.stimulus)],t=[];for(;t.length<9;){const e=t[t.length-1],i=n.filter((n=>n!==e));t.push(i[Math.floor(Math.random()*i.length)])}return t}function Kl(e,n,t){const i=document.getElementById("grid-container");"Practice"===type?(Ul=3,Bl=3,Hl=2.475*3,Wl=2.6*3,e=$l(deviceConfig),n=Yl(t)):(Ul=10,Bl=5,Hl=24.75,Wl=13,e=$l(deviceConfig));const s=Bl*Ul;for(let a=0;a<s;a++){const s=document.createElement("div"),{x:o,y:r,width:c,height:l}=e[a];s.style.width=`${c}px`,s.style.height=`${l}px`,s.style.left=`${o}px`,s.style.top=`${r}px`,s.style.position="absolute",s.style.transform="translate(-50%, -50%)",s.style.display="flex",s.style.justifyContent="center",s.style.alignItems="center";const p=n[a],u=document.createElement("img");u.src=`${t.dir}/${p}`,u.style.width="50%",u.style.height="auto",s.appendChild(u),i.appendChild(s);const d=u.getBoundingClientRect();d.x=d.x+d.width/2,d.y=d.y+d.height/2;const g={x:parseFloat(s.style.left),y:parseFloat(s.style.top),width:parseFloat(s.style.width),height:parseFloat(s.style.height),stim_x:d.x,stim_y:d.y,stim_width:d.width,stim_height:d.height};_gridCoordinates.push(g),_shuffledImages.push(p.slice(0,-4))}}async function Xl(){return new Promise((e=>{const n=()=>{inputVideo&&inputVideo.videoWidth>0&&inputVideo.videoHeight>0?e():setTimeout(n,100)};n()}))}var Gl=4;function Jl(e){0==--Gl?(document.getElementById("instruction").style.display="none",document.getElementById("grid-container").style.visibility="visible",Gl=4,trialRunnning=!0):(document.getElementById("instruction").innerHTML="<h1>"+Gl+"</h1>",setTimeout((function(){Jl()}),1e3))}var Ql=Object.freeze({__proto__:null,get countdown(){return Gl},generateGridCoordinates:$l,generatePracticeStimuli:Yl,generateStimulusOrder:function(e){const n=Bl*Ul,t=e.stimulus.slice(),i=Math.ceil(n/t.length),s=[];for(let e=0;e<i;e++){const e=t.sort((()=>Math.random()-.5));s.push(...e)}for(let e=1;e<s.length;e++)if(s[e]===s[e-1]){const n=s[e];s[e]=s[e+1],s[e+1]=n}return s.slice(0,n)},get gridHeightCM(){return Wl},get gridWidthCM(){return Hl},get numCols(){return Ul},get numRows(){return Bl},populateGrid:Kl,startTest:async function(e){if(e)try{await Xl(),continueProcessing=!0,runInference()}catch(e){console.warn("Eye tracking inference failed, continuing without eye tracking:",e),continueProcessing=!1}openFullscreen(),startRecording(),Kl(gridCoordinates,shuffledImages,testConfig),Jl(),setTimeout((function(){document.querySelector(".finish-button").disabled=!1}),5e3)},updateCountdown:Jl,waitForVideoReady:Xl});async function Zl(e,n,t={}){var i=new Worker(new URL("worker.ad01d7cf.js",import.meta.url),{type:"module"});window.myWorker=i;const s=document.createElement("div");s.innerHTML=dc;const a=document.createElement("div");a.style.position="fixed",a.style.top="0",a.style.left="0",a.style.width="100%",a.style.height="100%",window.deviceConfig=o.session.get("deviceConfig");const{bEyeTracking:r,storeVideo:c}=window.deviceConfig;qr(Ql),qr(pc),qr(Vc),a.innerHTML='<!DOCTYPE html>\n<html lang="en">\n<head>\n <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>Image and Audio Recording</title>\n\n \x3c!-- <script data-dynamic src="./RAN.js"><\/script> --\x3e\n</head>\n\n<style> \n body {\n margin: 0;\n min-height: 100vh; /* Ensure body takes the full viewport height */\n display: flex; /* Enable Flexbox */\n justify-content: center; /* Center content horizontally */\n align-items: center; /* Center content vertically */\n font-family: sans-serif;\n }\n\n stim {\n position: absolute;\n height: auto;\n cursor: pointer;\n }\n\n #instruction {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #confirmContainer {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n #headCanvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n #canvas-container {\n position: relative;\n width: 300px;\n height: 300px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n }\n\n /* TODO: Using RAN Intro Container temporarily */\n #ran-intro-container {\n position: fixed;\n top: 0; left: 0;\n width: 100vw; height: 100vh;\n }\n</style>\n\n\n<body> \n <div id="grid-container" style="position: absolute; width: 100%; height: 100%; visibility: hidden;"></div>\n <div id="canvas-container" style="visibility: hidden">\n <h5 id="message"></h5>\n <canvas id="headCanvas" class="frame" style="position: relative"></canvas>\n </div>\n \x3c!-- Countdown display (used by updateCountdown in RAN.js after intro hides) --\x3e\n <div id="instruction"></div>\n\n \x3c!-- Intro Panel --\x3e\n <div id="ran-intro-container" class="container-fluid h-100"> \n <div class="static-container">\n <div class="header-container--ran"> \n <h2 class="header"></h2>\n <h3 class="subtitle"></h3>\n </div>\n <img class="lion-char" src="https://storage.googleapis.com/roav-ran/shared/assets/pointingLeftLionAge12.webp" alt="Lion character">\n <p class="next-text"></p>\n </div>\n </div>\n\n \x3c!-- Continue Button (shown during intro, hidden once test starts) --\x3e\n <button class="next-button" disabled aria-label="Start"></button>\n\n\n <div class="panel-block" style="display: block" ;>\n <video class="inputVideo" style="display: none"></video>\n </div>\n \n \x3c!-- Audio Playing --\x3e \n <audio autoplay id="voiceover"> </audio>\n \n \x3c!--TODO: Check if we need this--\x3e\n \x3c!-- Confirm Button --\x3e\n \x3c!--<div class="row gap-2" id="confirmContainer" style="display: none;">\n <div class="card-body" style="text-align: center;">\n <h3> <span id="capName"></span> Test Complete </h3>\n <button type="button" class="btn btn-primary" id="confirmButton">Back to Menu</button>\n </div>\n </div>--\x3e\n\n \x3c!-- Finish Button --\x3e\n <button class="finish-button" disabled aria-label="Finish"></button>\n\n<script data-dynamic>\n\nvar deviceConfig = store.session.get(\'deviceConfig\')\n// var deviceConfig = {screenWidth: 29, screenHeight: 16.2, screenWidthPX: 960, screenHeightPX: 540, webcamHeight: 0.5}\nvar testConfig = store.session.get(\'testConfig\')\n// var testConfig = {dir: "https://eyetrackingdata.blob.core.windows.net/public/assets/Letter",\n// stimulus : ["C.svg", "D.svg", "H.svg", "K.svg", "N.svg", "O.svg", "R.svg", "S.svg", "V.svg", "Z.svg"],\n// sizecm: 2}\n\nif (testConfig && testConfig[\'testname\'] === \'Letters\') {\n var subtestText = [\'Letter\', \'letter\']\n} else {\n var subtestText = [\'Number\', \'number\']\n}\n\nvar nextButton = document.querySelector(\'.next-button\');\nvoiceover.addEventListener(\'ended\', function() {\n nextButton.disabled = false;\n});\n// Fallback: enable button after 5 seconds if audio fails or has no src\nvar _audioFallbackTimer = setTimeout(function() {\n nextButton.disabled = false;\n}, 7000);\nnextButton.addEventListener(\'click\', function() {\n pre_startTest();\n});\n\nvar desktop = document.documentElement;\nvar canvasContainer = document.getElementById("canvas-container");\nvar camera_stream;\nvar mediaRecorder;\nvar mediaChunks = [];\nvar current_viewingDistance;\n\nvar clickedTests = store.session.get(\'clickedTests\') || [];\nif (type!==\'Practice\') {\nclickedTests.push(testConfig[\'testname\'])\n}\n\nstore.session.set(\'clickedTests\',clickedTests)\n\nvar gridCoordinates = generateGridCoordinates(deviceConfig)\nvar shuffledImages = testConfig.stimulus; \n// var shuffledImages = generateStimulusOrder(testConfig)\n \nvar _gridCoordinates = []\n// gridCoordinates\nvar _shuffledImages = []\n// shuffledImages.map(filename => filename.split(\'.\')[0]);\nvar _parentDir = store.session.get("id")\nvar _videoURL = \'\'\nvar _deviceConfig = deviceConfig\nvar _testConfig = testConfig\n\nvar x_coef =\nstore.session.get("x_coef") !== null\n ? store.session.get("x_coef")\n : -3.49; // Default value can be 0 or any other default you choose\nvar x_intercept =\nstore.session.get("x_intercept") !== null\n ? store.session.get("x_intercept")\n : 45; // Default value can be 0\nvar y_coef =\nstore.session.get("y_coef") !== null ? store.session.get("y_coef") : 0; // Default value can be 0\nvar y_intercept =\nstore.session.get("y_intercept") !== null\n ? store.session.get("y_intercept")\n : 0; // Default value can be 0\n\n\nvar xpreds = []\nvar ypreds = []\nvar eyetTimer = []\nvar trialRunnning = false\nvar continueProcessing = false\nfunction pre_startTest(){\n clearTimeout(_audioFallbackTimer);\n voiceover.pause();\n voiceover.currentTime = 0;\n document.querySelector(\'.container-fluid.h-100\').style.display = \'none\';\n document.querySelector(\'.next-button\').style.display = \'none\';\n document.querySelector(\'.finish-button\').style.display = \'flex\';\n startTest(deviceConfig.bEyeTracking);\n }\n\nfunction runAfterEveryFrame(output) {\n var xpred =\n ((x_coef * (output.output.cpuData[0] * 100 - 50) + x_intercept) *\n screen.width) /\n 100;\n var ypred = ((y_coef*((output.output.cpuData[1]*100)) + y_intercept) * screen.height) /100;\n if (trialRunnning) {\n xpreds.push(xpred);\n ypreds.push(ypred);\n eyetTimer.push(Date.now()); // corrected from \'eyetTimer\' and \'data.now()\' to \'eyeTimer\' and \'Date.now()\'\n }\n }\n\n\n\n\n<\/script>\n\n</body>\n</html>';const l=Hr;document.body.appendChild(a),window.type=e,await Fr(a),await Fr(s),Nr(s),Nr(a),async function(e,n,t,i){initEyeTracking(!1),await giveAccess(n,t),document.querySelector(".header").innerHTML=(i.header.text??"").replace(/\n/g,"<br>"),document.querySelector(".subtitle").innerHTML=(i.subtitle.text??"").replace(/\n/g,"<br>"),document.querySelector(".next-text").textContent=i.footer.text??"";var s=document.getElementById("voiceover"),a=[i.header?.audioSrc,i.subtitle?.audioSrc,i.footer?.audioSrc].filter(Boolean);function o(e){if(0!==e.length){var[n,...t]=e;s.src=n,t.length>0&&s.addEventListener("ended",(function(){o(t)}),{once:!0}),s.play().catch((function(){}))}}a.length>0?o(a):s.src=""}(0,r,c,t);const p=new AbortController;await new Promise((e=>{document.body.addEventListener("click",(async function(t){t.target.classList.contains("finish-button")&&(window.continueProcessing=!1,a.innerHTML=l,Br(a),await ep(n,{stimulus:_shuffledImages}),a.remove(),p.abort(),function(e){zr(e);document.querySelectorAll("button").forEach((e=>{if(e.parentNode){const n=e.cloneNode(!0);e.parentNode.replaceChild(n,e)}})),Vr();for(;document.body.firstChild;)document.body.removeChild(document.body.firstChild)}(Ql),e())}),{signal:p.signal})}))}async function ep(e,n){console.log("Test Finished"),await stopRecording();let t=null;const i=(new Date).getTime(),s="RAN_"+testConfig.testname+"_"+i+".webm";try{t=await saveRecordings({filename:s,deviceConfig:window.deviceConfig,config:e,metadata:n})}catch(e){console.error("Error in saveRecordings:",e)}const a={assessment_type:testConfig.testname,assessment_stage:type,stimulusPosition:_gridCoordinates,stimulus:n.stimulus,recordedVideo:s,parentDir:_parentDir,uploadURL:t,xpreds:xpreds,ypreds:ypreds,eyetTimer:eyetTimer,correct:1,deviceConfig:_deviceConfig,testConfig:_testConfig};await e.firekit.writeTrial(a)}async function np(e){const n=Hr,t=document.createElement("div");t.innerHTML=n,document.body.appendChild(t);const i=["https://eyetrackingdata.blob.core.windows.net/public/Images/squareAddition_white.png","./views/eyetracking_google.onnx",`https://eyetrackingdata.blob.core.windows.net/public/Audios/${be.language}/calibration.mp3`,"https://eyetrackingdata.blob.core.windows.net/public/Images/eyecalibration.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/eyecalibration_short.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/parent-help-icon.png","https://eyetrackingdata.blob.core.windows.net/public/Images/webcamCentered.jpg","https://eyetrackingdata.blob.core.windows.net/public/Images/webcamPosition.PNG","https://eyetrackingdata.blob.core.windows.net/public/Images/badlighting.jpg","https://eyetrackingdata.blob.core.windows.net/public/Images/glassesReflection.jpg","https://eyetrackingdata.blob.core.windows.net/public/Images/goodPosition.jpg",`https://eyetrackingdata.blob.core.windows.net/public/Audios/${be.language}/deviceConfig.mp3`,"https://eyetrackingdata.blob.core.windows.net/public/Audios/deviceConfig.mp3","https://eyetrackingdata.blob.core.windows.net/public/Images/squareAddition.png",`https://eyetrackingdata.blob.core.windows.net/public/Audios/${be.language}/headCalibration.mp3`,"https://eyetrackingdata.blob.core.windows.net/public/Audios/letterStoryCalibration.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberStoryCalibration.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterCalibration.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterPractice.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterTest.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberCalibration.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberPractice.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberTest.mp3","https://eyetrackingdata.blob.core.windows.net/public/Images/letter-practice-reading-order.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/letter-test-reading-order.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/number-practice-reading-order.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/number-test-reading-order.gif","https://eyetrackingdata.blob.core.windows.net/public/Images/squareAddition_white.png","https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js","https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css","https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/face_mesh_solution_simd_wasm_bin.wasm","https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/face_mesh_solution_packed_assets.data","https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/face_mesh_solution_simd_wasm_bin.js"],s=["https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-default.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-panicked.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-unsure.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-confused.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-smile.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-happy.png","https://eyetrackingdata.blob.core.windows.net/public/Images/astronaut-girl-bye.png","https://eyetrackingdata.blob.core.windows.net/public/Images/space-ship-control.png","https://eyetrackingdata.blob.core.windows.net/public/Images/purple-planet.png","https://eyetrackingdata.blob.core.windows.net/public/Images/orange-planet.png","https://eyetrackingdata.blob.core.windows.net/public/Audios/intro.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/intro2.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/intro3.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterStoryPractice.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberStoryPractice.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/letterStoryTest.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/numberStoryTest.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/end.mp3","https://eyetrackingdata.blob.core.windows.net/public/Audios/end2.mp3"],a=[...new Set(e.story?[...i,...s]:i)];await function(e,n){return new Promise(((t,i)=>{let s=0;e.forEach((a=>{if("fetch"==="fetch")fetch(a).then((e=>{e.ok?o():r()})).catch(r);else console.error("Unknown asset type:",a),r();function o(){s++,s==e.length&&(n.remove(),t())}function r(e){console.error("Error loading asset:",a,e),i(e)}}))}))}(a,t),console.log("All assets preloaded.")}function tp(){window.instructionAbortController&&(window.instructionAbortController.abort(),delete window.instructionAbortController),Vr()}async function ip(e,n){Array.isArray(e)||(e=[e]);const t=document.createElement("div");t.innerHTML='<!DOCTYPE html>\n<html lang="en">\n<head>\n <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n</head>\n\n<body>\n <div class="container-fluid h-100">\n <div class="static-container">\n <h2 class="header--center"></h2>\n <img class="lion-char" src="https://storage.googleapis.com/roav-ran/shared/assets/pointingLeftLionAge12.webp" alt="Lion character">\n <p class="next-text"></p>\n </div>\n <button class="next-button" id="info-next-button" aria-label="Continue"></button>\n </div>\n <audio id="voiceover"></audio>\n</body>\n\n<script data-dynamic>\n var slideIndex = 0;\n var slides = window.infoSlides || [];\n var infoSignal = window.infoSlideAbortController\n ? window.infoSlideAbortController.signal\n : undefined;\n var voiceover = document.getElementById(\'voiceover\');\n\n document.querySelector(\'.next-button\').addEventListener(\'click\', function () {\n voiceover.pause();\n showSlide(++slideIndex);\n }, { signal: infoSignal });\n\n showSlide(slideIndex);\n\n function showSlide(index) {\n if (index >= slides.length) {\n document.dispatchEvent(new Event(\'pageComplete\'));\n return;\n }\n\n var slide = slides[index];\n document.querySelector(\'.header--center\').textContent = slide.header.text || \'\';\n document.querySelector(\'.next-text\').textContent = slide.footer.text || \'\';\n\n var btn = document.querySelector(\'.next-button\');\n if (slide.showButton === false) {\n btn.classList.add(\'hidden\');\n } else {\n btn.classList.remove(\'hidden\');\n }\n\n var headerSrc = slide.header && slide.header.audioSrc;\n var footerSrc = slide.footer && slide.footer.audioSrc;\n\n if (headerSrc || footerSrc) {\n btn.disabled = true;\n }\n\n if (headerSrc) {\n voiceover.src = headerSrc;\n voiceover.addEventListener(\'ended\', function onHeaderEnded() {\n if (footerSrc) {\n voiceover.src = footerSrc;\n voiceover.addEventListener(\'ended\', function () {\n btn.disabled = false;\n }, { once: true, signal: infoSignal });\n voiceover.play().catch(function () {});\n } else {\n btn.disabled = false;\n }\n }, { once: true, signal: infoSignal });\n voiceover.play().catch(function () {});\n } else if (footerSrc) {\n voiceover.src = footerSrc;\n voiceover.addEventListener(\'ended\', function () {\n btn.disabled = false;\n }, { once: true, signal: infoSignal });\n voiceover.play().catch(function () {});\n }\n }\n<\/script>\n</html>\n',document.body.appendChild(t),window.infoSlides=e,window.infoSlideAbortController=new AbortController,await Fr(t),Nr(t),await new Promise((e=>{document.addEventListener("pageComplete",(()=>{t.remove(),function(){window.infoSlideAbortController&&(window.infoSlideAbortController.abort(),delete window.infoSlideAbortController);delete window.infoSlides,Vr()}(),e()}),{once:!0})}))}async function sp(e,n){const t=document.createElement("div");t.innerHTML='<!DOCTYPE html>\n<html lang="en">\n<head>\n <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n</head>\n\n<body>\n <div class="container-fluid h-100">\n <div class="static-container">\n \x3c!-- <h2 class="header--center"></h2> --\x3e\n <div class="speech-bubble" role="status"></div>\n <img class="lion-char" src="https://storage.googleapis.com/roav-ran/shared/assets/sadLionAge12.webp" alt="Lion character">\n <p class="next-text"></p>\n </div>\n <button class="next-button" id="mic-fail-next-button" aria-label="Continue"></button>\n </div>\n <audio id="voiceover"></audio>\n</body>\n\n<script data-dynamic>\n var slide = window.micFailSlide || {};\n var micFailSignal = window.micFailAbortController\n ? window.micFailAbortController.signal\n : undefined;\n var voiceover = document.getElementById(\'voiceover\');\n\n document.querySelector(\'.speech-bubble\').innerHTML = (slide.header && slide.header.text) || \'\';\n document.querySelector(\'.next-text\').textContent = (slide.footer && slide.footer.text) || \'\';\n\n document.querySelector(\'.next-button\').addEventListener(\'click\', function () {\n voiceover.pause();\n document.dispatchEvent(new Event(\'pageComplete\'));\n }, { signal: micFailSignal });\n\n var headerSrc = slide.header && slide.header.audioSrc;\n var footerSrc = slide.footer && slide.footer.audioSrc;\n\n if (headerSrc) {\n voiceover.src = headerSrc;\n voiceover.addEventListener(\'ended\', function () {\n if (footerSrc) {\n voiceover.src = footerSrc;\n voiceover.play().catch(function () {});\n }\n }, { once: true, signal: micFailSignal });\n voiceover.play().catch(function () {});\n } else if (footerSrc) {\n voiceover.src = footerSrc;\n voiceover.play().catch(function () {});\n }\n<\/script>\n</html>\n',document.body.appendChild(t),window.micFailSlide=e,window.micFailAbortController=new AbortController,await Fr(t),Nr(t),await new Promise((e=>{document.addEventListener("pageComplete",(()=>{t.remove(),function(){window.micFailAbortController&&(window.micFailAbortController.abort(),delete window.micFailAbortController);delete window.micFailSlide,Vr()}(),e()}),{once:!0})}))}async function ap(e,n){await sc(!1,!1);const t=document.createElement("div");t.innerHTML="<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n</head>\n\n<style>\n #stimulus-grid {\n position: absolute;\n top: 30%;\n left: 3%;\n display: grid;\n grid-template-columns: repeat(3, auto);\n gap: clamp(8px, 2vw, 24px) clamp(16px, 4vw, 56px);\n align-items: center;\n width: 60%;\n }\n\n .stimulus-cell {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: clamp(6px, 1.2vw, 16px);\n border-radius: 14px;\n transition: background-color 0.15s ease;\n }\n\n .stimulus-cell.highlighted {\n background-color: #f5d9a8;\n }\n\n .stimulus-cell img {\n height: clamp(80px, 18vh, 200px);\n width: auto;\n display: block;\n }\n</style>\n\n<body>\n <div class=\"container-fluid h-100\">\n <div class=\"static-container\">\n <div class=\"header-container--practice-intro\"> \n <h2 class=\"header\"></h2>\n <h3 class=\"subtitle--practice-intro\"></h3>\n </div>\n <div id=\"stimulus-grid\"></div>\n <img class=\"lion-char-practice-intro\" src=\"https://storage.googleapis.com/roav-ran/shared/assets/pointingLeftLionAge12.webp\" alt=\"Lion character\">\n </div>\n </div>\n <button disabled class=\"next-button\" aria-label=\"Continue\"></button>\n <audio id=\"practice-intro-audio\"></audio>\n</body>\n\n<script data-dynamic>\n var cfg = window.practiceIntroConfig || {};\n var stimuliImages = cfg.assets.stimuli.images || [];\n var stimuliAudios = cfg.assets.stimuli.audioSrcs || [];\n var stimulusDir = cfg.stimulusDir || '';\n var practiceSignal = window.practiceIntroAbortController\n ? window.practiceIntroAbortController.signal\n : undefined;\n\n var FALLBACK_DELAY_MS = 1200;\n var userSpoke = false;\n var animFrameId = null;\n var micStream = null;\n var mediaRecorder;\n var mediaChunks = [];\n var timeoutId = null;\n\n function stripSsml(str) {\n return (str || '').replace(/<[^>]*>/g, '').trim();\n }\n\n function playAudio(src, onEnded) {\n if (src) {\n audio.src = src;\n audio.currentTime = 0;\n var handler = function () {\n audio.removeEventListener('ended', handler);\n onEnded();\n };\n audio.addEventListener('ended', handler, { signal: practiceSignal });\n audio.play().catch(function () {\n audio.removeEventListener('ended', handler);\n setTimeout(onEnded, FALLBACK_DELAY_MS);\n });\n } else {\n setTimeout(onEnded, FALLBACK_DELAY_MS);\n }\n }\n\n // Build the stimulus grid\n var grid = document.getElementById('stimulus-grid');\n stimuliImages.forEach(function (filename) {\n var cell = document.createElement('div');\n cell.className = 'stimulus-cell';\n var img = document.createElement('img');\n img.src = stimulusDir + '/' + filename;\n img.alt = filename.replace('.svg', '');\n cell.appendChild(img);\n grid.appendChild(cell);\n });\n\n var cells = grid.querySelectorAll('.stimulus-cell');\n var audio = document.getElementById('practice-intro-audio');\n var title = document.querySelector('.header');\n var subtitle = document.querySelector('.subtitle--practice-intro');\n var nextBtn = document.querySelector('.next-button');\n\n nextBtn.addEventListener('click', async function () {\n nextBtn.disabled = true;\n cleanupAudio();\n if (window.endPractice) {\n await window.endPractice();\n } else {\n document.dispatchEvent(new Event('pageComplete'));\n }\n }, { signal: practiceSignal });\n\n // Phase 1: show header text, play header audio; next button stays disabled\n title.innerHTML = stripSsml(cfg.assets.header.text);\n playAudio(cfg.assets.header.audioSrc, function () {\n highlightStep(0);\n });\n\n // Phase 2: play each stimulus audio sequentially, highlighting the matching cell\n function highlightStep(index) {\n cells.forEach(function (c) { c.classList.remove('highlighted'); });\n if (index >= stimuliImages.length) {\n showHeader2Phase();\n return;\n }\n cells[index].classList.add('highlighted');\n playAudio(stimuliAudios[index] || '', function () {\n highlightStep(index + 1);\n });\n }\n\n // Phase 3: remove highlights, play header2 audio with header2 text\n function showHeader2Phase() {\n var header2Text = cfg.assets.header2.text || '';\n var breakMatch = header2Text.match(/^(.*?)<break[^>]*\\/>(.*)$/s);\n if (breakMatch) {\n title.innerHTML = breakMatch[1].trim();\n subtitle.innerHTML = breakMatch[2].trim();\n subtitle.style.display = 'block';\n } else {\n title.innerHTML = stripSsml(header2Text);\n }\n playAudio(cfg.assets.header2.audioSrc, function () {\n showPracticePhase();\n });\n }\n\n // Phase 4: start RMS mic detection; enable next button when user speaks\n function showPracticePhase() {\n nextBtn.disabled = true;\n setupMediaStream();\n if (window.startPracticeRecording) window.startPracticeRecording();\n }\n\n async function setupMediaStream() {\n try {\n const audioContext = new AudioContext();\n micStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n\n const micSource = audioContext.createMediaStreamSource(micStream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n micSource.connect(analyser);\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n\n function detectAudio() {\n analyser.getByteTimeDomainData(dataArray);\n let sum = 0;\n for (let i = 0; i < bufferLength; i++) {\n sum += (dataArray[i] - 128) * (dataArray[i] - 128);\n }\n const rms = Math.sqrt(sum / bufferLength);\n if (rms > 7.0) {\n if (timeoutId !== null) { clearTimeout(timeoutId); timeoutId = null; }\n userSpoke = true;\n nextBtn.disabled = false;\n return;\n }\n animFrameId = requestAnimationFrame(detectAudio);\n }\n\n animFrameId = requestAnimationFrame(detectAudio);\n timeoutId = setTimeout(function () {\n if (!userSpoke) {\n nextBtn.disabled = false;\n }\n }, 5000);\n } catch (err) {\n console.error('Microphone access failed:', err);\n nextBtn.disabled = false;\n }\n }\n\n function cleanupAudio() {\n if (timeoutId !== null) { clearTimeout(timeoutId); timeoutId = null; }\n if (animFrameId !== null) { cancelAnimationFrame(animFrameId); animFrameId = null; }\n if (micStream !== null) { micStream.getTracks().forEach(function (t) { t.stop(); }); micStream = null; }\n }\n<\/script>\n</html>\n",window.practiceIntroConfig=e,window.practiceIntroAbortController=new AbortController,window.startPracticeRecording=oc,window.endPractice=async function(){await rc();const e=(new Date).getTime(),t="RAN_practice_"+window.practiceIntroConfig.assets.ranType+"_"+e+".webm";try{await cc({filename:t,deviceConfig:window.deviceConfig,config:n,metadata:{stimulus:"practice"}})}catch(e){console.error("Error saving practice recording:",e)}document.dispatchEvent(new Event("pageComplete"))},document.body.appendChild(t),await Fr(t),Nr(t),await new Promise((e=>{document.addEventListener("pageComplete",(()=>{t.remove(),function(){window.practiceIntroAbortController&&(window.practiceIntroAbortController.abort(),delete window.practiceIntroAbortController);delete window.practiceIntroConfig,delete window.startPracticeRecording,delete window.endPractice,Vr()}(),e()}),{once:!0})}))}var op={subtestOrder:["Letters","Numbers"],infoSlideView:{welcome:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/welcomeHeader.mp3",text:"Welcome to Letters and Numbers"},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/welcomeFooter.mp3",text:"Let's get started! Click the yellow button to continue."},showButton:!0},calibrationIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/calibrationIntroHeader.mp3",text:"You will see blue circles show up on the screen. Look at them until they pop!"},footer:{text:"Click the yellow button to continue."},showButton:!0},calibrationEnd:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/calibrationEndHeader.mp3",text:"Great job! Today, you are going to help me \n read some letters and numbers."},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/calibrationEndFooter.mp3",text:"Let's start with letters! Click the yellow button to continue."},showButton:!0},guidedPracticeLetters:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/guidedPracticeLetters.mp3",text:"Now let's try to do more than one letter at a time!"},footer:{text:"Click the yellow button to continue."},showButton:!0},guidedPracticeNumbers:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/guidedPracticeNumbers.mp3",text:"Nice Job!\n Now, we are going to read some numbers."},footer:{text:"Click the yellow button to continue."},showButton:!0},assessmentEnd:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/assessmentEndHeader.mp3",text:"You did an amazing job reading\nletters and numbers today!"},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/assessmentEndFooter.mp3",text:"You are all done with this game!"},showButton:!0}},micFailView:{header:{text:"Uh-Oh! I can't hear you.<br />Please exit the game and try again later.",audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/micFailViewHeader.mp3"},footer:{text:"Click the yellow button to exit.",audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/micFailViewFooter.mp3"}},instructionView:{maxFeedbackRetries:3,letterB:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterBHeader.mp3",text:"The name of the letter is B. Can you say B?"},footer:{text:"Click the yellow button to continue."}},letterD:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterDHeader.mp3",text:"Awesome! Can you tell me the name of this letter?"},footer:{text:"Click the yellow button to continue."}},feedback:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/feedbackHeader.mp3",text:"I can't hear you. Can you say it again?"},footer:{text:"Click the yellow button to continue."}}},practiceView:{letter:{ranType:"Letters",header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterHeader.mp3",text:"Watch me say these letter names first!"},header2:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterHeader2.mp3",text:"Your turn! Start from the left and read each one as fast as you can."},stimuli:{audioSrcs:["https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/M.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/A.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/Z.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/X.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/Z.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/F.mp3"],images:["M.svg","A.svg","Z.svg","X.svg","Z.svg","F.svg"]},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}},number:{ranType:"Numbers",header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/numberHeader.mp3",text:"Watch me say these numbers first!"},header2:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/numberHeader2.mp3",text:"Your turn! Start from the left and read each one as fast as you can."},stimuli:{audioSrcs:["https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/one.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/four.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/three.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/five.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/nine.mp3","https://storage.googleapis.com/roav-ran/en/shared/audio/stimuli/two.mp3"],images:["one.svg","four.svg","three.svg","five.svg","nine.svg","two.svg"]},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}}},ranView:{letter:{practiceIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/practiceIntroHeader.mp3",text:"Great job! Now let's practice."},subtitle:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterPracticeIntroSubtitle.mp3",text:"Remember to read the letters as fast as you can."},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}},testIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/letterTestIntroHeader.mp3",text:"Perfect!\n Let's try saying more letter names!"},subtitle:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/testIntroSubtitle.mp3",text:"Remember to read as fast as you can."},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}}},number:{practiceIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/practiceIntroHeader.mp3",text:"Great job!\nNow let's practice."},subtitle:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/numberPracticeIntroSubtitle.mp3",text:"Remember to read the numbers as fast as you can!"},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}},testIntro:{header:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/numberTestIntroHeader.mp3",text:"Perfect!\nLet's try saying more numbers!"},subtitle:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/testIntroSubtitle.mp3",text:"Remember to read as fast as you can."},footer:{audioSrc:"https://storage.googleapis.com/roav-ran/en/shared/audio/clickDoneButton.mp3",text:"Click the yellow button when you are done."}}}}};window.store=o,window.i18next=be;class rp{constructor(e,n,t,i){this.gameParams=n,this.userParams=t,this.firekit=e,this.displayElement=i}async init(){}async run(){this.gameParams.consent&&await async function(){const e=document.createElement("div");e.innerHTML='<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">\n\n\x3c!-- <h5 style="text-align:left;">\n Stanford University Research Consent Form\n <span style="float:right;">\n For IRB Use Only\n </span>\n</h5>\n\n<h5 style="text-align:left;">\n Protocol Director: Jason D. Yeatman, Ph.D.\n <span style="float:right;">\n Approval Date: October 31, 2023\n </span>\n</h5>\n\n<h5 style="text-align:left;">\n Protocol Title: Plasticity and Reading\n <span style="float:right;">\n Expiration Date: October 31, 2024\n </span>\n</h5> --\x3e\n\n<style>\n body {\n margin: 20px; /* Adjust the margin size as needed */\n }\n</style>\n\n<body>\n<h3 style="text-align: center;"> STANFORD UNIVERSITY CONSENT FORM </h3>\n\n<h4 style="text-align: center;"> Stanford University Reading & Dyslexia Research Program: Behavioral Testing </h4>\n\n<blockquote>\n<h4 id="principal-investigator-">Principal Investigator:</h4>\n<p>Jason D. Yeatman </p>\n<p>Associate Professor</p>\n<p>Graduate School of Education</p>\n<p>School of Medicine, Division of Developmental Behavioral Pediatrics</p>\n<h4 id="contact-">Contact:</h4>\n<p>readingresearch@stanford.edu</p>\n<p><a href="https://dyslexia.stanford.edu/">https://dyslexia.stanford.edu/</a> </p>\n</blockquote>\n<h4 id="purpose-of-the-study">PURPOSE OF THE STUDY</h4>\n<p>Data collected through games in the web-browser will help researchers understand relationships between academic skills, reading proficiency, cognition, perception, and/or attitudes towards reading and school in individuals with a broad range of reading skills.</p>\n<h4 id="study-procedures">STUDY PROCEDURES</h4>\n<p>In this study, you or your child will be asked to complete computer tasks via a computer screen. An eye-tracking software will request access to your webcam and will be used to measure eye movements. You will be asked to provide verbal responses in which case the web browser will request access to your computer microphone. You or your child may be asked to complete multiple activities in one session depending on the study. </p>\n<h4 id="privacy-or-data-collection">PRIVACY OR DATA COLLECTION</h4>\n<p>We will do our best to ensure your privacy. Data that is collected through this online experiment is stored separately from identifying information such as your name. For the sake of payment, sometimes we store an email address you provide, but this is stored separately from the responses that are recorded in the online experiment. Each participant is assigned a code and that is used rather than names. This is called “coded data” and we try to ensure that the identity of our research participants is kept confidential. Data collected as part of this study may be used for many years to help discover trends in the population and explore changes due to development and education. In addition, coded data may be shared online or with collaborators to allow for new and unforeseen discoveries. Researchers may choose to include coded data in publications to support findings, or they may choose to release coded data alongside findings for replicability.</p>\n<p>We will collect mouse and click data, scrolling behavior, scores earned, button presses and their timestamps, time spent on each page, audio recordings, or other data that may be derived from your behavior on our page. This data will be stored on servers. The eye-tracking software will use your webcam to track your eyes. This software will record and save video data for future analysis. Once analysis has been completed, the video data will be deleted. Incomplete data may be logged if you quit out of the experiment early. If you would like to void your data, you may request it through our contact email.</p>\n<h4 id="compensation">COMPENSATION</h4>\n<p>We value [your/your child’s] participation. A Tango gift card will be sent through email upon completion of this study. Specific reward amounts will be indicated on the task card and/or study invitation, which you can view before launching the task or scheduling the appointment. If you or your child is completing these activities as part of another study, the compensation rate will remain consistent with the rate of the study you or your child is enrolled in. </p>\n<p>Please note that the gift card system we use to pay participants is not affiliated with Stanford and we will need to input your name and email into this system to send you the electronic gift card payment. If you feel uncomfortable with this process, please let us know before signing the consent form. Depending on the study, we may be able to look into other forms of payment for you.</p>\n<h4 id="risks-stress-or-discomfort">RISKS, STRESS, OR DISCOMFORT</h4>\n<p>If there is any reason to believe you are/your child is not safe to participate in any of the tasks, please contact us at readingresearch@stanford.edu. Some people may experience some physical discomfort or boredom due to being asked to sit for long periods. For computer tasks, some people may also experience dry eyes or eye fatigue. For some tasks that are untimed, breaks can be taken as needed during the session.</p>\n<h4 id="contact-information">CONTACT INFORMATION</h4>\n<p>If you have any additional questions or concerns about our research, feel free to email us at readingresearch@stanford.edu. We will be more than happy to help!</p>\n<p>For general information regarding questions or concerns about [your/your child’s] rights as a research participant, please call 1-866-680-2906 to reach the Administrative Panel on Human Subjects in Medical Research, Stanford University.</p>\n<form id="consentForm">\n <p>\n <input type="checkbox" id="webcamConsent" name="consent">\n I confirm that I have a webcam, and I agree to have my webcam track my eyes. I understand that the webcam will record or save video data and that it will be deleted once analysis is complete.\n </p>\n <p>\n <input type="checkbox" id="voiceConsent" name="consent">\n I agree to have my voice recorded. This data will only be used for data scoring purposes, will be stored securely, and will not be shared with others outside the lab.\n </p>\n <p>\n <input type="checkbox" id="participationConsent" name="consent">\n I agree to participate in this research. Participation in this research is voluntary, and I can stop at any time without penalty. I feel that I understand what I am getting into, and I know I am free to leave the experiment at any time by simply closing the web browser.\n </p>\n <button id="confirmButton" disabled>Continue to test</button>\n</form>\n</body>\n\n<h5 class="card-title" style="display: none;"></h5>\n\n<script>\n document.getElementById(\'consentForm\').addEventListener(\'change\', function() {\n var checkboxes = document.querySelectorAll(\'input[type="checkbox"][name="consent"]\');\n var allChecked = Array.from(checkboxes).every(checkbox => checkbox.checked);\n document.getElementById(\'confirmButton\').disabled = !allChecked;\n });\n<\/script>\n\n',document.body.appendChild(e),await Fr(e),Nr(e),await new Promise((n=>{const t=document.getElementById("confirmButton");t&&t.addEventListener("click",(()=>{Vr(),e.remove(),n()}))}))}(),await this.firekit.startRun();const e=await(async(e,n,t,i)=>{const s=er(er({...n,...t},nr),tr),{userMetadata:a={},audioFeedback:o,grade:r,language:c=be.language,skipInstructions:l,practiceCorpus:p,stimulusCorpus:u,sequentialPractice:d,sequentialStimulus:g,buttonLayout:m,numberOfTrials:v,storyCorpus:h,taskName:f,stimulusBlocks:x,numOfPracticeTrials:b,storyOption:y,keyHelpers:w}=s;"en"!==c&&be.changeLanguage(c);const k={userMetadata:{...a,grade:r},audioFeedback:o||"neutral",skipInstructions:l??!0,startTime:new Date,firekit:e,displayElement:i||null,practiceCorpus:p??"math-item-bank-practice-pz",stimulusCorpus:u??"math-item-bank-pz",sequentialPractice:d??!0,sequentialStimulus:g??!0,buttonLayout:m||"default",numberOfTrials:v??10,task:f??"egma-math",stimulusBlocks:x??3,numOfPracticeTrials:b??2,storyOption:y,story:Or(y,r),keyHelpers:w??!0};console.log("this is grade:",r),console.log("this is storyOption:",y);const S=Object.fromEntries(Object.entries(n).map((([e,n])=>[e,"story"===e?n:k[e]??n])));return await k.firekit.updateTaskParams(S),null!==k.pid&&await k.firekit.updateUser({assessmentPid:k.pid,...a}),k})(this.firekit,this.gameParams,this.userParams,this.displayElement);o.session.set("config",e),await np(e),await uc(e),Dr(this.gameParams.bEyeTracking)?(await ip([op.infoSlideView.welcome,op.infoSlideView.calibrationIntro]),await Vl(e),await ip(op.infoSlideView.calibrationEnd)):await ip([op.infoSlideView.welcome,op.infoSlideView.calibrationEnd]);if((await async function(e,n){const t=document.createElement("div");return t.innerHTML="<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n</head>\n\n<style>\n #stimulus-letter {\n height: 30%;\n }\n</style>\n\n<body>\n <div class=\"container-fluid h-100\">\n <div class=\"static-container\"> \n <div class=\"speech-bubble\" role=\"status\"></div>\n <img class=\"lion-char-instructions\" src=\"https://storage.googleapis.com/roav-ran/shared/assets/pointingRightLionAge12.webp\" alt=\"Lion character\">\n \x3c!--TODO: Add alt--\x3e\n <img id=\"stimulus-letter\">\n \x3c!--TODO: Extract to constants--\x3e\n <p class=\"next-text\">Click the yellow button to continue.</p>\n \x3c!-- Audio Playing --\x3e \n <audio autoplay id=\"voiceover\"> </audio>\n <button class=\"next-button\" aria-label=\"Continue\"></button>\n </div>\n </div>\n <audio id=\"voiceover\"></audio>\n</body>\n\n<script data-dynamic>\n\n var counter = 0;\n var userSpoke = false;\n var animFrameId = null;\n var micStream = null;\n var timeoutId = null;\n var feedbackRetryCount = 0;\n var maxFeedbackRetries = (window.instructionStage && window.instructionStage.maxFeedbackRetries) || 3;\n var instructionSignal = window.instructionAbortController\n ? window.instructionAbortController.signal\n : undefined;\n\n var nextButton = document.querySelector('.next-button');\n var nextText = document.querySelector('.next-text');\n nextButton.disabled = true;\n nextText.textContent = '';\n nextButton.addEventListener('click', function () {\n startNextView();\n }, { signal: instructionSignal });\n\n var voiceover = document.getElementById('voiceover');\n voiceover.addEventListener('ended', function () {\n setupMediaStream();\n }, { signal: instructionSignal });\n\n // Show first slide immediately\n startNextView();\n\n function startNextView() {\n \n counter++;\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (animFrameId !== null) {\n cancelAnimationFrame(animFrameId);\n animFrameId = null;\n }\n if (micStream !== null) {\n micStream.getTracks().forEach(function (track) { track.stop(); });\n micStream = null;\n }\n var speechBubble = document.querySelector('.speech-bubble');\n var stimulusLetter = document.getElementById('stimulus-letter');\n var voiceover = document.getElementById('voiceover');\n\n if (window.instructionStage) {\n\n if (userSpoke && (counter === 2 || counter === 4)) counter += 1; // skip feedback if user spoke\n\n switch (counter) {\n case 1:\n userSpoke = false; // reset for next time\n nextButton.disabled = true;\n nextText.textContent = '';\n // Teaching slide: introduce the letter B\n speechBubble.innerHTML = window.instructionStage.letterB.header.text;\n stimulusLetter.src = 'https://storage.googleapis.com/roav-ran/shared/Letters/B.svg';\n voiceover.src = window.instructionStage.letterB.header.audioSrc;\n break;\n case 2:\n // \"I can't hear you\" retry for letter B\n feedbackRetryCount = 1;\n userSpoke = false;\n nextButton.disabled = true;\n nextText.textContent = '';\n speechBubble.innerHTML = window.instructionStage.feedback.header.text;\n stimulusLetter.src = 'https://storage.googleapis.com/roav-ran/shared/Letters/B.svg';\n voiceover.src = window.instructionStage.feedback.header.audioSrc;\n break;\n case 3:\n // Practice prompt: ask student to identify the letter D\n feedbackRetryCount = 0;\n userSpoke = false;\n nextButton.disabled = true;\n nextText.textContent = '';\n speechBubble.innerHTML = window.instructionStage.letterD.header.text;\n stimulusLetter.src = 'https://storage.googleapis.com/roav-ran/shared/Letters/D.svg';\n voiceover.src = window.instructionStage.letterD.header.audioSrc;\n break;\n case 4:\n // \"I can't hear you\" retry for letter D\n feedbackRetryCount = 1;\n userSpoke = false;\n nextButton.disabled = true;\n nextText.textContent = '';\n speechBubble.innerHTML = window.instructionStage.feedback.header.text;\n stimulusLetter.src = 'https://storage.googleapis.com/roav-ran/shared/Letters/D.svg';\n voiceover.src = window.instructionStage.feedback.header.audioSrc;\n break;\n default:\n counter = 0;\n pageCompleted();\n return;\n }\n }\n\n if (voiceover.src && voiceover.src !== window.location.href) {\n voiceover.play();\n }\n }\n\n async function setupMediaStream() {\n try {\n const audioContext = new AudioContext();\n micStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n\n const micSource = audioContext.createMediaStreamSource(micStream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n micSource.connect(analyser);\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n\n function detectAudio() {\n analyser.getByteTimeDomainData(dataArray);\n let sum = 0;\n for (let i = 0; i < bufferLength; i++) {\n sum += (dataArray[i] - 128) * (dataArray[i] - 128);\n }\n const rms = Math.sqrt(sum / bufferLength);\n // console.log('RMS:', rms);\n if (rms > 7.0) {\n // This is for testing audio thresholds\n // console.log('Audio detected with RMS:', rms);\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n userSpoke = true;\n nextButton.disabled = false;\n nextText.textContent = 'Click the yellow button to continue.';\n }\n animFrameId = requestAnimationFrame(detectAudio);\n }\n\n animFrameId = requestAnimationFrame(detectAudio);\n timeoutId = setTimeout(function () {\n if (!userSpoke) {\n if ((counter === 2 || counter === 4) && feedbackRetryCount < maxFeedbackRetries) {\n feedbackRetryCount++;\n restartCurrentFeedbackSlide();\n } else if (counter === 2 || counter === 4) {\n pageFailedMic();\n } else {\n startNextView();\n }\n }\n }, 5000);\n } catch (err) {\n console.error('Microphone access failed:', err);\n }\n }\n\n function restartCurrentFeedbackSlide() {\n if (animFrameId !== null) { cancelAnimationFrame(animFrameId); animFrameId = null; }\n if (micStream !== null) { micStream.getTracks().forEach(function (t) { t.stop(); }); micStream = null; }\n userSpoke = false;\n var vo = document.getElementById('voiceover');\n vo.currentTime = 0;\n vo.play();\n }\n\n function pageFailedMic() {\n if (timeoutId !== null) { clearTimeout(timeoutId); timeoutId = null; }\n if (animFrameId !== null) { cancelAnimationFrame(animFrameId); animFrameId = null; }\n if (micStream !== null) { micStream.getTracks().forEach(function (t) { t.stop(); }); micStream = null; }\n document.dispatchEvent(new Event('instructionMicFailed'));\n }\n\n function pageCompleted() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (animFrameId !== null) {\n cancelAnimationFrame(animFrameId);\n animFrameId = null;\n }\n if (micStream !== null) {\n micStream.getTracks().forEach(function (track) { track.stop(); });\n micStream = null;\n }\n document.dispatchEvent(new Event('pageComplete'));\n }\n\n<\/script>\n</html>\n",document.body.appendChild(t),window.instructionStage=e,window.instructionAbortController=new AbortController,await Fr(t),Nr(t),new Promise((e=>{document.addEventListener("pageComplete",(()=>{t.remove(),tp(),e({micFailed:!1})}),{once:!0}),document.addEventListener("instructionMicFailed",(()=>{t.remove(),tp(),e({micFailed:!0})}),{once:!0})}))}(op.instructionView)).micFailed)return lc(),await sp(op.micFailView),await e.firekit.updateEngagementFlags(["noAudioDetected"],!1),await e.firekit.abortRun(),"aborted";await ip(op.infoSlideView.guidedPracticeLetters);const n={Letters:{dir:"https://storage.googleapis.com/roav-ran/shared/Letters",stimulus:Lr[Math.floor(Math.random()*Lr.length)],sizecm:2,testname:"Letters"},Numbers:{dir:"https://storage.googleapis.com/roav-ran/shared/Numbers",stimulus:Mr[Math.floor(Math.random()*Mr.length)],sizecm:2,testname:"Numbers"}},t=op.subtestOrder;for(let a=0;a<t.length;a++){const r=t[a];if(o.session.set("testConfig",n[r]),"Letters"===r)var i={assets:op.practiceView.letter,stimulusDir:"https://storage.googleapis.com/roav-ran/shared/Letters"},s=op.ranView.letter;else i={assets:op.practiceView.number,stimulusDir:"https://storage.googleapis.com/roav-ran/shared/Numbers"},s=op.ranView.number;await ap(i,e),await Zl("Practice",e,s.practiceIntro),await Zl("Test",e,s.testIntro),a<t.length-1&&"Letters"===r&&await ip(op.infoSlideView.guidedPracticeNumbers)}return await ip(op.infoSlideView.assessmentEnd),await e.firekit.updateEngagementFlags([],!0),await e.firekit.finishRun(),"success"}}export{rp as default};
|
|
11
|
+
//# sourceMappingURL=index.394e74ce.js.map
|