diff --git a/dist/game/eMath.game.js b/dist/game/eMath.game.js index 13e27d6..6d4decd 100644 --- a/dist/game/eMath.game.js +++ b/dist/game/eMath.game.js @@ -7559,7 +7559,148 @@ var EventManager = class _EventManager { var import_reflect_metadata5 = require("reflect-metadata"); var import_class_transformer6 = require("class-transformer"); var import_lz_string = __toESM(require_lz_string()); + +// src/metadata.ts +var eMathMetadata = { + /** + * The version of the library + * @example "9.5.0" + */ + version: (() => { + try { + return "9.5.0"; + } catch (error) { + return "9.5.0"; + } + })(), + /** + * The data about the Break Eternity library + */ + // eslint-disable-next-line @typescript-eslint/naming-convention + "break_eternity.js": { + /** + * The version of the Break Eternity library + * @example "2.1.0" + */ + version: "2.1.0" + } +}; + +// src/game/managers/DataManager.ts var import_md5 = __toESM(require_md5()); +function isPlainObject(obj) { + return typeof obj === "object" && obj?.constructor === Object; +} +var objectHasOwnProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key); +function deepMerge(sourcePlain, source, target) { + if (!sourcePlain || !source || !target) { + console.warn( + "eMath.js: dataManager.deepMerge(): Missing arguments:", + sourcePlain, + source, + target + ); + return target ?? {}; + } + const out = target; + for (const key in sourcePlain) { + if (objectHasOwnProperty(sourcePlain, key) && !objectHasOwnProperty(target, key)) { + out[key] = sourcePlain[key]; + } + if (source[key] instanceof Currency) { + const sourceCurrency = sourcePlain[key]; + const targetCurrency = target[key]; + if (Array.isArray(targetCurrency.upgrades)) { + const upgrades = targetCurrency.upgrades; + targetCurrency.upgrades = {}; + for (const upgrade of upgrades) { + targetCurrency.upgrades[upgrade.id] = upgrade; + } + } + targetCurrency.upgrades = { + ...sourceCurrency.upgrades, + ...targetCurrency.upgrades + }; + out[key] = targetCurrency; + targetCurrency.items = { + ...sourceCurrency.items, + ...targetCurrency.items + }; + } else if (isPlainObject(sourcePlain[key]) && isPlainObject(target[key])) { + out[key] = deepMerge( + sourcePlain[key], + source[key], + target[key] + ); + } + } + return out; +} +var upgradeDataProperties = Object.getOwnPropertyNames( + new UpgradeData({ id: "", level: Decimal.dZero }) +); +var itemDataProperties = Object.getOwnPropertyNames( + new ItemData({ id: "", amount: Decimal.dZero }) +); +function convertTemplateClass(templateClassToConvert, plain) { + const out = (0, import_class_transformer6.plainToInstance)(templateClassToConvert, plain); + if (out instanceof Currency) { + for (const upgradeName in out.upgrades) { + const upgrade = out.upgrades[upgradeName]; + if (!upgrade || !upgradeDataProperties.every( + (prop) => Object.getOwnPropertyNames(upgrade).includes(prop) + )) { + delete out.upgrades[upgradeName]; + continue; + } + out.upgrades[upgradeName] = (0, import_class_transformer6.plainToInstance)(UpgradeData, upgrade); + } + for (const itemName in out.items) { + const item = out.items[itemName]; + if (!item || !itemDataProperties.every( + (prop) => Object.getOwnPropertyNames(item).includes(prop) + )) { + delete out.items[itemName]; + continue; + } + out.items[itemName] = (0, import_class_transformer6.plainToInstance)(ItemData, item); + } + } + if (!out) { + throw new Error( + `Failed to convert ${templateClassToConvert.name} to class instance.` + ); + } + return out; +} +function plainToInstanceRecursive(normal, plain) { + if (!normal || !plain) { + throw new Error( + "dataManager.plainToInstanceRecursive(): Missing arguments." + ); + } + const out = plain; + for (const key in normal) { + if (plain[key] === void 0) { + console.warn(`eMath.js: Missing property "${key}" in loaded data.`); + continue; + } + if (!isPlainObject(plain[key])) continue; + const normalDataClass = normal[key].constructor; + if (normalDataClass === Object) { + out[key] = plainToInstanceRecursive( + normal[key], + plain[key] + ); + continue; + } + out[key] = convertTemplateClass( + normalDataClass, + plain[key] + ); + } + return out; +} var DataManager = class { /** * Creates a new instance of the game class. @@ -7700,12 +7841,6 @@ var DataManager = class { const hasedData = (0, import_md5.default)( `${this.gameRef.config.name.id}/${JSON.stringify(gameDataString)}` ); - let version; - try { - version = "9.5.0"; - } catch (error) { - version = "9.3.0"; - } const saveMetadata = { hash: hasedData, game: { @@ -7713,9 +7848,7 @@ var DataManager = class { id: this.gameRef.config.name.id, version: this.gameRef.config.name.version }, - emath: { - version - } + ...eMathMetadata }; return [saveMetadata, gameDataString]; } @@ -7734,17 +7867,17 @@ var DataManager = class { * @returns The decompiled object, or null if the data is empty or invalid. */ decompileData(data) { - if (!data && this.localStorage) { + if (!data) { + if (!this.localStorage) { + console.warn( + "eMath.js: Local storage is not supported. Methods that rely on local storage will not work: decompileData() requires the data to be passed as an argument." + ); + return null; + } data = this.localStorage.getItem( `${this.gameRef.config.name.id}-data` ); } - if (!data && !this.localStorage) { - console.warn( - "eMath.js: Local storage is not supported. Methods that rely on local storage will not work: decompileData() requires the data to be passed as an argument." - ); - return null; - } if (!data) return null; let parsedData; try { @@ -7783,6 +7916,7 @@ var DataManager = class { /** * Resets the game data to its initial state and saves it. * @param reload - Whether to reload the page after resetting the data. Defaults to `false`. + * (Reloading may help with some issues with saving data) */ resetData(reload = false) { if (!this.normalData) { @@ -7820,6 +7954,12 @@ var DataManager = class { * If you want to implement a custom data export, use {@link compileData} instead. */ exportData() { + if (typeof document === "undefined") { + console.warn( + "eMath.js: exportData(): Document is not defined. You can use compileData() instead to implement a custom save system." + ); + return; + } const content = this.compileData(); if (prompt("Download save data?:", content) != null) { const blob = new Blob([content], { type: "text/plain" }); @@ -7847,133 +7987,8 @@ var DataManager = class { } if (!dataToParse) return null; const [, loadedData] = dataToParse; - function isPlainObject(obj) { - return typeof obj === "object" && obj?.constructor === Object; - } - const objectHasOwnProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key); - function deepMerge(sourcePlain, source, target) { - if (!sourcePlain || !source || !target) { - console.warn( - "eMath.js: dataManager.deepMerge(): Missing arguments:", - sourcePlain, - source, - target - ); - return target ?? {}; - } - const out = target; - for (const key in sourcePlain) { - if (objectHasOwnProperty(sourcePlain, key) && !objectHasOwnProperty(target, key)) { - out[key] = sourcePlain[key]; - } - if (source[key] instanceof Currency) { - const sourceCurrency = sourcePlain[key]; - const targetCurrency = target[key]; - if (Array.isArray(targetCurrency.upgrades)) { - const upgrades = targetCurrency.upgrades; - targetCurrency.upgrades = {}; - for (const upgrade of upgrades) { - targetCurrency.upgrades[upgrade.id] = upgrade; - } - } - targetCurrency.upgrades = { - ...sourceCurrency.upgrades, - ...targetCurrency.upgrades - }; - out[key] = targetCurrency; - targetCurrency.items = { - ...sourceCurrency.items, - ...targetCurrency.items - }; - } else if (isPlainObject(sourcePlain[key]) && isPlainObject(target[key])) { - out[key] = deepMerge( - sourcePlain[key], - source[key], - target[key] - ); - } - } - return out; - } - let loadedDataProcessed = !mergeData ? loadedData : deepMerge(this.normalDataPlain, this.normalData, loadedData); - const upgradeDataProperties = Object.getOwnPropertyNames( - new UpgradeData({ id: "", level: Decimal.dZero }) - ); - const itemDataProperties = Object.getOwnPropertyNames( - new ItemData({ id: "", amount: Decimal.dZero }) - ); - function convertTemplateClass(templateClassToConvert, plain) { - const out = (0, import_class_transformer6.plainToInstance)( - templateClassToConvert, - plain - ); - if (out instanceof Currency) { - for (const upgradeName in out.upgrades) { - const upgrade = out.upgrades[upgradeName]; - if (!upgrade || !upgradeDataProperties.every( - (prop) => Object.getOwnPropertyNames(upgrade).includes(prop) - )) { - delete out.upgrades[upgradeName]; - continue; - } - out.upgrades[upgradeName] = (0, import_class_transformer6.plainToInstance)( - UpgradeData, - upgrade - ); - } - for (const itemName in out.items) { - const item = out.items[itemName]; - if (!item || !itemDataProperties.every( - (prop) => Object.getOwnPropertyNames(item).includes(prop) - )) { - delete out.items[itemName]; - continue; - } - out.items[itemName] = (0, import_class_transformer6.plainToInstance)(ItemData, item); - } - } - if (!out) { - throw new Error( - `Failed to convert ${templateClassToConvert.name} to class instance.` - ); - } - return out; - } - function plainToInstanceRecursive(normal, plain) { - if (!normal || !plain) { - throw new Error( - "dataManager.plainToInstanceRecursive(): Missing arguments." - ); - } - const out = plain; - for (const key in normal) { - if (plain[key] === void 0) { - console.warn( - `eMath.js: Missing property "${key}" in loaded data.` - ); - continue; - } - if (!isPlainObject(plain[key])) continue; - const normalDataClass = normal[key].constructor; - if (normalDataClass === Object) { - out[key] = plainToInstanceRecursive( - normal[key], - plain[key] - ); - continue; - } - out[key] = convertTemplateClass( - normalDataClass, - plain[key] - ); - } - return out; - } - loadedDataProcessed = plainToInstanceRecursive( - this.normalData, - loadedDataProcessed - ); - return loadedDataProcessed; + const loadedDataMerged = !mergeData ? loadedData : deepMerge(this.normalDataPlain, this.normalData, loadedData); + return plainToInstanceRecursive(this.normalData, loadedDataMerged); } /** * Loads game data and processes it. diff --git a/dist/game/eMath.game.min.js b/dist/game/eMath.game.min.js index c929e25..d4cb3f2 100644 --- a/dist/game/eMath.game.min.js +++ b/dist/game/eMath.game.min.js @@ -1,4 +1,4 @@ -"use strict";(function(Et,lt){var Pt=typeof exports=="object";if(typeof define=="function"&&define.amd)define([],lt);else if(typeof module=="object"&&module.exports)module.exports=lt();else{var ht=lt(),Lt=Pt?exports:Et;for(var Tt in ht)Lt[Tt]=ht[Tt]}})(typeof self<"u"?self:exports,()=>{var Et={},lt={exports:Et},Pt=Object.create,ht=Object.defineProperty,Lt=Object.getOwnPropertyDescriptor,Tt=Object.getOwnPropertyNames,Ke=Object.getPrototypeOf,Xe=Object.prototype.hasOwnProperty,Mt=(t,e)=>function(){return e||(0,t[Tt(t)[0]])((e={exports:{}}).exports,e),e.exports},Bt=(t,e)=>{for(var r in e)ht(t,r,{get:e[r],enumerable:!0})},ue=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Tt(e))!Xe.call(t,n)&&n!==r&&ht(t,n,{get:()=>e[n],enumerable:!(i=Lt(e,n))||i.enumerable});return t},at=(t,e,r)=>(r=t!=null?Pt(Ke(t)):{},ue(e||!t||!t.__esModule?ht(r,"default",{value:t,enumerable:!0}):r,t)),tr=t=>ue(ht({},"__esModule",{value:!0}),t),ot=(t,e,r,i)=>{for(var n=i>1?void 0:i?Lt(e,r):e,o=t.length-1,l;o>=0;o--)(l=t[o])&&(n=(i?l(e,r,n):l(n))||n);return i&&n&&ht(e,r,n),n},ct=Mt({"node_modules/reflect-metadata/Reflect.js"(){var t;(function(e){(function(r){var i=typeof globalThis=="object"?globalThis:typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:d(),n=o(e);typeof i.Reflect<"u"&&(n=o(i.Reflect,n)),r(n,i),typeof i.Reflect>"u"&&(i.Reflect=e);function o(a,M){return function(h,f){Object.defineProperty(a,h,{configurable:!0,writable:!0,value:f}),M&&M(h,f)}}function l(){try{return Function("return this;")()}catch{}}function c(){try{return(0,eval)("(function() { return this; })()")}catch{}}function d(){return l()||c()}})(function(r,i){var n=Object.prototype.hasOwnProperty,o=typeof Symbol=="function",l=o&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",c=o&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",d=typeof Object.create=="function",a={__proto__:[]}instanceof Array,M=!d&&!a,h={create:d?function(){return se(Object.create(null))}:a?function(){return se({__proto__:null})}:function(){return se({})},has:M?function(v,_){return n.call(v,_)}:function(v,_){return _ in v},get:M?function(v,_){return n.call(v,_)?v[_]:void 0}:function(v,_){return v[_]}},f=Object.getPrototypeOf(Function),m=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:Yr(),p=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:Vr(),g=typeof WeakMap=="function"?WeakMap:Hr(),C=o?Symbol.for("@reflect-metadata:registry"):void 0,E=zr(),T=$r(E);function u(v,_,A,F){if(U(A)){if(!Re(v))throw new TypeError;if(!Ue(_))throw new TypeError;return X(v,_)}else{if(!Re(v))throw new TypeError;if(!J(_))throw new TypeError;if(!J(F)&&!U(F)&&!Ot(F))throw new TypeError;return Ot(F)&&(F=void 0),A=ft(A),st(v,_,A,F)}}r("decorate",u);function S(v,_){function A(F,R){if(!J(F))throw new TypeError;if(!U(R)&&!Gr(R))throw new TypeError;Rt(v,_,F,R)}return A}r("metadata",S);function y(v,_,A,F){if(!J(A))throw new TypeError;return U(F)||(F=ft(F)),Rt(v,_,A,F)}r("defineMetadata",y);function w(v,_,A){if(!J(_))throw new TypeError;return U(A)||(A=ft(A)),H(v,_,A)}r("hasMetadata",w);function N(v,_,A){if(!J(_))throw new TypeError;return U(A)||(A=ft(A)),Z(v,_,A)}r("hasOwnMetadata",N);function b(v,_,A){if(!J(_))throw new TypeError;return U(A)||(A=ft(A)),W(v,_,A)}r("getMetadata",b);function k(v,_,A){if(!J(_))throw new TypeError;return U(A)||(A=ft(A)),Nt(v,_,A)}r("getOwnMetadata",k);function P(v,_){if(!J(v))throw new TypeError;return U(_)||(_=ft(_)),Ut(v,_)}r("getMetadataKeys",P);function G(v,_){if(!J(v))throw new TypeError;return U(_)||(_=ft(_)),Gt(v,_)}r("getOwnMetadataKeys",G);function Y(v,_,A){if(!J(_))throw new TypeError;if(U(A)||(A=ft(A)),!J(_))throw new TypeError;U(A)||(A=ft(A));var F=kt(_,A,!1);return U(F)?!1:F.OrdinaryDeleteMetadata(v,_,A)}r("deleteMetadata",Y);function X(v,_){for(var A=v.length-1;A>=0;--A){var F=v[A],R=F(_);if(!U(R)&&!Ot(R)){if(!Ue(R))throw new TypeError;_=R}}return _}function st(v,_,A,F){for(var R=v.length-1;R>=0;--R){var Q=v[R],et=Q(_,A,F);if(!U(et)&&!Ot(et)){if(!J(et))throw new TypeError;F=et}}return F}function H(v,_,A){var F=Z(v,_,A);if(F)return!0;var R=ne(_);return Ot(R)?!1:H(v,R,A)}function Z(v,_,A){var F=kt(_,A,!1);return U(F)?!1:je(F.OrdinaryHasOwnMetadata(v,_,A))}function W(v,_,A){var F=Z(v,_,A);if(F)return Nt(v,_,A);var R=ne(_);if(!Ot(R))return W(v,R,A)}function Nt(v,_,A){var F=kt(_,A,!1);if(!U(F))return F.OrdinaryGetOwnMetadata(v,_,A)}function Rt(v,_,A,F){var R=kt(A,F,!0);R.OrdinaryDefineOwnMetadata(v,_,A,F)}function Ut(v,_){var A=Gt(v,_),F=ne(v);if(F===null)return A;var R=Ut(F,_);if(R.length<=0)return A;if(A.length<=0)return R;for(var Q=new p,et=[],z=0,L=A;z=0&&L=this._keys.length?(this._index=-1,this._keys=_,this._values=_):this._index++,{value:x,done:!1}}return{value:void 0,done:!0}},z.prototype.throw=function(L){throw this._index>=0&&(this._index=-1,this._keys=_,this._values=_),L},z.prototype.return=function(L){return this._index>=0&&(this._index=-1,this._keys=_,this._values=_),{value:L,done:!0}},z}(),F=function(){function z(){this._keys=[],this._values=[],this._cacheKey=v,this._cacheIndex=-2}return Object.defineProperty(z.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),z.prototype.has=function(L){return this._find(L,!1)>=0},z.prototype.get=function(L){var x=this._find(L,!1);return x>=0?this._values[x]:void 0},z.prototype.set=function(L,x){var D=this._find(L,!0);return this._values[D]=x,this},z.prototype.delete=function(L){var x=this._find(L,!1);if(x>=0){for(var D=this._keys.length,j=x+1;j>>8,h[f*2+1]=p%256}return h},decompressFromUint8Array:function(a){if(a==null)return d.decompress(a);for(var M=new Array(a.length/2),h=0,f=M.length;h>1}else{for(m=1,f=0;f>1}u--,u==0&&(u=Math.pow(2,y),y++),delete g[T]}else for(m=p[T],f=0;f>1;u--,u==0&&(u=Math.pow(2,y),y++),p[E]=S++,T=String(C)}if(T!==""){if(Object.prototype.hasOwnProperty.call(g,T)){if(T.charCodeAt(0)<256){for(f=0;f>1}else{for(m=1,f=0;f>1}u--,u==0&&(u=Math.pow(2,y),y++),delete g[T]}else for(m=p[T],f=0;f>1;u--,u==0&&(u=Math.pow(2,y),y++)}for(m=2,f=0;f>1;for(;;)if(N=N<<1,b==M-1){w.push(h(N));break}else b++;return w.join("")},decompress:function(a){return a==null?"":a==""?null:d._decompress(a.length,32768,function(M){return a.charCodeAt(M)})},_decompress:function(a,M,h){var f=[],m,p=4,g=4,C=3,E="",T=[],u,S,y,w,N,b,k,P={val:h(0),position:M,index:1};for(u=0;u<3;u+=1)f[u]=u;for(y=0,N=Math.pow(2,2),b=1;b!=N;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),y|=(w>0?1:0)*b,b<<=1;switch(m=y){case 0:for(y=0,N=Math.pow(2,8),b=1;b!=N;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),y|=(w>0?1:0)*b,b<<=1;k=i(y);break;case 1:for(y=0,N=Math.pow(2,16),b=1;b!=N;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),y|=(w>0?1:0)*b,b<<=1;k=i(y);break;case 2:return""}for(f[3]=k,S=k,T.push(k);;){if(P.index>a)return"";for(y=0,N=Math.pow(2,C),b=1;b!=N;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),y|=(w>0?1:0)*b,b<<=1;switch(k=y){case 0:for(y=0,N=Math.pow(2,8),b=1;b!=N;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),y|=(w>0?1:0)*b,b<<=1;f[g++]=i(y),k=g-1,p--;break;case 1:for(y=0,N=Math.pow(2,16),b=1;b!=N;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),y|=(w>0?1:0)*b,b<<=1;f[g++]=i(y),k=g-1,p--;break;case 2:return T.join("")}if(p==0&&(p=Math.pow(2,C),C++),f[k])E=f[k];else if(k===g)E=S+S.charAt(0);else return null;T.push(E),f[g++]=S+E.charAt(0),p--,S=E,p==0&&(p=Math.pow(2,C),C++)}}};return d}();typeof define=="function"&&define.amd?define(function(){return r}):typeof e<"u"&&e!=null?e.exports=r:typeof angular<"u"&&angular!=null&&angular.module("LZString",[]).factory("LZString",function(){return r})}}),rr=Mt({"node_modules/crypt/crypt.js"(t,e){(function(){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i={rotl:function(n,o){return n<>>32-o},rotr:function(n,o){return n<<32-o|n>>>o},endian:function(n){if(n.constructor==Number)return i.rotl(n,8)&16711935|i.rotl(n,24)&4278255360;for(var o=0;o0;n--)o.push(Math.floor(Math.random()*256));return o},bytesToWords:function(n){for(var o=[],l=0,c=0;l>>5]|=n[l]<<24-c%32;return o},wordsToBytes:function(n){for(var o=[],l=0;l>>5]>>>24-l%32&255);return o},bytesToHex:function(n){for(var o=[],l=0;l>>4).toString(16)),o.push((n[l]&15).toString(16));return o.join("")},hexToBytes:function(n){for(var o=[],l=0;l>>6*(3-d)&63)):o.push("=");return o.join("")},base64ToBytes:function(n){n=n.replace(/[^A-Z0-9+\/]/ig,"");for(var o=[],l=0,c=0;l>>6-c*2);return o}};e.exports=i})()}}),le=Mt({"node_modules/charenc/charenc.js"(t,e){var r={utf8:{stringToBytes:function(i){return r.bin.stringToBytes(unescape(encodeURIComponent(i)))},bytesToString:function(i){return decodeURIComponent(escape(r.bin.bytesToString(i)))}},bin:{stringToBytes:function(i){for(var n=[],o=0;o>>24)&16711935|(a[g]<<24|a[g]>>>8)&4278255360;a[M>>>5]|=128<>>9<<4)+14]=M;for(var C=l._ff,E=l._gg,T=l._hh,u=l._ii,g=0;g>>0,f=f+y>>>0,m=m+w>>>0,p=p+N>>>0}return r.endian([h,f,m,p])};l._ff=function(c,d,a,M,h,f,m){var p=c+(d&a|~d&M)+(h>>>0)+m;return(p<>>32-f)+d},l._gg=function(c,d,a,M,h,f,m){var p=c+(d&M|a&~M)+(h>>>0)+m;return(p<>>32-f)+d},l._hh=function(c,d,a,M,h,f,m){var p=c+(d^a^M)+(h>>>0)+m;return(p<>>32-f)+d},l._ii=function(c,d,a,M,h,f,m){var p=c+(a^(d|~M))+(h>>>0)+m;return(p<>>32-f)+d},l._blocksize=16,l._digestsize=16,e.exports=function(c,d){if(c==null)throw new Error("Illegal argument "+c);var a=r.wordsToBytes(l(c,d));return d&&d.asBytes?a:d&&d.asString?o.bytesToString(a):r.bytesToHex(a)}})()}}),fe={};Bt(fe,{default:()=>xr}),lt.exports=tr(fe);var Qr=at(ct()),Kr=at(ct()),ce={};Bt(ce,{Attribute:()=>qt,AttributeStatic:()=>Ae,Boost:()=>Wt,BoostObject:()=>At,Currency:()=>pt,CurrencyStatic:()=>Se,DEFAULT_ITERATIONS:()=>xt,Decimal:()=>s,E:()=>Cr,FORMATS:()=>Ir,FormatTypeList:()=>cr,Grid:()=>te,GridCell:()=>Dt,GridCellCollection:()=>it,Item:()=>Ie,ItemData:()=>wt,LRUCache:()=>zt,ListNode:()=>he,ST_NAMES:()=>mt,UpgradeData:()=>vt,UpgradeStatic:()=>Me,calculateItem:()=>_e,calculateSum:()=>Xt,calculateSumApprox:()=>be,calculateSumLoop:()=>ye,calculateUpgrade:()=>ve,decimalToJSONString:()=>we,equalsTolerance:()=>Qt,formats:()=>gt,inverseFunctionApprox:()=>Kt,roundingBase:()=>Ar,upgradeToCacheNameEL:()=>Or});var Xr=at(ct()),zt=class{constructor(t){this.map=new Map,this.first=void 0,this.last=void 0,this.maxSize=t}get size(){return this.map.size}get(t){let e=this.map.get(t);if(e!==void 0)return e!==this.first&&(e===this.last?(this.last=e.prev,this.last.next=void 0):(e.prev.next=e.next,e.next.prev=e.prev),e.next=this.first,this.first.prev=e,this.first=e),e.value}set(t,e){if(this.maxSize<1)return;if(this.map.has(t))throw new Error("Cannot update existing keys in the cache");let r=new he(t,e);for(this.first===void 0?(this.first=r,this.last=r):(r.next=this.first,this.first.prev=r,this.first=r),this.map.set(t,r);this.map.size>this.maxSize;){let i=this.last;this.map.delete(i.key),this.last=i.prev,this.last.next=void 0}}},he=class{constructor(t,e){this.next=void 0,this.prev=void 0,this.key=t,this.value=e}},B;(function(t){t[t.PLAIN_TO_CLASS=0]="PLAIN_TO_CLASS",t[t.CLASS_TO_PLAIN=1]="CLASS_TO_PLAIN",t[t.CLASS_TO_CLASS=2]="CLASS_TO_CLASS"})(B||(B={}));var sr=function(){function t(){this._typeMetadatas=new Map,this._transformMetadatas=new Map,this._exposeMetadatas=new Map,this._excludeMetadatas=new Map,this._ancestorsMap=new Map}return t.prototype.addTypeMetadata=function(e){this._typeMetadatas.has(e.target)||this._typeMetadatas.set(e.target,new Map),this._typeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.addTransformMetadata=function(e){this._transformMetadatas.has(e.target)||this._transformMetadatas.set(e.target,new Map),this._transformMetadatas.get(e.target).has(e.propertyName)||this._transformMetadatas.get(e.target).set(e.propertyName,[]),this._transformMetadatas.get(e.target).get(e.propertyName).push(e)},t.prototype.addExposeMetadata=function(e){this._exposeMetadatas.has(e.target)||this._exposeMetadatas.set(e.target,new Map),this._exposeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.addExcludeMetadata=function(e){this._excludeMetadatas.has(e.target)||this._excludeMetadatas.set(e.target,new Map),this._excludeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.findTransformMetadatas=function(e,r,i){return this.findMetadatas(this._transformMetadatas,e,r).filter(function(n){return!n.options||n.options.toClassOnly===!0&&n.options.toPlainOnly===!0?!0:n.options.toClassOnly===!0?i===B.CLASS_TO_CLASS||i===B.PLAIN_TO_CLASS:n.options.toPlainOnly===!0?i===B.CLASS_TO_PLAIN:!0})},t.prototype.findExcludeMetadata=function(e,r){return this.findMetadata(this._excludeMetadatas,e,r)},t.prototype.findExposeMetadata=function(e,r){return this.findMetadata(this._exposeMetadatas,e,r)},t.prototype.findExposeMetadataByCustomName=function(e,r){return this.getExposedMetadatas(e).find(function(i){return i.options&&i.options.name===r})},t.prototype.findTypeMetadata=function(e,r){return this.findMetadata(this._typeMetadatas,e,r)},t.prototype.getStrategy=function(e){var r=this._excludeMetadatas.get(e),i=r&&r.get(void 0),n=this._exposeMetadatas.get(e),o=n&&n.get(void 0);return i&&o||!i&&!o?"none":i?"excludeAll":"exposeAll"},t.prototype.getExposedMetadatas=function(e){return this.getMetadata(this._exposeMetadatas,e)},t.prototype.getExcludedMetadatas=function(e){return this.getMetadata(this._excludeMetadatas,e)},t.prototype.getExposedProperties=function(e,r){return this.getExposedMetadatas(e).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?r===B.CLASS_TO_CLASS||r===B.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?r===B.CLASS_TO_PLAIN:!0}).map(function(i){return i.propertyName})},t.prototype.getExcludedProperties=function(e,r){return this.getExcludedMetadatas(e).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?r===B.CLASS_TO_CLASS||r===B.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?r===B.CLASS_TO_PLAIN:!0}).map(function(i){return i.propertyName})},t.prototype.clear=function(){this._typeMetadatas.clear(),this._exposeMetadatas.clear(),this._excludeMetadatas.clear(),this._ancestorsMap.clear()},t.prototype.getMetadata=function(e,r){var i=e.get(r),n;i&&(n=Array.from(i.values()).filter(function(h){return h.propertyName!==void 0}));for(var o=[],l=0,c=this.getAncestors(r);l0&&(l=l.filter(function(h){return!a.includes(h)})),this.options.version!==void 0&&(l=l.filter(function(h){var f=rt.findExposeMetadata(e,h);return!f||!f.options?!0:n.checkVersion(f.options.since,f.options.until)})),this.options.groups&&this.options.groups.length?l=l.filter(function(h){var f=rt.findExposeMetadata(e,h);return!f||!f.options?!0:n.checkGroups(f.options.groups)}):l=l.filter(function(h){var f=rt.findExposeMetadata(e,h);return!f||!f.options||!f.options.groups||!f.options.groups.length})}return this.options.excludePrefixes&&this.options.excludePrefixes.length&&(l=l.filter(function(M){return n.options.excludePrefixes.every(function(h){return M.substr(0,h.length)!==h})})),l=l.filter(function(M,h,f){return f.indexOf(M)===h}),l},t.prototype.checkVersion=function(e,r){var i=!0;return i&&e&&(i=this.options.version>=e),i&&r&&(i=this.options.versionNumber.MAX_SAFE_INTEGER)&&(w="\u03C9");let b=t.log(u,8e3).toNumber();if(y.equals(0))return w;if(y.gt(0)&&y.lte(3)){let G=[];for(let Y=0;YNumber.MAX_SAFE_INTEGER)&&(w="\u03C9");let b=t.log(u,8e3).toNumber();if(y.equals(0))return w;if(y.gt(0)&&y.lte(2)){let G=[];for(let Y=0;Y118?e.elemental.beyondOg(N):e.elemental.config.element_lists[u-1][w]},beyondOg(u){let S=Math.floor(Math.log10(u)),y=["n","u","b","t","q","p","h","s","o","e"],w="";for(let N=S;N>=0;N--){let b=Math.floor(u/Math.pow(10,N))%10;w==""?w=y[b].toUpperCase():w+=y[b]}return w},abbreviationLength(u){return u==1?1:Math.pow(Math.floor(u/2)+1,2)*2},getAbbreviationAndValue(u){let S=u.log(118).toNumber(),y=Math.floor(S)+1,w=e.elemental.abbreviationLength(y),N=S-y+1,b=Math.floor(N*w),k=e.elemental.getAbbreviation(y,N),P=new t(118).pow(y+b/w-1);return[k,P]},formatElementalPart(u,S){return S.eq(1)?u:`${S.toString()} ${u}`},format(u,S=2){if(u.gt(new t(118).pow(new t(118).pow(new t(118).pow(4)))))return"e"+e.elemental.format(u.log10(),S);let y=u.log(118),N=y.log(118).log(118).toNumber(),b=Math.max(4-N*2,1),k=[];for(;y.gte(1)&&k.length=b)return k.map(G=>e.elemental.formatElementalPart(G[0],G[1])).join(" + ");let P=new t(118).pow(y).toFixed(k.length===1?3:S);return k.length===0?P:k.length===1?`${P} \xD7 ${e.elemental.formatElementalPart(k[0][0],k[0][1])}`:`${P} \xD7 (${k.map(G=>e.elemental.formatElementalPart(G[0],G[1])).join(" + ")})`}},old_sc:{format(u,S){u=new t(u);let y=u.log10().floor();if(y.lt(9))return y.lt(3)?u.toFixed(S):u.floor().toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");{if(u.gte("eeee10")){let N=u.slog();return(N.gte(1e9)?"":t.dTen.pow(N.sub(N.floor())).toFixed(4))+"F"+e.old_sc.format(N.floor(),0)}let w=u.div(t.dTen.pow(y));return(y.log10().gte(9)?"":w.toFixed(4))+"e"+e.old_sc.format(y,0)}}},eng:{format(u,S=2){u=new t(u);let y=u.log10().floor();if(y.lt(9))return y.lt(3)?u.toFixed(S):u.floor().toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");{if(u.gte("eeee10")){let N=u.slog();return(N.gte(1e9)?"":t.dTen.pow(N.sub(N.floor())).toFixed(4))+"F"+e.eng.format(N.floor(),0)}let w=u.div(new t(1e3).pow(y.div(3).floor()));return(y.log10().gte(9)?"":w.toFixed(new t(4).sub(y.sub(y.div(3).floor().mul(3))).toNumber()))+"e"+e.eng.format(y.div(3).floor().mul(3),0)}}},mixed_sc:{format(u,S,y=9){u=new t(u);let w=u.log10().floor();return w.lt(303)&&w.gte(y)?d(u,S,y,"st"):d(u,S,y,"sc")}},layer:{layers:["infinity","eternity","reality","equality","affinity","celerity","identity","vitality","immunity","atrocity"],format(u,S=2,y){u=new t(u);let w=u.max(1).log10().max(1).log(r.log10()).floor();if(w.lte(0))return d(u,S,y,"sc");u=t.dTen.pow(u.max(1).log10().div(r.log10().pow(w)).sub(w.gte(1)?1:0));let N=w.div(10).floor(),b=w.toNumber()%10-1;return d(u,Math.max(4,S),y,"sc")+" "+(N.gte(1)?"meta"+(N.gte(2)?"^"+d(N,0,y,"sc"):"")+"-":"")+(isNaN(b)?"nanity":e.layer.layers[b])}},standard:{tier1(u){return mt[0][0][u%10]+mt[0][1][Math.floor(u/10)%10]+mt[0][2][Math.floor(u/100)]},tier2(u){let S=u%10,y=Math.floor(u/10)%10,w=Math.floor(u/100)%10,N="";return u<10?mt[1][0][u]:(y==1&&S==0?N+="Vec":N+=mt[1][1][S]+mt[1][2][y],N+=mt[1][3][w],N)}},inf:{format(u,S,y){u=new t(u);let w=0,N=new t(Number.MAX_VALUE),b=["","\u221E","\u03A9","\u03A8","\u028A"],k=["","","m","mm","mmm"];for(;u.gte(N);)u=u.log(N),w++;return w==0?d(u,S,y,"sc"):u.gte(3)?k[w]+b[w]+"\u03C9^"+d(u.sub(1),S,y,"sc"):u.gte(2)?k[w]+"\u03C9"+b[w]+"-"+d(N.pow(u.sub(2)),S,y,"sc"):k[w]+b[w]+"-"+d(N.pow(u.sub(1)),S,y,"sc")}},alphabet:{config:{alphabet:"abcdefghijklmnopqrstuvwxyz"},getAbbreviation(u,S=new t(1e15),y=!1,w=9){if(u=new t(u),S=new t(S).div(1e3),u.lt(S.mul(1e3)))return"";let{alphabet:N}=e.alphabet.config,b=N.length,k=u.log(1e3).sub(S.log(1e3)).floor(),P=k.add(1).log(b+1).ceil(),G="",Y=(X,st)=>{let H=X,Z="";for(let W=0;W=b)return"\u03C9";Z=N[Nt]+Z,H=H.sub(1).div(b).floor()}return Z};if(P.lt(w))G=Y(k,P);else{let X=P.sub(w).add(1),st=k.div(t.pow(b+1,X.sub(1))).floor();G=`${Y(st,new t(w))}(${X.gt("1e9")?X.format():X.format(0)})`}return G},format(u,S=2,y=9,w="mixed_sc",N=new t(1e15),b=!1,k){if(u=new t(u),N=new t(N).div(1e3),u.lt(N.mul(1e3)))return d(u,S,y,w);let P=e.alphabet.getAbbreviation(u,N,b,k),G=u.div(t.pow(1e3,u.log(1e3).floor()));return`${P.length>(k??9)+2?"":G.toFixed(S)+" "}${P}`}}},r=t.dTwo.pow(1024),i="\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089",n="\u2070\xB9\xB2\xB3\u2074\u2075\u2076\u2077\u2078\u2079";function o(u){return u.toFixed(0).split("").map(S=>S==="-"?"\u208B":i[parseInt(S,10)]).join("")}function l(u){return u.toFixed(0).split("").map(S=>S==="-"?"\u208B":n[parseInt(S,10)]).join("")}function c(u,S=2,y=9,w="st"){return d(u,S,y,w)}function d(u,S=2,y=9,w="mixed_sc"){u=new t(u);let N=u.lt(0)?"-":"";if(u.mag==1/0)return N+"Infinity";if(Number.isNaN(u.mag))return N+"NaN";if(u.lt(0)&&(u=u.mul(-1)),u.eq(0))return u.toFixed(S);let b=u.log10().floor();switch(w){case"sc":case"scientific":if(u.log10().lt(Math.min(-S,0))&&S>1){let k=u.log10().ceil(),P=u.div(k.eq(-1)?new t(.1):t.dTen.pow(k)),G=k.mul(-1).max(1).log10().gte(9);return N+(G?"":P.toFixed(2))+"e"+d(k,0,y,"mixed_sc")}else if(b.lt(y)){let k=Math.max(Math.min(S-b.toNumber(),S),0);return N+(k>0?u.toFixed(k):u.toFixed(k).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"))}else{if(u.gte("eeee10")){let G=u.slog();return(G.gte(1e9)?"":t.dTen.pow(G.sub(G.floor())).toFixed(2))+"F"+d(G.floor(),0)}let k=u.div(t.dTen.pow(b)),P=b.log10().gte(9);return N+(P?"":k.toFixed(2))+"e"+d(b,0,y,"mixed_sc")}case"st":case"standard":{let k=u.log(1e3).floor();if(k.lt(1))return N+u.toFixed(Math.max(Math.min(S-b.toNumber(),S),0));let P=k.mul(3),G=k.log10().floor();if(G.gte(3e3))return"e"+d(b,S,y,"st");let Y="";if(k.lt(4))Y=["","K","M","B"][Math.round(k.toNumber())];else{let H=Math.floor(k.log(1e3).toNumber());for(H<100&&(H=Math.max(H-1,0)),k=k.sub(1).div(t.dTen.pow(H*3));k.gt(0);){let Z=k.div(1e3).floor(),W=k.sub(Z.mul(1e3)).floor().toNumber();W>0&&(W==1&&!H&&(Y="U"),H&&(Y=e.standard.tier2(H)+(Y?"-"+Y:"")),W>1&&(Y=e.standard.tier1(W)+Y)),k=Z,H++}}let X=u.div(t.dTen.pow(P)),st=S===2?t.dTwo.sub(b.sub(P)).add(1).toNumber():S;return N+(G.gte(10)?"":X.toFixed(st)+" ")+Y}default:return e[w]||console.error('Invalid format type "',w,'"'),N+e[w].format(u,S,y)}}function a(u,S,y="mixed_sc",w,N){u=new t(u),S=new t(S);let b=u.add(S),k,P=b.div(u);return P.gte(10)&&u.gte(1e100)?(P=P.log10().mul(20),k="(+"+d(P,w,N,y)+" OoMs/sec)"):k="(+"+d(S,w,N,y)+"/sec)",k}function M(u,S=2,y="s"){return u=new t(u),u.gte(86400)?d(u.div(86400).floor(),0,12,"sc")+":"+M(u.mod(86400),S,"d"):u.gte(3600)||y=="d"?(u.div(3600).gte(10)||y!="d"?"":"0")+d(u.div(3600).floor(),0,12,"sc")+":"+M(u.mod(3600),S,"h"):u.gte(60)||y=="h"?(u.div(60).gte(10)||y!="h"?"":"0")+d(u.div(60).floor(),0,12,"sc")+":"+M(u.mod(60),S,"m"):(u.gte(10)||y!="m"?"":"0")+d(u,S,12,"sc")}function h(u,S=!1,y=0,w=9,N="mixed_sc"){let b=Gt=>d(Gt,y,w,N);u=new t(u);let k=u.mul(1e3).mod(1e3).floor(),P=u.mod(60).floor(),G=u.div(60).mod(60).floor(),Y=u.div(3600).mod(24).floor(),X=u.div(86400).mod(365.2425).floor(),st=u.div(31556952).floor(),H=st.eq(1)?" year":" years",Z=X.eq(1)?" day":" days",W=Y.eq(1)?" hour":" hours",Nt=G.eq(1)?" minute":" minutes",Rt=P.eq(1)?" second":" seconds",Ut=k.eq(1)?" millisecond":" milliseconds";return`${st.gt(0)?b(st)+H+", ":""}${X.gt(0)?b(X)+Z+", ":""}${Y.gt(0)?b(Y)+W+", ":""}${G.gt(0)?b(G)+Nt+", ":""}${P.gt(0)?b(P)+Rt+",":""}${S&&k.gt(0)?" "+b(k)+Ut:""}`.replace(/,([^,]*)$/,"$1").trim()}function f(u){return u=new t(u),d(t.dOne.sub(u).mul(100))+"%"}function m(u){return u=new t(u),d(u.mul(100))+"%"}function p(u,S=2){return u=new t(u),u.gte(1)?"\xD7"+u.format(S):"/"+u.pow(-1).format(S)}function g(u,S,y=10){return t.gte(u,10)?t.pow(y,t.log(u,y).pow(S)):new t(u)}function C(u,S=0){u=new t(u);let y=(k=>k.map((P,G)=>({name:P.name,altName:P.altName,value:t.pow(1e3,new t(G).add(1))})))([{name:"K",altName:"Kilo"},{name:"M",altName:"Mega"},{name:"G",altName:"Giga"},{name:"T",altName:"Tera"},{name:"P",altName:"Peta"},{name:"Decimal",altName:"Exa"},{name:"Z",altName:"Zetta"},{name:"Y",altName:"Yotta"},{name:"R",altName:"Ronna"},{name:"Q",altName:"Quetta"}]),w="",N=u.lte(0)?0:t.min(t.log(u,1e3).sub(1),y.length-1).floor().toNumber(),b=y[N];if(N===0)switch(S){case 1:w="";break;case 2:case 0:default:w=u.format();break}switch(S){case 1:w=b.name;break;case 2:w=u.divide(b.value).format();break;case 3:w=b.altName;break;case 0:default:w=`${u.divide(b.value).format()} ${b.name}`;break}return w}function E(u,S=!1){return`${C(u,2)} ${C(u,1)}eV${S?"/c^2":""}`}let T={...e,toSubscript:o,toSuperscript:l,formatST:c,format:d,formatGain:a,formatTime:M,formatTimeLong:h,formatReduction:f,formatPercent:m,formatMult:p,expMult:g,metric:C,ev:E};return{FORMATS:e,formats:T}}var Yt=17,tt=9e15,mr=Math.log10(9e15),yt=1/9e15,dr=308,gr=-324,ge=5,pr=1023,Nr=!0,yr=!1,br=function(){let t=[];for(let r=gr+1;r<=dr;r++)t.push(+("1e"+r));let e=323;return function(r){return t[r+e]}}(),bt=[2,Math.E,3,4,5,6,7,8,9,10],vr=[[1,1.0891180521811203,1.1789767925673957,1.2701455431742086,1.3632090180450092,1.4587818160364217,1.5575237916251419,1.6601571006859253,1.767485818836978,1.8804192098842727,2],[1,1.1121114330934079,1.231038924931609,1.3583836963111375,1.4960519303993531,1.6463542337511945,1.8121385357018724,1.996971324618307,2.2053895545527546,2.4432574483385254,Math.E],[1,1.1187738849693603,1.2464963939368214,1.38527004705667,1.5376664685821402,1.7068895236551784,1.897001227148399,2.1132403089001035,2.362480153784171,2.6539010333870774,3],[1,1.1367350847096405,1.2889510672956703,1.4606478703324786,1.6570295196661111,1.8850062585672889,2.1539465047453485,2.476829779693097,2.872061932789197,3.3664204535587183,4],[1,1.1494592900767588,1.319708228183931,1.5166291280087583,1.748171114438024,2.0253263297298045,2.3636668498288547,2.7858359149579424,3.3257226212448145,4.035730287722532,5],[1,1.159225940787673,1.343712473580932,1.5611293155111927,1.8221199554561318,2.14183924486326,2.542468319282638,3.0574682501653316,3.7390572020926873,4.6719550537360774,6],[1,1.1670905356972596,1.3632807444991446,1.5979222279405536,1.8842640123816674,2.2416069644878687,2.69893426559423,3.3012632110403577,4.121250340630164,5.281493033448316,7],[1,1.1736630594087796,1.379783782386201,1.6292821855668218,1.9378971836180754,2.3289975651071977,2.8384347394720835,3.5232708454565906,4.478242031114584,5.868592169644505,8],[1,1.1793017514670474,1.394054150657457,1.65664127441059,1.985170999970283,2.4069682290577457,2.9647310119960752,3.7278665320924946,4.814462547283592,6.436522247411611,9],[1,1.1840100246247336,1.4061375836156955,1.6802272208863964,2.026757028388619,2.4770056063449646,3.080525271755482,3.9191964192627284,5.135152840833187,6.989961179534715,10]],wr=[[-1,-.9194161097107025,-.8335625019330468,-.7425599821143978,-.6466611521029437,-.5462617907227869,-.4419033816638769,-.3342645487554494,-.224140440909962,-.11241087890006762,0],[-1,-.90603157029014,-.80786507256596,-.7064666939634,-.60294836853664,-.49849837513117,-.39430303318768,-.29147201034755,-.19097820800866,-.09361896280296,0],[-1,-.9021579584316141,-.8005762598234203,-.6964780623319391,-.5911906810998454,-.486050182576545,-.3823089430815083,-.28106046722897615,-.1831906535795894,-.08935809204418144,0],[-1,-.8917227442365535,-.781258746326964,-.6705130326902455,-.5612813129406509,-.4551067709033134,-.35319256652135966,-.2563741554088552,-.1651412821106526,-.0796919581982668,0],[-1,-.8843387974366064,-.7678744063886243,-.6529563724510552,-.5415870994657841,-.4352842206588936,-.33504449124791424,-.24138853420685147,-.15445285440944467,-.07409659641336663,0],[-1,-.8786709358426346,-.7577735191184886,-.6399546189952064,-.527284921869926,-.4211627631006314,-.3223479611761232,-.23107655627789858,-.1472057700818259,-.07035171210706326,0],[-1,-.8740862815291583,-.7497032990976209,-.6297119746181752,-.5161838335958787,-.41036238255751956,-.31277212146489963,-.2233976621705518,-.1418697367979619,-.06762117662323441,0],[-1,-.8702632331800649,-.7430366914122081,-.6213373075161548,-.5072025698095242,-.40171437727184167,-.30517930701410456,-.21736343968190863,-.137710238299109,-.06550774483471955,0],[-1,-.8670016295947213,-.7373984232432306,-.6143173985094293,-.49973884395492807,-.394584953527678,-.2989649949848695,-.21245647317021688,-.13434688362382652,-.0638072667348083,0],[-1,-.8641642839543857,-.732534623168535,-.6083127477059322,-.4934049257184696,-.3885773075899922,-.29376029055315767,-.2083678561173622,-.13155653399373268,-.062401588652553186,0]],I=function(e){return s.fromValue_noAlloc(e)},q=function(t,e,r){return s.fromComponents(t,e,r)},O=function(e,r,i){return s.fromComponents_noNormalize(e,r,i)},dt=function(e,r){let i=r+1,n=Math.ceil(Math.log10(Math.abs(e))),o=Math.round(e*Math.pow(10,i-n))*Math.pow(10,n-i);return parseFloat(o.toFixed(Math.max(i-n,0)))},Vt=function(t){return Math.sign(t)*Math.log10(Math.abs(t))},Mr=function(t){if(!isFinite(t))return t;if(t<-50)return t===Math.trunc(t)?Number.NEGATIVE_INFINITY:0;let e=1;for(;t<10;)e=e*t,++t;t-=1;let r=.9189385332046727;r=r+(t+.5)*Math.log(t),r=r-t;let i=t*t,n=t;return r=r+1/(12*n),n=n*i,r=r-1/(360*n),n=n*i,r=r+1/(1260*n),n=n*i,r=r-1/(1680*n),n=n*i,r=r+1/(1188*n),n=n*i,r=r-691/(360360*n),n=n*i,r=r+7/(1092*n),n=n*i,r=r-3617/(122400*n),Math.exp(r)/e},_r=.36787944117144233,pe=.5671432904097838,Ht=function(t,e=1e-10,r=!0){let i,n;if(!Number.isFinite(t))return t;if(r){if(t===0)return t;if(t===1)return pe;t<10?i=0:i=Math.log(t)-Math.log(Math.log(t))}else{if(t===0)return-1/0;t<=-.1?i=-2:i=Math.log(-t)-Math.log(-Math.log(-t))}for(let o=0;o<100;++o){if(n=(t*Math.exp(-i)+i*i)/(i+1),Math.abs(n-i).5?1:-1;if(Math.random()*20<1)return O(e,0,1);let r=Math.floor(Math.random()*(t+1)),i=r===0?Math.random()*616-308:Math.random()*16;Math.random()>.9&&(i=Math.trunc(i));let n=Math.pow(10,i);return Math.random()>.9&&(n=Math.trunc(n)),q(e,r,n)}static affordGeometricSeries_core(t,e,r,i){let n=e.mul(r.pow(i));return s.floor(t.div(n).mul(r.sub(1)).add(1).log10().div(r.log10()))}static sumGeometricSeries_core(t,e,r,i){return e.mul(r.pow(i)).mul(s.sub(1,r.pow(t))).div(s.sub(1,r))}static affordArithmeticSeries_core(t,e,r,i){let o=e.add(i.mul(r)).sub(r.div(2)),l=o.pow(2);return o.neg().add(l.add(r.mul(t).mul(2)).sqrt()).div(r).floor()}static sumArithmeticSeries_core(t,e,r,i){let n=e.add(i.mul(r));return t.div(2).mul(n.mul(2).plus(t.sub(1).mul(r)))}static efficiencyOfPurchase_core(t,e,r){return t.div(e).add(t.div(r))}normalize(){if(this.sign===0||this.mag===0&&this.layer===0||this.mag===Number.NEGATIVE_INFINITY&&this.layer>0&&Number.isFinite(this.layer))return this.sign=0,this.mag=0,this.layer=0,this;if(this.layer===0&&this.mag<0&&(this.mag=-this.mag,this.sign=-this.sign),this.mag===Number.POSITIVE_INFINITY||this.layer===Number.POSITIVE_INFINITY||this.mag===Number.NEGATIVE_INFINITY||this.layer===Number.NEGATIVE_INFINITY)return this.mag=Number.POSITIVE_INFINITY,this.layer=Number.POSITIVE_INFINITY,this;if(this.layer===0&&this.mag=tt)return this.layer+=1,this.mag=e*Math.log10(t),this;for(;t0;)this.layer-=1,this.layer===0?this.mag=Math.pow(10,this.mag):(this.mag=e*Math.pow(10,t),t=Math.abs(this.mag),e=Math.sign(this.mag));return this.layer===0&&(this.mag<0?(this.mag=-this.mag,this.sign=-this.sign):this.mag===0&&(this.sign=0)),(Number.isNaN(this.sign)||Number.isNaN(this.layer)||Number.isNaN(this.mag))&&(this.sign=Number.NaN,this.layer=Number.NaN,this.mag=Number.NaN),this}fromComponents(t,e,r){return this.sign=t,this.layer=e,this.mag=r,this.normalize(),this}fromComponents_noNormalize(t,e,r){return this.sign=t,this.layer=e,this.mag=r,this}fromMantissaExponent(t,e){return this.layer=1,this.sign=Math.sign(t),t=Math.abs(t),this.mag=e+Math.log10(t),this.normalize(),this}fromMantissaExponent_noNormalize(t,e){return this.fromMantissaExponent(t,e),this}fromDecimal(t){return this.sign=t.sign,this.layer=t.layer,this.mag=t.mag,this}fromNumber(t){return this.mag=Math.abs(t),this.sign=Math.sign(t),this.layer=0,this.normalize(),this}fromString(t,e=!1){let r=t,i=s.fromStringCache.get(r);if(i!==void 0)return this.fromDecimal(i);Nr?t=t.replace(",",""):yr&&(t=t.replace(",","."));let n=t.split("^^^");if(n.length===2){let g=parseFloat(n[0]),C=parseFloat(n[1]),E=n[1].split(";"),T=1;if(E.length===2&&(T=parseFloat(E[1]),isFinite(T)||(T=1)),isFinite(g)&&isFinite(C)){let u=s.pentate(g,C,T,e);return this.sign=u.sign,this.layer=u.layer,this.mag=u.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}}let o=t.split("^^");if(o.length===2){let g=parseFloat(o[0]),C=parseFloat(o[1]),E=o[1].split(";"),T=1;if(E.length===2&&(T=parseFloat(E[1]),isFinite(T)||(T=1)),isFinite(g)&&isFinite(C)){let u=s.tetrate(g,C,T,e);return this.sign=u.sign,this.layer=u.layer,this.mag=u.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}}let l=t.split("^");if(l.length===2){let g=parseFloat(l[0]),C=parseFloat(l[1]);if(isFinite(g)&&isFinite(C)){let E=s.pow(g,C);return this.sign=E.sign,this.layer=E.layer,this.mag=E.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}}t=t.trim().toLowerCase();let c,d,a=t.split("pt");if(a.length===2){c=10;let g=!1;a[0].startsWith("-")&&(g=!0,a[0]=a[0].slice(1)),d=parseFloat(a[0]),a[1]=a[1].replace("(",""),a[1]=a[1].replace(")","");let C=parseFloat(a[1]);if(isFinite(C)||(C=1),isFinite(c)&&isFinite(d)){let E=s.tetrate(c,d,C,e);return this.sign=E.sign,this.layer=E.layer,this.mag=E.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),g&&(this.sign*=-1),this}}if(a=t.split("p"),a.length===2){c=10;let g=!1;a[0].startsWith("-")&&(g=!0,a[0]=a[0].slice(1)),d=parseFloat(a[0]),a[1]=a[1].replace("(",""),a[1]=a[1].replace(")","");let C=parseFloat(a[1]);if(isFinite(C)||(C=1),isFinite(c)&&isFinite(d)){let E=s.tetrate(c,d,C,e);return this.sign=E.sign,this.layer=E.layer,this.mag=E.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),g&&(this.sign*=-1),this}}if(a=t.split("f"),a.length===2){c=10;let g=!1;a[0].startsWith("-")&&(g=!0,a[0]=a[0].slice(1)),a[0]=a[0].replace("(",""),a[0]=a[0].replace(")","");let C=parseFloat(a[0]);if(a[1]=a[1].replace("(",""),a[1]=a[1].replace(")",""),d=parseFloat(a[1]),isFinite(C)||(C=1),isFinite(c)&&isFinite(d)){let E=s.tetrate(c,d,C,e);return this.sign=E.sign,this.layer=E.layer,this.mag=E.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),g&&(this.sign*=-1),this}}let M=t.split("e"),h=M.length-1;if(h===0){let g=parseFloat(t);if(isFinite(g))return this.fromNumber(g),s.fromStringCache.size>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}else if(h===1){let g=parseFloat(t);if(isFinite(g)&&g!==0)return this.fromNumber(g),s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}let f=t.split("e^");if(f.length===2){this.sign=1,f[0].startsWith("-")&&(this.sign=-1);let g="";for(let C=0;C=43&&E<=57||E===101)g+=f[1].charAt(C);else{if(this.layer=parseFloat(g),this.mag=parseFloat(f[1].substr(C+1)),this.layer<0||this.layer%1!=0){let T=s.tetrate(10,this.layer,this.mag,e);this.sign=T.sign,this.layer=T.layer,this.mag=T.mag}return this.normalize(),s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}}}if(h<1)return this.sign=0,this.layer=0,this.mag=0,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this;let m=parseFloat(M[0]);if(m===0)return this.sign=0,this.layer=0,this.mag=0,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this;let p=parseFloat(M[M.length-1]);if(h>=2){let g=parseFloat(M[M.length-2]);isFinite(g)&&(p*=Math.sign(g),p+=Vt(g))}if(!isFinite(m))this.sign=M[0]==="-"?-1:1,this.layer=h,this.mag=p;else if(h===1)this.sign=Math.sign(m),this.layer=1,this.mag=p+Math.log10(Math.abs(m));else if(this.sign=Math.sign(m),this.layer=h,h===2){let g=s.mul(q(1,2,p),I(m));return this.sign=g.sign,this.layer=g.layer,this.mag=g.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}else this.mag=p;return this.normalize(),s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}fromValue(t){return t instanceof s?this.fromDecimal(t):typeof t=="number"?this.fromNumber(t):typeof t=="string"?this.fromString(t):(this.sign=0,this.layer=0,this.mag=0,this)}toNumber(){return this.mag===Number.POSITIVE_INFINITY&&this.layer===Number.POSITIVE_INFINITY&&this.sign===1?Number.POSITIVE_INFINITY:this.mag===Number.POSITIVE_INFINITY&&this.layer===Number.POSITIVE_INFINITY&&this.sign===-1?Number.NEGATIVE_INFINITY:Number.isFinite(this.layer)?this.layer===0?this.sign*this.mag:this.layer===1?this.sign*Math.pow(10,this.mag):this.mag>0?this.sign>0?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:0:Number.NaN}mantissaWithDecimalPlaces(t){return isNaN(this.m)?Number.NaN:this.m===0?0:dt(this.m,t)}magnitudeWithDecimalPlaces(t){return isNaN(this.mag)?Number.NaN:this.mag===0?0:dt(this.mag,t)}toString(){return isNaN(this.layer)||isNaN(this.sign)||isNaN(this.mag)?"NaN":this.mag===Number.POSITIVE_INFINITY||this.layer===Number.POSITIVE_INFINITY?this.sign===1?"Infinity":"-Infinity":this.layer===0?this.mag<1e21&&this.mag>1e-7||this.mag===0?(this.sign*this.mag).toString():this.m+"e"+this.e:this.layer===1?this.m+"e"+this.e:this.layer<=ge?(this.sign===-1?"-":"")+"e".repeat(this.layer)+this.mag:(this.sign===-1?"-":"")+"(e^"+this.layer+")"+this.mag}toExponential(t){return this.layer===0?(this.sign*this.mag).toExponential(t):this.toStringWithDecimalPlaces(t)}toFixed(t){return this.layer===0?(this.sign*this.mag).toFixed(t):this.toStringWithDecimalPlaces(t)}toPrecision(t){return this.e<=-7?this.toExponential(t-1):t>this.e?this.toFixed(t-this.exponent-1):this.toExponential(t-1)}valueOf(){return this.toString()}toJSON(){return this.toString()}toStringWithDecimalPlaces(t){return this.layer===0?this.mag<1e21&&this.mag>1e-7||this.mag===0?(this.sign*this.mag).toFixed(t):dt(this.m,t)+"e"+dt(this.e,t):this.layer===1?dt(this.m,t)+"e"+dt(this.e,t):this.layer<=ge?(this.sign===-1?"-":"")+"e".repeat(this.layer)+dt(this.mag,t):(this.sign===-1?"-":"")+"(e^"+this.layer+")"+dt(this.mag,t)}abs(){return O(this.sign===0?0:1,this.layer,this.mag)}neg(){return O(-this.sign,this.layer,this.mag)}negate(){return this.neg()}negated(){return this.neg()}sgn(){return this.sign}round(){return this.mag<0?O(0,0,0):this.layer===0?q(this.sign,0,Math.round(this.mag)):new s(this)}floor(){return this.mag<0?this.sign===-1?O(-1,0,1):O(0,0,0):this.sign===-1?this.neg().ceil().neg():this.layer===0?q(this.sign,0,Math.floor(this.mag)):new s(this)}ceil(){return this.mag<0?this.sign===1?O(1,0,1):O(0,0,0):this.sign===-1?this.neg().floor().neg():this.layer===0?q(this.sign,0,Math.ceil(this.mag)):new s(this)}trunc(){return this.mag<0?O(0,0,0):this.layer===0?q(this.sign,0,Math.trunc(this.mag)):new s(this)}add(t){let e=I(t);if(this.eq(s.dInf)&&e.eq(s.dNegInf)||this.eq(s.dNegInf)&&e.eq(s.dInf))return O(Number.NaN,Number.NaN,Number.NaN);if(!Number.isFinite(this.layer))return new s(this);if(!Number.isFinite(e.layer))return new s(e);if(this.sign===0)return new s(e);if(e.sign===0)return new s(this);if(this.sign===-e.sign&&this.layer===e.layer&&this.mag===e.mag)return O(0,0,0);let r,i;if(this.layer>=2||e.layer>=2)return this.maxabs(e);if(s.cmpabs(this,e)>0?(r=new s(this),i=new s(e)):(r=new s(e),i=new s(this)),r.layer===0&&i.layer===0)return s.fromNumber(r.sign*r.mag+i.sign*i.mag);let n=r.layer*Math.sign(r.mag),o=i.layer*Math.sign(i.mag);if(n-o>=2)return r;if(n===0&&o===-1){if(Math.abs(i.mag-Math.log10(r.mag))>Yt)return r;{let l=Math.pow(10,Math.log10(r.mag)-i.mag),c=i.sign+r.sign*l;return q(Math.sign(c),1,i.mag+Math.log10(Math.abs(c)))}}if(n===1&&o===0){if(Math.abs(r.mag-Math.log10(i.mag))>Yt)return r;{let l=Math.pow(10,r.mag-Math.log10(i.mag)),c=i.sign+r.sign*l;return q(Math.sign(c),1,Math.log10(i.mag)+Math.log10(Math.abs(c)))}}if(Math.abs(r.mag-i.mag)>Yt)return r;{let l=Math.pow(10,r.mag-i.mag),c=i.sign+r.sign*l;return q(Math.sign(c),1,i.mag+Math.log10(Math.abs(c)))}throw Error("Bad arguments to add: "+this+", "+t)}plus(t){return this.add(t)}sub(t){return this.add(I(t).neg())}subtract(t){return this.sub(t)}minus(t){return this.sub(t)}mul(t){let e=I(t);if(this.eq(s.dInf)&&e.eq(s.dNegInf)||this.eq(s.dNegInf)&&e.eq(s.dInf))return O(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.mag==Number.POSITIVE_INFINITY&&e.eq(s.dZero)||this.eq(s.dZero)&&this.mag==Number.POSITIVE_INFINITY)return O(Number.NaN,Number.NaN,Number.NaN);if(!Number.isFinite(this.layer))return new s(this);if(!Number.isFinite(e.layer))return new s(e);if(this.sign===0||e.sign===0)return O(0,0,0);if(this.layer===e.layer&&this.mag===-e.mag)return O(this.sign*e.sign,0,1);let r,i;if(this.layer>e.layer||this.layer==e.layer&&Math.abs(this.mag)>Math.abs(e.mag)?(r=new s(this),i=new s(e)):(r=new s(e),i=new s(this)),r.layer===0&&i.layer===0)return s.fromNumber(r.sign*i.sign*r.mag*i.mag);if(r.layer>=3||r.layer-i.layer>=2)return q(r.sign*i.sign,r.layer,r.mag);if(r.layer===1&&i.layer===0)return q(r.sign*i.sign,1,r.mag+Math.log10(i.mag));if(r.layer===1&&i.layer===1)return q(r.sign*i.sign,1,r.mag+i.mag);if(r.layer===2&&i.layer===1){let n=q(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(q(Math.sign(i.mag),i.layer-1,Math.abs(i.mag)));return q(r.sign*i.sign,n.layer+1,n.sign*n.mag)}if(r.layer===2&&i.layer===2){let n=q(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(q(Math.sign(i.mag),i.layer-1,Math.abs(i.mag)));return q(r.sign*i.sign,n.layer+1,n.sign*n.mag)}throw Error("Bad arguments to mul: "+this+", "+t)}multiply(t){return this.mul(t)}times(t){return this.mul(t)}div(t){let e=I(t);return this.mul(e.recip())}divide(t){return this.div(t)}divideBy(t){return this.div(t)}dividedBy(t){return this.div(t)}recip(){return this.mag===0?O(Number.NaN,Number.NaN,Number.NaN):this.mag===Number.POSITIVE_INFINITY?O(0,0,0):this.layer===0?q(this.sign,0,1/this.mag):q(this.sign,this.layer,-this.mag)}reciprocal(){return this.recip()}reciprocate(){return this.recip()}mod(t,e=!1){let r=I(t),i=r.abs();if(this.eq(s.dZero)||i.eq(s.dZero))return O(0,0,0);if(e){let l=this.abs().mod(i);return this.sign==-1!=(r.sign==-1)&&(l=r.abs().sub(l)),l.mul(r.sign)}let n=this.toNumber(),o=i.toNumber();return isFinite(n)&&isFinite(o)&&n!=0&&o!=0?new s(n%o):this.sub(i).eq(this)?O(0,0,0):i.sub(this).eq(i)?new s(this):this.sign==-1?this.abs().mod(i).neg():this.sub(this.div(i).floor().mul(i))}modulo(t,e=!1){return this.mod(t,e)}modular(t,e=!1){return this.mod(t,e)}cmp(t){let e=I(t);return this.sign>e.sign?1:this.sign0?this.layer:-this.layer,i=e.mag>0?e.layer:-e.layer;return r>i?1:re.mag?1:this.mag0?new s(e):new s(this)}clamp(t,e){return this.max(t).min(e)}clampMin(t){return this.max(t)}clampMax(t){return this.min(t)}cmp_tolerance(t,e){let r=I(t);return this.eq_tolerance(r,e)?0:this.cmp(r)}compare_tolerance(t,e){return this.cmp_tolerance(t,e)}eq_tolerance(t,e){let r=I(t);if(e==null&&(e=1e-7),this.sign!==r.sign||Math.abs(this.layer-r.layer)>1)return!1;let i=this.mag,n=r.mag;return this.layer>r.layer&&(n=Vt(n)),this.layer0?q(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):q(1,0,Math.log10(this.mag))}log10(){return this.sign<=0?O(Number.NaN,Number.NaN,Number.NaN):this.layer>0?q(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):q(this.sign,0,Math.log10(this.mag))}log(t){return t=I(t),this.sign<=0||t.sign<=0||t.sign===1&&t.layer===0&&t.mag===1?O(Number.NaN,Number.NaN,Number.NaN):this.layer===0&&t.layer===0?q(this.sign,0,Math.log(this.mag)/Math.log(t.mag)):s.div(this.log10(),t.log10())}log2(){return this.sign<=0?O(Number.NaN,Number.NaN,Number.NaN):this.layer===0?q(this.sign,0,Math.log2(this.mag)):this.layer===1?q(Math.sign(this.mag),0,Math.abs(this.mag)*3.321928094887362):this.layer===2?q(Math.sign(this.mag),1,Math.abs(this.mag)+.5213902276543247):q(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))}ln(){return this.sign<=0?O(Number.NaN,Number.NaN,Number.NaN):this.layer===0?q(this.sign,0,Math.log(this.mag)):this.layer===1?q(Math.sign(this.mag),0,Math.abs(this.mag)*2.302585092994046):this.layer===2?q(Math.sign(this.mag),1,Math.abs(this.mag)+.36221568869946325):q(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))}logarithm(t){return this.log(t)}pow(t){let e=I(t),r=new s(this),i=new s(e);if(r.sign===0)return i.eq(0)?O(1,0,1):r;if(r.sign===1&&r.layer===0&&r.mag===1)return r;if(i.sign===0)return O(1,0,1);if(i.sign===1&&i.layer===0&&i.mag===1)return r;let n=r.absLog10().mul(i).pow10();return this.sign===-1?Math.abs(i.toNumber()%2)%2===1?n.neg():Math.abs(i.toNumber()%2)%2===0?n:O(Number.NaN,Number.NaN,Number.NaN):n}pow10(){if(this.eq(s.dInf))return O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.eq(s.dNegInf))return O(0,0,0);if(!Number.isFinite(this.layer)||!Number.isFinite(this.mag))return O(Number.NaN,Number.NaN,Number.NaN);let t=new s(this);if(t.layer===0){let e=Math.pow(10,t.sign*t.mag);if(Number.isFinite(e)&&Math.abs(e)>=.1)return q(1,0,e);if(t.sign===0)return O(1,0,1);t=O(t.sign,t.layer+1,Math.log10(t.mag))}return t.sign>0&&t.mag>=0?q(t.sign,t.layer+1,t.mag):t.sign<0&&t.mag>=0?q(-t.sign,t.layer+1,-t.mag):O(1,0,1)}pow_base(t){return I(t).pow(this)}root(t){let e=I(t);return this.pow(e.recip())}factorial(){return this.mag<0?this.add(1).gamma():this.layer===0?this.add(1).gamma():this.layer===1?s.exp(s.mul(this,s.ln(this).sub(1))):s.exp(this)}gamma(){if(this.mag<0)return this.recip();if(this.layer===0){if(this.lt(O(1,0,24)))return s.fromNumber(Mr(this.sign*this.mag));let t=this.mag-1,e=.9189385332046727;e=e+(t+.5)*Math.log(t),e=e-t;let r=t*t,i=t,n=12*i,o=1/n,l=e+o;if(l===e||(e=l,i=i*r,n=360*i,o=1/n,l=e-o,l===e))return s.exp(e);e=l,i=i*r,n=1260*i;let c=1/n;return e=e+c,i=i*r,n=1680*i,c=1/n,e=e-c,s.exp(e)}else return this.layer===1?s.exp(s.mul(this,s.ln(this).sub(1))):s.exp(this)}lngamma(){return this.gamma().ln()}exp(){return this.mag<0?O(1,0,1):this.layer===0&&this.mag<=709.7?s.fromNumber(Math.exp(this.sign*this.mag)):this.layer===0?q(1,1,this.sign*Math.log10(Math.E)*this.mag):this.layer===1?q(1,2,this.sign*(Math.log10(.4342944819032518)+this.mag)):q(1,this.layer+1,this.sign*this.mag)}sqr(){return this.pow(2)}sqrt(){if(this.layer===0)return s.fromNumber(Math.sqrt(this.sign*this.mag));if(this.layer===1)return q(1,2,Math.log10(this.mag)-.3010299956639812);{let t=s.div(O(this.sign,this.layer-1,this.mag),O(1,0,2));return t.layer+=1,t.normalize(),t}}cube(){return this.pow(3)}cbrt(){return this.pow(1/3)}tetrate(t=2,e=O(1,0,1),r=!1){if(t===1)return s.pow(this,e);if(t===0)return new s(e);if(this.eq(s.dOne))return O(1,0,1);if(this.eq(-1))return s.pow(this,e);if(t===Number.POSITIVE_INFINITY){let o=this.toNumber();if(o<=1.444667861009766&&o>=.06598803584531254){let l=s.ln(this).neg(),c=l.lambertw().div(l);if(o<1)return c;let d=l.lambertw(!1).div(l);return o>1.444667861009099&&(c=d=s.fromNumber(Math.E)),e=I(e),e.eq(d)?d:e.lt(d)?c:O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}else return o>1.444667861009766?O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY):O(Number.NaN,Number.NaN,Number.NaN)}if(this.eq(s.dZero)){let o=Math.abs((t+1)%2);return o>1&&(o=2-o),s.fromNumber(o)}if(t<0)return s.iteratedlog(e,this,-t,r);e=new s(e);let i=t;t=Math.trunc(t);let n=i-t;if(this.gt(s.dZero)&&(this.lt(1)||this.lte(1.444667861009766)&&e.lte(s.ln(this).neg().lambertw(!1).div(s.ln(this).neg())))&&(i>1e4||!r)){let o=Math.min(1e4,t);e.eq(s.dOne)?e=this.pow(n):this.lt(1)?e=e.pow(1-n).mul(this.pow(e).pow(n)):e=e.layeradd(n,this);for(let l=0;l1e4&&Math.ceil(i)%2==1?this.pow(e):e}n!==0&&(e.eq(s.dOne)?this.gt(10)||r?e=this.pow(n):(e=s.fromNumber(s.tetrate_critical(this.toNumber(),n)),this.lt(2)&&(e=e.sub(1).mul(this.minus(1)).plus(1))):this.eq(10)?e=e.layeradd10(n,r):this.lt(1)?e=e.pow(1-n).mul(this.pow(e).pow(n)):e=e.layeradd(n,this,r));for(let o=0;o3)return O(e.sign,e.layer+(t-o-1),e.mag);if(o>1e4)return e}return e}iteratedexp(t=2,e=O(1,0,1),r=!1){return this.tetrate(t,e,r)}iteratedlog(t=10,e=1,r=!1){if(e<0)return s.tetrate(t,-e,this,r);t=I(t);let i=s.fromDecimal(this),n=e;e=Math.trunc(e);let o=n-e;if(i.layer-t.layer>3){let l=Math.min(e,i.layer-t.layer-3);e-=l,i.layer-=l}for(let l=0;l1e4)return i}return o>0&&o<1&&(t.eq(10)?i=i.layeradd10(-o,r):i=i.layeradd(-o,t,r)),i}slog(t=10,e=100,r=!1){let i=.001,n=!1,o=!1,l=this.slog_internal(t,r).toNumber();for(let c=1;c1&&o!=a&&(n=!0),o=a,n?i/=2:i*=2,i=Math.abs(i)*(a?-1:1),l+=i,i===0)break}return s.fromNumber(l)}slog_internal(t=10,e=!1){if(t=I(t),t.lte(s.dZero)||t.eq(s.dOne))return O(Number.NaN,Number.NaN,Number.NaN);if(t.lt(s.dOne))return this.eq(s.dOne)?O(0,0,0):this.eq(s.dZero)?O(-1,0,1):O(Number.NaN,Number.NaN,Number.NaN);if(this.mag<0||this.eq(s.dZero))return O(-1,0,1);if(t.lt(1.444667861009766)){let n=s.ln(t).neg(),o=n.lambertw().div(n);if(this.eq(o))return O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.gt(o))return O(Number.NaN,Number.NaN,Number.NaN)}let r=0,i=s.fromDecimal(this);if(i.layer-t.layer>3){let n=i.layer-t.layer-3;r+=n,i.layer-=n}for(let n=0;n<100;++n)if(i.lt(s.dZero))i=s.pow(t,i),r-=1;else{if(i.lte(s.dOne))return e?s.fromNumber(r+i.toNumber()-1):s.fromNumber(r+s.slog_critical(t.toNumber(),i.toNumber()));r+=1,i=s.log(i,t)}return s.fromNumber(r)}static slog_critical(t,e){return t>10?e-1:s.critical_section(t,e,wr)}static tetrate_critical(t,e){return s.critical_section(t,e,vr)}static critical_section(t,e,r,i=!1){e*=10,e<0&&(e=0),e>10&&(e=10),t<2&&(t=2),t>10&&(t=10);let n=0,o=0;for(let c=0;ct){let d=(t-bt[c])/(bt[c+1]-bt[c]);n=r[c][Math.floor(e)]*(1-d)+r[c+1][Math.floor(e)]*d,o=r[c][Math.ceil(e)]*(1-d)+r[c+1][Math.ceil(e)]*d;break}let l=e-Math.floor(e);return n<=0||o<=0?n*(1-l)+o*l:Math.pow(t,Math.log(n)/Math.log(t)*(1-l)+Math.log(o)/Math.log(t)*l)}layeradd10(t,e=!1){t=s.fromValue_noAlloc(t).toNumber();let r=s.fromDecimal(this);if(t>=1){r.mag<0&&r.layer>0?(r.sign=0,r.mag=0,r.layer=0):r.sign===-1&&r.layer==0&&(r.sign=1,r.mag=-r.mag);let i=Math.trunc(t);t-=i,r.layer+=i}if(t<=-1){let i=Math.trunc(t);if(t-=i,r.layer+=i,r.layer<0)for(let n=0;n<100;++n){if(r.layer++,r.mag=Math.log10(r.mag),!isFinite(r.mag))return r.sign===0&&(r.sign=1),r.layer<0&&(r.layer=0),r.normalize();if(r.layer>=0)break}}for(;r.layer<0;)r.layer++,r.mag=Math.log10(r.mag);return r.sign===0&&(r.sign=1,r.mag===0&&r.layer>=1&&(r.layer-=1,r.mag=1)),r.normalize(),t!==0?r.layeradd(t,10,e):r}layeradd(t,e,r=!1){let i=I(e);if(i.gt(1)&&i.lte(1.444667861009766)){let l=s.excess_slog(this,e,r),c=l[0].toNumber(),d=l[1],a=c+t,M=s.ln(e).neg(),h=M.lambertw().div(M),f=M.lambertw(!1).div(M),m=s.dOne;d==1?m=h.mul(f).sqrt():d==2&&(m=f.mul(2));let p=i.pow(m),g=Math.floor(a),C=a-g,E=m.pow(1-C).mul(p.pow(C));return s.tetrate(i,g,E,r)}let o=this.slog(e,100,r).toNumber()+t;return o>=0?s.tetrate(e,o,s.dOne,r):Number.isFinite(o)?o>=-1?s.log(s.tetrate(e,o+1,s.dOne,r),e):s.log(s.log(s.tetrate(e,o+2,s.dOne,r),e),e):O(Number.NaN,Number.NaN,Number.NaN)}static excess_slog(t,e,r=!1){t=I(t),e=I(e);let i=e;if(e=e.toNumber(),e==1||e<=0)return[O(Number.NaN,Number.NaN,Number.NaN),0];if(e>1.444667861009766)return[t.slog(e,100,r),0];let n=s.ln(e).neg(),o=n.lambertw().div(n),l=s.dInf;if(e>1&&(l=n.lambertw(!1).div(n)),e>1.444667861009099&&(o=l=s.fromNumber(Math.E)),t.lt(o))return[t.slog(e,100,r),0];if(t.eq(o))return[O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),0];if(t.eq(l))return[O(1,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),2];if(t.gt(l)){let c=l.mul(2),d=i.pow(c),a=0;if(t.gte(c)&&t.lt(d))a=0;else if(t.gte(d)){let g=d;for(a=1;g.lt(t);)if(g=i.pow(g),a=a+1,g.layer>3){let C=Math.floor(t.layer-g.layer+1);g=i.iteratedexp(C,g,r),a=a+C}g.gt(t)&&(g=g.log(e),a=a-1)}else if(t.lt(c)){let g=c;for(a=0;g.gt(t);)g=g.log(e),a=a-1}let M=0,h=0,f=.5,m=c,p=s.dZero;for(;f>1e-16;){if(h=M+f,m=c.pow(1-h).mul(d.pow(h)),p=s.iteratedexp(e,a,m),p.eq(t))return[new s(a+h),2];p.lt(t)&&(M+=f),f/=2}return p.neq_tolerance(t,1e-7)?[O(Number.NaN,Number.NaN,Number.NaN),0]:[new s(a+M),2]}if(t.lt(l)&&t.gt(o)){let c=o.mul(l).sqrt(),d=i.pow(c),a=0;if(t.lte(c)&&t.gt(d))a=0;else if(t.lte(d)){let g=d;for(a=1;g.gt(t);)g=i.pow(g),a=a+1;g.lt(t)&&(g=g.log(e),a=a-1)}else if(t.gt(c)){let g=c;for(a=0;g.lt(t);)g=g.log(e),a=a-1}let M=0,h=0,f=.5,m=c,p=s.dZero;for(;f>1e-16;){if(h=M+f,m=c.pow(1-h).mul(d.pow(h)),p=s.iteratedexp(e,a,m),p.eq(t))return[new s(a+h),1];p.gt(t)&&(M+=f),f/=2}return p.neq_tolerance(t,1e-7)?[O(Number.NaN,Number.NaN,Number.NaN),0]:[new s(a+M),1]}throw new Error("Unhandled behavior in excess_slog")}lambertw(t=!0){return this.lt(-.3678794411710499)?O(Number.NaN,Number.NaN,Number.NaN):t?this.abs().lt("1e-300")?new s(this):this.mag<0?s.fromNumber(Ht(this.toNumber())):this.layer===0?s.fromNumber(Ht(this.sign*this.mag)):this.lt("eee15")?Ne(this):this.ln():this.sign===1?O(Number.NaN,Number.NaN,Number.NaN):this.layer===0?s.fromNumber(Ht(this.sign*this.mag,1e-10,!1)):this.layer==1?Ne(this,1e-10,!1):this.neg().recip().lambertw().neg()}ssqrt(){return this.linear_sroot(2)}linear_sroot(t){if(t==1)return this;if(this.eq(s.dInf))return O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(!this.isFinite())return O(Number.NaN,Number.NaN,Number.NaN);if(t>0&&t<1)return this.root(t);if(t>-2&&t<-1)return s.fromNumber(t).add(2).pow(this.recip());if(t<=0)return O(Number.NaN,Number.NaN,Number.NaN);if(t==Number.POSITIVE_INFINITY){let e=this.toNumber();return e_r?this.pow(this.recip()):O(Number.NaN,Number.NaN,Number.NaN)}if(this.eq(1))return O(1,0,1);if(this.lt(0))return O(Number.NaN,Number.NaN,Number.NaN);if(this.lte("1ee-16"))return t%2==1?new s(this):O(Number.NaN,Number.NaN,Number.NaN);if(this.gt(1)){let e=s.dTen;this.gte(s.tetrate(10,t,1,!0))&&(e=this.iteratedlog(10,t-1,!0)),t<=1&&(e=this.root(t));let r=s.dZero,i=e.layer,n=e.iteratedlog(10,i,!0),o=n,l=n.div(2),c=!0;for(;c;)l=r.add(n).div(2),s.iteratedexp(10,i,l,!0).tetrate(t,1,!0).gt(this)?n=l:r=l,l.eq(o)?c=!1:o=l;return s.iteratedexp(10,i,l,!0)}else{let e=1,r=q(1,10,1),i=q(1,10,1),n=q(1,10,1),o=q(1,1,-16),l=s.dZero,c=q(1,10,1),d=o.pow10().recip(),a=s.dZero,M=d,h=d,f=Math.ceil(t)%2==0,m=0,p=q(1,10,1),g=!1,C=s.dZero,E=!1;for(;e<4;){if(e==2){if(f)break;n=q(1,10,1),o=r,e=3,c=q(1,10,1),p=q(1,10,1)}for(g=!1;o.neq(n);){if(C=o,o.pow10().recip().tetrate(t,1,!0).eq(1)&&o.pow10().recip().lt(.4))d=o.pow10().recip(),M=o.pow10().recip(),h=o.pow10().recip(),a=s.dZero,m=-1,e==3&&(p=o);else if(o.pow10().recip().tetrate(t,1,!0).eq(o.pow10().recip())&&!f&&o.pow10().recip().lt(.4))d=o.pow10().recip(),M=o.pow10().recip(),h=o.pow10().recip(),a=s.dZero,m=0;else if(o.pow10().recip().tetrate(t,1,!0).eq(o.pow10().recip().mul(2).tetrate(t,1,!0)))d=o.pow10().recip(),M=s.dZero,h=d.mul(2),a=d,f?m=-1:m=0;else{for(l=o.mul(12e-17),d=o.pow10().recip(),M=o.add(l).pow10().recip(),a=d.sub(M),h=d.add(a);M.tetrate(t,1,!0).eq(d.tetrate(t,1,!0))||h.tetrate(t,1,!0).eq(d.tetrate(t,1,!0))||M.gte(d)||h.lte(d);)l=l.mul(2),M=o.add(l).pow10().recip(),a=d.sub(M),h=d.add(a);if((e==1&&h.tetrate(t,1,!0).gt(d.tetrate(t,1,!0))&&M.tetrate(t,1,!0).gt(d.tetrate(t,1,!0))||e==3&&h.tetrate(t,1,!0).lt(d.tetrate(t,1,!0))&&M.tetrate(t,1,!0).lt(d.tetrate(t,1,!0)))&&(p=o),h.tetrate(t,1,!0).lt(d.tetrate(t,1,!0)))m=-1;else if(f)m=1;else if(e==3&&o.gt_tolerance(r,1e-8))m=0;else{for(;M.tetrate(t,1,!0).eq_tolerance(d.tetrate(t,1,!0),1e-8)||h.tetrate(t,1,!0).eq_tolerance(d.tetrate(t,1,!0),1e-8)||M.gte(d)||h.lte(d);)l=l.mul(2),M=o.add(l).pow10().recip(),a=d.sub(M),h=d.add(a);h.tetrate(t,1,!0).sub(d.tetrate(t,1,!0)).lt(d.tetrate(t,1,!0).sub(M.tetrate(t,1,!0)))?m=0:m=1}}if(m==-1&&(E=!0),e==1&&m==1||e==3&&m!=0)if(n.eq(q(1,10,1)))o=o.mul(2);else{let y=!1;if(g&&(m==1&&e==1||m==-1&&e==3)&&(y=!0),o=o.add(n).div(2),y)break}else if(n.eq(q(1,10,1)))n=o,o=o.div(2);else{let y=!1;if(g&&(m==1&&e==1||m==-1&&e==3)&&(y=!0),n=n.sub(c),o=o.sub(c),y)break}if(n.sub(o).div(2).abs().gt(c.mul(1.5))&&(g=!0),c=n.sub(o).div(2).abs(),o.gt("1e18")||o.eq(C))break}if(o.gt("1e18")||!E||p==q(1,10,1))break;e==1?r=p:e==3&&(i=p),e++}n=r,o=q(1,1,-18);let T=o,u=s.dZero,S=!0;for(;S;)if(n.eq(q(1,10,1))?u=o.mul(2):u=n.add(o).div(2),s.pow(10,u).recip().tetrate(t,1,!0).gt(this)?o=u:n=u,u.eq(T)?S=!1:T=u,o.gt("1e18"))return O(Number.NaN,Number.NaN,Number.NaN);if(u.eq_tolerance(r,1e-15)){if(i.eq(q(1,10,1)))return O(Number.NaN,Number.NaN,Number.NaN);for(n=q(1,10,1),o=i,T=o,u=s.dZero,S=!0;S;)if(n.eq(q(1,10,1))?u=o.mul(2):u=n.add(o).div(2),s.pow(10,u).recip().tetrate(t,1,!0).gt(this)?o=u:n=u,u.eq(T)?S=!1:T=u,o.gt("1e18"))return O(Number.NaN,Number.NaN,Number.NaN);return u.pow10().recip()}else return u.pow10().recip()}}static increasingInverse(t,e=!1,r=120,i=s.dLayerMax.neg(),n=s.dLayerMax,o=s.dLayerMax.neg(),l=s.dLayerMax){return function(c){if(c=new s(c),i=new s(i),n=new s(n),o=new s(o),l=new s(l),c.isNan()||n.lt(i)||c.lt(o)||c.gt(l))return O(Number.NaN,Number.NaN,Number.NaN);let d=function(w){return new s(w)},a=!0;if(n.lt(0))a=!1;else if(i.gt(0))a=!0;else{let w=t(s.dZero);if(w.eq(c))return O(0,0,0);a=c.gt(w),e&&(a=!a)}let M=a,h;if(a){if(n.lt(yt))a=!0;else if(i.gt(yt))a=!1;else{let w=t(new s(yt));a=c.lt(w),e&&(a=!a)}if(a){h=!0;let w=s.pow(10,tt).recip();if(n.lt(w))a=!1;else if(i.gt(w))a=!0;else{let N=t(new s(w));a=c.gt(N),e&&(a=!a)}if(a)d=function(N){return s.pow(10,N).recip()};else{let N=s.tetrate(10,tt);if(n.lt(N))a=!1;else if(i.gt(N))a=!0;else{let b=t(new s(N));a=c.gt(b),e&&(a=!a)}a?d=function(b){return s.tetrate(10,new s(b).toNumber()).recip()}:d=function(b){return new s(b).gt(Math.log10(Number.MAX_VALUE))?s.dZero:s.tetrate(10,s.pow(10,b).toNumber()).recip()}}}else{if(h=!1,n.lt(tt))a=!0;else if(i.gt(tt))a=!1;else{let w=t(new s(tt));a=c.lt(w),e&&(a=!a)}if(a)d=function(w){return new s(w)};else{let w=s.pow(10,tt);if(n.lt(w))a=!0;else if(i.gt(w))a=!1;else{let N=t(new s(w));a=c.lt(N),e&&(a=!a)}if(a)d=function(N){return s.pow(10,N)};else{let N=s.tetrate(10,tt);if(n.lt(N))a=!0;else if(i.gt(N))a=!1;else{let b=t(new s(N));a=c.lt(b),e&&(a=!a)}a?d=function(b){return s.tetrate(10,new s(b).toNumber())}:d=function(b){return new s(b).gt(Math.log10(Number.MAX_VALUE))?s.dInf:s.tetrate(10,s.pow(10,b).toNumber())}}}}}else{if(h=!0,n.lt(-yt))a=!1;else if(i.gt(-yt))a=!0;else{let w=t(new s(-yt));a=c.gt(w),e&&(a=!a)}if(a){let w=s.pow(10,tt).recip().neg();if(n.lt(w))a=!0;else if(i.gt(w))a=!1;else{let N=t(new s(w));a=c.lt(N),e&&(a=!a)}if(a)d=function(N){return s.pow(10,N).recip().neg()};else{let N=s.tetrate(10,tt).neg();if(n.lt(N))a=!0;else if(i.gt(N))a=!1;else{let b=t(new s(N));a=c.lt(b),e&&(a=!a)}a?d=function(b){return s.tetrate(10,new s(b).toNumber()).recip().neg()}:d=function(b){return new s(b).gt(Math.log10(Number.MAX_VALUE))?s.dZero:s.tetrate(10,s.pow(10,b).toNumber()).recip().neg()}}}else{if(h=!1,n.lt(-tt))a=!1;else if(i.gt(-tt))a=!0;else{let w=t(new s(-tt));a=c.gt(w),e&&(a=!a)}if(a)d=function(w){return s.neg(w)};else{let w=s.pow(10,tt).neg();if(n.lt(w))a=!1;else if(i.gt(w))a=!0;else{let N=t(new s(w));a=c.gt(N),e&&(a=!a)}if(a)d=function(N){return s.pow(10,N).neg()};else{let N=s.tetrate(10,tt).neg();if(n.lt(N))a=!1;else if(i.gt(N))a=!0;else{let b=t(new s(N));a=c.gt(b),e&&(a=!a)}a?d=function(b){return s.tetrate(10,new s(b).toNumber()).neg()}:d=function(b){return new s(b).gt(Math.log10(Number.MAX_VALUE))?s.dNegInf:s.tetrate(10,s.pow(10,b).toNumber()).neg()}}}}}let f=M!=h!=e,m=f?function(w,N){return s.gt(w,N)}:function(w,N){return s.lt(w,N)},p=.001,g=!1,C=!1,E=1,T=s.dOne,u=0,S=!1;for(var y=1;y1&&C!=N&&(g=!0),C=N,g?p/=2:p*=2,N!=f&&T.eq(n)||N==f&&T.eq(i))return O(Number.NaN,Number.NaN,Number.NaN);if(p=Math.abs(p)*(N?-1:1),E+=p,p===0||u==E)break}return d(E)}}pentate(t=2,e=O(1,0,1),r=!1){e=new s(e);let i=t;t=Math.floor(t);let n=i-t,o=s.dZero,l=s.dZero;if(n!==0)if(e.eq(s.dOne))++t,e=s.fromNumber(n);else return this.pentate(e.penta_log(this,void 0,r).plus(i).toNumber(),1,r);if(t>0)for(let c=0;c1e4)return e}else for(let c=0;c<-t;++c){if(o=e,e=e.slog(this,void 0,r),e.eq(o)||!isFinite(e.layer)||!isFinite(e.mag))return e.normalize();if(c>100)return e}return e}penta_log(t=10,e=100,r=!1){if(t=new s(t),t.lte(1))return O(Number.NaN,Number.NaN,Number.NaN);if(this.eq(1))return O(0,0,0);if(this.eq(s.dInf))return O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);let i=new s(1),n=0,o=1;if(this.lt(-1)){if(this.lte(-2))return O(Number.NaN,Number.NaN,Number.NaN);let c=t.tetrate(this.toNumber(),1,r);if(this.eq(c))return O(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.gt(c))return O(Number.NaN,Number.NaN,Number.NaN)}if(this.gt(1)){for(;i.lt(this);)if(n++,i=s.tetrate(t,i.toNumber(),1,r),n>1e3)return O(Number.NaN,Number.NaN,Number.NaN)}else for(;i.gt(this);)if(n--,i=s.slog(i,t,r),n>100)return O(Number.NaN,Number.NaN,Number.NaN);for(var l=1;l0&&t<1?this.root(t):this.eq(1)?O(1,0,1):this.lt(0)?O(Number.NaN,Number.NaN,Number.NaN):this.lt(1)?this.linear_sroot(t):s.increasingInverse(function(e){return s.pentate(e,t,1,!0)})(this):O(Number.NaN,Number.NaN,Number.NaN)}sin(){return this.mag<0?new s(this):this.layer===0?s.fromNumber(Math.sin(this.sign*this.mag)):O(0,0,0)}cos(){return this.mag<0?O(1,0,1):this.layer===0?s.fromNumber(Math.cos(this.sign*this.mag)):O(0,0,0)}tan(){return this.mag<0?new s(this):this.layer===0?s.fromNumber(Math.tan(this.sign*this.mag)):O(0,0,0)}asin(){return this.mag<0?new s(this):this.layer===0?s.fromNumber(Math.asin(this.sign*this.mag)):O(Number.NaN,Number.NaN,Number.NaN)}acos(){return this.mag<0?s.fromNumber(Math.acos(this.toNumber())):this.layer===0?s.fromNumber(Math.acos(this.sign*this.mag)):O(Number.NaN,Number.NaN,Number.NaN)}atan(){return this.mag<0?new s(this):this.layer===0?s.fromNumber(Math.atan(this.sign*this.mag)):s.fromNumber(Math.atan(this.sign*(1/0)))}sinh(){return this.exp().sub(this.negate().exp()).div(2)}cosh(){return this.exp().add(this.negate().exp()).div(2)}tanh(){return this.sinh().div(this.cosh())}asinh(){return s.ln(this.add(this.sqr().add(1).sqrt()))}acosh(){return s.ln(this.add(this.sqr().sub(1).sqrt()))}atanh(){return this.abs().gte(1)?O(Number.NaN,Number.NaN,Number.NaN):s.ln(this.add(1).div(s.fromNumber(1).sub(this))).div(2)}ascensionPenalty(t){return t===0?new s(this):this.root(s.pow(10,t))}egg(){return this.add(9)}lessThanOrEqualTo(t){return this.cmp(t)<1}lessThan(t){return this.cmp(t)<0}greaterThanOrEqualTo(t){return this.cmp(t)>-1}greaterThan(t){return this.cmp(t)>0}static smoothDamp(t,e,r,i){return new s(t).add(new s(e).minus(new s(t)).times(new s(r)).times(new s(i)))}clone(){return this}static clone(t){return s.fromComponents(t.sign,t.layer,t.mag)}softcap(t,e,r){let i=this.clone();return i.gte(t)&&([0,"pow"].includes(r)&&(i=i.div(t).pow(e).mul(t)),[1,"mul"].includes(r)&&(i=i.sub(t).div(e).add(t))),i}static softcap(t,e,r,i){return new s(t).softcap(e,r,i)}scale(t,e,r,i=!1){t=new s(t),e=new s(e);let n=this.clone();return n.gte(t)&&([0,"pow"].includes(r)&&(n=i?n.mul(t.pow(e.sub(1))).root(e):n.pow(e).div(t.pow(e.sub(1)))),[1,"exp"].includes(r)&&(n=i?n.div(t).max(1).log(e).add(t):s.pow(e,n.sub(t)).mul(t))),n}static scale(t,e,r,i,n=!1){return new s(t).scale(e,r,i,n)}format(t=2,e=9,r="mixed_sc"){return gt.format(this.clone(),t,e,r)}static format(t,e=2,r=9,i="mixed_sc"){return gt.format(new s(t),e,r,i)}formatST(t=2,e=9,r="st"){return gt.format(this.clone(),t,e,r)}static formatST(t,e=2,r=9,i="st"){return gt.format(new s(t),e,r,i)}formatGain(t,e="mixed_sc",r,i){return gt.formatGain(this.clone(),t,e,r,i)}static formatGain(t,e,r="mixed_sc",i,n){return gt.formatGain(new s(t),e,r,i,n)}toRoman(t=5e3){t=new s(t);let e=this.clone();if(e.gte(t)||e.lt(1))return e;let r=e.toNumber(),i={M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1},n="";for(let o of Object.keys(i)){let l=Math.floor(r/i[o]);r-=l*i[o],n+=o.repeat(l)}return n}static toRoman(t,e){return new s(t).toRoman(e)}static random(t=0,e=1){return t=new s(t),e=new s(e),t=t.lt(e)?t:e,e=e.gt(t)?e:t,new s(Math.random()).mul(e.sub(t)).add(t)}static randomProb(t){return new s(Math.random()).lt(t)}};s.dZero=O(0,0,0),s.dOne=O(1,0,1),s.dNegOne=O(-1,0,1),s.dTwo=O(1,0,2),s.dTen=O(1,0,10),s.dNaN=O(Number.NaN,Number.NaN,Number.NaN),s.dInf=O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),s.dNegInf=O(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),s.dNumberMax=q(1,0,Number.MAX_VALUE),s.dNumberMin=q(1,0,Number.MIN_VALUE),s.dLayerSafeMax=q(1,Number.MAX_SAFE_INTEGER,tt-1),s.dLayerSafeMin=q(1,Number.MAX_SAFE_INTEGER,-(tt-1)),s.dLayerMax=q(1,Number.MAX_VALUE,tt-1),s.dLayerMin=q(1,Number.MAX_VALUE,-(tt-1)),s.fromStringCache=new zt(pr),ot([Ft()],s.prototype,"sign",2),ot([Ft()],s.prototype,"mag",2),ot([Ft()],s.prototype,"layer",2),s=ot([fr()],s);var{formats:gt,FORMATS:Ir}=hr(s);s.formats=gt;var At=class{get desc(){return this.description}get description(){return this.descriptionFn()}constructor(t){this.id=t.id,this.name=t.name??"",this.value=t.value,this.order=t.order??99,this.descriptionFn=t.description?typeof t.description=="function"?t.description:()=>t.description:()=>""}},Wt=class{constructor(t=1,e){this.addBoost=this.setBoost.bind(this),e=e?Array.isArray(e)?e:[e]:void 0,this.baseEffect=new s(t),this.boostArray=[],e&&e.forEach(r=>{this.boostArray.push(new At(r))})}getBoosts(t,e){let r=[],i=[];for(let n=0;nh),a=n,M=this.getBoosts(o,!0);M[0][0]?this.boostArray[M[1][0]]=new At({id:o,name:l,description:c,value:d,order:a}):this.boostArray.push(new At({id:o,name:l,description:c,value:d,order:a}))}else{t=Array.isArray(t)?t:[t];for(let o of t){let l=this.getBoosts(o.id,!0);l[0][0]?this.boostArray[l[1][0]]=new At(o):this.boostArray.push(new At(o))}}}clearBoosts(){this.boostArray.length=0}calculate(t=this.baseEffect){let e=new s(t),r=this.boostArray;r=r.sort((i,n)=>i.order-n.order);for(let i of r)e=i.value(e);return e}},ti=at(ct()),xt=30,Jt=.001;function Sr(t,e,r="geometric"){switch(t=new s(t),e=new s(e),r){case"arithmetic":case 1:return t.add(e).div(2);case"geometric":case 2:default:return t.mul(e).sqrt();case"harmonic":case 3:return s.dTwo.div(t.reciprocal().add(e.reciprocal()))}}function Qt(t,e,r,i){i=Object.assign({},{verbose:!1,mode:"geometric"},i),t=new s(t),e=new s(e),r=new s(r);let n,o;return i.mode==="geometric"?(n=t.sub(e).abs().div(t.abs().add(e.abs()).div(2)),o=n.lte(r)):(n=t.sub(e).abs(),o=n.lte(r)),(i.verbose===!0||i.verbose==="onlyOnFail"&&!o)&&console.log({a:t,b:e,tolerance:r,config:i,diff:n,result:o}),o}function Kt(t,e,r="geometric",i=xt,n=Jt,o=1,l){if(o=new s(o),l=new s(l??e),o.gt(l)&&([o,l]=[l,o]),t(l).eq(0))return{value:s.dZero,lowerBound:s.dZero,upperBound:s.dZero};if(t(l).lt(e))return console.warn("eMath.js: The function is not monotonically increasing. (f(n) < n)"),{value:l,lowerBound:l,upperBound:l};for(let d=0;d=0;c--){let d=r.add(l.mul(c)),a=r.add(l.mul(c+1)),M=o;if(o=o.add(t(d).add(t(a)).div(2).mul(l)),Qt(M,o,n,{verbose:!1,mode:"geometric"}))break}return o}function Xt(t,e,r=0,i,n){return r=new s(r),e=new s(e),e.sub(r).lte(xt)?ye(t,e,r,i):be(t,e,r,n)}function Ar(t,e=10,r=0,i=1e3){if(t=new s(t),e=new s(e),r=new s(r),i=new s(i),e.lt(1)||r.lt(1))return s.dNaN;let n=t.sign;if(t=t.abs(),t.gte(s.pow(e,i)))return t;let o=s.floor(s.log(t,e)),l=t.div(s.pow(e,o));return l=l.mul(s.pow(e,r)).round(),l=l.div(s.pow(e,r)),l=l.mul(s.pow(e,o)).mul(n),l}function ve(t,e,r,i=s.dInf,n,o,l=!1){t=new s(t),r=new s(r??e.level),i=new s(i);let c=i.sub(r);if(c.lt(0))return console.warn("eMath.js: Invalid target for calculateItem: ",c),[s.dZero,s.dZero];if(l=(typeof e.el=="function"?e.el():e.el)??l,c.eq(1)){let h=e.cost(e.level),f=t.gte(h),m=[s.dZero,s.dZero];return l?(m[0]=f?s.dOne:s.dZero,m):(m=[f?s.dOne:s.dZero,f?h:s.dZero],m)}if(e.costBulk){let[h,f]=e.costBulk(t,e.level,c),m=t.gte(f);return[m?h:s.dZero,m&&!l?f:s.dZero]}if(l){let h=p=>e.cost(p.add(r)),f=s.min(i,Kt(h,t,n,o).value.floor()),m=s.dZero;return[f,m]}let d=Kt(h=>Xt(e.cost,h,r),t,n,o).value.floor().min(r.add(c).sub(1)),a=Xt(e.cost,d,r);return[d.sub(r).add(1).max(0),a]}function we(t){return t=new s(t),`${t.sign}/${t.mag}/${t.layer}`}function Or(t){return`el/${we(t)}`}var vt=class{constructor(t){t=t??{},this.id=t.id,this.level=t.level?new s(t.level):s.dOne}};ot([Ft()],vt.prototype,"id",2),ot([St(()=>s)],vt.prototype,"level",2);var Me=class Ve{static{this.cacheSize=15}get data(){return this.dataPointerFn()}get description(){return this.descriptionFn(this.level,this,this.currencyPointerFn())}set description(e){this.descriptionFn=typeof e=="function"?e:()=>e}get level(){return((this??{data:{level:s.dOne}}).data??{level:s.dOne}).level}set level(e){this.data.level=new s(e)}constructor(e,r,i,n){let o=typeof r=="function"?r():r;this.dataPointerFn=typeof r=="function"?r:()=>o,this.currencyPointerFn=typeof i=="function"?i:()=>i,this.cache=new zt(n??Ve.cacheSize),this.id=e.id,this.name=e.name??e.id,this.descriptionFn=e.description?typeof e.description=="function"?e.description:()=>e.description:()=>"",this.cost=e.cost,this.costBulk=e.costBulk,this.maxLevel=e.maxLevel,this.effect=e.effect,this.el=e.el,this.defaultLevel=e.level??s.dOne}},ei=at(ct());function _e(t,e,r=s.dOne,i=s.dInf){if(t=new s(t),r=new s(r),i=new s(i),i.lt(0))return console.warn("eMath.js: Invalid target for calculateItem: ",i),[s.dZero,s.dZero];if(i.eq(1)){let l=e.cost(r);return[t.gte(l)?s.dOne:s.dZero,t.gte(l)?l:s.dZero]}let n=t.div(e.cost(r)).floor().min(i),o=e.cost(r).mul(n);return[n,o]}var Ie=class{constructor(t,e,r){this.defaultAmount=s.dZero;let i=typeof e=="function"?e():e;this.dataPointerFn=typeof e=="function"?e:()=>i,this.currencyPointerFn=typeof r=="function"?r:()=>r,this.id=t.id,this.name=t.name??t.id,this.cost=t.cost,this.effect=t.effect,this.descriptionFn=t.description?typeof t.description=="function"?t.description:()=>t.description:()=>"",this.defaultAmount=t.amount??s.dZero}get data(){return this.dataPointerFn()}get description(){return this.descriptionFn(this.amount,this,this.currencyPointerFn())}set description(t){this.descriptionFn=typeof t=="function"?t:()=>t}get amount(){return((this??{data:{amount:s.dOne}}).data??{amount:s.dOne}).amount}set amount(t){this.data.amount=new s(t)}},wt=class{constructor(t){t=t??{},this.id=t.id,this.amount=t.amount??s.dZero}};ot([Ft()],wt.prototype,"id",2),ot([St(()=>s)],wt.prototype,"amount",2);var ri=at(ct()),pt=class{constructor(){this.value=s.dZero,this.upgrades={},this.items={}}};ot([St(()=>s)],pt.prototype,"value",2),ot([St(()=>vt)],pt.prototype,"upgrades",2),ot([St(()=>wt)],pt.prototype,"items",2);var Se=class{get pointer(){return this.pointerFn()}get value(){return this.pointer.value}set value(t){this.pointer.value=t}constructor(t=new pt,e,r,i={defaultVal:s.dZero,defaultBoost:s.dOne}){this.defaultVal=i.defaultVal,this.defaultBoost=i.defaultBoost,this.pointerFn=typeof t=="function"?t:()=>t,this.boost=new Wt(this.defaultBoost),this.pointer.value=this.defaultVal,this.upgrades={},e&&this.addUpgrade(e),this.items={},r&&this.addItem(r)}onLoadData(){for(let t of Object.values(this.upgrades))this.runUpgradeEffect(t)}reset(t,e,r){let i={resetCurrency:!0,resetUpgradeLevels:!0,resetItemAmounts:!0,runUpgradeEffect:!0};if(typeof t=="object"?Object.assign(i,t):Object.assign(i,{resetCurrency:t,resetUpgradeLevels:e,runUpgradeEffect:r}),i.resetCurrency&&(this.value=this.defaultVal),i.resetUpgradeLevels)for(let n of Object.values(this.upgrades))n.level=new s(n.defaultLevel),i.runUpgradeEffect&&this.runUpgradeEffect(n);if(i.resetItemAmounts)for(let n of Object.values(this.items))n.amount=new s(n.defaultAmount),i.runUpgradeEffect&&this.runItemEffect(n)}gain(t=1e3){let e=this.boost.calculate().mul(new s(t).div(1e3));return this.pointer.value=this.pointer.value.add(e),e}pointerAddUpgrade(t){let e=new vt(t);return this.pointer.upgrades[e.id]=e,e}pointerGetUpgrade(t){return this.pointer.upgrades[t]??null}getUpgrade(t){return this.upgrades[t]??null}queryUpgrade(t){let e=Object.keys(this.upgrades);if(t instanceof RegExp){let i=t;return e.filter(o=>i.test(o)).map(o=>this.upgrades[o])}return typeof t=="string"&&(t=[t]),e.filter(i=>t.includes(i)).map(i=>this.upgrades[i])}addUpgrade(t,e=!0){Array.isArray(t)||(t=[t]);let r=[];for(let i of t){this.pointerAddUpgrade(i);let n=new Me(i,()=>this.pointerGetUpgrade(i.id),()=>this);e&&this.runUpgradeEffect(n),this.upgrades[i.id]=n,r.push(n)}return r}updateUpgrade(t,e){let r=this.getUpgrade(t);r!==null&&Object.assign(r,e)}runUpgradeEffect(t){t.effect?.(t.level,t,this)}runItemEffect(t,e=s.dOne){e=new s(e),t.effect?.(t.amount,e,t,this)}calculateUpgrade(t,e=1/0,r,i){let n=this.getUpgrade(t);return n===null?(console.warn(`eMath.js: Upgrade "${t}" not found.`),[s.dZero,s.dZero]):(e=n.level.add(e),n.maxLevel!==void 0&&(e=s.min(e,n.maxLevel)),ve(this.value,n,n.level,e,r,i))}getNextCost(t,e=1,r,i){let n=this.getUpgrade(t);if(n===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),s.dZero;let o=this.calculateUpgrade(t,e,r,i)[0];return n.cost(n.level.add(o))}getNextCostMax(t,e=1,r,i){let n=this.getUpgrade(t);if(n===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),s.dZero;let o=this.calculateUpgrade(t,e,r,i);return n.cost(n.level.add(o[0])).add(o[1])}buyUpgrade(t,e,r,i){let n=this.getUpgrade(t);if(n===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),!1;let[o,l]=this.calculateUpgrade(t,e,r,i);return o.lte(0)?!1:(this.pointer.value=this.pointer.value.sub(l),n.level=n.level.add(o),this.runUpgradeEffect(n),!0)}pointerAddItem(t){let e=new wt(t);return this.pointer.items[t.id]=e,e}pointerGetItem(t){return this.pointer.items[t]??null}addItem(t,e=!0){Array.isArray(t)||(t=[t]);for(let r of t){this.pointerAddItem(r);let i=new Ie(r,()=>this.pointerGetItem(r.id),()=>this);e&&this.runItemEffect(i),this.items[r.id]=i}}getItem(t){return this.items[t]??null}calculateItem(t,e,r){let i=this.getItem(t);return i===null?(console.warn(`eMath.js: Item "${t}" not found.`),[s.dZero,s.dZero]):_e(this.value,i,e,r)}buyItem(t,e,r){let i=this.getItem(t);if(i===null)return console.warn(`eMath.js: Item "${t}" not found.`),!1;let[n,o]=this.calculateItem(t,e,r);return n.lte(0)?!1:(this.pointer.value=this.pointer.value.sub(o),i.amount=i.amount.add(n),this.runItemEffect(i,e),!0)}},ii=at(ct()),qt=class{constructor(t=0){this.value=new s(t)}};ot([St(()=>s)],qt.prototype,"value",2);var Ae=class{get pointer(){return this.pointerFn()}constructor(t,e=!0,r=0){this.initial=new s(r),t??=new qt(this.initial),this.pointerFn=typeof t=="function"?t:()=>t,this.boost=e?new Wt(this.initial):null}update(){console.warn("eMath.js: AttributeStatic.update is deprecated and will be removed in the future. The value is automatically updated when accessed."),this.boost&&(this.pointer.value=this.boost.calculate())}get value(){return this.boost&&(this.pointer.value=this.boost.calculate()),this.pointer.value}set value(t){if(this.boost)throw new Error("Cannot set value of attributeStatic when boost is enabled.");this.pointer.value=t}},Dt=class{constructor(t,e,r={},i){this.setValue=this.set.bind(this),this.getValue=this.get.bind(this),this.x=t,this.y=e,this.properties=typeof r=="function"?r(this):{...r},this.gridSymbol=i}get grid(){return te.getInstance(this.gridSymbol)}set(t,e){return this.properties[t]=e,e}get(t){return this.properties[t]}translate(t=0,e=0){return te.getInstance(this.gridSymbol).getCell(this.x+t,this.y+e)}direction(t,e=1,r){let i=this.grid;return(()=>{switch(t){case"up":return i.getCell(this.x,this.y-e);case"right":return i.getCell(this.x+e,this.y);case"down":return i.getCell(this.x,this.y+e);case"left":return i.getCell(this.x-e,this.y);case"adjacent":return i.getAdjacent(this.x,this.y,e,r);case"diagonal":return i.getDiagonal(this.x,this.y,e,r);case"encircling":return i.getEncircling(this.x,this.y,e,r);default:throw new Error("Invalid direction")}})()}up(t=1){return this.direction("up",t)}right(t=1){return this.direction("right",t)}down(t=1){return this.direction("down",t)}left(t=1){return this.direction("left",t)}};function Oe(t,e,r=!0){let i=r?"Size":"Coordinates";if(typeof t!="number"||typeof e!="number")throw new RangeError(`${i} must be numbers: ${t}, ${e}`);if(!Number.isInteger(t)||!Number.isInteger(e))throw new RangeError(`${i} must be integers: ${t}, ${e}`);if(t<0||e<0)throw new RangeError(`${i} must be positive: ${t}, ${e}`);if(!Number.isFinite(t)||!Number.isFinite(e))throw new RangeError(`${i} must be finite: ${t}, ${e}`);if(!Number.isSafeInteger(t)||!Number.isSafeInteger(e))throw new RangeError(`${i} must be safe integers: ${t}, ${e}`)}var it=class oe extends Array{constructor(e){e=Array.isArray(e)?e:[e],e=e.filter(r=>r!==void 0),super(...e),this.removeDuplicates()}removeDuplicates(){let e=[];this.forEach((r,i)=>{this.indexOf(r)!==i&&e.push(i)}),e.forEach(r=>this.splice(r,1))}translate(e=0,r=0){return new oe(this.map(i=>i.translate(e,r)))}direction(e,r,i){return new oe(this.flatMap(n=>n.direction(e,r,i)))}up(e){return this.direction("up",e)}right(e){return this.direction("right",e)}down(e){return this.direction("down",e)}left(e){return this.direction("left",e)}adjacent(e,r){return this.direction("adjacent",e,r)}diagonal(e,r){return this.direction("diagonal",e,r)}encircling(e,r){return this.direction("encircling",e,r)}},te=class ae{constructor(e,r,i){this.cells=[],this.gridSymbol=Symbol(),this.all=this.getAll.bind(this),this.allX=this.getAllX.bind(this),this.allY=this.getAllY.bind(this),this.get=this.getCell.bind(this),this.set=this.setCell.bind(this),ae.instances[this.gridSymbol]=this,this.starterProps=i??{},this.xSize=e,this.ySize=r??e,Oe(this.xSize,this.ySize,!0);for(let n=0;n{if(this.ySize!==n&&(this.ySizen))for(let o=n;o{if(this.xSize!==i){if(this.xSizei)for(let o=0;o{let t=!1,e=r=>(t||(console.warn("eMath.js: The E function is deprecated. Use the Decimal class directly."),t=!0),new s(r));return Object.getOwnPropertyNames(s).filter(r=>!Object.getOwnPropertyNames(class{}).includes(r)).forEach(r=>{e[r]=s[r]}),e})(),Er=ce,Ce={};Bt(Ce,{ConfigManager:()=>jt,DataManager:()=>Pe,EventManager:()=>Fe,EventTypes:()=>Te,Game:()=>Pr,GameAttribute:()=>xe,GameCurrency:()=>Le,GameReset:()=>re,KeyManager:()=>Ee,gameDefaultConfig:()=>qe,keys:()=>Fr});var ni=at(ct()),jt=class{constructor(t){this.configOptionTemplate=t}parse(t){if(typeof t>"u")return this.configOptionTemplate;function e(r,i){for(let n in i)typeof r[n]>"u"?r[n]=i[n]:typeof r[n]=="object"&&typeof i[n]=="object"&&!Array.isArray(r[n])&&!Array.isArray(i[n])&&(r[n]=e(r[n],i[n]));return r}return e(t,this.configOptionTemplate)}get options(){return this.configOptionTemplate}},Tr={autoAddInterval:!0,fps:30},Fr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 ".split("").concat(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),Ee=class He{constructor(e){if(this.addKeys=this.addKey.bind(this),this.keysPressed=[],this.binds=[],this.tickers=[],this.config=He.configManager.parse(e),this.config.autoAddInterval){let r=this.config.fps?this.config.fps:30;this.tickerInterval=setInterval(()=>{for(let i of this.tickers)i(1e3/r)},1e3/r)}typeof document>"u"||(this.tickers.push(r=>{for(let i of this.binds)(typeof i.onDownContinuous<"u"||typeof i.fn<"u")&&this.isPressing(i.id)&&(i.onDownContinuous?.(r),i.fn?.(r))}),document.addEventListener("keydown",r=>{this.logKey(r,!0),this.onAll("down",r.key)}),document.addEventListener("keyup",r=>{this.logKey(r,!1),this.onAll("up",r.key)}),document.addEventListener("keypress",r=>{this.onAll("press",r.key)}))}static{this.configManager=new jt(Tr)}changeFps(e){this.config.fps=e,this.tickerInterval&&(clearInterval(this.tickerInterval),this.tickerInterval=setInterval(()=>{for(let r of this.tickers)r(1e3/e)},1e3/e))}logKey(e,r){let i=e.key;r&&!this.keysPressed.includes(i)?this.keysPressed.push(i):!r&&this.keysPressed.includes(i)&&this.keysPressed.splice(this.keysPressed.indexOf(i),1)}onAll(e,r){for(let i of this.binds)if(i.key===r)switch(e){case"down":i.onDown?.();break;case"press":default:i.onPress?.();break;case"up":i.onUp?.();break}}isPressing(e){for(let r of this.binds)if(r.id===e)return this.keysPressed.includes(r.key);return!1}getBind(e){return this.binds.find(r=>r.id===e)}addKey(e,r,i){e=typeof e=="string"?{id:e,name:e,key:r??"",fn:i}:e,e=Array.isArray(e)?e:[e];for(let n of e){n.id=n.id??n.name;let o=this.getBind(n.id);if(o){Object.assign(o,n);continue}this.binds.push(n)}}},Te=(t=>(t.interval="interval",t.timeout="timeout",t))(Te||{}),kr={autoAddInterval:!0,fps:30},Fe=class We{constructor(e,r){if(this.addEvent=this.setEvent.bind(this),this.config=We.configManager.parse(e),this.events={},this.callbackEvents={},r)for(let i of r)this.callbackEvents[i]=[];if(this.config.autoAddInterval){let i=this.config.fps??30;this.tickerInterval=setInterval(()=>{this.tickerFunction()},1e3/i)}}static{this.configManager=new jt(kr)}on(e,r){this.callbackEvents[e]||(this.callbackEvents[e]=[]),this.callbackEvents[e].push({type:e,callback:r})}dispatch(e){if(this.callbackEvents[e])for(let r of this.callbackEvents[e])r.callback()}tickerFunction(){let e=Date.now();for(let r of Object.values(this.events))switch(r.type){case"interval":if(e-r.intervalLast>=r.delay){let i=e-r.intervalLast;r.callback(i),r.intervalLast=e}break;case"timeout":{let i=e-r.timeCreated;e-r.timeCreated>=r.delay&&(r.callback(i),delete this.events[r.name])}break}}changeFps(e){this.config.fps=e,this.tickerInterval&&(clearInterval(this.tickerInterval),this.tickerInterval=setInterval(()=>{this.tickerFunction()},1e3/e))}timeWarp(e){for(let r of Object.values(this.events))switch(r.type){case"interval":r.intervalLast-=e;break;case"timeout":r.timeCreated-=e;break}}setEvent(e,r,i,n){this.events[e]=(()=>{switch(r){case"interval":return{name:e,type:r,delay:typeof i=="number"?i:i.toNumber(),callback:n,timeCreated:Date.now(),intervalLast:Date.now()};case"timeout":default:return{name:e,type:r,delay:typeof i=="number"?i:i.toNumber(),callback:n,timeCreated:Date.now()}}})()}removeEvent(e){delete this.events[e]}},si=at(ct()),ke=at(er()),ee=at(nr()),Pe=class{constructor(t,e){this.data={},this.static={},this.eventsOnLoad=[],this.gameRef=typeof t=="function"?t():t,this.localStorage=e??(typeof window>"u"?(console.warn("eMath.js: Local storage is not supported. Methods that rely on local storage will not work. You can use compileData() and decompileData() instead to implement a custom save system."),null):window.localStorage)}addEventOnLoad(t){this.eventsOnLoad.push(t)}setData(t,e){typeof this.data[t]>"u"&&this.normalData&&console.warn("eMath.js: After initializing data, you should not add new properties to data."),this.data[t]=e;let r=()=>this.data;return{get value(){return r()[t]},set value(i){r()[t]=i},setValue(i){r()[t]=i}}}getData(t){return this.data[t]}setStatic(t,e){return console.warn("eMath.js: setStatic: Static data is basically useless and should not be used. Use variables in local scope instead."),typeof this.static[t]>"u"&&this.normalData&&console.warn("eMath.js: After initializing data, you should not add new properties to staticData."),this.static[t]=e,this.static[t]}getStatic(t){return console.warn("eMath.js: Static data is basically useless and should not be used. Use variables in local scope instead."),this.static[t]}init(){this.normalData=this.data,this.normalDataPlain=$t(this.data)}compileDataRaw(t=this.data){this.gameRef.eventManager.dispatch("beforeCompileData");let e=$t(t),r=(0,ee.default)(`${this.gameRef.config.name.id}/${JSON.stringify(e)}`),i;try{i="9.5.0"}catch{i="9.3.0"}return[{hash:r,game:{title:this.gameRef.config.name.title,id:this.gameRef.config.name.id,version:this.gameRef.config.name.version},emath:{version:i}},e]}compileData(t=this.data){let e=JSON.stringify(this.compileDataRaw(t));return(0,ke.compressToBase64)(e)}decompileData(t){if(!t&&this.localStorage&&(t=this.localStorage.getItem(`${this.gameRef.config.name.id}-data`)),!t&&!this.localStorage)return console.warn("eMath.js: Local storage is not supported. Methods that rely on local storage will not work: decompileData() requires the data to be passed as an argument."),null;if(!t)return null;let e;try{return e=JSON.parse((0,ke.decompressFromBase64)(t)),e}catch(r){if(r instanceof SyntaxError)console.error(`Failed to decompile data (corrupted) "${t}":`,r);else throw r;return null}}validateData(t){let[e,r]=t;if(typeof e=="string")return(0,ee.default)(`${this.gameRef.config.name.id}/${JSON.stringify(r)}`)===e;let i=e.hash,n=(0,ee.default)(`${this.gameRef.config.name.id}/${JSON.stringify(r)}`);return i===n}resetData(t=!1){if(!this.normalData)throw new Error("dataManager.resetData(): You must call init() before writing to data.");this.data=this.normalData,this.saveData(),t&&window.location.reload()}saveData(t=this.compileData()){if(this.gameRef.eventManager.dispatch("beforeSaveData"),!t)throw new Error("dataManager.saveData(): Data to save is empty.");if(!this.localStorage)throw new Error("dataManager.saveData(): Local storage is not supported. You can use compileData() instead to implement a custom save system.");this.localStorage.setItem(`${this.gameRef.config.name.id}-data`,t),this.gameRef.eventManager.dispatch("saveData")}exportData(){let t=this.compileData();if(prompt("Download save data?:",t)!=null){let e=new Blob([t],{type:"text/plain"}),r=document.createElement("a");r.href=URL.createObjectURL(e),r.download=`${this.gameRef.config.name.id}-data.txt`,r.textContent=`Download ${this.gameRef.config.name.id}-data.txt file`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}}parseData(t=this.decompileData(),e=!0){if((!this.normalData||!this.normalDataPlain)&&e)throw new Error("dataManager.parseData(): You must call init() before writing to data.");if(!t)return null;let[,r]=t;function i(h){return typeof h=="object"&&h?.constructor===Object}let n=(h,f)=>Object.prototype.hasOwnProperty.call(h,f);function o(h,f,m){if(!h||!f||!m)return console.warn("eMath.js: dataManager.deepMerge(): Missing arguments:",h,f,m),m??{};let p=m;for(let g in h)if(n(h,g)&&!n(m,g)&&(p[g]=h[g]),f[g]instanceof pt){let C=h[g],E=m[g];if(Array.isArray(E.upgrades)){let T=E.upgrades;E.upgrades={};for(let u of T)E.upgrades[u.id]=u}E.upgrades={...C.upgrades,...E.upgrades},p[g]=E,E.items={...C.items,...E.items}}else i(h[g])&&i(m[g])&&(p[g]=o(h[g],f[g],m[g]));return p}let l=e?o(this.normalDataPlain,this.normalData,r):r,c=Object.getOwnPropertyNames(new vt({id:"",level:s.dZero})),d=Object.getOwnPropertyNames(new wt({id:"",amount:s.dZero}));function a(h,f){let m=Zt(h,f);if(m instanceof pt){for(let p in m.upgrades){let g=m.upgrades[p];if(!g||!c.every(C=>Object.getOwnPropertyNames(g).includes(C))){delete m.upgrades[p];continue}m.upgrades[p]=Zt(vt,g)}for(let p in m.items){let g=m.items[p];if(!g||!d.every(C=>Object.getOwnPropertyNames(g).includes(C))){delete m.items[p];continue}m.items[p]=Zt(wt,g)}}if(!m)throw new Error(`Failed to convert ${h.name} to class instance.`);return m}function M(h,f){if(!h||!f)throw new Error("dataManager.plainToInstanceRecursive(): Missing arguments.");let m=f;for(let p in h){if(f[p]===void 0){console.warn(`eMath.js: Missing property "${p}" in loaded data.`);continue}if(!i(f[p]))continue;let g=h[p].constructor;if(g===Object){m[p]=M(h[p],f[p]);continue}m[p]=a(g,f[p])}return m}return l=M(this.normalData,l),l}loadData(t=this.decompileData()){if(t=typeof t=="string"?this.decompileData(t):t,!t)return null;let e=this.validateData([t[0],$t(t[1])]),r=this.parseData(t);if(!r)return null;this.data=r;for(let i of this.eventsOnLoad)i();return this.gameRef.eventManager.dispatch("loadData"),e}},Le=class extends Se{get data(){return this.pointer}get static(){return this}constructor(t,e,r){if(typeof t=="function")throw new Error("GameCurrency constructor does not accept a function as the first parameter. Use the .addCurrency method instead.");super(...t),this.game=e,this.name=r,this.game.dataManager.addEventOnLoad(()=>{this.static.onLoadData()})}},xe=class extends Ae{get data(){return this.pointer}get static(){return this}constructor(t,e){if(typeof t=="function")throw new Error("GameAttribute constructor does not accept a function as the first parameter. Use the .addAttribute method instead.");super(...t),this.game=e}},re=class Je{static fromObject(e){return new Je(e.currenciesToReset,e.extender,e.onReset,e.condition)}constructor(e,r,i,n){this.currenciesToReset=Array.isArray(e)?e:[e],r=r??[],this.extender=Array.isArray(r)?r:[r],this.onReset=i,this.condition=n,this.id=Symbol()}reset(e=!1,r=!0,i=new Set){if(e||(typeof this.condition=="function"?!this.condition(this):!this.condition)&&typeof this.condition<"u")return;let n=()=>{this.onReset?.(this),this.currenciesToReset.forEach(o=>{o.static.reset()})};if(this.extender.length===0){n();return}this.extender.forEach(o=>{i.has(o.id)||(i.add(o.id),o.reset(r||e,r,i))}),n()}},qe={mode:"production",name:{title:"",id:"",version:"0.0.0"},settings:{framerate:30},initIntervalBasedManagers:!0,localStorage:void 0},Pr=class Qe{static{this.configManager=new jt(qe)}constructor(e){this.config=Qe.configManager.parse(e),this.dataManager=new Pe(this,this.config.localStorage),this.keyManager=new Ee({autoAddInterval:this.config.initIntervalBasedManagers,fps:this.config.settings.framerate}),this.eventManager=new Fe({autoAddInterval:this.config.initIntervalBasedManagers,fps:this.config.settings.framerate}),this.tickers=[]}init(){this.dataManager.init()}changeFps(e){this.keyManager.changeFps(e),this.eventManager.changeFps(e)}addCurrency(e,r=[],i=[]){return this.dataManager.setData(e,{currency:new pt}),new Le([()=>this.dataManager.getData(e).currency,r,i],this,e)}addAttribute(e,r=!0,i=0){return this.dataManager.setData(e,new qt(i)),new xe([this.dataManager.getData(e),r,i],this)}addReset(...e){return console.warn("eMath.js: Game.addReset is deprecated. Use the GameReset class instead."),new re(...e)}addResetFromObject(e){return console.warn("eMath.js: Game.addResetFromObject is deprecated. Use the GameReset.fromObject static method instead."),re.fromObject(e)}},Lr={...Er,...Ce},xr=Lr;if(typeof lt.exports=="object"&&typeof Et=="object"){var qr=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Object.getOwnPropertyNames(e))!Object.prototype.hasOwnProperty.call(t,n)&&n!==r&&Object.defineProperty(t,n,{get:()=>e[n],enumerable:!(i=Object.getOwnPropertyDescriptor(e,n))||i.enumerable});return t};lt.exports=qr(lt.exports,Et)}return lt.exports}); +"use strict";(function(Et,lt){var Pt=typeof exports=="object";if(typeof define=="function"&&define.amd)define([],lt);else if(typeof module=="object"&&module.exports)module.exports=lt();else{var ht=lt(),Lt=Pt?exports:Et;for(var Tt in ht)Lt[Tt]=ht[Tt]}})(typeof self<"u"?self:exports,()=>{var Et={},lt={exports:Et},Pt=Object.create,ht=Object.defineProperty,Lt=Object.getOwnPropertyDescriptor,Tt=Object.getOwnPropertyNames,ir=Object.getPrototypeOf,nr=Object.prototype.hasOwnProperty,Mt=(t,e)=>function(){return e||(0,t[Tt(t)[0]])((e={exports:{}}).exports,e),e.exports},Bt=(t,e)=>{for(var r in e)ht(t,r,{get:e[r],enumerable:!0})},le=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Tt(e))!nr.call(t,n)&&n!==r&&ht(t,n,{get:()=>e[n],enumerable:!(i=Lt(e,n))||i.enumerable});return t},at=(t,e,r)=>(r=t!=null?Pt(ir(t)):{},le(e||!t||!t.__esModule?ht(r,"default",{value:t,enumerable:!0}):r,t)),sr=t=>le(ht({},"__esModule",{value:!0}),t),ot=(t,e,r,i)=>{for(var n=i>1?void 0:i?Lt(e,r):e,o=t.length-1,u;o>=0;o--)(u=t[o])&&(n=(i?u(e,r,n):u(n))||n);return i&&n&&ht(e,r,n),n},ct=Mt({"node_modules/reflect-metadata/Reflect.js"(){var t;(function(e){(function(r){var i=typeof globalThis=="object"?globalThis:typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:m(),n=o(e);typeof i.Reflect<"u"&&(n=o(i.Reflect,n)),r(n,i),typeof i.Reflect>"u"&&(i.Reflect=e);function o(a,M){return function(h,f){Object.defineProperty(a,h,{configurable:!0,writable:!0,value:f}),M&&M(h,f)}}function u(){try{return Function("return this;")()}catch{}}function c(){try{return(0,eval)("(function() { return this; })()")}catch{}}function m(){return u()||c()}})(function(r,i){var n=Object.prototype.hasOwnProperty,o=typeof Symbol=="function",u=o&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",c=o&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",m=typeof Object.create=="function",a={__proto__:[]}instanceof Array,M=!m&&!a,h={create:m?function(){return oe(Object.create(null))}:a?function(){return oe({__proto__:null})}:function(){return oe({})},has:M?function(b,_){return n.call(b,_)}:function(b,_){return _ in b},get:M?function(b,_){return n.call(b,_)?b[_]:void 0}:function(b,_){return b[_]}},f=Object.getPrototypeOf(Function),d=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:ti(),v=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:ei(),N=typeof WeakMap=="function"?WeakMap:ri(),C=o?Symbol.for("@reflect-metadata:registry"):void 0,T=Qr(),E=Kr(T);function l(b,_,A,F){if(U(A)){if(!$e(b))throw new TypeError;if(!Ze(_))throw new TypeError;return X(b,_)}else{if(!$e(b))throw new TypeError;if(!J(_))throw new TypeError;if(!J(F)&&!U(F)&&!Ot(F))throw new TypeError;return Ot(F)&&(F=void 0),A=ft(A),st(b,_,A,F)}}r("decorate",l);function S(b,_){function A(F,R){if(!J(F))throw new TypeError;if(!U(R)&&!Wr(R))throw new TypeError;Rt(b,_,F,R)}return A}r("metadata",S);function p(b,_,A,F){if(!J(A))throw new TypeError;return U(F)||(F=ft(F)),Rt(b,_,A,F)}r("defineMetadata",p);function w(b,_,A){if(!J(_))throw new TypeError;return U(A)||(A=ft(A)),H(b,_,A)}r("hasMetadata",w);function g(b,_,A){if(!J(_))throw new TypeError;return U(A)||(A=ft(A)),Z(b,_,A)}r("hasOwnMetadata",g);function y(b,_,A){if(!J(_))throw new TypeError;return U(A)||(A=ft(A)),W(b,_,A)}r("getMetadata",y);function k(b,_,A){if(!J(_))throw new TypeError;return U(A)||(A=ft(A)),Nt(b,_,A)}r("getOwnMetadata",k);function P(b,_){if(!J(b))throw new TypeError;return U(_)||(_=ft(_)),Ut(b,_)}r("getMetadataKeys",P);function G(b,_){if(!J(b))throw new TypeError;return U(_)||(_=ft(_)),Gt(b,_)}r("getOwnMetadataKeys",G);function Y(b,_,A){if(!J(_))throw new TypeError;if(U(A)||(A=ft(A)),!J(_))throw new TypeError;U(A)||(A=ft(A));var F=kt(_,A,!1);return U(F)?!1:F.OrdinaryDeleteMetadata(b,_,A)}r("deleteMetadata",Y);function X(b,_){for(var A=b.length-1;A>=0;--A){var F=b[A],R=F(_);if(!U(R)&&!Ot(R)){if(!Ze(R))throw new TypeError;_=R}}return _}function st(b,_,A,F){for(var R=b.length-1;R>=0;--R){var Q=b[R],et=Q(_,A,F);if(!U(et)&&!Ot(et)){if(!J(et))throw new TypeError;F=et}}return F}function H(b,_,A){var F=Z(b,_,A);if(F)return!0;var R=se(_);return Ot(R)?!1:H(b,R,A)}function Z(b,_,A){var F=kt(_,A,!1);return U(F)?!1:ze(F.OrdinaryHasOwnMetadata(b,_,A))}function W(b,_,A){var F=Z(b,_,A);if(F)return Nt(b,_,A);var R=se(_);if(!Ot(R))return W(b,R,A)}function Nt(b,_,A){var F=kt(_,A,!1);if(!U(F))return F.OrdinaryGetOwnMetadata(b,_,A)}function Rt(b,_,A,F){var R=kt(A,F,!0);R.OrdinaryDefineOwnMetadata(b,_,A,F)}function Ut(b,_){var A=Gt(b,_),F=se(b);if(F===null)return A;var R=Ut(F,_);if(R.length<=0)return A;if(A.length<=0)return R;for(var Q=new v,et=[],z=0,L=A;z=0&&L=this._keys.length?(this._index=-1,this._keys=_,this._values=_):this._index++,{value:x,done:!1}}return{value:void 0,done:!0}},z.prototype.throw=function(L){throw this._index>=0&&(this._index=-1,this._keys=_,this._values=_),L},z.prototype.return=function(L){return this._index>=0&&(this._index=-1,this._keys=_,this._values=_),{value:L,done:!0}},z}(),F=function(){function z(){this._keys=[],this._values=[],this._cacheKey=b,this._cacheIndex=-2}return Object.defineProperty(z.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),z.prototype.has=function(L){return this._find(L,!1)>=0},z.prototype.get=function(L){var x=this._find(L,!1);return x>=0?this._values[x]:void 0},z.prototype.set=function(L,x){var D=this._find(L,!0);return this._values[D]=x,this},z.prototype.delete=function(L){var x=this._find(L,!1);if(x>=0){for(var D=this._keys.length,j=x+1;j>>8,h[f*2+1]=v%256}return h},decompressFromUint8Array:function(a){if(a==null)return m.decompress(a);for(var M=new Array(a.length/2),h=0,f=M.length;h>1}else{for(d=1,f=0;f>1}l--,l==0&&(l=Math.pow(2,p),p++),delete N[E]}else for(d=v[E],f=0;f>1;l--,l==0&&(l=Math.pow(2,p),p++),v[T]=S++,E=String(C)}if(E!==""){if(Object.prototype.hasOwnProperty.call(N,E)){if(E.charCodeAt(0)<256){for(f=0;f>1}else{for(d=1,f=0;f>1}l--,l==0&&(l=Math.pow(2,p),p++),delete N[E]}else for(d=v[E],f=0;f>1;l--,l==0&&(l=Math.pow(2,p),p++)}for(d=2,f=0;f>1;for(;;)if(g=g<<1,y==M-1){w.push(h(g));break}else y++;return w.join("")},decompress:function(a){return a==null?"":a==""?null:m._decompress(a.length,32768,function(M){return a.charCodeAt(M)})},_decompress:function(a,M,h){var f=[],d,v=4,N=4,C=3,T="",E=[],l,S,p,w,g,y,k,P={val:h(0),position:M,index:1};for(l=0;l<3;l+=1)f[l]=l;for(p=0,g=Math.pow(2,2),y=1;y!=g;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),p|=(w>0?1:0)*y,y<<=1;switch(d=p){case 0:for(p=0,g=Math.pow(2,8),y=1;y!=g;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),p|=(w>0?1:0)*y,y<<=1;k=i(p);break;case 1:for(p=0,g=Math.pow(2,16),y=1;y!=g;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),p|=(w>0?1:0)*y,y<<=1;k=i(p);break;case 2:return""}for(f[3]=k,S=k,E.push(k);;){if(P.index>a)return"";for(p=0,g=Math.pow(2,C),y=1;y!=g;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),p|=(w>0?1:0)*y,y<<=1;switch(k=p){case 0:for(p=0,g=Math.pow(2,8),y=1;y!=g;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),p|=(w>0?1:0)*y,y<<=1;f[N++]=i(p),k=N-1,v--;break;case 1:for(p=0,g=Math.pow(2,16),y=1;y!=g;)w=P.val&P.position,P.position>>=1,P.position==0&&(P.position=M,P.val=h(P.index++)),p|=(w>0?1:0)*y,y<<=1;f[N++]=i(p),k=N-1,v--;break;case 2:return E.join("")}if(v==0&&(v=Math.pow(2,C),C++),f[k])T=f[k];else if(k===N)T=S+S.charAt(0);else return null;E.push(T),f[N++]=S+T.charAt(0),v--,S=T,v==0&&(v=Math.pow(2,C),C++)}}};return m}();typeof define=="function"&&define.amd?define(function(){return r}):typeof e<"u"&&e!=null?e.exports=r:typeof angular<"u"&&angular!=null&&angular.module("LZString",[]).factory("LZString",function(){return r})}}),ar=Mt({"node_modules/crypt/crypt.js"(t,e){(function(){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i={rotl:function(n,o){return n<>>32-o},rotr:function(n,o){return n<<32-o|n>>>o},endian:function(n){if(n.constructor==Number)return i.rotl(n,8)&16711935|i.rotl(n,24)&4278255360;for(var o=0;o0;n--)o.push(Math.floor(Math.random()*256));return o},bytesToWords:function(n){for(var o=[],u=0,c=0;u>>5]|=n[u]<<24-c%32;return o},wordsToBytes:function(n){for(var o=[],u=0;u>>5]>>>24-u%32&255);return o},bytesToHex:function(n){for(var o=[],u=0;u>>4).toString(16)),o.push((n[u]&15).toString(16));return o.join("")},hexToBytes:function(n){for(var o=[],u=0;u>>6*(3-m)&63)):o.push("=");return o.join("")},base64ToBytes:function(n){n=n.replace(/[^A-Z0-9+\/]/ig,"");for(var o=[],u=0,c=0;u>>6-c*2);return o}};e.exports=i})()}}),fe=Mt({"node_modules/charenc/charenc.js"(t,e){var r={utf8:{stringToBytes:function(i){return r.bin.stringToBytes(unescape(encodeURIComponent(i)))},bytesToString:function(i){return decodeURIComponent(escape(r.bin.bytesToString(i)))}},bin:{stringToBytes:function(i){for(var n=[],o=0;o>>24)&16711935|(a[N]<<24|a[N]>>>8)&4278255360;a[M>>>5]|=128<>>9<<4)+14]=M;for(var C=u._ff,T=u._gg,E=u._hh,l=u._ii,N=0;N>>0,f=f+p>>>0,d=d+w>>>0,v=v+g>>>0}return r.endian([h,f,d,v])};u._ff=function(c,m,a,M,h,f,d){var v=c+(m&a|~m&M)+(h>>>0)+d;return(v<>>32-f)+m},u._gg=function(c,m,a,M,h,f,d){var v=c+(m&M|a&~M)+(h>>>0)+d;return(v<>>32-f)+m},u._hh=function(c,m,a,M,h,f,d){var v=c+(m^a^M)+(h>>>0)+d;return(v<>>32-f)+m},u._ii=function(c,m,a,M,h,f,d){var v=c+(a^(m|~M))+(h>>>0)+d;return(v<>>32-f)+m},u._blocksize=16,u._digestsize=16,e.exports=function(c,m){if(c==null)throw new Error("Illegal argument "+c);var a=r.wordsToBytes(u(c,m));return m&&m.asBytes?a:m&&m.asString?o.bytesToString(a):r.bytesToHex(a)}})()}}),ce={};Bt(ce,{default:()=>zr}),lt.exports=sr(ce);var si=at(ct()),oi=at(ct()),he={};Bt(he,{Attribute:()=>qt,AttributeStatic:()=>Ce,Boost:()=>Wt,BoostObject:()=>At,Currency:()=>pt,CurrencyStatic:()=>Oe,DEFAULT_ITERATIONS:()=>xt,Decimal:()=>s,E:()=>Pr,FORMATS:()=>Er,FormatTypeList:()=>pr,Grid:()=>te,GridCell:()=>Dt,GridCellCollection:()=>it,Item:()=>Ae,ItemData:()=>wt,LRUCache:()=>zt,ListNode:()=>de,ST_NAMES:()=>mt,UpgradeData:()=>vt,UpgradeStatic:()=>Ie,calculateItem:()=>Se,calculateSum:()=>Xt,calculateSumApprox:()=>we,calculateSumLoop:()=>ve,calculateUpgrade:()=>Me,decimalToJSONString:()=>_e,eMathMetadata:()=>me,equalsTolerance:()=>Qt,formats:()=>gt,inverseFunctionApprox:()=>Kt,roundingBase:()=>Fr,upgradeToCacheNameEL:()=>kr});var ai=at(ct()),me={version:(()=>{try{return"9.5.0"}catch{return"9.5.0"}})(),"break_eternity.js":{version:"2.1.0"}},zt=class{constructor(t){this.map=new Map,this.first=void 0,this.last=void 0,this.maxSize=t}get size(){return this.map.size}get(t){let e=this.map.get(t);if(e!==void 0)return e!==this.first&&(e===this.last?(this.last=e.prev,this.last.next=void 0):(e.prev.next=e.next,e.next.prev=e.prev),e.next=this.first,this.first.prev=e,this.first=e),e.value}set(t,e){if(this.maxSize<1)return;if(this.map.has(t))throw new Error("Cannot update existing keys in the cache");let r=new de(t,e);for(this.first===void 0?(this.first=r,this.last=r):(r.next=this.first,this.first.prev=r,this.first=r),this.map.set(t,r);this.map.size>this.maxSize;){let i=this.last;this.map.delete(i.key),this.last=i.prev,this.last.next=void 0}}},de=class{constructor(t,e){this.next=void 0,this.prev=void 0,this.key=t,this.value=e}},B;(function(t){t[t.PLAIN_TO_CLASS=0]="PLAIN_TO_CLASS",t[t.CLASS_TO_PLAIN=1]="CLASS_TO_PLAIN",t[t.CLASS_TO_CLASS=2]="CLASS_TO_CLASS"})(B||(B={}));var fr=function(){function t(){this._typeMetadatas=new Map,this._transformMetadatas=new Map,this._exposeMetadatas=new Map,this._excludeMetadatas=new Map,this._ancestorsMap=new Map}return t.prototype.addTypeMetadata=function(e){this._typeMetadatas.has(e.target)||this._typeMetadatas.set(e.target,new Map),this._typeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.addTransformMetadata=function(e){this._transformMetadatas.has(e.target)||this._transformMetadatas.set(e.target,new Map),this._transformMetadatas.get(e.target).has(e.propertyName)||this._transformMetadatas.get(e.target).set(e.propertyName,[]),this._transformMetadatas.get(e.target).get(e.propertyName).push(e)},t.prototype.addExposeMetadata=function(e){this._exposeMetadatas.has(e.target)||this._exposeMetadatas.set(e.target,new Map),this._exposeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.addExcludeMetadata=function(e){this._excludeMetadatas.has(e.target)||this._excludeMetadatas.set(e.target,new Map),this._excludeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.findTransformMetadatas=function(e,r,i){return this.findMetadatas(this._transformMetadatas,e,r).filter(function(n){return!n.options||n.options.toClassOnly===!0&&n.options.toPlainOnly===!0?!0:n.options.toClassOnly===!0?i===B.CLASS_TO_CLASS||i===B.PLAIN_TO_CLASS:n.options.toPlainOnly===!0?i===B.CLASS_TO_PLAIN:!0})},t.prototype.findExcludeMetadata=function(e,r){return this.findMetadata(this._excludeMetadatas,e,r)},t.prototype.findExposeMetadata=function(e,r){return this.findMetadata(this._exposeMetadatas,e,r)},t.prototype.findExposeMetadataByCustomName=function(e,r){return this.getExposedMetadatas(e).find(function(i){return i.options&&i.options.name===r})},t.prototype.findTypeMetadata=function(e,r){return this.findMetadata(this._typeMetadatas,e,r)},t.prototype.getStrategy=function(e){var r=this._excludeMetadatas.get(e),i=r&&r.get(void 0),n=this._exposeMetadatas.get(e),o=n&&n.get(void 0);return i&&o||!i&&!o?"none":i?"excludeAll":"exposeAll"},t.prototype.getExposedMetadatas=function(e){return this.getMetadata(this._exposeMetadatas,e)},t.prototype.getExcludedMetadatas=function(e){return this.getMetadata(this._excludeMetadatas,e)},t.prototype.getExposedProperties=function(e,r){return this.getExposedMetadatas(e).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?r===B.CLASS_TO_CLASS||r===B.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?r===B.CLASS_TO_PLAIN:!0}).map(function(i){return i.propertyName})},t.prototype.getExcludedProperties=function(e,r){return this.getExcludedMetadatas(e).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?r===B.CLASS_TO_CLASS||r===B.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?r===B.CLASS_TO_PLAIN:!0}).map(function(i){return i.propertyName})},t.prototype.clear=function(){this._typeMetadatas.clear(),this._exposeMetadatas.clear(),this._excludeMetadatas.clear(),this._ancestorsMap.clear()},t.prototype.getMetadata=function(e,r){var i=e.get(r),n;i&&(n=Array.from(i.values()).filter(function(h){return h.propertyName!==void 0}));for(var o=[],u=0,c=this.getAncestors(r);u0&&(u=u.filter(function(h){return!a.includes(h)})),this.options.version!==void 0&&(u=u.filter(function(h){var f=rt.findExposeMetadata(e,h);return!f||!f.options?!0:n.checkVersion(f.options.since,f.options.until)})),this.options.groups&&this.options.groups.length?u=u.filter(function(h){var f=rt.findExposeMetadata(e,h);return!f||!f.options?!0:n.checkGroups(f.options.groups)}):u=u.filter(function(h){var f=rt.findExposeMetadata(e,h);return!f||!f.options||!f.options.groups||!f.options.groups.length})}return this.options.excludePrefixes&&this.options.excludePrefixes.length&&(u=u.filter(function(M){return n.options.excludePrefixes.every(function(h){return M.substr(0,h.length)!==h})})),u=u.filter(function(M,h,f){return f.indexOf(M)===h}),u},t.prototype.checkVersion=function(e,r){var i=!0;return i&&e&&(i=this.options.version>=e),i&&r&&(i=this.options.versionNumber.MAX_SAFE_INTEGER)&&(w="\u03C9");let y=t.log(l,8e3).toNumber();if(p.equals(0))return w;if(p.gt(0)&&p.lte(3)){let G=[];for(let Y=0;YNumber.MAX_SAFE_INTEGER)&&(w="\u03C9");let y=t.log(l,8e3).toNumber();if(p.equals(0))return w;if(p.gt(0)&&p.lte(2)){let G=[];for(let Y=0;Y118?e.elemental.beyondOg(g):e.elemental.config.element_lists[l-1][w]},beyondOg(l){let S=Math.floor(Math.log10(l)),p=["n","u","b","t","q","p","h","s","o","e"],w="";for(let g=S;g>=0;g--){let y=Math.floor(l/Math.pow(10,g))%10;w==""?w=p[y].toUpperCase():w+=p[y]}return w},abbreviationLength(l){return l==1?1:Math.pow(Math.floor(l/2)+1,2)*2},getAbbreviationAndValue(l){let S=l.log(118).toNumber(),p=Math.floor(S)+1,w=e.elemental.abbreviationLength(p),g=S-p+1,y=Math.floor(g*w),k=e.elemental.getAbbreviation(p,g),P=new t(118).pow(p+y/w-1);return[k,P]},formatElementalPart(l,S){return S.eq(1)?l:`${S.toString()} ${l}`},format(l,S=2){if(l.gt(new t(118).pow(new t(118).pow(new t(118).pow(4)))))return"e"+e.elemental.format(l.log10(),S);let p=l.log(118),g=p.log(118).log(118).toNumber(),y=Math.max(4-g*2,1),k=[];for(;p.gte(1)&&k.length=y)return k.map(G=>e.elemental.formatElementalPart(G[0],G[1])).join(" + ");let P=new t(118).pow(p).toFixed(k.length===1?3:S);return k.length===0?P:k.length===1?`${P} \xD7 ${e.elemental.formatElementalPart(k[0][0],k[0][1])}`:`${P} \xD7 (${k.map(G=>e.elemental.formatElementalPart(G[0],G[1])).join(" + ")})`}},old_sc:{format(l,S){l=new t(l);let p=l.log10().floor();if(p.lt(9))return p.lt(3)?l.toFixed(S):l.floor().toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");{if(l.gte("eeee10")){let g=l.slog();return(g.gte(1e9)?"":t.dTen.pow(g.sub(g.floor())).toFixed(4))+"F"+e.old_sc.format(g.floor(),0)}let w=l.div(t.dTen.pow(p));return(p.log10().gte(9)?"":w.toFixed(4))+"e"+e.old_sc.format(p,0)}}},eng:{format(l,S=2){l=new t(l);let p=l.log10().floor();if(p.lt(9))return p.lt(3)?l.toFixed(S):l.floor().toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");{if(l.gte("eeee10")){let g=l.slog();return(g.gte(1e9)?"":t.dTen.pow(g.sub(g.floor())).toFixed(4))+"F"+e.eng.format(g.floor(),0)}let w=l.div(new t(1e3).pow(p.div(3).floor()));return(p.log10().gte(9)?"":w.toFixed(new t(4).sub(p.sub(p.div(3).floor().mul(3))).toNumber()))+"e"+e.eng.format(p.div(3).floor().mul(3),0)}}},mixed_sc:{format(l,S,p=9){l=new t(l);let w=l.log10().floor();return w.lt(303)&&w.gte(p)?m(l,S,p,"st"):m(l,S,p,"sc")}},layer:{layers:["infinity","eternity","reality","equality","affinity","celerity","identity","vitality","immunity","atrocity"],format(l,S=2,p){l=new t(l);let w=l.max(1).log10().max(1).log(r.log10()).floor();if(w.lte(0))return m(l,S,p,"sc");l=t.dTen.pow(l.max(1).log10().div(r.log10().pow(w)).sub(w.gte(1)?1:0));let g=w.div(10).floor(),y=w.toNumber()%10-1;return m(l,Math.max(4,S),p,"sc")+" "+(g.gte(1)?"meta"+(g.gte(2)?"^"+m(g,0,p,"sc"):"")+"-":"")+(isNaN(y)?"nanity":e.layer.layers[y])}},standard:{tier1(l){return mt[0][0][l%10]+mt[0][1][Math.floor(l/10)%10]+mt[0][2][Math.floor(l/100)]},tier2(l){let S=l%10,p=Math.floor(l/10)%10,w=Math.floor(l/100)%10,g="";return l<10?mt[1][0][l]:(p==1&&S==0?g+="Vec":g+=mt[1][1][S]+mt[1][2][p],g+=mt[1][3][w],g)}},inf:{format(l,S,p){l=new t(l);let w=0,g=new t(Number.MAX_VALUE),y=["","\u221E","\u03A9","\u03A8","\u028A"],k=["","","m","mm","mmm"];for(;l.gte(g);)l=l.log(g),w++;return w==0?m(l,S,p,"sc"):l.gte(3)?k[w]+y[w]+"\u03C9^"+m(l.sub(1),S,p,"sc"):l.gte(2)?k[w]+"\u03C9"+y[w]+"-"+m(g.pow(l.sub(2)),S,p,"sc"):k[w]+y[w]+"-"+m(g.pow(l.sub(1)),S,p,"sc")}},alphabet:{config:{alphabet:"abcdefghijklmnopqrstuvwxyz"},getAbbreviation(l,S=new t(1e15),p=!1,w=9){if(l=new t(l),S=new t(S).div(1e3),l.lt(S.mul(1e3)))return"";let{alphabet:g}=e.alphabet.config,y=g.length,k=l.log(1e3).sub(S.log(1e3)).floor(),P=k.add(1).log(y+1).ceil(),G="",Y=(X,st)=>{let H=X,Z="";for(let W=0;W=y)return"\u03C9";Z=g[Nt]+Z,H=H.sub(1).div(y).floor()}return Z};if(P.lt(w))G=Y(k,P);else{let X=P.sub(w).add(1),st=k.div(t.pow(y+1,X.sub(1))).floor();G=`${Y(st,new t(w))}(${X.gt("1e9")?X.format():X.format(0)})`}return G},format(l,S=2,p=9,w="mixed_sc",g=new t(1e15),y=!1,k){if(l=new t(l),g=new t(g).div(1e3),l.lt(g.mul(1e3)))return m(l,S,p,w);let P=e.alphabet.getAbbreviation(l,g,y,k),G=l.div(t.pow(1e3,l.log(1e3).floor()));return`${P.length>(k??9)+2?"":G.toFixed(S)+" "}${P}`}}},r=t.dTwo.pow(1024),i="\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089",n="\u2070\xB9\xB2\xB3\u2074\u2075\u2076\u2077\u2078\u2079";function o(l){return l.toFixed(0).split("").map(S=>S==="-"?"\u208B":i[parseInt(S,10)]).join("")}function u(l){return l.toFixed(0).split("").map(S=>S==="-"?"\u208B":n[parseInt(S,10)]).join("")}function c(l,S=2,p=9,w="st"){return m(l,S,p,w)}function m(l,S=2,p=9,w="mixed_sc"){l=new t(l);let g=l.lt(0)?"-":"";if(l.mag==1/0)return g+"Infinity";if(Number.isNaN(l.mag))return g+"NaN";if(l.lt(0)&&(l=l.mul(-1)),l.eq(0))return l.toFixed(S);let y=l.log10().floor();switch(w){case"sc":case"scientific":if(l.log10().lt(Math.min(-S,0))&&S>1){let k=l.log10().ceil(),P=l.div(k.eq(-1)?new t(.1):t.dTen.pow(k)),G=k.mul(-1).max(1).log10().gte(9);return g+(G?"":P.toFixed(2))+"e"+m(k,0,p,"mixed_sc")}else if(y.lt(p)){let k=Math.max(Math.min(S-y.toNumber(),S),0);return g+(k>0?l.toFixed(k):l.toFixed(k).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"))}else{if(l.gte("eeee10")){let G=l.slog();return(G.gte(1e9)?"":t.dTen.pow(G.sub(G.floor())).toFixed(2))+"F"+m(G.floor(),0)}let k=l.div(t.dTen.pow(y)),P=y.log10().gte(9);return g+(P?"":k.toFixed(2))+"e"+m(y,0,p,"mixed_sc")}case"st":case"standard":{let k=l.log(1e3).floor();if(k.lt(1))return g+l.toFixed(Math.max(Math.min(S-y.toNumber(),S),0));let P=k.mul(3),G=k.log10().floor();if(G.gte(3e3))return"e"+m(y,S,p,"st");let Y="";if(k.lt(4))Y=["","K","M","B"][Math.round(k.toNumber())];else{let H=Math.floor(k.log(1e3).toNumber());for(H<100&&(H=Math.max(H-1,0)),k=k.sub(1).div(t.dTen.pow(H*3));k.gt(0);){let Z=k.div(1e3).floor(),W=k.sub(Z.mul(1e3)).floor().toNumber();W>0&&(W==1&&!H&&(Y="U"),H&&(Y=e.standard.tier2(H)+(Y?"-"+Y:"")),W>1&&(Y=e.standard.tier1(W)+Y)),k=Z,H++}}let X=l.div(t.dTen.pow(P)),st=S===2?t.dTwo.sub(y.sub(P)).add(1).toNumber():S;return g+(G.gte(10)?"":X.toFixed(st)+" ")+Y}default:return e[w]||console.error('Invalid format type "',w,'"'),g+e[w].format(l,S,p)}}function a(l,S,p="mixed_sc",w,g){l=new t(l),S=new t(S);let y=l.add(S),k,P=y.div(l);return P.gte(10)&&l.gte(1e100)?(P=P.log10().mul(20),k="(+"+m(P,w,g,p)+" OoMs/sec)"):k="(+"+m(S,w,g,p)+"/sec)",k}function M(l,S=2,p="s"){return l=new t(l),l.gte(86400)?m(l.div(86400).floor(),0,12,"sc")+":"+M(l.mod(86400),S,"d"):l.gte(3600)||p=="d"?(l.div(3600).gte(10)||p!="d"?"":"0")+m(l.div(3600).floor(),0,12,"sc")+":"+M(l.mod(3600),S,"h"):l.gte(60)||p=="h"?(l.div(60).gte(10)||p!="h"?"":"0")+m(l.div(60).floor(),0,12,"sc")+":"+M(l.mod(60),S,"m"):(l.gte(10)||p!="m"?"":"0")+m(l,S,12,"sc")}function h(l,S=!1,p=0,w=9,g="mixed_sc"){let y=Gt=>m(Gt,p,w,g);l=new t(l);let k=l.mul(1e3).mod(1e3).floor(),P=l.mod(60).floor(),G=l.div(60).mod(60).floor(),Y=l.div(3600).mod(24).floor(),X=l.div(86400).mod(365.2425).floor(),st=l.div(31556952).floor(),H=st.eq(1)?" year":" years",Z=X.eq(1)?" day":" days",W=Y.eq(1)?" hour":" hours",Nt=G.eq(1)?" minute":" minutes",Rt=P.eq(1)?" second":" seconds",Ut=k.eq(1)?" millisecond":" milliseconds";return`${st.gt(0)?y(st)+H+", ":""}${X.gt(0)?y(X)+Z+", ":""}${Y.gt(0)?y(Y)+W+", ":""}${G.gt(0)?y(G)+Nt+", ":""}${P.gt(0)?y(P)+Rt+",":""}${S&&k.gt(0)?" "+y(k)+Ut:""}`.replace(/,([^,]*)$/,"$1").trim()}function f(l){return l=new t(l),m(t.dOne.sub(l).mul(100))+"%"}function d(l){return l=new t(l),m(l.mul(100))+"%"}function v(l,S=2){return l=new t(l),l.gte(1)?"\xD7"+l.format(S):"/"+l.pow(-1).format(S)}function N(l,S,p=10){return t.gte(l,10)?t.pow(p,t.log(l,p).pow(S)):new t(l)}function C(l,S=0){l=new t(l);let p=(k=>k.map((P,G)=>({name:P.name,altName:P.altName,value:t.pow(1e3,new t(G).add(1))})))([{name:"K",altName:"Kilo"},{name:"M",altName:"Mega"},{name:"G",altName:"Giga"},{name:"T",altName:"Tera"},{name:"P",altName:"Peta"},{name:"Decimal",altName:"Exa"},{name:"Z",altName:"Zetta"},{name:"Y",altName:"Yotta"},{name:"R",altName:"Ronna"},{name:"Q",altName:"Quetta"}]),w="",g=l.lte(0)?0:t.min(t.log(l,1e3).sub(1),p.length-1).floor().toNumber(),y=p[g];if(g===0)switch(S){case 1:w="";break;case 2:case 0:default:w=l.format();break}switch(S){case 1:w=y.name;break;case 2:w=l.divide(y.value).format();break;case 3:w=y.altName;break;case 0:default:w=`${l.divide(y.value).format()} ${y.name}`;break}return w}function T(l,S=!1){return`${C(l,2)} ${C(l,1)}eV${S?"/c^2":""}`}let E={...e,toSubscript:o,toSuperscript:u,formatST:c,format:m,formatGain:a,formatTime:M,formatTimeLong:h,formatReduction:f,formatPercent:d,formatMult:v,expMult:N,metric:C,ev:T};return{FORMATS:e,formats:E}}var Yt=17,tt=9e15,yr=Math.log10(9e15),yt=1/9e15,br=308,vr=-324,Ne=5,wr=1023,Mr=!0,_r=!1,Ir=function(){let t=[];for(let r=vr+1;r<=br;r++)t.push(+("1e"+r));let e=323;return function(r){return t[r+e]}}(),bt=[2,Math.E,3,4,5,6,7,8,9,10],Sr=[[1,1.0891180521811203,1.1789767925673957,1.2701455431742086,1.3632090180450092,1.4587818160364217,1.5575237916251419,1.6601571006859253,1.767485818836978,1.8804192098842727,2],[1,1.1121114330934079,1.231038924931609,1.3583836963111375,1.4960519303993531,1.6463542337511945,1.8121385357018724,1.996971324618307,2.2053895545527546,2.4432574483385254,Math.E],[1,1.1187738849693603,1.2464963939368214,1.38527004705667,1.5376664685821402,1.7068895236551784,1.897001227148399,2.1132403089001035,2.362480153784171,2.6539010333870774,3],[1,1.1367350847096405,1.2889510672956703,1.4606478703324786,1.6570295196661111,1.8850062585672889,2.1539465047453485,2.476829779693097,2.872061932789197,3.3664204535587183,4],[1,1.1494592900767588,1.319708228183931,1.5166291280087583,1.748171114438024,2.0253263297298045,2.3636668498288547,2.7858359149579424,3.3257226212448145,4.035730287722532,5],[1,1.159225940787673,1.343712473580932,1.5611293155111927,1.8221199554561318,2.14183924486326,2.542468319282638,3.0574682501653316,3.7390572020926873,4.6719550537360774,6],[1,1.1670905356972596,1.3632807444991446,1.5979222279405536,1.8842640123816674,2.2416069644878687,2.69893426559423,3.3012632110403577,4.121250340630164,5.281493033448316,7],[1,1.1736630594087796,1.379783782386201,1.6292821855668218,1.9378971836180754,2.3289975651071977,2.8384347394720835,3.5232708454565906,4.478242031114584,5.868592169644505,8],[1,1.1793017514670474,1.394054150657457,1.65664127441059,1.985170999970283,2.4069682290577457,2.9647310119960752,3.7278665320924946,4.814462547283592,6.436522247411611,9],[1,1.1840100246247336,1.4061375836156955,1.6802272208863964,2.026757028388619,2.4770056063449646,3.080525271755482,3.9191964192627284,5.135152840833187,6.989961179534715,10]],Ar=[[-1,-.9194161097107025,-.8335625019330468,-.7425599821143978,-.6466611521029437,-.5462617907227869,-.4419033816638769,-.3342645487554494,-.224140440909962,-.11241087890006762,0],[-1,-.90603157029014,-.80786507256596,-.7064666939634,-.60294836853664,-.49849837513117,-.39430303318768,-.29147201034755,-.19097820800866,-.09361896280296,0],[-1,-.9021579584316141,-.8005762598234203,-.6964780623319391,-.5911906810998454,-.486050182576545,-.3823089430815083,-.28106046722897615,-.1831906535795894,-.08935809204418144,0],[-1,-.8917227442365535,-.781258746326964,-.6705130326902455,-.5612813129406509,-.4551067709033134,-.35319256652135966,-.2563741554088552,-.1651412821106526,-.0796919581982668,0],[-1,-.8843387974366064,-.7678744063886243,-.6529563724510552,-.5415870994657841,-.4352842206588936,-.33504449124791424,-.24138853420685147,-.15445285440944467,-.07409659641336663,0],[-1,-.8786709358426346,-.7577735191184886,-.6399546189952064,-.527284921869926,-.4211627631006314,-.3223479611761232,-.23107655627789858,-.1472057700818259,-.07035171210706326,0],[-1,-.8740862815291583,-.7497032990976209,-.6297119746181752,-.5161838335958787,-.41036238255751956,-.31277212146489963,-.2233976621705518,-.1418697367979619,-.06762117662323441,0],[-1,-.8702632331800649,-.7430366914122081,-.6213373075161548,-.5072025698095242,-.40171437727184167,-.30517930701410456,-.21736343968190863,-.137710238299109,-.06550774483471955,0],[-1,-.8670016295947213,-.7373984232432306,-.6143173985094293,-.49973884395492807,-.394584953527678,-.2989649949848695,-.21245647317021688,-.13434688362382652,-.0638072667348083,0],[-1,-.8641642839543857,-.732534623168535,-.6083127477059322,-.4934049257184696,-.3885773075899922,-.29376029055315767,-.2083678561173622,-.13155653399373268,-.062401588652553186,0]],I=function(e){return s.fromValue_noAlloc(e)},q=function(t,e,r){return s.fromComponents(t,e,r)},O=function(e,r,i){return s.fromComponents_noNormalize(e,r,i)},dt=function(e,r){let i=r+1,n=Math.ceil(Math.log10(Math.abs(e))),o=Math.round(e*Math.pow(10,i-n))*Math.pow(10,n-i);return parseFloat(o.toFixed(Math.max(i-n,0)))},Vt=function(t){return Math.sign(t)*Math.log10(Math.abs(t))},Or=function(t){if(!isFinite(t))return t;if(t<-50)return t===Math.trunc(t)?Number.NEGATIVE_INFINITY:0;let e=1;for(;t<10;)e=e*t,++t;t-=1;let r=.9189385332046727;r=r+(t+.5)*Math.log(t),r=r-t;let i=t*t,n=t;return r=r+1/(12*n),n=n*i,r=r-1/(360*n),n=n*i,r=r+1/(1260*n),n=n*i,r=r-1/(1680*n),n=n*i,r=r+1/(1188*n),n=n*i,r=r-691/(360360*n),n=n*i,r=r+7/(1092*n),n=n*i,r=r-3617/(122400*n),Math.exp(r)/e},Cr=.36787944117144233,ye=.5671432904097838,Ht=function(t,e=1e-10,r=!0){let i,n;if(!Number.isFinite(t))return t;if(r){if(t===0)return t;if(t===1)return ye;t<10?i=0:i=Math.log(t)-Math.log(Math.log(t))}else{if(t===0)return-1/0;t<=-.1?i=-2:i=Math.log(-t)-Math.log(-Math.log(-t))}for(let o=0;o<100;++o){if(n=(t*Math.exp(-i)+i*i)/(i+1),Math.abs(n-i).5?1:-1;if(Math.random()*20<1)return O(e,0,1);let r=Math.floor(Math.random()*(t+1)),i=r===0?Math.random()*616-308:Math.random()*16;Math.random()>.9&&(i=Math.trunc(i));let n=Math.pow(10,i);return Math.random()>.9&&(n=Math.trunc(n)),q(e,r,n)}static affordGeometricSeries_core(t,e,r,i){let n=e.mul(r.pow(i));return s.floor(t.div(n).mul(r.sub(1)).add(1).log10().div(r.log10()))}static sumGeometricSeries_core(t,e,r,i){return e.mul(r.pow(i)).mul(s.sub(1,r.pow(t))).div(s.sub(1,r))}static affordArithmeticSeries_core(t,e,r,i){let o=e.add(i.mul(r)).sub(r.div(2)),u=o.pow(2);return o.neg().add(u.add(r.mul(t).mul(2)).sqrt()).div(r).floor()}static sumArithmeticSeries_core(t,e,r,i){let n=e.add(i.mul(r));return t.div(2).mul(n.mul(2).plus(t.sub(1).mul(r)))}static efficiencyOfPurchase_core(t,e,r){return t.div(e).add(t.div(r))}normalize(){if(this.sign===0||this.mag===0&&this.layer===0||this.mag===Number.NEGATIVE_INFINITY&&this.layer>0&&Number.isFinite(this.layer))return this.sign=0,this.mag=0,this.layer=0,this;if(this.layer===0&&this.mag<0&&(this.mag=-this.mag,this.sign=-this.sign),this.mag===Number.POSITIVE_INFINITY||this.layer===Number.POSITIVE_INFINITY||this.mag===Number.NEGATIVE_INFINITY||this.layer===Number.NEGATIVE_INFINITY)return this.mag=Number.POSITIVE_INFINITY,this.layer=Number.POSITIVE_INFINITY,this;if(this.layer===0&&this.mag=tt)return this.layer+=1,this.mag=e*Math.log10(t),this;for(;t0;)this.layer-=1,this.layer===0?this.mag=Math.pow(10,this.mag):(this.mag=e*Math.pow(10,t),t=Math.abs(this.mag),e=Math.sign(this.mag));return this.layer===0&&(this.mag<0?(this.mag=-this.mag,this.sign=-this.sign):this.mag===0&&(this.sign=0)),(Number.isNaN(this.sign)||Number.isNaN(this.layer)||Number.isNaN(this.mag))&&(this.sign=Number.NaN,this.layer=Number.NaN,this.mag=Number.NaN),this}fromComponents(t,e,r){return this.sign=t,this.layer=e,this.mag=r,this.normalize(),this}fromComponents_noNormalize(t,e,r){return this.sign=t,this.layer=e,this.mag=r,this}fromMantissaExponent(t,e){return this.layer=1,this.sign=Math.sign(t),t=Math.abs(t),this.mag=e+Math.log10(t),this.normalize(),this}fromMantissaExponent_noNormalize(t,e){return this.fromMantissaExponent(t,e),this}fromDecimal(t){return this.sign=t.sign,this.layer=t.layer,this.mag=t.mag,this}fromNumber(t){return this.mag=Math.abs(t),this.sign=Math.sign(t),this.layer=0,this.normalize(),this}fromString(t,e=!1){let r=t,i=s.fromStringCache.get(r);if(i!==void 0)return this.fromDecimal(i);Mr?t=t.replace(",",""):_r&&(t=t.replace(",","."));let n=t.split("^^^");if(n.length===2){let N=parseFloat(n[0]),C=parseFloat(n[1]),T=n[1].split(";"),E=1;if(T.length===2&&(E=parseFloat(T[1]),isFinite(E)||(E=1)),isFinite(N)&&isFinite(C)){let l=s.pentate(N,C,E,e);return this.sign=l.sign,this.layer=l.layer,this.mag=l.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}}let o=t.split("^^");if(o.length===2){let N=parseFloat(o[0]),C=parseFloat(o[1]),T=o[1].split(";"),E=1;if(T.length===2&&(E=parseFloat(T[1]),isFinite(E)||(E=1)),isFinite(N)&&isFinite(C)){let l=s.tetrate(N,C,E,e);return this.sign=l.sign,this.layer=l.layer,this.mag=l.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}}let u=t.split("^");if(u.length===2){let N=parseFloat(u[0]),C=parseFloat(u[1]);if(isFinite(N)&&isFinite(C)){let T=s.pow(N,C);return this.sign=T.sign,this.layer=T.layer,this.mag=T.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}}t=t.trim().toLowerCase();let c,m,a=t.split("pt");if(a.length===2){c=10;let N=!1;a[0].startsWith("-")&&(N=!0,a[0]=a[0].slice(1)),m=parseFloat(a[0]),a[1]=a[1].replace("(",""),a[1]=a[1].replace(")","");let C=parseFloat(a[1]);if(isFinite(C)||(C=1),isFinite(c)&&isFinite(m)){let T=s.tetrate(c,m,C,e);return this.sign=T.sign,this.layer=T.layer,this.mag=T.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),N&&(this.sign*=-1),this}}if(a=t.split("p"),a.length===2){c=10;let N=!1;a[0].startsWith("-")&&(N=!0,a[0]=a[0].slice(1)),m=parseFloat(a[0]),a[1]=a[1].replace("(",""),a[1]=a[1].replace(")","");let C=parseFloat(a[1]);if(isFinite(C)||(C=1),isFinite(c)&&isFinite(m)){let T=s.tetrate(c,m,C,e);return this.sign=T.sign,this.layer=T.layer,this.mag=T.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),N&&(this.sign*=-1),this}}if(a=t.split("f"),a.length===2){c=10;let N=!1;a[0].startsWith("-")&&(N=!0,a[0]=a[0].slice(1)),a[0]=a[0].replace("(",""),a[0]=a[0].replace(")","");let C=parseFloat(a[0]);if(a[1]=a[1].replace("(",""),a[1]=a[1].replace(")",""),m=parseFloat(a[1]),isFinite(C)||(C=1),isFinite(c)&&isFinite(m)){let T=s.tetrate(c,m,C,e);return this.sign=T.sign,this.layer=T.layer,this.mag=T.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),N&&(this.sign*=-1),this}}let M=t.split("e"),h=M.length-1;if(h===0){let N=parseFloat(t);if(isFinite(N))return this.fromNumber(N),s.fromStringCache.size>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}else if(h===1){let N=parseFloat(t);if(isFinite(N)&&N!==0)return this.fromNumber(N),s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}let f=t.split("e^");if(f.length===2){this.sign=1,f[0].startsWith("-")&&(this.sign=-1);let N="";for(let C=0;C=43&&T<=57||T===101)N+=f[1].charAt(C);else{if(this.layer=parseFloat(N),this.mag=parseFloat(f[1].substr(C+1)),this.layer<0||this.layer%1!=0){let E=s.tetrate(10,this.layer,this.mag,e);this.sign=E.sign,this.layer=E.layer,this.mag=E.mag}return this.normalize(),s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}}}if(h<1)return this.sign=0,this.layer=0,this.mag=0,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this;let d=parseFloat(M[0]);if(d===0)return this.sign=0,this.layer=0,this.mag=0,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this;let v=parseFloat(M[M.length-1]);if(h>=2){let N=parseFloat(M[M.length-2]);isFinite(N)&&(v*=Math.sign(N),v+=Vt(N))}if(!isFinite(d))this.sign=M[0]==="-"?-1:1,this.layer=h,this.mag=v;else if(h===1)this.sign=Math.sign(d),this.layer=1,this.mag=v+Math.log10(Math.abs(d));else if(this.sign=Math.sign(d),this.layer=h,h===2){let N=s.mul(q(1,2,v),I(d));return this.sign=N.sign,this.layer=N.layer,this.mag=N.mag,s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}else this.mag=v;return this.normalize(),s.fromStringCache.maxSize>=1&&s.fromStringCache.set(r,s.fromDecimal(this)),this}fromValue(t){return t instanceof s?this.fromDecimal(t):typeof t=="number"?this.fromNumber(t):typeof t=="string"?this.fromString(t):(this.sign=0,this.layer=0,this.mag=0,this)}toNumber(){return this.mag===Number.POSITIVE_INFINITY&&this.layer===Number.POSITIVE_INFINITY&&this.sign===1?Number.POSITIVE_INFINITY:this.mag===Number.POSITIVE_INFINITY&&this.layer===Number.POSITIVE_INFINITY&&this.sign===-1?Number.NEGATIVE_INFINITY:Number.isFinite(this.layer)?this.layer===0?this.sign*this.mag:this.layer===1?this.sign*Math.pow(10,this.mag):this.mag>0?this.sign>0?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:0:Number.NaN}mantissaWithDecimalPlaces(t){return isNaN(this.m)?Number.NaN:this.m===0?0:dt(this.m,t)}magnitudeWithDecimalPlaces(t){return isNaN(this.mag)?Number.NaN:this.mag===0?0:dt(this.mag,t)}toString(){return isNaN(this.layer)||isNaN(this.sign)||isNaN(this.mag)?"NaN":this.mag===Number.POSITIVE_INFINITY||this.layer===Number.POSITIVE_INFINITY?this.sign===1?"Infinity":"-Infinity":this.layer===0?this.mag<1e21&&this.mag>1e-7||this.mag===0?(this.sign*this.mag).toString():this.m+"e"+this.e:this.layer===1?this.m+"e"+this.e:this.layer<=Ne?(this.sign===-1?"-":"")+"e".repeat(this.layer)+this.mag:(this.sign===-1?"-":"")+"(e^"+this.layer+")"+this.mag}toExponential(t){return this.layer===0?(this.sign*this.mag).toExponential(t):this.toStringWithDecimalPlaces(t)}toFixed(t){return this.layer===0?(this.sign*this.mag).toFixed(t):this.toStringWithDecimalPlaces(t)}toPrecision(t){return this.e<=-7?this.toExponential(t-1):t>this.e?this.toFixed(t-this.exponent-1):this.toExponential(t-1)}valueOf(){return this.toString()}toJSON(){return this.toString()}toStringWithDecimalPlaces(t){return this.layer===0?this.mag<1e21&&this.mag>1e-7||this.mag===0?(this.sign*this.mag).toFixed(t):dt(this.m,t)+"e"+dt(this.e,t):this.layer===1?dt(this.m,t)+"e"+dt(this.e,t):this.layer<=Ne?(this.sign===-1?"-":"")+"e".repeat(this.layer)+dt(this.mag,t):(this.sign===-1?"-":"")+"(e^"+this.layer+")"+dt(this.mag,t)}abs(){return O(this.sign===0?0:1,this.layer,this.mag)}neg(){return O(-this.sign,this.layer,this.mag)}negate(){return this.neg()}negated(){return this.neg()}sgn(){return this.sign}round(){return this.mag<0?O(0,0,0):this.layer===0?q(this.sign,0,Math.round(this.mag)):new s(this)}floor(){return this.mag<0?this.sign===-1?O(-1,0,1):O(0,0,0):this.sign===-1?this.neg().ceil().neg():this.layer===0?q(this.sign,0,Math.floor(this.mag)):new s(this)}ceil(){return this.mag<0?this.sign===1?O(1,0,1):O(0,0,0):this.sign===-1?this.neg().floor().neg():this.layer===0?q(this.sign,0,Math.ceil(this.mag)):new s(this)}trunc(){return this.mag<0?O(0,0,0):this.layer===0?q(this.sign,0,Math.trunc(this.mag)):new s(this)}add(t){let e=I(t);if(this.eq(s.dInf)&&e.eq(s.dNegInf)||this.eq(s.dNegInf)&&e.eq(s.dInf))return O(Number.NaN,Number.NaN,Number.NaN);if(!Number.isFinite(this.layer))return new s(this);if(!Number.isFinite(e.layer))return new s(e);if(this.sign===0)return new s(e);if(e.sign===0)return new s(this);if(this.sign===-e.sign&&this.layer===e.layer&&this.mag===e.mag)return O(0,0,0);let r,i;if(this.layer>=2||e.layer>=2)return this.maxabs(e);if(s.cmpabs(this,e)>0?(r=new s(this),i=new s(e)):(r=new s(e),i=new s(this)),r.layer===0&&i.layer===0)return s.fromNumber(r.sign*r.mag+i.sign*i.mag);let n=r.layer*Math.sign(r.mag),o=i.layer*Math.sign(i.mag);if(n-o>=2)return r;if(n===0&&o===-1){if(Math.abs(i.mag-Math.log10(r.mag))>Yt)return r;{let u=Math.pow(10,Math.log10(r.mag)-i.mag),c=i.sign+r.sign*u;return q(Math.sign(c),1,i.mag+Math.log10(Math.abs(c)))}}if(n===1&&o===0){if(Math.abs(r.mag-Math.log10(i.mag))>Yt)return r;{let u=Math.pow(10,r.mag-Math.log10(i.mag)),c=i.sign+r.sign*u;return q(Math.sign(c),1,Math.log10(i.mag)+Math.log10(Math.abs(c)))}}if(Math.abs(r.mag-i.mag)>Yt)return r;{let u=Math.pow(10,r.mag-i.mag),c=i.sign+r.sign*u;return q(Math.sign(c),1,i.mag+Math.log10(Math.abs(c)))}throw Error("Bad arguments to add: "+this+", "+t)}plus(t){return this.add(t)}sub(t){return this.add(I(t).neg())}subtract(t){return this.sub(t)}minus(t){return this.sub(t)}mul(t){let e=I(t);if(this.eq(s.dInf)&&e.eq(s.dNegInf)||this.eq(s.dNegInf)&&e.eq(s.dInf))return O(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.mag==Number.POSITIVE_INFINITY&&e.eq(s.dZero)||this.eq(s.dZero)&&this.mag==Number.POSITIVE_INFINITY)return O(Number.NaN,Number.NaN,Number.NaN);if(!Number.isFinite(this.layer))return new s(this);if(!Number.isFinite(e.layer))return new s(e);if(this.sign===0||e.sign===0)return O(0,0,0);if(this.layer===e.layer&&this.mag===-e.mag)return O(this.sign*e.sign,0,1);let r,i;if(this.layer>e.layer||this.layer==e.layer&&Math.abs(this.mag)>Math.abs(e.mag)?(r=new s(this),i=new s(e)):(r=new s(e),i=new s(this)),r.layer===0&&i.layer===0)return s.fromNumber(r.sign*i.sign*r.mag*i.mag);if(r.layer>=3||r.layer-i.layer>=2)return q(r.sign*i.sign,r.layer,r.mag);if(r.layer===1&&i.layer===0)return q(r.sign*i.sign,1,r.mag+Math.log10(i.mag));if(r.layer===1&&i.layer===1)return q(r.sign*i.sign,1,r.mag+i.mag);if(r.layer===2&&i.layer===1){let n=q(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(q(Math.sign(i.mag),i.layer-1,Math.abs(i.mag)));return q(r.sign*i.sign,n.layer+1,n.sign*n.mag)}if(r.layer===2&&i.layer===2){let n=q(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(q(Math.sign(i.mag),i.layer-1,Math.abs(i.mag)));return q(r.sign*i.sign,n.layer+1,n.sign*n.mag)}throw Error("Bad arguments to mul: "+this+", "+t)}multiply(t){return this.mul(t)}times(t){return this.mul(t)}div(t){let e=I(t);return this.mul(e.recip())}divide(t){return this.div(t)}divideBy(t){return this.div(t)}dividedBy(t){return this.div(t)}recip(){return this.mag===0?O(Number.NaN,Number.NaN,Number.NaN):this.mag===Number.POSITIVE_INFINITY?O(0,0,0):this.layer===0?q(this.sign,0,1/this.mag):q(this.sign,this.layer,-this.mag)}reciprocal(){return this.recip()}reciprocate(){return this.recip()}mod(t,e=!1){let r=I(t),i=r.abs();if(this.eq(s.dZero)||i.eq(s.dZero))return O(0,0,0);if(e){let u=this.abs().mod(i);return this.sign==-1!=(r.sign==-1)&&(u=r.abs().sub(u)),u.mul(r.sign)}let n=this.toNumber(),o=i.toNumber();return isFinite(n)&&isFinite(o)&&n!=0&&o!=0?new s(n%o):this.sub(i).eq(this)?O(0,0,0):i.sub(this).eq(i)?new s(this):this.sign==-1?this.abs().mod(i).neg():this.sub(this.div(i).floor().mul(i))}modulo(t,e=!1){return this.mod(t,e)}modular(t,e=!1){return this.mod(t,e)}cmp(t){let e=I(t);return this.sign>e.sign?1:this.sign0?this.layer:-this.layer,i=e.mag>0?e.layer:-e.layer;return r>i?1:re.mag?1:this.mag0?new s(e):new s(this)}clamp(t,e){return this.max(t).min(e)}clampMin(t){return this.max(t)}clampMax(t){return this.min(t)}cmp_tolerance(t,e){let r=I(t);return this.eq_tolerance(r,e)?0:this.cmp(r)}compare_tolerance(t,e){return this.cmp_tolerance(t,e)}eq_tolerance(t,e){let r=I(t);if(e==null&&(e=1e-7),this.sign!==r.sign||Math.abs(this.layer-r.layer)>1)return!1;let i=this.mag,n=r.mag;return this.layer>r.layer&&(n=Vt(n)),this.layer0?q(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):q(1,0,Math.log10(this.mag))}log10(){return this.sign<=0?O(Number.NaN,Number.NaN,Number.NaN):this.layer>0?q(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):q(this.sign,0,Math.log10(this.mag))}log(t){return t=I(t),this.sign<=0||t.sign<=0||t.sign===1&&t.layer===0&&t.mag===1?O(Number.NaN,Number.NaN,Number.NaN):this.layer===0&&t.layer===0?q(this.sign,0,Math.log(this.mag)/Math.log(t.mag)):s.div(this.log10(),t.log10())}log2(){return this.sign<=0?O(Number.NaN,Number.NaN,Number.NaN):this.layer===0?q(this.sign,0,Math.log2(this.mag)):this.layer===1?q(Math.sign(this.mag),0,Math.abs(this.mag)*3.321928094887362):this.layer===2?q(Math.sign(this.mag),1,Math.abs(this.mag)+.5213902276543247):q(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))}ln(){return this.sign<=0?O(Number.NaN,Number.NaN,Number.NaN):this.layer===0?q(this.sign,0,Math.log(this.mag)):this.layer===1?q(Math.sign(this.mag),0,Math.abs(this.mag)*2.302585092994046):this.layer===2?q(Math.sign(this.mag),1,Math.abs(this.mag)+.36221568869946325):q(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))}logarithm(t){return this.log(t)}pow(t){let e=I(t),r=new s(this),i=new s(e);if(r.sign===0)return i.eq(0)?O(1,0,1):r;if(r.sign===1&&r.layer===0&&r.mag===1)return r;if(i.sign===0)return O(1,0,1);if(i.sign===1&&i.layer===0&&i.mag===1)return r;let n=r.absLog10().mul(i).pow10();return this.sign===-1?Math.abs(i.toNumber()%2)%2===1?n.neg():Math.abs(i.toNumber()%2)%2===0?n:O(Number.NaN,Number.NaN,Number.NaN):n}pow10(){if(this.eq(s.dInf))return O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.eq(s.dNegInf))return O(0,0,0);if(!Number.isFinite(this.layer)||!Number.isFinite(this.mag))return O(Number.NaN,Number.NaN,Number.NaN);let t=new s(this);if(t.layer===0){let e=Math.pow(10,t.sign*t.mag);if(Number.isFinite(e)&&Math.abs(e)>=.1)return q(1,0,e);if(t.sign===0)return O(1,0,1);t=O(t.sign,t.layer+1,Math.log10(t.mag))}return t.sign>0&&t.mag>=0?q(t.sign,t.layer+1,t.mag):t.sign<0&&t.mag>=0?q(-t.sign,t.layer+1,-t.mag):O(1,0,1)}pow_base(t){return I(t).pow(this)}root(t){let e=I(t);return this.pow(e.recip())}factorial(){return this.mag<0?this.add(1).gamma():this.layer===0?this.add(1).gamma():this.layer===1?s.exp(s.mul(this,s.ln(this).sub(1))):s.exp(this)}gamma(){if(this.mag<0)return this.recip();if(this.layer===0){if(this.lt(O(1,0,24)))return s.fromNumber(Or(this.sign*this.mag));let t=this.mag-1,e=.9189385332046727;e=e+(t+.5)*Math.log(t),e=e-t;let r=t*t,i=t,n=12*i,o=1/n,u=e+o;if(u===e||(e=u,i=i*r,n=360*i,o=1/n,u=e-o,u===e))return s.exp(e);e=u,i=i*r,n=1260*i;let c=1/n;return e=e+c,i=i*r,n=1680*i,c=1/n,e=e-c,s.exp(e)}else return this.layer===1?s.exp(s.mul(this,s.ln(this).sub(1))):s.exp(this)}lngamma(){return this.gamma().ln()}exp(){return this.mag<0?O(1,0,1):this.layer===0&&this.mag<=709.7?s.fromNumber(Math.exp(this.sign*this.mag)):this.layer===0?q(1,1,this.sign*Math.log10(Math.E)*this.mag):this.layer===1?q(1,2,this.sign*(Math.log10(.4342944819032518)+this.mag)):q(1,this.layer+1,this.sign*this.mag)}sqr(){return this.pow(2)}sqrt(){if(this.layer===0)return s.fromNumber(Math.sqrt(this.sign*this.mag));if(this.layer===1)return q(1,2,Math.log10(this.mag)-.3010299956639812);{let t=s.div(O(this.sign,this.layer-1,this.mag),O(1,0,2));return t.layer+=1,t.normalize(),t}}cube(){return this.pow(3)}cbrt(){return this.pow(1/3)}tetrate(t=2,e=O(1,0,1),r=!1){if(t===1)return s.pow(this,e);if(t===0)return new s(e);if(this.eq(s.dOne))return O(1,0,1);if(this.eq(-1))return s.pow(this,e);if(t===Number.POSITIVE_INFINITY){let o=this.toNumber();if(o<=1.444667861009766&&o>=.06598803584531254){let u=s.ln(this).neg(),c=u.lambertw().div(u);if(o<1)return c;let m=u.lambertw(!1).div(u);return o>1.444667861009099&&(c=m=s.fromNumber(Math.E)),e=I(e),e.eq(m)?m:e.lt(m)?c:O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}else return o>1.444667861009766?O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY):O(Number.NaN,Number.NaN,Number.NaN)}if(this.eq(s.dZero)){let o=Math.abs((t+1)%2);return o>1&&(o=2-o),s.fromNumber(o)}if(t<0)return s.iteratedlog(e,this,-t,r);e=new s(e);let i=t;t=Math.trunc(t);let n=i-t;if(this.gt(s.dZero)&&(this.lt(1)||this.lte(1.444667861009766)&&e.lte(s.ln(this).neg().lambertw(!1).div(s.ln(this).neg())))&&(i>1e4||!r)){let o=Math.min(1e4,t);e.eq(s.dOne)?e=this.pow(n):this.lt(1)?e=e.pow(1-n).mul(this.pow(e).pow(n)):e=e.layeradd(n,this);for(let u=0;u1e4&&Math.ceil(i)%2==1?this.pow(e):e}n!==0&&(e.eq(s.dOne)?this.gt(10)||r?e=this.pow(n):(e=s.fromNumber(s.tetrate_critical(this.toNumber(),n)),this.lt(2)&&(e=e.sub(1).mul(this.minus(1)).plus(1))):this.eq(10)?e=e.layeradd10(n,r):this.lt(1)?e=e.pow(1-n).mul(this.pow(e).pow(n)):e=e.layeradd(n,this,r));for(let o=0;o3)return O(e.sign,e.layer+(t-o-1),e.mag);if(o>1e4)return e}return e}iteratedexp(t=2,e=O(1,0,1),r=!1){return this.tetrate(t,e,r)}iteratedlog(t=10,e=1,r=!1){if(e<0)return s.tetrate(t,-e,this,r);t=I(t);let i=s.fromDecimal(this),n=e;e=Math.trunc(e);let o=n-e;if(i.layer-t.layer>3){let u=Math.min(e,i.layer-t.layer-3);e-=u,i.layer-=u}for(let u=0;u1e4)return i}return o>0&&o<1&&(t.eq(10)?i=i.layeradd10(-o,r):i=i.layeradd(-o,t,r)),i}slog(t=10,e=100,r=!1){let i=.001,n=!1,o=!1,u=this.slog_internal(t,r).toNumber();for(let c=1;c1&&o!=a&&(n=!0),o=a,n?i/=2:i*=2,i=Math.abs(i)*(a?-1:1),u+=i,i===0)break}return s.fromNumber(u)}slog_internal(t=10,e=!1){if(t=I(t),t.lte(s.dZero)||t.eq(s.dOne))return O(Number.NaN,Number.NaN,Number.NaN);if(t.lt(s.dOne))return this.eq(s.dOne)?O(0,0,0):this.eq(s.dZero)?O(-1,0,1):O(Number.NaN,Number.NaN,Number.NaN);if(this.mag<0||this.eq(s.dZero))return O(-1,0,1);if(t.lt(1.444667861009766)){let n=s.ln(t).neg(),o=n.lambertw().div(n);if(this.eq(o))return O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.gt(o))return O(Number.NaN,Number.NaN,Number.NaN)}let r=0,i=s.fromDecimal(this);if(i.layer-t.layer>3){let n=i.layer-t.layer-3;r+=n,i.layer-=n}for(let n=0;n<100;++n)if(i.lt(s.dZero))i=s.pow(t,i),r-=1;else{if(i.lte(s.dOne))return e?s.fromNumber(r+i.toNumber()-1):s.fromNumber(r+s.slog_critical(t.toNumber(),i.toNumber()));r+=1,i=s.log(i,t)}return s.fromNumber(r)}static slog_critical(t,e){return t>10?e-1:s.critical_section(t,e,Ar)}static tetrate_critical(t,e){return s.critical_section(t,e,Sr)}static critical_section(t,e,r,i=!1){e*=10,e<0&&(e=0),e>10&&(e=10),t<2&&(t=2),t>10&&(t=10);let n=0,o=0;for(let c=0;ct){let m=(t-bt[c])/(bt[c+1]-bt[c]);n=r[c][Math.floor(e)]*(1-m)+r[c+1][Math.floor(e)]*m,o=r[c][Math.ceil(e)]*(1-m)+r[c+1][Math.ceil(e)]*m;break}let u=e-Math.floor(e);return n<=0||o<=0?n*(1-u)+o*u:Math.pow(t,Math.log(n)/Math.log(t)*(1-u)+Math.log(o)/Math.log(t)*u)}layeradd10(t,e=!1){t=s.fromValue_noAlloc(t).toNumber();let r=s.fromDecimal(this);if(t>=1){r.mag<0&&r.layer>0?(r.sign=0,r.mag=0,r.layer=0):r.sign===-1&&r.layer==0&&(r.sign=1,r.mag=-r.mag);let i=Math.trunc(t);t-=i,r.layer+=i}if(t<=-1){let i=Math.trunc(t);if(t-=i,r.layer+=i,r.layer<0)for(let n=0;n<100;++n){if(r.layer++,r.mag=Math.log10(r.mag),!isFinite(r.mag))return r.sign===0&&(r.sign=1),r.layer<0&&(r.layer=0),r.normalize();if(r.layer>=0)break}}for(;r.layer<0;)r.layer++,r.mag=Math.log10(r.mag);return r.sign===0&&(r.sign=1,r.mag===0&&r.layer>=1&&(r.layer-=1,r.mag=1)),r.normalize(),t!==0?r.layeradd(t,10,e):r}layeradd(t,e,r=!1){let i=I(e);if(i.gt(1)&&i.lte(1.444667861009766)){let u=s.excess_slog(this,e,r),c=u[0].toNumber(),m=u[1],a=c+t,M=s.ln(e).neg(),h=M.lambertw().div(M),f=M.lambertw(!1).div(M),d=s.dOne;m==1?d=h.mul(f).sqrt():m==2&&(d=f.mul(2));let v=i.pow(d),N=Math.floor(a),C=a-N,T=d.pow(1-C).mul(v.pow(C));return s.tetrate(i,N,T,r)}let o=this.slog(e,100,r).toNumber()+t;return o>=0?s.tetrate(e,o,s.dOne,r):Number.isFinite(o)?o>=-1?s.log(s.tetrate(e,o+1,s.dOne,r),e):s.log(s.log(s.tetrate(e,o+2,s.dOne,r),e),e):O(Number.NaN,Number.NaN,Number.NaN)}static excess_slog(t,e,r=!1){t=I(t),e=I(e);let i=e;if(e=e.toNumber(),e==1||e<=0)return[O(Number.NaN,Number.NaN,Number.NaN),0];if(e>1.444667861009766)return[t.slog(e,100,r),0];let n=s.ln(e).neg(),o=n.lambertw().div(n),u=s.dInf;if(e>1&&(u=n.lambertw(!1).div(n)),e>1.444667861009099&&(o=u=s.fromNumber(Math.E)),t.lt(o))return[t.slog(e,100,r),0];if(t.eq(o))return[O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),0];if(t.eq(u))return[O(1,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),2];if(t.gt(u)){let c=u.mul(2),m=i.pow(c),a=0;if(t.gte(c)&&t.lt(m))a=0;else if(t.gte(m)){let N=m;for(a=1;N.lt(t);)if(N=i.pow(N),a=a+1,N.layer>3){let C=Math.floor(t.layer-N.layer+1);N=i.iteratedexp(C,N,r),a=a+C}N.gt(t)&&(N=N.log(e),a=a-1)}else if(t.lt(c)){let N=c;for(a=0;N.gt(t);)N=N.log(e),a=a-1}let M=0,h=0,f=.5,d=c,v=s.dZero;for(;f>1e-16;){if(h=M+f,d=c.pow(1-h).mul(m.pow(h)),v=s.iteratedexp(e,a,d),v.eq(t))return[new s(a+h),2];v.lt(t)&&(M+=f),f/=2}return v.neq_tolerance(t,1e-7)?[O(Number.NaN,Number.NaN,Number.NaN),0]:[new s(a+M),2]}if(t.lt(u)&&t.gt(o)){let c=o.mul(u).sqrt(),m=i.pow(c),a=0;if(t.lte(c)&&t.gt(m))a=0;else if(t.lte(m)){let N=m;for(a=1;N.gt(t);)N=i.pow(N),a=a+1;N.lt(t)&&(N=N.log(e),a=a-1)}else if(t.gt(c)){let N=c;for(a=0;N.lt(t);)N=N.log(e),a=a-1}let M=0,h=0,f=.5,d=c,v=s.dZero;for(;f>1e-16;){if(h=M+f,d=c.pow(1-h).mul(m.pow(h)),v=s.iteratedexp(e,a,d),v.eq(t))return[new s(a+h),1];v.gt(t)&&(M+=f),f/=2}return v.neq_tolerance(t,1e-7)?[O(Number.NaN,Number.NaN,Number.NaN),0]:[new s(a+M),1]}throw new Error("Unhandled behavior in excess_slog")}lambertw(t=!0){return this.lt(-.3678794411710499)?O(Number.NaN,Number.NaN,Number.NaN):t?this.abs().lt("1e-300")?new s(this):this.mag<0?s.fromNumber(Ht(this.toNumber())):this.layer===0?s.fromNumber(Ht(this.sign*this.mag)):this.lt("eee15")?be(this):this.ln():this.sign===1?O(Number.NaN,Number.NaN,Number.NaN):this.layer===0?s.fromNumber(Ht(this.sign*this.mag,1e-10,!1)):this.layer==1?be(this,1e-10,!1):this.neg().recip().lambertw().neg()}ssqrt(){return this.linear_sroot(2)}linear_sroot(t){if(t==1)return this;if(this.eq(s.dInf))return O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(!this.isFinite())return O(Number.NaN,Number.NaN,Number.NaN);if(t>0&&t<1)return this.root(t);if(t>-2&&t<-1)return s.fromNumber(t).add(2).pow(this.recip());if(t<=0)return O(Number.NaN,Number.NaN,Number.NaN);if(t==Number.POSITIVE_INFINITY){let e=this.toNumber();return eCr?this.pow(this.recip()):O(Number.NaN,Number.NaN,Number.NaN)}if(this.eq(1))return O(1,0,1);if(this.lt(0))return O(Number.NaN,Number.NaN,Number.NaN);if(this.lte("1ee-16"))return t%2==1?new s(this):O(Number.NaN,Number.NaN,Number.NaN);if(this.gt(1)){let e=s.dTen;this.gte(s.tetrate(10,t,1,!0))&&(e=this.iteratedlog(10,t-1,!0)),t<=1&&(e=this.root(t));let r=s.dZero,i=e.layer,n=e.iteratedlog(10,i,!0),o=n,u=n.div(2),c=!0;for(;c;)u=r.add(n).div(2),s.iteratedexp(10,i,u,!0).tetrate(t,1,!0).gt(this)?n=u:r=u,u.eq(o)?c=!1:o=u;return s.iteratedexp(10,i,u,!0)}else{let e=1,r=q(1,10,1),i=q(1,10,1),n=q(1,10,1),o=q(1,1,-16),u=s.dZero,c=q(1,10,1),m=o.pow10().recip(),a=s.dZero,M=m,h=m,f=Math.ceil(t)%2==0,d=0,v=q(1,10,1),N=!1,C=s.dZero,T=!1;for(;e<4;){if(e==2){if(f)break;n=q(1,10,1),o=r,e=3,c=q(1,10,1),v=q(1,10,1)}for(N=!1;o.neq(n);){if(C=o,o.pow10().recip().tetrate(t,1,!0).eq(1)&&o.pow10().recip().lt(.4))m=o.pow10().recip(),M=o.pow10().recip(),h=o.pow10().recip(),a=s.dZero,d=-1,e==3&&(v=o);else if(o.pow10().recip().tetrate(t,1,!0).eq(o.pow10().recip())&&!f&&o.pow10().recip().lt(.4))m=o.pow10().recip(),M=o.pow10().recip(),h=o.pow10().recip(),a=s.dZero,d=0;else if(o.pow10().recip().tetrate(t,1,!0).eq(o.pow10().recip().mul(2).tetrate(t,1,!0)))m=o.pow10().recip(),M=s.dZero,h=m.mul(2),a=m,f?d=-1:d=0;else{for(u=o.mul(12e-17),m=o.pow10().recip(),M=o.add(u).pow10().recip(),a=m.sub(M),h=m.add(a);M.tetrate(t,1,!0).eq(m.tetrate(t,1,!0))||h.tetrate(t,1,!0).eq(m.tetrate(t,1,!0))||M.gte(m)||h.lte(m);)u=u.mul(2),M=o.add(u).pow10().recip(),a=m.sub(M),h=m.add(a);if((e==1&&h.tetrate(t,1,!0).gt(m.tetrate(t,1,!0))&&M.tetrate(t,1,!0).gt(m.tetrate(t,1,!0))||e==3&&h.tetrate(t,1,!0).lt(m.tetrate(t,1,!0))&&M.tetrate(t,1,!0).lt(m.tetrate(t,1,!0)))&&(v=o),h.tetrate(t,1,!0).lt(m.tetrate(t,1,!0)))d=-1;else if(f)d=1;else if(e==3&&o.gt_tolerance(r,1e-8))d=0;else{for(;M.tetrate(t,1,!0).eq_tolerance(m.tetrate(t,1,!0),1e-8)||h.tetrate(t,1,!0).eq_tolerance(m.tetrate(t,1,!0),1e-8)||M.gte(m)||h.lte(m);)u=u.mul(2),M=o.add(u).pow10().recip(),a=m.sub(M),h=m.add(a);h.tetrate(t,1,!0).sub(m.tetrate(t,1,!0)).lt(m.tetrate(t,1,!0).sub(M.tetrate(t,1,!0)))?d=0:d=1}}if(d==-1&&(T=!0),e==1&&d==1||e==3&&d!=0)if(n.eq(q(1,10,1)))o=o.mul(2);else{let p=!1;if(N&&(d==1&&e==1||d==-1&&e==3)&&(p=!0),o=o.add(n).div(2),p)break}else if(n.eq(q(1,10,1)))n=o,o=o.div(2);else{let p=!1;if(N&&(d==1&&e==1||d==-1&&e==3)&&(p=!0),n=n.sub(c),o=o.sub(c),p)break}if(n.sub(o).div(2).abs().gt(c.mul(1.5))&&(N=!0),c=n.sub(o).div(2).abs(),o.gt("1e18")||o.eq(C))break}if(o.gt("1e18")||!T||v==q(1,10,1))break;e==1?r=v:e==3&&(i=v),e++}n=r,o=q(1,1,-18);let E=o,l=s.dZero,S=!0;for(;S;)if(n.eq(q(1,10,1))?l=o.mul(2):l=n.add(o).div(2),s.pow(10,l).recip().tetrate(t,1,!0).gt(this)?o=l:n=l,l.eq(E)?S=!1:E=l,o.gt("1e18"))return O(Number.NaN,Number.NaN,Number.NaN);if(l.eq_tolerance(r,1e-15)){if(i.eq(q(1,10,1)))return O(Number.NaN,Number.NaN,Number.NaN);for(n=q(1,10,1),o=i,E=o,l=s.dZero,S=!0;S;)if(n.eq(q(1,10,1))?l=o.mul(2):l=n.add(o).div(2),s.pow(10,l).recip().tetrate(t,1,!0).gt(this)?o=l:n=l,l.eq(E)?S=!1:E=l,o.gt("1e18"))return O(Number.NaN,Number.NaN,Number.NaN);return l.pow10().recip()}else return l.pow10().recip()}}static increasingInverse(t,e=!1,r=120,i=s.dLayerMax.neg(),n=s.dLayerMax,o=s.dLayerMax.neg(),u=s.dLayerMax){return function(c){if(c=new s(c),i=new s(i),n=new s(n),o=new s(o),u=new s(u),c.isNan()||n.lt(i)||c.lt(o)||c.gt(u))return O(Number.NaN,Number.NaN,Number.NaN);let m=function(w){return new s(w)},a=!0;if(n.lt(0))a=!1;else if(i.gt(0))a=!0;else{let w=t(s.dZero);if(w.eq(c))return O(0,0,0);a=c.gt(w),e&&(a=!a)}let M=a,h;if(a){if(n.lt(yt))a=!0;else if(i.gt(yt))a=!1;else{let w=t(new s(yt));a=c.lt(w),e&&(a=!a)}if(a){h=!0;let w=s.pow(10,tt).recip();if(n.lt(w))a=!1;else if(i.gt(w))a=!0;else{let g=t(new s(w));a=c.gt(g),e&&(a=!a)}if(a)m=function(g){return s.pow(10,g).recip()};else{let g=s.tetrate(10,tt);if(n.lt(g))a=!1;else if(i.gt(g))a=!0;else{let y=t(new s(g));a=c.gt(y),e&&(a=!a)}a?m=function(y){return s.tetrate(10,new s(y).toNumber()).recip()}:m=function(y){return new s(y).gt(Math.log10(Number.MAX_VALUE))?s.dZero:s.tetrate(10,s.pow(10,y).toNumber()).recip()}}}else{if(h=!1,n.lt(tt))a=!0;else if(i.gt(tt))a=!1;else{let w=t(new s(tt));a=c.lt(w),e&&(a=!a)}if(a)m=function(w){return new s(w)};else{let w=s.pow(10,tt);if(n.lt(w))a=!0;else if(i.gt(w))a=!1;else{let g=t(new s(w));a=c.lt(g),e&&(a=!a)}if(a)m=function(g){return s.pow(10,g)};else{let g=s.tetrate(10,tt);if(n.lt(g))a=!0;else if(i.gt(g))a=!1;else{let y=t(new s(g));a=c.lt(y),e&&(a=!a)}a?m=function(y){return s.tetrate(10,new s(y).toNumber())}:m=function(y){return new s(y).gt(Math.log10(Number.MAX_VALUE))?s.dInf:s.tetrate(10,s.pow(10,y).toNumber())}}}}}else{if(h=!0,n.lt(-yt))a=!1;else if(i.gt(-yt))a=!0;else{let w=t(new s(-yt));a=c.gt(w),e&&(a=!a)}if(a){let w=s.pow(10,tt).recip().neg();if(n.lt(w))a=!0;else if(i.gt(w))a=!1;else{let g=t(new s(w));a=c.lt(g),e&&(a=!a)}if(a)m=function(g){return s.pow(10,g).recip().neg()};else{let g=s.tetrate(10,tt).neg();if(n.lt(g))a=!0;else if(i.gt(g))a=!1;else{let y=t(new s(g));a=c.lt(y),e&&(a=!a)}a?m=function(y){return s.tetrate(10,new s(y).toNumber()).recip().neg()}:m=function(y){return new s(y).gt(Math.log10(Number.MAX_VALUE))?s.dZero:s.tetrate(10,s.pow(10,y).toNumber()).recip().neg()}}}else{if(h=!1,n.lt(-tt))a=!1;else if(i.gt(-tt))a=!0;else{let w=t(new s(-tt));a=c.gt(w),e&&(a=!a)}if(a)m=function(w){return s.neg(w)};else{let w=s.pow(10,tt).neg();if(n.lt(w))a=!1;else if(i.gt(w))a=!0;else{let g=t(new s(w));a=c.gt(g),e&&(a=!a)}if(a)m=function(g){return s.pow(10,g).neg()};else{let g=s.tetrate(10,tt).neg();if(n.lt(g))a=!1;else if(i.gt(g))a=!0;else{let y=t(new s(g));a=c.gt(y),e&&(a=!a)}a?m=function(y){return s.tetrate(10,new s(y).toNumber()).neg()}:m=function(y){return new s(y).gt(Math.log10(Number.MAX_VALUE))?s.dNegInf:s.tetrate(10,s.pow(10,y).toNumber()).neg()}}}}}let f=M!=h!=e,d=f?function(w,g){return s.gt(w,g)}:function(w,g){return s.lt(w,g)},v=.001,N=!1,C=!1,T=1,E=s.dOne,l=0,S=!1;for(var p=1;p1&&C!=g&&(N=!0),C=g,N?v/=2:v*=2,g!=f&&E.eq(n)||g==f&&E.eq(i))return O(Number.NaN,Number.NaN,Number.NaN);if(v=Math.abs(v)*(g?-1:1),T+=v,v===0||l==T)break}return m(T)}}pentate(t=2,e=O(1,0,1),r=!1){e=new s(e);let i=t;t=Math.floor(t);let n=i-t,o=s.dZero,u=s.dZero;if(n!==0)if(e.eq(s.dOne))++t,e=s.fromNumber(n);else return this.pentate(e.penta_log(this,void 0,r).plus(i).toNumber(),1,r);if(t>0)for(let c=0;c1e4)return e}else for(let c=0;c<-t;++c){if(o=e,e=e.slog(this,void 0,r),e.eq(o)||!isFinite(e.layer)||!isFinite(e.mag))return e.normalize();if(c>100)return e}return e}penta_log(t=10,e=100,r=!1){if(t=new s(t),t.lte(1))return O(Number.NaN,Number.NaN,Number.NaN);if(this.eq(1))return O(0,0,0);if(this.eq(s.dInf))return O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);let i=new s(1),n=0,o=1;if(this.lt(-1)){if(this.lte(-2))return O(Number.NaN,Number.NaN,Number.NaN);let c=t.tetrate(this.toNumber(),1,r);if(this.eq(c))return O(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.gt(c))return O(Number.NaN,Number.NaN,Number.NaN)}if(this.gt(1)){for(;i.lt(this);)if(n++,i=s.tetrate(t,i.toNumber(),1,r),n>1e3)return O(Number.NaN,Number.NaN,Number.NaN)}else for(;i.gt(this);)if(n--,i=s.slog(i,t,r),n>100)return O(Number.NaN,Number.NaN,Number.NaN);for(var u=1;u0&&t<1?this.root(t):this.eq(1)?O(1,0,1):this.lt(0)?O(Number.NaN,Number.NaN,Number.NaN):this.lt(1)?this.linear_sroot(t):s.increasingInverse(function(e){return s.pentate(e,t,1,!0)})(this):O(Number.NaN,Number.NaN,Number.NaN)}sin(){return this.mag<0?new s(this):this.layer===0?s.fromNumber(Math.sin(this.sign*this.mag)):O(0,0,0)}cos(){return this.mag<0?O(1,0,1):this.layer===0?s.fromNumber(Math.cos(this.sign*this.mag)):O(0,0,0)}tan(){return this.mag<0?new s(this):this.layer===0?s.fromNumber(Math.tan(this.sign*this.mag)):O(0,0,0)}asin(){return this.mag<0?new s(this):this.layer===0?s.fromNumber(Math.asin(this.sign*this.mag)):O(Number.NaN,Number.NaN,Number.NaN)}acos(){return this.mag<0?s.fromNumber(Math.acos(this.toNumber())):this.layer===0?s.fromNumber(Math.acos(this.sign*this.mag)):O(Number.NaN,Number.NaN,Number.NaN)}atan(){return this.mag<0?new s(this):this.layer===0?s.fromNumber(Math.atan(this.sign*this.mag)):s.fromNumber(Math.atan(this.sign*(1/0)))}sinh(){return this.exp().sub(this.negate().exp()).div(2)}cosh(){return this.exp().add(this.negate().exp()).div(2)}tanh(){return this.sinh().div(this.cosh())}asinh(){return s.ln(this.add(this.sqr().add(1).sqrt()))}acosh(){return s.ln(this.add(this.sqr().sub(1).sqrt()))}atanh(){return this.abs().gte(1)?O(Number.NaN,Number.NaN,Number.NaN):s.ln(this.add(1).div(s.fromNumber(1).sub(this))).div(2)}ascensionPenalty(t){return t===0?new s(this):this.root(s.pow(10,t))}egg(){return this.add(9)}lessThanOrEqualTo(t){return this.cmp(t)<1}lessThan(t){return this.cmp(t)<0}greaterThanOrEqualTo(t){return this.cmp(t)>-1}greaterThan(t){return this.cmp(t)>0}static smoothDamp(t,e,r,i){return new s(t).add(new s(e).minus(new s(t)).times(new s(r)).times(new s(i)))}clone(){return this}static clone(t){return s.fromComponents(t.sign,t.layer,t.mag)}softcap(t,e,r){let i=this.clone();return i.gte(t)&&([0,"pow"].includes(r)&&(i=i.div(t).pow(e).mul(t)),[1,"mul"].includes(r)&&(i=i.sub(t).div(e).add(t))),i}static softcap(t,e,r,i){return new s(t).softcap(e,r,i)}scale(t,e,r,i=!1){t=new s(t),e=new s(e);let n=this.clone();return n.gte(t)&&([0,"pow"].includes(r)&&(n=i?n.mul(t.pow(e.sub(1))).root(e):n.pow(e).div(t.pow(e.sub(1)))),[1,"exp"].includes(r)&&(n=i?n.div(t).max(1).log(e).add(t):s.pow(e,n.sub(t)).mul(t))),n}static scale(t,e,r,i,n=!1){return new s(t).scale(e,r,i,n)}format(t=2,e=9,r="mixed_sc"){return gt.format(this.clone(),t,e,r)}static format(t,e=2,r=9,i="mixed_sc"){return gt.format(new s(t),e,r,i)}formatST(t=2,e=9,r="st"){return gt.format(this.clone(),t,e,r)}static formatST(t,e=2,r=9,i="st"){return gt.format(new s(t),e,r,i)}formatGain(t,e="mixed_sc",r,i){return gt.formatGain(this.clone(),t,e,r,i)}static formatGain(t,e,r="mixed_sc",i,n){return gt.formatGain(new s(t),e,r,i,n)}toRoman(t=5e3){t=new s(t);let e=this.clone();if(e.gte(t)||e.lt(1))return e;let r=e.toNumber(),i={M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1},n="";for(let o of Object.keys(i)){let u=Math.floor(r/i[o]);r-=u*i[o],n+=o.repeat(u)}return n}static toRoman(t,e){return new s(t).toRoman(e)}static random(t=0,e=1){return t=new s(t),e=new s(e),t=t.lt(e)?t:e,e=e.gt(t)?e:t,new s(Math.random()).mul(e.sub(t)).add(t)}static randomProb(t){return new s(Math.random()).lt(t)}};s.dZero=O(0,0,0),s.dOne=O(1,0,1),s.dNegOne=O(-1,0,1),s.dTwo=O(1,0,2),s.dTen=O(1,0,10),s.dNaN=O(Number.NaN,Number.NaN,Number.NaN),s.dInf=O(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),s.dNegInf=O(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),s.dNumberMax=q(1,0,Number.MAX_VALUE),s.dNumberMin=q(1,0,Number.MIN_VALUE),s.dLayerSafeMax=q(1,Number.MAX_SAFE_INTEGER,tt-1),s.dLayerSafeMin=q(1,Number.MAX_SAFE_INTEGER,-(tt-1)),s.dLayerMax=q(1,Number.MAX_VALUE,tt-1),s.dLayerMin=q(1,Number.MAX_VALUE,-(tt-1)),s.fromStringCache=new zt(wr),ot([Ft()],s.prototype,"sign",2),ot([Ft()],s.prototype,"mag",2),ot([Ft()],s.prototype,"layer",2),s=ot([gr()],s);var{formats:gt,FORMATS:Er}=Nr(s);s.formats=gt;var At=class{get desc(){return this.description}get description(){return this.descriptionFn()}constructor(t){this.id=t.id,this.name=t.name??"",this.value=t.value,this.order=t.order??99,this.descriptionFn=t.description?typeof t.description=="function"?t.description:()=>t.description:()=>""}},Wt=class{constructor(t=1,e){this.addBoost=this.setBoost.bind(this),e=e?Array.isArray(e)?e:[e]:void 0,this.baseEffect=new s(t),this.boostArray=[],e&&e.forEach(r=>{this.boostArray.push(new At(r))})}getBoosts(t,e){let r=[],i=[];for(let n=0;nh),a=n,M=this.getBoosts(o,!0);M[0][0]?this.boostArray[M[1][0]]=new At({id:o,name:u,description:c,value:m,order:a}):this.boostArray.push(new At({id:o,name:u,description:c,value:m,order:a}))}else{t=Array.isArray(t)?t:[t];for(let o of t){let u=this.getBoosts(o.id,!0);u[0][0]?this.boostArray[u[1][0]]=new At(o):this.boostArray.push(new At(o))}}}clearBoosts(){this.boostArray.length=0}calculate(t=this.baseEffect){let e=new s(t),r=this.boostArray;r=r.sort((i,n)=>i.order-n.order);for(let i of r)e=i.value(e);return e}},ui=at(ct()),xt=30,Jt=.001;function Tr(t,e,r="geometric"){switch(t=new s(t),e=new s(e),r){case"arithmetic":case 1:return t.add(e).div(2);case"geometric":case 2:default:return t.mul(e).sqrt();case"harmonic":case 3:return s.dTwo.div(t.reciprocal().add(e.reciprocal()))}}function Qt(t,e,r,i){i=Object.assign({},{verbose:!1,mode:"geometric"},i),t=new s(t),e=new s(e),r=new s(r);let n,o;return i.mode==="geometric"?(n=t.sub(e).abs().div(t.abs().add(e.abs()).div(2)),o=n.lte(r)):(n=t.sub(e).abs(),o=n.lte(r)),(i.verbose===!0||i.verbose==="onlyOnFail"&&!o)&&console.log({a:t,b:e,tolerance:r,config:i,diff:n,result:o}),o}function Kt(t,e,r="geometric",i=xt,n=Jt,o=1,u){if(o=new s(o),u=new s(u??e),o.gt(u)&&([o,u]=[u,o]),t(u).eq(0))return{value:s.dZero,lowerBound:s.dZero,upperBound:s.dZero};if(t(u).lt(e))return console.warn("eMath.js: The function is not monotonically increasing. (f(n) < n)"),{value:u,lowerBound:u,upperBound:u};for(let m=0;m=0;c--){let m=r.add(u.mul(c)),a=r.add(u.mul(c+1)),M=o;if(o=o.add(t(m).add(t(a)).div(2).mul(u)),Qt(M,o,n,{verbose:!1,mode:"geometric"}))break}return o}function Xt(t,e,r=0,i,n){return r=new s(r),e=new s(e),e.sub(r).lte(xt)?ve(t,e,r,i):we(t,e,r,n)}function Fr(t,e=10,r=0,i=1e3){if(t=new s(t),e=new s(e),r=new s(r),i=new s(i),e.lt(1)||r.lt(1))return s.dNaN;let n=t.sign;if(t=t.abs(),t.gte(s.pow(e,i)))return t;let o=s.floor(s.log(t,e)),u=t.div(s.pow(e,o));return u=u.mul(s.pow(e,r)).round(),u=u.div(s.pow(e,r)),u=u.mul(s.pow(e,o)).mul(n),u}function Me(t,e,r,i=s.dInf,n,o,u=!1){t=new s(t),r=new s(r??e.level),i=new s(i);let c=i.sub(r);if(c.lt(0))return console.warn("eMath.js: Invalid target for calculateItem: ",c),[s.dZero,s.dZero];if(u=(typeof e.el=="function"?e.el():e.el)??u,c.eq(1)){let h=e.cost(e.level),f=t.gte(h),d=[s.dZero,s.dZero];return u?(d[0]=f?s.dOne:s.dZero,d):(d=[f?s.dOne:s.dZero,f?h:s.dZero],d)}if(e.costBulk){let[h,f]=e.costBulk(t,e.level,c),d=t.gte(f);return[d?h:s.dZero,d&&!u?f:s.dZero]}if(u){let h=v=>e.cost(v.add(r)),f=s.min(i,Kt(h,t,n,o).value.floor()),d=s.dZero;return[f,d]}let m=Kt(h=>Xt(e.cost,h,r),t,n,o).value.floor().min(r.add(c).sub(1)),a=Xt(e.cost,m,r);return[m.sub(r).add(1).max(0),a]}function _e(t){return t=new s(t),`${t.sign}/${t.mag}/${t.layer}`}function kr(t){return`el/${_e(t)}`}var vt=class{constructor(t){t=t??{},this.id=t.id,this.level=t.level?new s(t.level):s.dOne}};ot([Ft()],vt.prototype,"id",2),ot([St(()=>s)],vt.prototype,"level",2);var Ie=class Ke{static{this.cacheSize=15}get data(){return this.dataPointerFn()}get description(){return this.descriptionFn(this.level,this,this.currencyPointerFn())}set description(e){this.descriptionFn=typeof e=="function"?e:()=>e}get level(){return((this??{data:{level:s.dOne}}).data??{level:s.dOne}).level}set level(e){this.data.level=new s(e)}constructor(e,r,i,n){let o=typeof r=="function"?r():r;this.dataPointerFn=typeof r=="function"?r:()=>o,this.currencyPointerFn=typeof i=="function"?i:()=>i,this.cache=new zt(n??Ke.cacheSize),this.id=e.id,this.name=e.name??e.id,this.descriptionFn=e.description?typeof e.description=="function"?e.description:()=>e.description:()=>"",this.cost=e.cost,this.costBulk=e.costBulk,this.maxLevel=e.maxLevel,this.effect=e.effect,this.el=e.el,this.defaultLevel=e.level??s.dOne}},li=at(ct());function Se(t,e,r=s.dOne,i=s.dInf){if(t=new s(t),r=new s(r),i=new s(i),i.lt(0))return console.warn("eMath.js: Invalid target for calculateItem: ",i),[s.dZero,s.dZero];if(i.eq(1)){let u=e.cost(r);return[t.gte(u)?s.dOne:s.dZero,t.gte(u)?u:s.dZero]}let n=t.div(e.cost(r)).floor().min(i),o=e.cost(r).mul(n);return[n,o]}var Ae=class{constructor(t,e,r){this.defaultAmount=s.dZero;let i=typeof e=="function"?e():e;this.dataPointerFn=typeof e=="function"?e:()=>i,this.currencyPointerFn=typeof r=="function"?r:()=>r,this.id=t.id,this.name=t.name??t.id,this.cost=t.cost,this.effect=t.effect,this.descriptionFn=t.description?typeof t.description=="function"?t.description:()=>t.description:()=>"",this.defaultAmount=t.amount??s.dZero}get data(){return this.dataPointerFn()}get description(){return this.descriptionFn(this.amount,this,this.currencyPointerFn())}set description(t){this.descriptionFn=typeof t=="function"?t:()=>t}get amount(){return((this??{data:{amount:s.dOne}}).data??{amount:s.dOne}).amount}set amount(t){this.data.amount=new s(t)}},wt=class{constructor(t){t=t??{},this.id=t.id,this.amount=t.amount??s.dZero}};ot([Ft()],wt.prototype,"id",2),ot([St(()=>s)],wt.prototype,"amount",2);var fi=at(ct()),pt=class{constructor(){this.value=s.dZero,this.upgrades={},this.items={}}};ot([St(()=>s)],pt.prototype,"value",2),ot([St(()=>vt)],pt.prototype,"upgrades",2),ot([St(()=>wt)],pt.prototype,"items",2);var Oe=class{get pointer(){return this.pointerFn()}get value(){return this.pointer.value}set value(t){this.pointer.value=t}constructor(t=new pt,e,r,i={defaultVal:s.dZero,defaultBoost:s.dOne}){this.defaultVal=i.defaultVal,this.defaultBoost=i.defaultBoost,this.pointerFn=typeof t=="function"?t:()=>t,this.boost=new Wt(this.defaultBoost),this.pointer.value=this.defaultVal,this.upgrades={},e&&this.addUpgrade(e),this.items={},r&&this.addItem(r)}onLoadData(){for(let t of Object.values(this.upgrades))this.runUpgradeEffect(t)}reset(t,e,r){let i={resetCurrency:!0,resetUpgradeLevels:!0,resetItemAmounts:!0,runUpgradeEffect:!0};if(typeof t=="object"?Object.assign(i,t):Object.assign(i,{resetCurrency:t,resetUpgradeLevels:e,runUpgradeEffect:r}),i.resetCurrency&&(this.value=this.defaultVal),i.resetUpgradeLevels)for(let n of Object.values(this.upgrades))n.level=new s(n.defaultLevel),i.runUpgradeEffect&&this.runUpgradeEffect(n);if(i.resetItemAmounts)for(let n of Object.values(this.items))n.amount=new s(n.defaultAmount),i.runUpgradeEffect&&this.runItemEffect(n)}gain(t=1e3){let e=this.boost.calculate().mul(new s(t).div(1e3));return this.pointer.value=this.pointer.value.add(e),e}pointerAddUpgrade(t){let e=new vt(t);return this.pointer.upgrades[e.id]=e,e}pointerGetUpgrade(t){return this.pointer.upgrades[t]??null}getUpgrade(t){return this.upgrades[t]??null}queryUpgrade(t){let e=Object.keys(this.upgrades);if(t instanceof RegExp){let i=t;return e.filter(o=>i.test(o)).map(o=>this.upgrades[o])}return typeof t=="string"&&(t=[t]),e.filter(i=>t.includes(i)).map(i=>this.upgrades[i])}addUpgrade(t,e=!0){Array.isArray(t)||(t=[t]);let r=[];for(let i of t){this.pointerAddUpgrade(i);let n=new Ie(i,()=>this.pointerGetUpgrade(i.id),()=>this);e&&this.runUpgradeEffect(n),this.upgrades[i.id]=n,r.push(n)}return r}updateUpgrade(t,e){let r=this.getUpgrade(t);r!==null&&Object.assign(r,e)}runUpgradeEffect(t){t.effect?.(t.level,t,this)}runItemEffect(t,e=s.dOne){e=new s(e),t.effect?.(t.amount,e,t,this)}calculateUpgrade(t,e=1/0,r,i){let n=this.getUpgrade(t);return n===null?(console.warn(`eMath.js: Upgrade "${t}" not found.`),[s.dZero,s.dZero]):(e=n.level.add(e),n.maxLevel!==void 0&&(e=s.min(e,n.maxLevel)),Me(this.value,n,n.level,e,r,i))}getNextCost(t,e=1,r,i){let n=this.getUpgrade(t);if(n===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),s.dZero;let o=this.calculateUpgrade(t,e,r,i)[0];return n.cost(n.level.add(o))}getNextCostMax(t,e=1,r,i){let n=this.getUpgrade(t);if(n===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),s.dZero;let o=this.calculateUpgrade(t,e,r,i);return n.cost(n.level.add(o[0])).add(o[1])}buyUpgrade(t,e,r,i){let n=this.getUpgrade(t);if(n===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),!1;let[o,u]=this.calculateUpgrade(t,e,r,i);return o.lte(0)?!1:(this.pointer.value=this.pointer.value.sub(u),n.level=n.level.add(o),this.runUpgradeEffect(n),!0)}pointerAddItem(t){let e=new wt(t);return this.pointer.items[t.id]=e,e}pointerGetItem(t){return this.pointer.items[t]??null}addItem(t,e=!0){Array.isArray(t)||(t=[t]);for(let r of t){this.pointerAddItem(r);let i=new Ae(r,()=>this.pointerGetItem(r.id),()=>this);e&&this.runItemEffect(i),this.items[r.id]=i}}getItem(t){return this.items[t]??null}calculateItem(t,e,r){let i=this.getItem(t);return i===null?(console.warn(`eMath.js: Item "${t}" not found.`),[s.dZero,s.dZero]):Se(this.value,i,e,r)}buyItem(t,e,r){let i=this.getItem(t);if(i===null)return console.warn(`eMath.js: Item "${t}" not found.`),!1;let[n,o]=this.calculateItem(t,e,r);return n.lte(0)?!1:(this.pointer.value=this.pointer.value.sub(o),i.amount=i.amount.add(n),this.runItemEffect(i,e),!0)}},ci=at(ct()),qt=class{constructor(t=0){this.value=new s(t)}};ot([St(()=>s)],qt.prototype,"value",2);var Ce=class{get pointer(){return this.pointerFn()}constructor(t,e=!0,r=0){this.initial=new s(r),t??=new qt(this.initial),this.pointerFn=typeof t=="function"?t:()=>t,this.boost=e?new Wt(this.initial):null}update(){console.warn("eMath.js: AttributeStatic.update is deprecated and will be removed in the future. The value is automatically updated when accessed."),this.boost&&(this.pointer.value=this.boost.calculate())}get value(){return this.boost&&(this.pointer.value=this.boost.calculate()),this.pointer.value}set value(t){if(this.boost)throw new Error("Cannot set value of attributeStatic when boost is enabled.");this.pointer.value=t}},Dt=class{constructor(t,e,r={},i){this.setValue=this.set.bind(this),this.getValue=this.get.bind(this),this.x=t,this.y=e,this.properties=typeof r=="function"?r(this):{...r},this.gridSymbol=i}get grid(){return te.getInstance(this.gridSymbol)}set(t,e){return this.properties[t]=e,e}get(t){return this.properties[t]}translate(t=0,e=0){return te.getInstance(this.gridSymbol).getCell(this.x+t,this.y+e)}direction(t,e=1,r){let i=this.grid;return(()=>{switch(t){case"up":return i.getCell(this.x,this.y-e);case"right":return i.getCell(this.x+e,this.y);case"down":return i.getCell(this.x,this.y+e);case"left":return i.getCell(this.x-e,this.y);case"adjacent":return i.getAdjacent(this.x,this.y,e,r);case"diagonal":return i.getDiagonal(this.x,this.y,e,r);case"encircling":return i.getEncircling(this.x,this.y,e,r);default:throw new Error("Invalid direction")}})()}up(t=1){return this.direction("up",t)}right(t=1){return this.direction("right",t)}down(t=1){return this.direction("down",t)}left(t=1){return this.direction("left",t)}};function Ee(t,e,r=!0){let i=r?"Size":"Coordinates";if(typeof t!="number"||typeof e!="number")throw new RangeError(`${i} must be numbers: ${t}, ${e}`);if(!Number.isInteger(t)||!Number.isInteger(e))throw new RangeError(`${i} must be integers: ${t}, ${e}`);if(t<0||e<0)throw new RangeError(`${i} must be positive: ${t}, ${e}`);if(!Number.isFinite(t)||!Number.isFinite(e))throw new RangeError(`${i} must be finite: ${t}, ${e}`);if(!Number.isSafeInteger(t)||!Number.isSafeInteger(e))throw new RangeError(`${i} must be safe integers: ${t}, ${e}`)}var it=class ae extends Array{constructor(e){e=Array.isArray(e)?e:[e],e=e.filter(r=>r!==void 0),super(...e),this.removeDuplicates()}removeDuplicates(){let e=[];this.forEach((r,i)=>{this.indexOf(r)!==i&&e.push(i)}),e.forEach(r=>this.splice(r,1))}translate(e=0,r=0){return new ae(this.map(i=>i.translate(e,r)))}direction(e,r,i){return new ae(this.flatMap(n=>n.direction(e,r,i)))}up(e){return this.direction("up",e)}right(e){return this.direction("right",e)}down(e){return this.direction("down",e)}left(e){return this.direction("left",e)}adjacent(e,r){return this.direction("adjacent",e,r)}diagonal(e,r){return this.direction("diagonal",e,r)}encircling(e,r){return this.direction("encircling",e,r)}},te=class ue{constructor(e,r,i){this.cells=[],this.gridSymbol=Symbol(),this.all=this.getAll.bind(this),this.allX=this.getAllX.bind(this),this.allY=this.getAllY.bind(this),this.get=this.getCell.bind(this),this.set=this.setCell.bind(this),ue.instances[this.gridSymbol]=this,this.starterProps=i??{},this.xSize=e,this.ySize=r??e,Ee(this.xSize,this.ySize,!0);for(let n=0;n{if(this.ySize!==n&&(this.ySizen))for(let o=n;o{if(this.xSize!==i){if(this.xSizei)for(let o=0;o{let t=!1,e=r=>(t||(console.warn("eMath.js: The E function is deprecated. Use the Decimal class directly."),t=!0),new s(r));return Object.getOwnPropertyNames(s).filter(r=>!Object.getOwnPropertyNames(class{}).includes(r)).forEach(r=>{e[r]=s[r]}),e})(),Lr=he,Te={};Bt(Te,{ConfigManager:()=>jt,DataManager:()=>je,EventManager:()=>Pe,EventTypes:()=>ke,Game:()=>Gr,GameAttribute:()=>Ue,GameCurrency:()=>Re,GameReset:()=>ie,KeyManager:()=>Fe,gameDefaultConfig:()=>Ge,keys:()=>qr});var hi=at(ct()),jt=class{constructor(t){this.configOptionTemplate=t}parse(t){if(typeof t>"u")return this.configOptionTemplate;function e(r,i){for(let n in i)typeof r[n]>"u"?r[n]=i[n]:typeof r[n]=="object"&&typeof i[n]=="object"&&!Array.isArray(r[n])&&!Array.isArray(i[n])&&(r[n]=e(r[n],i[n]));return r}return e(t,this.configOptionTemplate)}get options(){return this.configOptionTemplate}},xr={autoAddInterval:!0,fps:30},qr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 ".split("").concat(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),Fe=class Xe{constructor(e){if(this.addKeys=this.addKey.bind(this),this.keysPressed=[],this.binds=[],this.tickers=[],this.config=Xe.configManager.parse(e),this.config.autoAddInterval){let r=this.config.fps?this.config.fps:30;this.tickerInterval=setInterval(()=>{for(let i of this.tickers)i(1e3/r)},1e3/r)}typeof document>"u"||(this.tickers.push(r=>{for(let i of this.binds)(typeof i.onDownContinuous<"u"||typeof i.fn<"u")&&this.isPressing(i.id)&&(i.onDownContinuous?.(r),i.fn?.(r))}),document.addEventListener("keydown",r=>{this.logKey(r,!0),this.onAll("down",r.key)}),document.addEventListener("keyup",r=>{this.logKey(r,!1),this.onAll("up",r.key)}),document.addEventListener("keypress",r=>{this.onAll("press",r.key)}))}static{this.configManager=new jt(xr)}changeFps(e){this.config.fps=e,this.tickerInterval&&(clearInterval(this.tickerInterval),this.tickerInterval=setInterval(()=>{for(let r of this.tickers)r(1e3/e)},1e3/e))}logKey(e,r){let i=e.key;r&&!this.keysPressed.includes(i)?this.keysPressed.push(i):!r&&this.keysPressed.includes(i)&&this.keysPressed.splice(this.keysPressed.indexOf(i),1)}onAll(e,r){for(let i of this.binds)if(i.key===r)switch(e){case"down":i.onDown?.();break;case"press":default:i.onPress?.();break;case"up":i.onUp?.();break}}isPressing(e){for(let r of this.binds)if(r.id===e)return this.keysPressed.includes(r.key);return!1}getBind(e){return this.binds.find(r=>r.id===e)}addKey(e,r,i){e=typeof e=="string"?{id:e,name:e,key:r??"",fn:i}:e,e=Array.isArray(e)?e:[e];for(let n of e){n.id=n.id??n.name;let o=this.getBind(n.id);if(o){Object.assign(o,n);continue}this.binds.push(n)}}},ke=(t=>(t.interval="interval",t.timeout="timeout",t))(ke||{}),Dr={autoAddInterval:!0,fps:30},Pe=class tr{constructor(e,r){if(this.addEvent=this.setEvent.bind(this),this.config=tr.configManager.parse(e),this.events={},this.callbackEvents={},r)for(let i of r)this.callbackEvents[i]=[];if(this.config.autoAddInterval){let i=this.config.fps??30;this.tickerInterval=setInterval(()=>{this.tickerFunction()},1e3/i)}}static{this.configManager=new jt(Dr)}on(e,r){this.callbackEvents[e]||(this.callbackEvents[e]=[]),this.callbackEvents[e].push({type:e,callback:r})}dispatch(e){if(this.callbackEvents[e])for(let r of this.callbackEvents[e])r.callback()}tickerFunction(){let e=Date.now();for(let r of Object.values(this.events))switch(r.type){case"interval":if(e-r.intervalLast>=r.delay){let i=e-r.intervalLast;r.callback(i),r.intervalLast=e}break;case"timeout":{let i=e-r.timeCreated;e-r.timeCreated>=r.delay&&(r.callback(i),delete this.events[r.name])}break}}changeFps(e){this.config.fps=e,this.tickerInterval&&(clearInterval(this.tickerInterval),this.tickerInterval=setInterval(()=>{this.tickerFunction()},1e3/e))}timeWarp(e){for(let r of Object.values(this.events))switch(r.type){case"interval":r.intervalLast-=e;break;case"timeout":r.timeCreated-=e;break}}setEvent(e,r,i,n){this.events[e]=(()=>{switch(r){case"interval":return{name:e,type:r,delay:typeof i=="number"?i:i.toNumber(),callback:n,timeCreated:Date.now(),intervalLast:Date.now()};case"timeout":default:return{name:e,type:r,delay:typeof i=="number"?i:i.toNumber(),callback:n,timeCreated:Date.now()}}})()}removeEvent(e){delete this.events[e]}},mi=at(ct()),Le=at(or()),ee=at(lr());function re(t){return typeof t=="object"&&t?.constructor===Object}var xe=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);function qe(t,e,r){if(!t||!e||!r)return console.warn("eMath.js: dataManager.deepMerge(): Missing arguments:",t,e,r),r??{};let i=r;for(let n in t)if(xe(t,n)&&!xe(r,n)&&(i[n]=t[n]),e[n]instanceof pt){let o=t[n],u=r[n];if(Array.isArray(u.upgrades)){let c=u.upgrades;u.upgrades={};for(let m of c)u.upgrades[m.id]=m}u.upgrades={...o.upgrades,...u.upgrades},i[n]=u,u.items={...o.items,...u.items}}else re(t[n])&&re(r[n])&&(i[n]=qe(t[n],e[n],r[n]));return i}var jr=Object.getOwnPropertyNames(new vt({id:"",level:s.dZero})),Rr=Object.getOwnPropertyNames(new wt({id:"",amount:s.dZero}));function Ur(t,e){let r=Zt(t,e);if(r instanceof pt){for(let i in r.upgrades){let n=r.upgrades[i];if(!n||!jr.every(o=>Object.getOwnPropertyNames(n).includes(o))){delete r.upgrades[i];continue}r.upgrades[i]=Zt(vt,n)}for(let i in r.items){let n=r.items[i];if(!n||!Rr.every(o=>Object.getOwnPropertyNames(n).includes(o))){delete r.items[i];continue}r.items[i]=Zt(wt,n)}}if(!r)throw new Error(`Failed to convert ${t.name} to class instance.`);return r}function De(t,e){if(!t||!e)throw new Error("dataManager.plainToInstanceRecursive(): Missing arguments.");let r=e;for(let i in t){if(e[i]===void 0){console.warn(`eMath.js: Missing property "${i}" in loaded data.`);continue}if(!re(e[i]))continue;let n=t[i].constructor;if(n===Object){r[i]=De(t[i],e[i]);continue}r[i]=Ur(n,e[i])}return r}var je=class{constructor(t,e){this.data={},this.static={},this.eventsOnLoad=[],this.gameRef=typeof t=="function"?t():t,this.localStorage=e??(typeof window>"u"?(console.warn("eMath.js: Local storage is not supported. Methods that rely on local storage will not work. You can use compileData() and decompileData() instead to implement a custom save system."),null):window.localStorage)}addEventOnLoad(t){this.eventsOnLoad.push(t)}setData(t,e){typeof this.data[t]>"u"&&this.normalData&&console.warn("eMath.js: After initializing data, you should not add new properties to data."),this.data[t]=e;let r=()=>this.data;return{get value(){return r()[t]},set value(i){r()[t]=i},setValue(i){r()[t]=i}}}getData(t){return this.data[t]}setStatic(t,e){return console.warn("eMath.js: setStatic: Static data is basically useless and should not be used. Use variables in local scope instead."),typeof this.static[t]>"u"&&this.normalData&&console.warn("eMath.js: After initializing data, you should not add new properties to staticData."),this.static[t]=e,this.static[t]}getStatic(t){return console.warn("eMath.js: Static data is basically useless and should not be used. Use variables in local scope instead."),this.static[t]}init(){this.normalData=this.data,this.normalDataPlain=$t(this.data)}compileDataRaw(t=this.data){this.gameRef.eventManager.dispatch("beforeCompileData");let e=$t(t);return[{hash:(0,ee.default)(`${this.gameRef.config.name.id}/${JSON.stringify(e)}`),game:{title:this.gameRef.config.name.title,id:this.gameRef.config.name.id,version:this.gameRef.config.name.version},...me},e]}compileData(t=this.data){let e=JSON.stringify(this.compileDataRaw(t));return(0,Le.compressToBase64)(e)}decompileData(t){if(!t){if(!this.localStorage)return console.warn("eMath.js: Local storage is not supported. Methods that rely on local storage will not work: decompileData() requires the data to be passed as an argument."),null;t=this.localStorage.getItem(`${this.gameRef.config.name.id}-data`)}if(!t)return null;let e;try{return e=JSON.parse((0,Le.decompressFromBase64)(t)),e}catch(r){if(r instanceof SyntaxError)console.error(`Failed to decompile data (corrupted) "${t}":`,r);else throw r;return null}}validateData(t){let[e,r]=t;if(typeof e=="string")return(0,ee.default)(`${this.gameRef.config.name.id}/${JSON.stringify(r)}`)===e;let i=e.hash,n=(0,ee.default)(`${this.gameRef.config.name.id}/${JSON.stringify(r)}`);return i===n}resetData(t=!1){if(!this.normalData)throw new Error("dataManager.resetData(): You must call init() before writing to data.");this.data=this.normalData,this.saveData(),t&&window.location.reload()}saveData(t=this.compileData()){if(this.gameRef.eventManager.dispatch("beforeSaveData"),!t)throw new Error("dataManager.saveData(): Data to save is empty.");if(!this.localStorage)throw new Error("dataManager.saveData(): Local storage is not supported. You can use compileData() instead to implement a custom save system.");this.localStorage.setItem(`${this.gameRef.config.name.id}-data`,t),this.gameRef.eventManager.dispatch("saveData")}exportData(){if(typeof document>"u"){console.warn("eMath.js: exportData(): Document is not defined. You can use compileData() instead to implement a custom save system.");return}let t=this.compileData();if(prompt("Download save data?:",t)!=null){let e=new Blob([t],{type:"text/plain"}),r=document.createElement("a");r.href=URL.createObjectURL(e),r.download=`${this.gameRef.config.name.id}-data.txt`,r.textContent=`Download ${this.gameRef.config.name.id}-data.txt file`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}}parseData(t=this.decompileData(),e=!0){if((!this.normalData||!this.normalDataPlain)&&e)throw new Error("dataManager.parseData(): You must call init() before writing to data.");if(!t)return null;let[,r]=t,i=e?qe(this.normalDataPlain,this.normalData,r):r;return De(this.normalData,i)}loadData(t=this.decompileData()){if(t=typeof t=="string"?this.decompileData(t):t,!t)return null;let e=this.validateData([t[0],$t(t[1])]),r=this.parseData(t);if(!r)return null;this.data=r;for(let i of this.eventsOnLoad)i();return this.gameRef.eventManager.dispatch("loadData"),e}},Re=class extends Oe{get data(){return this.pointer}get static(){return this}constructor(t,e,r){if(typeof t=="function")throw new Error("GameCurrency constructor does not accept a function as the first parameter. Use the .addCurrency method instead.");super(...t),this.game=e,this.name=r,this.game.dataManager.addEventOnLoad(()=>{this.static.onLoadData()})}},Ue=class extends Ce{get data(){return this.pointer}get static(){return this}constructor(t,e){if(typeof t=="function")throw new Error("GameAttribute constructor does not accept a function as the first parameter. Use the .addAttribute method instead.");super(...t),this.game=e}},ie=class er{static fromObject(e){return new er(e.currenciesToReset,e.extender,e.onReset,e.condition)}constructor(e,r,i,n){this.currenciesToReset=Array.isArray(e)?e:[e],r=r??[],this.extender=Array.isArray(r)?r:[r],this.onReset=i,this.condition=n,this.id=Symbol()}reset(e=!1,r=!0,i=new Set){if(e||(typeof this.condition=="function"?!this.condition(this):!this.condition)&&typeof this.condition<"u")return;let n=()=>{this.onReset?.(this),this.currenciesToReset.forEach(o=>{o.static.reset()})};if(this.extender.length===0){n();return}this.extender.forEach(o=>{i.has(o.id)||(i.add(o.id),o.reset(r||e,r,i))}),n()}},Ge={mode:"production",name:{title:"",id:"",version:"0.0.0"},settings:{framerate:30},initIntervalBasedManagers:!0,localStorage:void 0},Gr=class rr{static{this.configManager=new jt(Ge)}constructor(e){this.config=rr.configManager.parse(e),this.dataManager=new je(this,this.config.localStorage),this.keyManager=new Fe({autoAddInterval:this.config.initIntervalBasedManagers,fps:this.config.settings.framerate}),this.eventManager=new Pe({autoAddInterval:this.config.initIntervalBasedManagers,fps:this.config.settings.framerate}),this.tickers=[]}init(){this.dataManager.init()}changeFps(e){this.keyManager.changeFps(e),this.eventManager.changeFps(e)}addCurrency(e,r=[],i=[]){return this.dataManager.setData(e,{currency:new pt}),new Re([()=>this.dataManager.getData(e).currency,r,i],this,e)}addAttribute(e,r=!0,i=0){return this.dataManager.setData(e,new qt(i)),new Ue([this.dataManager.getData(e),r,i],this)}addReset(...e){return console.warn("eMath.js: Game.addReset is deprecated. Use the GameReset class instead."),new ie(...e)}addResetFromObject(e){return console.warn("eMath.js: Game.addResetFromObject is deprecated. Use the GameReset.fromObject static method instead."),ie.fromObject(e)}},Br={...Lr,...Te},zr=Br;if(typeof lt.exports=="object"&&typeof Et=="object"){var $r=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Object.getOwnPropertyNames(e))!Object.prototype.hasOwnProperty.call(t,n)&&n!==r&&Object.defineProperty(t,n,{get:()=>e[n],enumerable:!(i=Object.getOwnPropertyDescriptor(e,n))||i.enumerable});return t};lt.exports=$r(lt.exports,Et)}return lt.exports}); /*! Bundled license information: reflect-metadata/Reflect.js: diff --git a/dist/game/eMath.game.mjs b/dist/game/eMath.game.mjs index 6b80836..68dae76 100644 --- a/dist/game/eMath.game.mjs +++ b/dist/game/eMath.game.mjs @@ -7525,7 +7525,148 @@ var EventManager = class _EventManager { var import_lz_string = __toESM(require_lz_string()); import "reflect-metadata"; import { instanceToPlain, plainToInstance } from "class-transformer"; + +// src/metadata.ts +var eMathMetadata = { + /** + * The version of the library + * @example "9.5.0" + */ + version: (() => { + try { + return "9.5.0"; + } catch (error) { + return "9.5.0"; + } + })(), + /** + * The data about the Break Eternity library + */ + // eslint-disable-next-line @typescript-eslint/naming-convention + "break_eternity.js": { + /** + * The version of the Break Eternity library + * @example "2.1.0" + */ + version: "2.1.0" + } +}; + +// src/game/managers/DataManager.ts var import_md5 = __toESM(require_md5()); +function isPlainObject(obj) { + return typeof obj === "object" && obj?.constructor === Object; +} +var objectHasOwnProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key); +function deepMerge(sourcePlain, source, target) { + if (!sourcePlain || !source || !target) { + console.warn( + "eMath.js: dataManager.deepMerge(): Missing arguments:", + sourcePlain, + source, + target + ); + return target ?? {}; + } + const out = target; + for (const key in sourcePlain) { + if (objectHasOwnProperty(sourcePlain, key) && !objectHasOwnProperty(target, key)) { + out[key] = sourcePlain[key]; + } + if (source[key] instanceof Currency) { + const sourceCurrency = sourcePlain[key]; + const targetCurrency = target[key]; + if (Array.isArray(targetCurrency.upgrades)) { + const upgrades = targetCurrency.upgrades; + targetCurrency.upgrades = {}; + for (const upgrade of upgrades) { + targetCurrency.upgrades[upgrade.id] = upgrade; + } + } + targetCurrency.upgrades = { + ...sourceCurrency.upgrades, + ...targetCurrency.upgrades + }; + out[key] = targetCurrency; + targetCurrency.items = { + ...sourceCurrency.items, + ...targetCurrency.items + }; + } else if (isPlainObject(sourcePlain[key]) && isPlainObject(target[key])) { + out[key] = deepMerge( + sourcePlain[key], + source[key], + target[key] + ); + } + } + return out; +} +var upgradeDataProperties = Object.getOwnPropertyNames( + new UpgradeData({ id: "", level: Decimal.dZero }) +); +var itemDataProperties = Object.getOwnPropertyNames( + new ItemData({ id: "", amount: Decimal.dZero }) +); +function convertTemplateClass(templateClassToConvert, plain) { + const out = plainToInstance(templateClassToConvert, plain); + if (out instanceof Currency) { + for (const upgradeName in out.upgrades) { + const upgrade = out.upgrades[upgradeName]; + if (!upgrade || !upgradeDataProperties.every( + (prop) => Object.getOwnPropertyNames(upgrade).includes(prop) + )) { + delete out.upgrades[upgradeName]; + continue; + } + out.upgrades[upgradeName] = plainToInstance(UpgradeData, upgrade); + } + for (const itemName in out.items) { + const item = out.items[itemName]; + if (!item || !itemDataProperties.every( + (prop) => Object.getOwnPropertyNames(item).includes(prop) + )) { + delete out.items[itemName]; + continue; + } + out.items[itemName] = plainToInstance(ItemData, item); + } + } + if (!out) { + throw new Error( + `Failed to convert ${templateClassToConvert.name} to class instance.` + ); + } + return out; +} +function plainToInstanceRecursive(normal, plain) { + if (!normal || !plain) { + throw new Error( + "dataManager.plainToInstanceRecursive(): Missing arguments." + ); + } + const out = plain; + for (const key in normal) { + if (plain[key] === void 0) { + console.warn(`eMath.js: Missing property "${key}" in loaded data.`); + continue; + } + if (!isPlainObject(plain[key])) continue; + const normalDataClass = normal[key].constructor; + if (normalDataClass === Object) { + out[key] = plainToInstanceRecursive( + normal[key], + plain[key] + ); + continue; + } + out[key] = convertTemplateClass( + normalDataClass, + plain[key] + ); + } + return out; +} var DataManager = class { /** * Creates a new instance of the game class. @@ -7666,12 +7807,6 @@ var DataManager = class { const hasedData = (0, import_md5.default)( `${this.gameRef.config.name.id}/${JSON.stringify(gameDataString)}` ); - let version; - try { - version = "9.5.0"; - } catch (error) { - version = "9.3.0"; - } const saveMetadata = { hash: hasedData, game: { @@ -7679,9 +7814,7 @@ var DataManager = class { id: this.gameRef.config.name.id, version: this.gameRef.config.name.version }, - emath: { - version - } + ...eMathMetadata }; return [saveMetadata, gameDataString]; } @@ -7700,17 +7833,17 @@ var DataManager = class { * @returns The decompiled object, or null if the data is empty or invalid. */ decompileData(data) { - if (!data && this.localStorage) { + if (!data) { + if (!this.localStorage) { + console.warn( + "eMath.js: Local storage is not supported. Methods that rely on local storage will not work: decompileData() requires the data to be passed as an argument." + ); + return null; + } data = this.localStorage.getItem( `${this.gameRef.config.name.id}-data` ); } - if (!data && !this.localStorage) { - console.warn( - "eMath.js: Local storage is not supported. Methods that rely on local storage will not work: decompileData() requires the data to be passed as an argument." - ); - return null; - } if (!data) return null; let parsedData; try { @@ -7749,6 +7882,7 @@ var DataManager = class { /** * Resets the game data to its initial state and saves it. * @param reload - Whether to reload the page after resetting the data. Defaults to `false`. + * (Reloading may help with some issues with saving data) */ resetData(reload = false) { if (!this.normalData) { @@ -7786,6 +7920,12 @@ var DataManager = class { * If you want to implement a custom data export, use {@link compileData} instead. */ exportData() { + if (typeof document === "undefined") { + console.warn( + "eMath.js: exportData(): Document is not defined. You can use compileData() instead to implement a custom save system." + ); + return; + } const content = this.compileData(); if (prompt("Download save data?:", content) != null) { const blob = new Blob([content], { type: "text/plain" }); @@ -7813,133 +7953,8 @@ var DataManager = class { } if (!dataToParse) return null; const [, loadedData] = dataToParse; - function isPlainObject(obj) { - return typeof obj === "object" && obj?.constructor === Object; - } - const objectHasOwnProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key); - function deepMerge(sourcePlain, source, target) { - if (!sourcePlain || !source || !target) { - console.warn( - "eMath.js: dataManager.deepMerge(): Missing arguments:", - sourcePlain, - source, - target - ); - return target ?? {}; - } - const out = target; - for (const key in sourcePlain) { - if (objectHasOwnProperty(sourcePlain, key) && !objectHasOwnProperty(target, key)) { - out[key] = sourcePlain[key]; - } - if (source[key] instanceof Currency) { - const sourceCurrency = sourcePlain[key]; - const targetCurrency = target[key]; - if (Array.isArray(targetCurrency.upgrades)) { - const upgrades = targetCurrency.upgrades; - targetCurrency.upgrades = {}; - for (const upgrade of upgrades) { - targetCurrency.upgrades[upgrade.id] = upgrade; - } - } - targetCurrency.upgrades = { - ...sourceCurrency.upgrades, - ...targetCurrency.upgrades - }; - out[key] = targetCurrency; - targetCurrency.items = { - ...sourceCurrency.items, - ...targetCurrency.items - }; - } else if (isPlainObject(sourcePlain[key]) && isPlainObject(target[key])) { - out[key] = deepMerge( - sourcePlain[key], - source[key], - target[key] - ); - } - } - return out; - } - let loadedDataProcessed = !mergeData ? loadedData : deepMerge(this.normalDataPlain, this.normalData, loadedData); - const upgradeDataProperties = Object.getOwnPropertyNames( - new UpgradeData({ id: "", level: Decimal.dZero }) - ); - const itemDataProperties = Object.getOwnPropertyNames( - new ItemData({ id: "", amount: Decimal.dZero }) - ); - function convertTemplateClass(templateClassToConvert, plain) { - const out = plainToInstance( - templateClassToConvert, - plain - ); - if (out instanceof Currency) { - for (const upgradeName in out.upgrades) { - const upgrade = out.upgrades[upgradeName]; - if (!upgrade || !upgradeDataProperties.every( - (prop) => Object.getOwnPropertyNames(upgrade).includes(prop) - )) { - delete out.upgrades[upgradeName]; - continue; - } - out.upgrades[upgradeName] = plainToInstance( - UpgradeData, - upgrade - ); - } - for (const itemName in out.items) { - const item = out.items[itemName]; - if (!item || !itemDataProperties.every( - (prop) => Object.getOwnPropertyNames(item).includes(prop) - )) { - delete out.items[itemName]; - continue; - } - out.items[itemName] = plainToInstance(ItemData, item); - } - } - if (!out) { - throw new Error( - `Failed to convert ${templateClassToConvert.name} to class instance.` - ); - } - return out; - } - function plainToInstanceRecursive(normal, plain) { - if (!normal || !plain) { - throw new Error( - "dataManager.plainToInstanceRecursive(): Missing arguments." - ); - } - const out = plain; - for (const key in normal) { - if (plain[key] === void 0) { - console.warn( - `eMath.js: Missing property "${key}" in loaded data.` - ); - continue; - } - if (!isPlainObject(plain[key])) continue; - const normalDataClass = normal[key].constructor; - if (normalDataClass === Object) { - out[key] = plainToInstanceRecursive( - normal[key], - plain[key] - ); - continue; - } - out[key] = convertTemplateClass( - normalDataClass, - plain[key] - ); - } - return out; - } - loadedDataProcessed = plainToInstanceRecursive( - this.normalData, - loadedDataProcessed - ); - return loadedDataProcessed; + const loadedDataMerged = !mergeData ? loadedData : deepMerge(this.normalDataPlain, this.normalData, loadedData); + return plainToInstanceRecursive(this.normalData, loadedDataMerged); } /** * Loads game data and processes it. diff --git a/dist/main/eMath.js b/dist/main/eMath.js index 01fea2e..4a6e523 100644 --- a/dist/main/eMath.js +++ b/dist/main/eMath.js @@ -68,6 +68,7 @@ __export(src_exports, { calculateSumLoop: () => calculateSumLoop, calculateUpgrade: () => calculateUpgrade, decimalToJSONString: () => decimalToJSONString, + eMathMetadata: () => eMathMetadata, equalsTolerance: () => equalsTolerance, formats: () => formats, inverseFunctionApprox: () => inverseFunctionApprox, @@ -77,6 +78,32 @@ __export(src_exports, { module.exports = __toCommonJS(src_exports); var import_reflect_metadata5 = require("reflect-metadata"); +// src/metadata.ts +var eMathMetadata = { + /** + * The version of the library + * @example "9.5.0" + */ + version: (() => { + try { + return "9.5.0"; + } catch (error) { + return "9.5.0"; + } + })(), + /** + * The data about the Break Eternity library + */ + // eslint-disable-next-line @typescript-eslint/naming-convention + "break_eternity.js": { + /** + * The version of the Break Eternity library + * @example "2.1.0" + */ + version: "2.1.0" + } +}; + // src/E/lru-cache.ts var LRUCache = class { /** diff --git a/dist/main/eMath.min.js b/dist/main/eMath.min.js index 6d00d6f..69df33a 100644 --- a/dist/main/eMath.min.js +++ b/dist/main/eMath.min.js @@ -1,4 +1,4 @@ -"use strict";(function(Mt,at){var Tt=typeof exports=="object";if(typeof define=="function"&&define.amd)define([],at);else if(typeof module=="object"&&module.exports)module.exports=at();else{var ut=at(),Ft=Tt?exports:Mt;for(var vt in ut)Ft[vt]=ut[vt]}})(typeof self<"u"?self:exports,()=>{var Mt={},at={exports:Mt},Tt=Object.create,ut=Object.defineProperty,Ft=Object.getOwnPropertyDescriptor,vt=Object.getOwnPropertyNames,Se=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty,Oe=(t,e)=>function(){return e||(0,t[vt(t)[0]])((e={exports:{}}).exports,e),e.exports},Xt=(t,e)=>{for(var r in e)ut(t,r,{get:e[r],enumerable:!0})},Kt=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of vt(e))!Ee.call(t,s)&&s!==r&&ut(t,s,{get:()=>e[s],enumerable:!(i=Ft(e,s))||i.enumerable});return t},dt=(t,e,r)=>(r=t!=null?Tt(Se(t)):{},Kt(e||!t||!t.__esModule?ut(r,"default",{value:t,enumerable:!0}):r,t)),Te=t=>Kt(ut({},"__esModule",{value:!0}),t),tt=(t,e,r,i)=>{for(var s=i>1?void 0:i?Ft(e,r):e,a=t.length-1,u;a>=0;a--)(u=t[a])&&(s=(i?u(e,r,s):u(s))||s);return i&&s&&ut(e,r,s),s},Nt=Oe({"node_modules/reflect-metadata/Reflect.js"(){var t;(function(e){(function(r){var i=typeof globalThis=="object"?globalThis:typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:g(),s=a(e);typeof i.Reflect<"u"&&(s=a(i.Reflect,s)),r(s,i),typeof i.Reflect>"u"&&(i.Reflect=e);function a(l,S){return function(E,V){Object.defineProperty(l,E,{configurable:!0,writable:!0,value:V}),S&&S(E,V)}}function u(){try{return Function("return this;")()}catch{}}function f(){try{return(0,eval)("(function() { return this; })()")}catch{}}function g(){return u()||f()}})(function(r,i){var s=Object.prototype.hasOwnProperty,a=typeof Symbol=="function",u=a&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",f=a&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",g=typeof Object.create=="function",l={__proto__:[]}instanceof Array,S=!g&&!l,E={create:g?function(){return Wt(Object.create(null))}:l?function(){return Wt({__proto__:null})}:function(){return Wt({})},has:S?function(h,c){return s.call(h,c)}:function(h,c){return c in h},get:S?function(h,c){return s.call(h,c)?h[c]:void 0}:function(h,c){return h[c]}},V=Object.getPrototypeOf(Function),q=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:ur(),U=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:lr(),_=typeof WeakMap=="function"?WeakMap:fr(),k=a?Symbol.for("@reflect-metadata:registry"):void 0,x=sr(),Z=ar(x);function o(h,c,d,v){if(L(d)){if(!Ne(h))throw new TypeError;if(!pe(c))throw new TypeError;return X(h,c)}else{if(!Ne(h))throw new TypeError;if(!B(c))throw new TypeError;if(!B(v)&&!L(v)&&!wt(v))throw new TypeError;return wt(v)&&(v=void 0),d=ot(d),nt(h,c,d,v)}}r("decorate",o);function b(h,c){function d(v,P){if(!B(v))throw new TypeError;if(!L(P)&&!ir(P))throw new TypeError;qt(h,c,v,P)}return d}r("metadata",b);function w(h,c,d,v){if(!B(d))throw new TypeError;return L(v)||(v=ot(v)),qt(h,c,d,v)}r("defineMetadata",w);function N(h,c,d){if(!B(c))throw new TypeError;return L(d)||(d=ot(d)),J(h,c,d)}r("hasMetadata",N);function y(h,c,d){if(!B(c))throw new TypeError;return L(d)||(d=ot(d)),et(h,c,d)}r("hasOwnMetadata",y);function M(h,c,d){if(!B(c))throw new TypeError;return L(d)||(d=ot(d)),rt(h,c,d)}r("getMetadata",M);function F(h,c,d){if(!B(c))throw new TypeError;return L(d)||(d=ot(d)),ct(h,c,d)}r("getOwnMetadata",F);function $(h,c){if(!B(h))throw new TypeError;return L(c)||(c=ot(c)),Pt(h,c)}r("getMetadataKeys",$);function j(h,c){if(!B(h))throw new TypeError;return L(c)||(c=ot(c)),kt(h,c)}r("getOwnMetadataKeys",j);function z(h,c,d){if(!B(c))throw new TypeError;if(L(d)||(d=ot(d)),!B(c))throw new TypeError;L(d)||(d=ot(d));var v=Ot(c,d,!1);return L(v)?!1:v.OrdinaryDeleteMetadata(h,c,d)}r("deleteMetadata",z);function X(h,c){for(var d=h.length-1;d>=0;--d){var v=h[d],P=v(c);if(!L(P)&&!wt(P)){if(!pe(P))throw new TypeError;c=P}}return c}function nt(h,c,d,v){for(var P=h.length-1;P>=0;--P){var D=h[P],Q=D(c,d,v);if(!L(Q)&&!wt(Q)){if(!B(Q))throw new TypeError;v=Q}}return v}function J(h,c,d){var v=et(h,c,d);if(v)return!0;var P=Ht(c);return wt(P)?!1:J(h,P,d)}function et(h,c,d){var v=Ot(c,d,!1);return L(v)?!1:de(v.OrdinaryHasOwnMetadata(h,c,d))}function rt(h,c,d){var v=et(h,c,d);if(v)return ct(h,c,d);var P=Ht(c);if(!wt(P))return rt(h,P,d)}function ct(h,c,d){var v=Ot(c,d,!1);if(!L(v))return v.OrdinaryGetOwnMetadata(h,c,d)}function qt(h,c,d,v){var P=Ot(d,v,!0);P.OrdinaryDefineOwnMetadata(h,c,d,v)}function Pt(h,c){var d=kt(h,c),v=Ht(h);if(v===null)return d;var P=Pt(v,c);if(P.length<=0)return d;if(d.length<=0)return P;for(var D=new U,Q=[],G=0,I=d;G=0&&I=this._keys.length?(this._index=-1,this._keys=c,this._values=c):this._index++,{value:O,done:!1}}return{value:void 0,done:!0}},G.prototype.throw=function(I){throw this._index>=0&&(this._index=-1,this._keys=c,this._values=c),I},G.prototype.return=function(I){return this._index>=0&&(this._index=-1,this._keys=c,this._values=c),{value:I,done:!0}},G}(),v=function(){function G(){this._keys=[],this._values=[],this._cacheKey=h,this._cacheIndex=-2}return Object.defineProperty(G.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),G.prototype.has=function(I){return this._find(I,!1)>=0},G.prototype.get=function(I){var O=this._find(I,!1);return O>=0?this._values[O]:void 0},G.prototype.set=function(I,O){var A=this._find(I,!0);return this._values[A]=O,this},G.prototype.delete=function(I){var O=this._find(I,!1);if(O>=0){for(var A=this._keys.length,C=O+1;CJe}),at.exports=Te(te);var mr=dt(Nt()),ee={};Xt(ee,{Attribute:()=>Yt,AttributeStatic:()=>We,Boost:()=>Gt,BoostObject:()=>bt,Currency:()=>Et,CurrencyStatic:()=>He,DEFAULT_ITERATIONS:()=>At,Decimal:()=>n,E:()=>Qe,FORMATS:()=>ze,FormatTypeList:()=>Ce,Grid:()=>Bt,GridCell:()=>Ct,GridCellCollection:()=>K,Item:()=>ce,ItemData:()=>St,LRUCache:()=>Lt,ListNode:()=>re,ST_NAMES:()=>lt,UpgradeData:()=>It,UpgradeStatic:()=>fe,calculateItem:()=>he,calculateSum:()=>zt,calculateSumApprox:()=>oe,calculateSumLoop:()=>ae,calculateUpgrade:()=>ue,decimalToJSONString:()=>le,equalsTolerance:()=>$t,formats:()=>ht,inverseFunctionApprox:()=>Zt,roundingBase:()=>Be,upgradeToCacheNameEL:()=>De});var gr=dt(Nt()),Lt=class{constructor(t){this.map=new Map,this.first=void 0,this.last=void 0,this.maxSize=t}get size(){return this.map.size}get(t){let e=this.map.get(t);if(e!==void 0)return e!==this.first&&(e===this.last?(this.last=e.prev,this.last.next=void 0):(e.prev.next=e.next,e.next.prev=e.prev),e.next=this.first,this.first.prev=e,this.first=e),e.value}set(t,e){if(this.maxSize<1)return;if(this.map.has(t))throw new Error("Cannot update existing keys in the cache");let r=new re(t,e);for(this.first===void 0?(this.first=r,this.last=r):(r.next=this.first,this.first.prev=r,this.first=r),this.map.set(t,r);this.map.size>this.maxSize;){let i=this.last;this.map.delete(i.key),this.last=i.prev,this.last.next=void 0}}},re=class{constructor(t,e){this.next=void 0,this.prev=void 0,this.key=t,this.value=e}},it;(function(t){t[t.PLAIN_TO_CLASS=0]="PLAIN_TO_CLASS",t[t.CLASS_TO_PLAIN=1]="CLASS_TO_PLAIN",t[t.CLASS_TO_CLASS=2]="CLASS_TO_CLASS"})(it||(it={}));var Fe=function(){function t(){this._typeMetadatas=new Map,this._transformMetadatas=new Map,this._exposeMetadatas=new Map,this._excludeMetadatas=new Map,this._ancestorsMap=new Map}return t.prototype.addTypeMetadata=function(e){this._typeMetadatas.has(e.target)||this._typeMetadatas.set(e.target,new Map),this._typeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.addTransformMetadata=function(e){this._transformMetadatas.has(e.target)||this._transformMetadatas.set(e.target,new Map),this._transformMetadatas.get(e.target).has(e.propertyName)||this._transformMetadatas.get(e.target).set(e.propertyName,[]),this._transformMetadatas.get(e.target).get(e.propertyName).push(e)},t.prototype.addExposeMetadata=function(e){this._exposeMetadatas.has(e.target)||this._exposeMetadatas.set(e.target,new Map),this._exposeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.addExcludeMetadata=function(e){this._excludeMetadatas.has(e.target)||this._excludeMetadatas.set(e.target,new Map),this._excludeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.findTransformMetadatas=function(e,r,i){return this.findMetadatas(this._transformMetadatas,e,r).filter(function(s){return!s.options||s.options.toClassOnly===!0&&s.options.toPlainOnly===!0?!0:s.options.toClassOnly===!0?i===it.CLASS_TO_CLASS||i===it.PLAIN_TO_CLASS:s.options.toPlainOnly===!0?i===it.CLASS_TO_PLAIN:!0})},t.prototype.findExcludeMetadata=function(e,r){return this.findMetadata(this._excludeMetadatas,e,r)},t.prototype.findExposeMetadata=function(e,r){return this.findMetadata(this._exposeMetadatas,e,r)},t.prototype.findExposeMetadataByCustomName=function(e,r){return this.getExposedMetadatas(e).find(function(i){return i.options&&i.options.name===r})},t.prototype.findTypeMetadata=function(e,r){return this.findMetadata(this._typeMetadatas,e,r)},t.prototype.getStrategy=function(e){var r=this._excludeMetadatas.get(e),i=r&&r.get(void 0),s=this._exposeMetadatas.get(e),a=s&&s.get(void 0);return i&&a||!i&&!a?"none":i?"excludeAll":"exposeAll"},t.prototype.getExposedMetadatas=function(e){return this.getMetadata(this._exposeMetadatas,e)},t.prototype.getExcludedMetadatas=function(e){return this.getMetadata(this._excludeMetadatas,e)},t.prototype.getExposedProperties=function(e,r){return this.getExposedMetadatas(e).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?r===it.CLASS_TO_CLASS||r===it.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?r===it.CLASS_TO_PLAIN:!0}).map(function(i){return i.propertyName})},t.prototype.getExcludedProperties=function(e,r){return this.getExcludedMetadatas(e).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?r===it.CLASS_TO_CLASS||r===it.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?r===it.CLASS_TO_PLAIN:!0}).map(function(i){return i.propertyName})},t.prototype.clear=function(){this._typeMetadatas.clear(),this._exposeMetadatas.clear(),this._excludeMetadatas.clear(),this._ancestorsMap.clear()},t.prototype.getMetadata=function(e,r){var i=e.get(r),s;i&&(s=Array.from(i.values()).filter(function(E){return E.propertyName!==void 0}));for(var a=[],u=0,f=this.getAncestors(r);uNumber.MAX_SAFE_INTEGER)&&(N="\u03C9");let M=t.log(o,8e3).toNumber();if(w.equals(0))return N;if(w.gt(0)&&w.lte(3)){let j=[];for(let z=0;zNumber.MAX_SAFE_INTEGER)&&(N="\u03C9");let M=t.log(o,8e3).toNumber();if(w.equals(0))return N;if(w.gt(0)&&w.lte(2)){let j=[];for(let z=0;z118?e.elemental.beyondOg(y):e.elemental.config.element_lists[o-1][N]},beyondOg(o){let b=Math.floor(Math.log10(o)),w=["n","u","b","t","q","p","h","s","o","e"],N="";for(let y=b;y>=0;y--){let M=Math.floor(o/Math.pow(10,y))%10;N==""?N=w[M].toUpperCase():N+=w[M]}return N},abbreviationLength(o){return o==1?1:Math.pow(Math.floor(o/2)+1,2)*2},getAbbreviationAndValue(o){let b=o.log(118).toNumber(),w=Math.floor(b)+1,N=e.elemental.abbreviationLength(w),y=b-w+1,M=Math.floor(y*N),F=e.elemental.getAbbreviation(w,y),$=new t(118).pow(w+M/N-1);return[F,$]},formatElementalPart(o,b){return b.eq(1)?o:`${b.toString()} ${o}`},format(o,b=2){if(o.gt(new t(118).pow(new t(118).pow(new t(118).pow(4)))))return"e"+e.elemental.format(o.log10(),b);let w=o.log(118),y=w.log(118).log(118).toNumber(),M=Math.max(4-y*2,1),F=[];for(;w.gte(1)&&F.length=M)return F.map(j=>e.elemental.formatElementalPart(j[0],j[1])).join(" + ");let $=new t(118).pow(w).toFixed(F.length===1?3:b);return F.length===0?$:F.length===1?`${$} \xD7 ${e.elemental.formatElementalPart(F[0][0],F[0][1])}`:`${$} \xD7 (${F.map(j=>e.elemental.formatElementalPart(j[0],j[1])).join(" + ")})`}},old_sc:{format(o,b){o=new t(o);let w=o.log10().floor();if(w.lt(9))return w.lt(3)?o.toFixed(b):o.floor().toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");{if(o.gte("eeee10")){let y=o.slog();return(y.gte(1e9)?"":t.dTen.pow(y.sub(y.floor())).toFixed(4))+"F"+e.old_sc.format(y.floor(),0)}let N=o.div(t.dTen.pow(w));return(w.log10().gte(9)?"":N.toFixed(4))+"e"+e.old_sc.format(w,0)}}},eng:{format(o,b=2){o=new t(o);let w=o.log10().floor();if(w.lt(9))return w.lt(3)?o.toFixed(b):o.floor().toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");{if(o.gte("eeee10")){let y=o.slog();return(y.gte(1e9)?"":t.dTen.pow(y.sub(y.floor())).toFixed(4))+"F"+e.eng.format(y.floor(),0)}let N=o.div(new t(1e3).pow(w.div(3).floor()));return(w.log10().gte(9)?"":N.toFixed(new t(4).sub(w.sub(w.div(3).floor().mul(3))).toNumber()))+"e"+e.eng.format(w.div(3).floor().mul(3),0)}}},mixed_sc:{format(o,b,w=9){o=new t(o);let N=o.log10().floor();return N.lt(303)&&N.gte(w)?g(o,b,w,"st"):g(o,b,w,"sc")}},layer:{layers:["infinity","eternity","reality","equality","affinity","celerity","identity","vitality","immunity","atrocity"],format(o,b=2,w){o=new t(o);let N=o.max(1).log10().max(1).log(r.log10()).floor();if(N.lte(0))return g(o,b,w,"sc");o=t.dTen.pow(o.max(1).log10().div(r.log10().pow(N)).sub(N.gte(1)?1:0));let y=N.div(10).floor(),M=N.toNumber()%10-1;return g(o,Math.max(4,b),w,"sc")+" "+(y.gte(1)?"meta"+(y.gte(2)?"^"+g(y,0,w,"sc"):"")+"-":"")+(isNaN(M)?"nanity":e.layer.layers[M])}},standard:{tier1(o){return lt[0][0][o%10]+lt[0][1][Math.floor(o/10)%10]+lt[0][2][Math.floor(o/100)]},tier2(o){let b=o%10,w=Math.floor(o/10)%10,N=Math.floor(o/100)%10,y="";return o<10?lt[1][0][o]:(w==1&&b==0?y+="Vec":y+=lt[1][1][b]+lt[1][2][w],y+=lt[1][3][N],y)}},inf:{format(o,b,w){o=new t(o);let N=0,y=new t(Number.MAX_VALUE),M=["","\u221E","\u03A9","\u03A8","\u028A"],F=["","","m","mm","mmm"];for(;o.gte(y);)o=o.log(y),N++;return N==0?g(o,b,w,"sc"):o.gte(3)?F[N]+M[N]+"\u03C9^"+g(o.sub(1),b,w,"sc"):o.gte(2)?F[N]+"\u03C9"+M[N]+"-"+g(y.pow(o.sub(2)),b,w,"sc"):F[N]+M[N]+"-"+g(y.pow(o.sub(1)),b,w,"sc")}},alphabet:{config:{alphabet:"abcdefghijklmnopqrstuvwxyz"},getAbbreviation(o,b=new t(1e15),w=!1,N=9){if(o=new t(o),b=new t(b).div(1e3),o.lt(b.mul(1e3)))return"";let{alphabet:y}=e.alphabet.config,M=y.length,F=o.log(1e3).sub(b.log(1e3)).floor(),$=F.add(1).log(M+1).ceil(),j="",z=(X,nt)=>{let J=X,et="";for(let rt=0;rt=M)return"\u03C9";et=y[ct]+et,J=J.sub(1).div(M).floor()}return et};if($.lt(N))j=z(F,$);else{let X=$.sub(N).add(1),nt=F.div(t.pow(M+1,X.sub(1))).floor();j=`${z(nt,new t(N))}(${X.gt("1e9")?X.format():X.format(0)})`}return j},format(o,b=2,w=9,N="mixed_sc",y=new t(1e15),M=!1,F){if(o=new t(o),y=new t(y).div(1e3),o.lt(y.mul(1e3)))return g(o,b,w,N);let $=e.alphabet.getAbbreviation(o,y,M,F),j=o.div(t.pow(1e3,o.log(1e3).floor()));return`${$.length>(F??9)+2?"":j.toFixed(b)+" "}${$}`}}},r=t.dTwo.pow(1024),i="\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089",s="\u2070\xB9\xB2\xB3\u2074\u2075\u2076\u2077\u2078\u2079";function a(o){return o.toFixed(0).split("").map(b=>b==="-"?"\u208B":i[parseInt(b,10)]).join("")}function u(o){return o.toFixed(0).split("").map(b=>b==="-"?"\u208B":s[parseInt(b,10)]).join("")}function f(o,b=2,w=9,N="st"){return g(o,b,w,N)}function g(o,b=2,w=9,N="mixed_sc"){o=new t(o);let y=o.lt(0)?"-":"";if(o.mag==1/0)return y+"Infinity";if(Number.isNaN(o.mag))return y+"NaN";if(o.lt(0)&&(o=o.mul(-1)),o.eq(0))return o.toFixed(b);let M=o.log10().floor();switch(N){case"sc":case"scientific":if(o.log10().lt(Math.min(-b,0))&&b>1){let F=o.log10().ceil(),$=o.div(F.eq(-1)?new t(.1):t.dTen.pow(F)),j=F.mul(-1).max(1).log10().gte(9);return y+(j?"":$.toFixed(2))+"e"+g(F,0,w,"mixed_sc")}else if(M.lt(w)){let F=Math.max(Math.min(b-M.toNumber(),b),0);return y+(F>0?o.toFixed(F):o.toFixed(F).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"))}else{if(o.gte("eeee10")){let j=o.slog();return(j.gte(1e9)?"":t.dTen.pow(j.sub(j.floor())).toFixed(2))+"F"+g(j.floor(),0)}let F=o.div(t.dTen.pow(M)),$=M.log10().gte(9);return y+($?"":F.toFixed(2))+"e"+g(M,0,w,"mixed_sc")}case"st":case"standard":{let F=o.log(1e3).floor();if(F.lt(1))return y+o.toFixed(Math.max(Math.min(b-M.toNumber(),b),0));let $=F.mul(3),j=F.log10().floor();if(j.gte(3e3))return"e"+g(M,b,w,"st");let z="";if(F.lt(4))z=["","K","M","B"][Math.round(F.toNumber())];else{let J=Math.floor(F.log(1e3).toNumber());for(J<100&&(J=Math.max(J-1,0)),F=F.sub(1).div(t.dTen.pow(J*3));F.gt(0);){let et=F.div(1e3).floor(),rt=F.sub(et.mul(1e3)).floor().toNumber();rt>0&&(rt==1&&!J&&(z="U"),J&&(z=e.standard.tier2(J)+(z?"-"+z:"")),rt>1&&(z=e.standard.tier1(rt)+z)),F=et,J++}}let X=o.div(t.dTen.pow($)),nt=b===2?t.dTwo.sub(M.sub($)).add(1).toNumber():b;return y+(j.gte(10)?"":X.toFixed(nt)+" ")+z}default:return e[N]||console.error('Invalid format type "',N,'"'),y+e[N].format(o,b,w)}}function l(o,b,w="mixed_sc",N,y){o=new t(o),b=new t(b);let M=o.add(b),F,$=M.div(o);return $.gte(10)&&o.gte(1e100)?($=$.log10().mul(20),F="(+"+g($,N,y,w)+" OoMs/sec)"):F="(+"+g(b,N,y,w)+"/sec)",F}function S(o,b=2,w="s"){return o=new t(o),o.gte(86400)?g(o.div(86400).floor(),0,12,"sc")+":"+S(o.mod(86400),b,"d"):o.gte(3600)||w=="d"?(o.div(3600).gte(10)||w!="d"?"":"0")+g(o.div(3600).floor(),0,12,"sc")+":"+S(o.mod(3600),b,"h"):o.gte(60)||w=="h"?(o.div(60).gte(10)||w!="h"?"":"0")+g(o.div(60).floor(),0,12,"sc")+":"+S(o.mod(60),b,"m"):(o.gte(10)||w!="m"?"":"0")+g(o,b,12,"sc")}function E(o,b=!1,w=0,N=9,y="mixed_sc"){let M=kt=>g(kt,w,N,y);o=new t(o);let F=o.mul(1e3).mod(1e3).floor(),$=o.mod(60).floor(),j=o.div(60).mod(60).floor(),z=o.div(3600).mod(24).floor(),X=o.div(86400).mod(365.2425).floor(),nt=o.div(31556952).floor(),J=nt.eq(1)?" year":" years",et=X.eq(1)?" day":" days",rt=z.eq(1)?" hour":" hours",ct=j.eq(1)?" minute":" minutes",qt=$.eq(1)?" second":" seconds",Pt=F.eq(1)?" millisecond":" milliseconds";return`${nt.gt(0)?M(nt)+J+", ":""}${X.gt(0)?M(X)+et+", ":""}${z.gt(0)?M(z)+rt+", ":""}${j.gt(0)?M(j)+ct+", ":""}${$.gt(0)?M($)+qt+",":""}${b&&F.gt(0)?" "+M(F)+Pt:""}`.replace(/,([^,]*)$/,"$1").trim()}function V(o){return o=new t(o),g(t.dOne.sub(o).mul(100))+"%"}function q(o){return o=new t(o),g(o.mul(100))+"%"}function U(o,b=2){return o=new t(o),o.gte(1)?"\xD7"+o.format(b):"/"+o.pow(-1).format(b)}function _(o,b,w=10){return t.gte(o,10)?t.pow(w,t.log(o,w).pow(b)):new t(o)}function k(o,b=0){o=new t(o);let w=(F=>F.map(($,j)=>({name:$.name,altName:$.altName,value:t.pow(1e3,new t(j).add(1))})))([{name:"K",altName:"Kilo"},{name:"M",altName:"Mega"},{name:"G",altName:"Giga"},{name:"T",altName:"Tera"},{name:"P",altName:"Peta"},{name:"Decimal",altName:"Exa"},{name:"Z",altName:"Zetta"},{name:"Y",altName:"Yotta"},{name:"R",altName:"Ronna"},{name:"Q",altName:"Quetta"}]),N="",y=o.lte(0)?0:t.min(t.log(o,1e3).sub(1),w.length-1).floor().toNumber(),M=w[y];if(y===0)switch(b){case 1:N="";break;case 2:case 0:default:N=o.format();break}switch(b){case 1:N=M.name;break;case 2:N=o.divide(M.value).format();break;case 3:N=M.altName;break;case 0:default:N=`${o.divide(M.value).format()} ${M.name}`;break}return N}function x(o,b=!1){return`${k(o,2)} ${k(o,1)}eV${b?"/c^2":""}`}let Z={...e,toSubscript:a,toSuperscript:u,formatST:f,format:g,formatGain:l,formatTime:S,formatTimeLong:E,formatReduction:V,formatPercent:q,formatMult:U,expMult:_,metric:k,ev:x};return{FORMATS:e,formats:Z}}var xt=17,W=9e15,Pe=Math.log10(9e15),mt=1/9e15,ke=308,Le=-324,ie=5,Ve=1023,xe=!0,Ue=!1,je=function(){let t=[];for(let r=Le+1;r<=ke;r++)t.push(+("1e"+r));let e=323;return function(r){return t[r+e]}}(),gt=[2,Math.E,3,4,5,6,7,8,9,10],Ge=[[1,1.0891180521811203,1.1789767925673957,1.2701455431742086,1.3632090180450092,1.4587818160364217,1.5575237916251419,1.6601571006859253,1.767485818836978,1.8804192098842727,2],[1,1.1121114330934079,1.231038924931609,1.3583836963111375,1.4960519303993531,1.6463542337511945,1.8121385357018724,1.996971324618307,2.2053895545527546,2.4432574483385254,Math.E],[1,1.1187738849693603,1.2464963939368214,1.38527004705667,1.5376664685821402,1.7068895236551784,1.897001227148399,2.1132403089001035,2.362480153784171,2.6539010333870774,3],[1,1.1367350847096405,1.2889510672956703,1.4606478703324786,1.6570295196661111,1.8850062585672889,2.1539465047453485,2.476829779693097,2.872061932789197,3.3664204535587183,4],[1,1.1494592900767588,1.319708228183931,1.5166291280087583,1.748171114438024,2.0253263297298045,2.3636668498288547,2.7858359149579424,3.3257226212448145,4.035730287722532,5],[1,1.159225940787673,1.343712473580932,1.5611293155111927,1.8221199554561318,2.14183924486326,2.542468319282638,3.0574682501653316,3.7390572020926873,4.6719550537360774,6],[1,1.1670905356972596,1.3632807444991446,1.5979222279405536,1.8842640123816674,2.2416069644878687,2.69893426559423,3.3012632110403577,4.121250340630164,5.281493033448316,7],[1,1.1736630594087796,1.379783782386201,1.6292821855668218,1.9378971836180754,2.3289975651071977,2.8384347394720835,3.5232708454565906,4.478242031114584,5.868592169644505,8],[1,1.1793017514670474,1.394054150657457,1.65664127441059,1.985170999970283,2.4069682290577457,2.9647310119960752,3.7278665320924946,4.814462547283592,6.436522247411611,9],[1,1.1840100246247336,1.4061375836156955,1.6802272208863964,2.026757028388619,2.4770056063449646,3.080525271755482,3.9191964192627284,5.135152840833187,6.989961179534715,10]],Re=[[-1,-.9194161097107025,-.8335625019330468,-.7425599821143978,-.6466611521029437,-.5462617907227869,-.4419033816638769,-.3342645487554494,-.224140440909962,-.11241087890006762,0],[-1,-.90603157029014,-.80786507256596,-.7064666939634,-.60294836853664,-.49849837513117,-.39430303318768,-.29147201034755,-.19097820800866,-.09361896280296,0],[-1,-.9021579584316141,-.8005762598234203,-.6964780623319391,-.5911906810998454,-.486050182576545,-.3823089430815083,-.28106046722897615,-.1831906535795894,-.08935809204418144,0],[-1,-.8917227442365535,-.781258746326964,-.6705130326902455,-.5612813129406509,-.4551067709033134,-.35319256652135966,-.2563741554088552,-.1651412821106526,-.0796919581982668,0],[-1,-.8843387974366064,-.7678744063886243,-.6529563724510552,-.5415870994657841,-.4352842206588936,-.33504449124791424,-.24138853420685147,-.15445285440944467,-.07409659641336663,0],[-1,-.8786709358426346,-.7577735191184886,-.6399546189952064,-.527284921869926,-.4211627631006314,-.3223479611761232,-.23107655627789858,-.1472057700818259,-.07035171210706326,0],[-1,-.8740862815291583,-.7497032990976209,-.6297119746181752,-.5161838335958787,-.41036238255751956,-.31277212146489963,-.2233976621705518,-.1418697367979619,-.06762117662323441,0],[-1,-.8702632331800649,-.7430366914122081,-.6213373075161548,-.5072025698095242,-.40171437727184167,-.30517930701410456,-.21736343968190863,-.137710238299109,-.06550774483471955,0],[-1,-.8670016295947213,-.7373984232432306,-.6143173985094293,-.49973884395492807,-.394584953527678,-.2989649949848695,-.21245647317021688,-.13434688362382652,-.0638072667348083,0],[-1,-.8641642839543857,-.732534623168535,-.6083127477059322,-.4934049257184696,-.3885773075899922,-.29376029055315767,-.2083678561173622,-.13155653399373268,-.062401588652553186,0]],m=function(e){return n.fromValue_noAlloc(e)},T=function(t,e,r){return n.fromComponents(t,e,r)},p=function(e,r,i){return n.fromComponents_noNormalize(e,r,i)},ft=function(e,r){let i=r+1,s=Math.ceil(Math.log10(Math.abs(e))),a=Math.round(e*Math.pow(10,i-s))*Math.pow(10,s-i);return parseFloat(a.toFixed(Math.max(i-s,0)))},Ut=function(t){return Math.sign(t)*Math.log10(Math.abs(t))},$e=function(t){if(!isFinite(t))return t;if(t<-50)return t===Math.trunc(t)?Number.NEGATIVE_INFINITY:0;let e=1;for(;t<10;)e=e*t,++t;t-=1;let r=.9189385332046727;r=r+(t+.5)*Math.log(t),r=r-t;let i=t*t,s=t;return r=r+1/(12*s),s=s*i,r=r-1/(360*s),s=s*i,r=r+1/(1260*s),s=s*i,r=r-1/(1680*s),s=s*i,r=r+1/(1188*s),s=s*i,r=r-691/(360360*s),s=s*i,r=r+7/(1092*s),s=s*i,r=r-3617/(122400*s),Math.exp(r)/e},Ze=.36787944117144233,ne=.5671432904097838,jt=function(t,e=1e-10,r=!0){let i,s;if(!Number.isFinite(t))return t;if(r){if(t===0)return t;if(t===1)return ne;t<10?i=0:i=Math.log(t)-Math.log(Math.log(t))}else{if(t===0)return-1/0;t<=-.1?i=-2:i=Math.log(-t)-Math.log(-Math.log(-t))}for(let a=0;a<100;++a){if(s=(t*Math.exp(-i)+i*i)/(i+1),Math.abs(s-i).5?1:-1;if(Math.random()*20<1)return p(e,0,1);let r=Math.floor(Math.random()*(t+1)),i=r===0?Math.random()*616-308:Math.random()*16;Math.random()>.9&&(i=Math.trunc(i));let s=Math.pow(10,i);return Math.random()>.9&&(s=Math.trunc(s)),T(e,r,s)}static affordGeometricSeries_core(t,e,r,i){let s=e.mul(r.pow(i));return n.floor(t.div(s).mul(r.sub(1)).add(1).log10().div(r.log10()))}static sumGeometricSeries_core(t,e,r,i){return e.mul(r.pow(i)).mul(n.sub(1,r.pow(t))).div(n.sub(1,r))}static affordArithmeticSeries_core(t,e,r,i){let a=e.add(i.mul(r)).sub(r.div(2)),u=a.pow(2);return a.neg().add(u.add(r.mul(t).mul(2)).sqrt()).div(r).floor()}static sumArithmeticSeries_core(t,e,r,i){let s=e.add(i.mul(r));return t.div(2).mul(s.mul(2).plus(t.sub(1).mul(r)))}static efficiencyOfPurchase_core(t,e,r){return t.div(e).add(t.div(r))}normalize(){if(this.sign===0||this.mag===0&&this.layer===0||this.mag===Number.NEGATIVE_INFINITY&&this.layer>0&&Number.isFinite(this.layer))return this.sign=0,this.mag=0,this.layer=0,this;if(this.layer===0&&this.mag<0&&(this.mag=-this.mag,this.sign=-this.sign),this.mag===Number.POSITIVE_INFINITY||this.layer===Number.POSITIVE_INFINITY||this.mag===Number.NEGATIVE_INFINITY||this.layer===Number.NEGATIVE_INFINITY)return this.mag=Number.POSITIVE_INFINITY,this.layer=Number.POSITIVE_INFINITY,this;if(this.layer===0&&this.mag=W)return this.layer+=1,this.mag=e*Math.log10(t),this;for(;t0;)this.layer-=1,this.layer===0?this.mag=Math.pow(10,this.mag):(this.mag=e*Math.pow(10,t),t=Math.abs(this.mag),e=Math.sign(this.mag));return this.layer===0&&(this.mag<0?(this.mag=-this.mag,this.sign=-this.sign):this.mag===0&&(this.sign=0)),(Number.isNaN(this.sign)||Number.isNaN(this.layer)||Number.isNaN(this.mag))&&(this.sign=Number.NaN,this.layer=Number.NaN,this.mag=Number.NaN),this}fromComponents(t,e,r){return this.sign=t,this.layer=e,this.mag=r,this.normalize(),this}fromComponents_noNormalize(t,e,r){return this.sign=t,this.layer=e,this.mag=r,this}fromMantissaExponent(t,e){return this.layer=1,this.sign=Math.sign(t),t=Math.abs(t),this.mag=e+Math.log10(t),this.normalize(),this}fromMantissaExponent_noNormalize(t,e){return this.fromMantissaExponent(t,e),this}fromDecimal(t){return this.sign=t.sign,this.layer=t.layer,this.mag=t.mag,this}fromNumber(t){return this.mag=Math.abs(t),this.sign=Math.sign(t),this.layer=0,this.normalize(),this}fromString(t,e=!1){let r=t,i=n.fromStringCache.get(r);if(i!==void 0)return this.fromDecimal(i);xe?t=t.replace(",",""):Ue&&(t=t.replace(",","."));let s=t.split("^^^");if(s.length===2){let _=parseFloat(s[0]),k=parseFloat(s[1]),x=s[1].split(";"),Z=1;if(x.length===2&&(Z=parseFloat(x[1]),isFinite(Z)||(Z=1)),isFinite(_)&&isFinite(k)){let o=n.pentate(_,k,Z,e);return this.sign=o.sign,this.layer=o.layer,this.mag=o.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}}let a=t.split("^^");if(a.length===2){let _=parseFloat(a[0]),k=parseFloat(a[1]),x=a[1].split(";"),Z=1;if(x.length===2&&(Z=parseFloat(x[1]),isFinite(Z)||(Z=1)),isFinite(_)&&isFinite(k)){let o=n.tetrate(_,k,Z,e);return this.sign=o.sign,this.layer=o.layer,this.mag=o.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}}let u=t.split("^");if(u.length===2){let _=parseFloat(u[0]),k=parseFloat(u[1]);if(isFinite(_)&&isFinite(k)){let x=n.pow(_,k);return this.sign=x.sign,this.layer=x.layer,this.mag=x.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}}t=t.trim().toLowerCase();let f,g,l=t.split("pt");if(l.length===2){f=10;let _=!1;l[0].startsWith("-")&&(_=!0,l[0]=l[0].slice(1)),g=parseFloat(l[0]),l[1]=l[1].replace("(",""),l[1]=l[1].replace(")","");let k=parseFloat(l[1]);if(isFinite(k)||(k=1),isFinite(f)&&isFinite(g)){let x=n.tetrate(f,g,k,e);return this.sign=x.sign,this.layer=x.layer,this.mag=x.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),_&&(this.sign*=-1),this}}if(l=t.split("p"),l.length===2){f=10;let _=!1;l[0].startsWith("-")&&(_=!0,l[0]=l[0].slice(1)),g=parseFloat(l[0]),l[1]=l[1].replace("(",""),l[1]=l[1].replace(")","");let k=parseFloat(l[1]);if(isFinite(k)||(k=1),isFinite(f)&&isFinite(g)){let x=n.tetrate(f,g,k,e);return this.sign=x.sign,this.layer=x.layer,this.mag=x.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),_&&(this.sign*=-1),this}}if(l=t.split("f"),l.length===2){f=10;let _=!1;l[0].startsWith("-")&&(_=!0,l[0]=l[0].slice(1)),l[0]=l[0].replace("(",""),l[0]=l[0].replace(")","");let k=parseFloat(l[0]);if(l[1]=l[1].replace("(",""),l[1]=l[1].replace(")",""),g=parseFloat(l[1]),isFinite(k)||(k=1),isFinite(f)&&isFinite(g)){let x=n.tetrate(f,g,k,e);return this.sign=x.sign,this.layer=x.layer,this.mag=x.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),_&&(this.sign*=-1),this}}let S=t.split("e"),E=S.length-1;if(E===0){let _=parseFloat(t);if(isFinite(_))return this.fromNumber(_),n.fromStringCache.size>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}else if(E===1){let _=parseFloat(t);if(isFinite(_)&&_!==0)return this.fromNumber(_),n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}let V=t.split("e^");if(V.length===2){this.sign=1,V[0].startsWith("-")&&(this.sign=-1);let _="";for(let k=0;k=43&&x<=57||x===101)_+=V[1].charAt(k);else{if(this.layer=parseFloat(_),this.mag=parseFloat(V[1].substr(k+1)),this.layer<0||this.layer%1!=0){let Z=n.tetrate(10,this.layer,this.mag,e);this.sign=Z.sign,this.layer=Z.layer,this.mag=Z.mag}return this.normalize(),n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}}}if(E<1)return this.sign=0,this.layer=0,this.mag=0,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this;let q=parseFloat(S[0]);if(q===0)return this.sign=0,this.layer=0,this.mag=0,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this;let U=parseFloat(S[S.length-1]);if(E>=2){let _=parseFloat(S[S.length-2]);isFinite(_)&&(U*=Math.sign(_),U+=Ut(_))}if(!isFinite(q))this.sign=S[0]==="-"?-1:1,this.layer=E,this.mag=U;else if(E===1)this.sign=Math.sign(q),this.layer=1,this.mag=U+Math.log10(Math.abs(q));else if(this.sign=Math.sign(q),this.layer=E,E===2){let _=n.mul(T(1,2,U),m(q));return this.sign=_.sign,this.layer=_.layer,this.mag=_.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}else this.mag=U;return this.normalize(),n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}fromValue(t){return t instanceof n?this.fromDecimal(t):typeof t=="number"?this.fromNumber(t):typeof t=="string"?this.fromString(t):(this.sign=0,this.layer=0,this.mag=0,this)}toNumber(){return this.mag===Number.POSITIVE_INFINITY&&this.layer===Number.POSITIVE_INFINITY&&this.sign===1?Number.POSITIVE_INFINITY:this.mag===Number.POSITIVE_INFINITY&&this.layer===Number.POSITIVE_INFINITY&&this.sign===-1?Number.NEGATIVE_INFINITY:Number.isFinite(this.layer)?this.layer===0?this.sign*this.mag:this.layer===1?this.sign*Math.pow(10,this.mag):this.mag>0?this.sign>0?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:0:Number.NaN}mantissaWithDecimalPlaces(t){return isNaN(this.m)?Number.NaN:this.m===0?0:ft(this.m,t)}magnitudeWithDecimalPlaces(t){return isNaN(this.mag)?Number.NaN:this.mag===0?0:ft(this.mag,t)}toString(){return isNaN(this.layer)||isNaN(this.sign)||isNaN(this.mag)?"NaN":this.mag===Number.POSITIVE_INFINITY||this.layer===Number.POSITIVE_INFINITY?this.sign===1?"Infinity":"-Infinity":this.layer===0?this.mag<1e21&&this.mag>1e-7||this.mag===0?(this.sign*this.mag).toString():this.m+"e"+this.e:this.layer===1?this.m+"e"+this.e:this.layer<=ie?(this.sign===-1?"-":"")+"e".repeat(this.layer)+this.mag:(this.sign===-1?"-":"")+"(e^"+this.layer+")"+this.mag}toExponential(t){return this.layer===0?(this.sign*this.mag).toExponential(t):this.toStringWithDecimalPlaces(t)}toFixed(t){return this.layer===0?(this.sign*this.mag).toFixed(t):this.toStringWithDecimalPlaces(t)}toPrecision(t){return this.e<=-7?this.toExponential(t-1):t>this.e?this.toFixed(t-this.exponent-1):this.toExponential(t-1)}valueOf(){return this.toString()}toJSON(){return this.toString()}toStringWithDecimalPlaces(t){return this.layer===0?this.mag<1e21&&this.mag>1e-7||this.mag===0?(this.sign*this.mag).toFixed(t):ft(this.m,t)+"e"+ft(this.e,t):this.layer===1?ft(this.m,t)+"e"+ft(this.e,t):this.layer<=ie?(this.sign===-1?"-":"")+"e".repeat(this.layer)+ft(this.mag,t):(this.sign===-1?"-":"")+"(e^"+this.layer+")"+ft(this.mag,t)}abs(){return p(this.sign===0?0:1,this.layer,this.mag)}neg(){return p(-this.sign,this.layer,this.mag)}negate(){return this.neg()}negated(){return this.neg()}sgn(){return this.sign}round(){return this.mag<0?p(0,0,0):this.layer===0?T(this.sign,0,Math.round(this.mag)):new n(this)}floor(){return this.mag<0?this.sign===-1?p(-1,0,1):p(0,0,0):this.sign===-1?this.neg().ceil().neg():this.layer===0?T(this.sign,0,Math.floor(this.mag)):new n(this)}ceil(){return this.mag<0?this.sign===1?p(1,0,1):p(0,0,0):this.sign===-1?this.neg().floor().neg():this.layer===0?T(this.sign,0,Math.ceil(this.mag)):new n(this)}trunc(){return this.mag<0?p(0,0,0):this.layer===0?T(this.sign,0,Math.trunc(this.mag)):new n(this)}add(t){let e=m(t);if(this.eq(n.dInf)&&e.eq(n.dNegInf)||this.eq(n.dNegInf)&&e.eq(n.dInf))return p(Number.NaN,Number.NaN,Number.NaN);if(!Number.isFinite(this.layer))return new n(this);if(!Number.isFinite(e.layer))return new n(e);if(this.sign===0)return new n(e);if(e.sign===0)return new n(this);if(this.sign===-e.sign&&this.layer===e.layer&&this.mag===e.mag)return p(0,0,0);let r,i;if(this.layer>=2||e.layer>=2)return this.maxabs(e);if(n.cmpabs(this,e)>0?(r=new n(this),i=new n(e)):(r=new n(e),i=new n(this)),r.layer===0&&i.layer===0)return n.fromNumber(r.sign*r.mag+i.sign*i.mag);let s=r.layer*Math.sign(r.mag),a=i.layer*Math.sign(i.mag);if(s-a>=2)return r;if(s===0&&a===-1){if(Math.abs(i.mag-Math.log10(r.mag))>xt)return r;{let u=Math.pow(10,Math.log10(r.mag)-i.mag),f=i.sign+r.sign*u;return T(Math.sign(f),1,i.mag+Math.log10(Math.abs(f)))}}if(s===1&&a===0){if(Math.abs(r.mag-Math.log10(i.mag))>xt)return r;{let u=Math.pow(10,r.mag-Math.log10(i.mag)),f=i.sign+r.sign*u;return T(Math.sign(f),1,Math.log10(i.mag)+Math.log10(Math.abs(f)))}}if(Math.abs(r.mag-i.mag)>xt)return r;{let u=Math.pow(10,r.mag-i.mag),f=i.sign+r.sign*u;return T(Math.sign(f),1,i.mag+Math.log10(Math.abs(f)))}throw Error("Bad arguments to add: "+this+", "+t)}plus(t){return this.add(t)}sub(t){return this.add(m(t).neg())}subtract(t){return this.sub(t)}minus(t){return this.sub(t)}mul(t){let e=m(t);if(this.eq(n.dInf)&&e.eq(n.dNegInf)||this.eq(n.dNegInf)&&e.eq(n.dInf))return p(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.mag==Number.POSITIVE_INFINITY&&e.eq(n.dZero)||this.eq(n.dZero)&&this.mag==Number.POSITIVE_INFINITY)return p(Number.NaN,Number.NaN,Number.NaN);if(!Number.isFinite(this.layer))return new n(this);if(!Number.isFinite(e.layer))return new n(e);if(this.sign===0||e.sign===0)return p(0,0,0);if(this.layer===e.layer&&this.mag===-e.mag)return p(this.sign*e.sign,0,1);let r,i;if(this.layer>e.layer||this.layer==e.layer&&Math.abs(this.mag)>Math.abs(e.mag)?(r=new n(this),i=new n(e)):(r=new n(e),i=new n(this)),r.layer===0&&i.layer===0)return n.fromNumber(r.sign*i.sign*r.mag*i.mag);if(r.layer>=3||r.layer-i.layer>=2)return T(r.sign*i.sign,r.layer,r.mag);if(r.layer===1&&i.layer===0)return T(r.sign*i.sign,1,r.mag+Math.log10(i.mag));if(r.layer===1&&i.layer===1)return T(r.sign*i.sign,1,r.mag+i.mag);if(r.layer===2&&i.layer===1){let s=T(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(T(Math.sign(i.mag),i.layer-1,Math.abs(i.mag)));return T(r.sign*i.sign,s.layer+1,s.sign*s.mag)}if(r.layer===2&&i.layer===2){let s=T(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(T(Math.sign(i.mag),i.layer-1,Math.abs(i.mag)));return T(r.sign*i.sign,s.layer+1,s.sign*s.mag)}throw Error("Bad arguments to mul: "+this+", "+t)}multiply(t){return this.mul(t)}times(t){return this.mul(t)}div(t){let e=m(t);return this.mul(e.recip())}divide(t){return this.div(t)}divideBy(t){return this.div(t)}dividedBy(t){return this.div(t)}recip(){return this.mag===0?p(Number.NaN,Number.NaN,Number.NaN):this.mag===Number.POSITIVE_INFINITY?p(0,0,0):this.layer===0?T(this.sign,0,1/this.mag):T(this.sign,this.layer,-this.mag)}reciprocal(){return this.recip()}reciprocate(){return this.recip()}mod(t,e=!1){let r=m(t),i=r.abs();if(this.eq(n.dZero)||i.eq(n.dZero))return p(0,0,0);if(e){let u=this.abs().mod(i);return this.sign==-1!=(r.sign==-1)&&(u=r.abs().sub(u)),u.mul(r.sign)}let s=this.toNumber(),a=i.toNumber();return isFinite(s)&&isFinite(a)&&s!=0&&a!=0?new n(s%a):this.sub(i).eq(this)?p(0,0,0):i.sub(this).eq(i)?new n(this):this.sign==-1?this.abs().mod(i).neg():this.sub(this.div(i).floor().mul(i))}modulo(t,e=!1){return this.mod(t,e)}modular(t,e=!1){return this.mod(t,e)}cmp(t){let e=m(t);return this.sign>e.sign?1:this.sign0?this.layer:-this.layer,i=e.mag>0?e.layer:-e.layer;return r>i?1:re.mag?1:this.mag0?new n(e):new n(this)}clamp(t,e){return this.max(t).min(e)}clampMin(t){return this.max(t)}clampMax(t){return this.min(t)}cmp_tolerance(t,e){let r=m(t);return this.eq_tolerance(r,e)?0:this.cmp(r)}compare_tolerance(t,e){return this.cmp_tolerance(t,e)}eq_tolerance(t,e){let r=m(t);if(e==null&&(e=1e-7),this.sign!==r.sign||Math.abs(this.layer-r.layer)>1)return!1;let i=this.mag,s=r.mag;return this.layer>r.layer&&(s=Ut(s)),this.layer0?T(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):T(1,0,Math.log10(this.mag))}log10(){return this.sign<=0?p(Number.NaN,Number.NaN,Number.NaN):this.layer>0?T(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):T(this.sign,0,Math.log10(this.mag))}log(t){return t=m(t),this.sign<=0||t.sign<=0||t.sign===1&&t.layer===0&&t.mag===1?p(Number.NaN,Number.NaN,Number.NaN):this.layer===0&&t.layer===0?T(this.sign,0,Math.log(this.mag)/Math.log(t.mag)):n.div(this.log10(),t.log10())}log2(){return this.sign<=0?p(Number.NaN,Number.NaN,Number.NaN):this.layer===0?T(this.sign,0,Math.log2(this.mag)):this.layer===1?T(Math.sign(this.mag),0,Math.abs(this.mag)*3.321928094887362):this.layer===2?T(Math.sign(this.mag),1,Math.abs(this.mag)+.5213902276543247):T(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))}ln(){return this.sign<=0?p(Number.NaN,Number.NaN,Number.NaN):this.layer===0?T(this.sign,0,Math.log(this.mag)):this.layer===1?T(Math.sign(this.mag),0,Math.abs(this.mag)*2.302585092994046):this.layer===2?T(Math.sign(this.mag),1,Math.abs(this.mag)+.36221568869946325):T(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))}logarithm(t){return this.log(t)}pow(t){let e=m(t),r=new n(this),i=new n(e);if(r.sign===0)return i.eq(0)?p(1,0,1):r;if(r.sign===1&&r.layer===0&&r.mag===1)return r;if(i.sign===0)return p(1,0,1);if(i.sign===1&&i.layer===0&&i.mag===1)return r;let s=r.absLog10().mul(i).pow10();return this.sign===-1?Math.abs(i.toNumber()%2)%2===1?s.neg():Math.abs(i.toNumber()%2)%2===0?s:p(Number.NaN,Number.NaN,Number.NaN):s}pow10(){if(this.eq(n.dInf))return p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.eq(n.dNegInf))return p(0,0,0);if(!Number.isFinite(this.layer)||!Number.isFinite(this.mag))return p(Number.NaN,Number.NaN,Number.NaN);let t=new n(this);if(t.layer===0){let e=Math.pow(10,t.sign*t.mag);if(Number.isFinite(e)&&Math.abs(e)>=.1)return T(1,0,e);if(t.sign===0)return p(1,0,1);t=p(t.sign,t.layer+1,Math.log10(t.mag))}return t.sign>0&&t.mag>=0?T(t.sign,t.layer+1,t.mag):t.sign<0&&t.mag>=0?T(-t.sign,t.layer+1,-t.mag):p(1,0,1)}pow_base(t){return m(t).pow(this)}root(t){let e=m(t);return this.pow(e.recip())}factorial(){return this.mag<0?this.add(1).gamma():this.layer===0?this.add(1).gamma():this.layer===1?n.exp(n.mul(this,n.ln(this).sub(1))):n.exp(this)}gamma(){if(this.mag<0)return this.recip();if(this.layer===0){if(this.lt(p(1,0,24)))return n.fromNumber($e(this.sign*this.mag));let t=this.mag-1,e=.9189385332046727;e=e+(t+.5)*Math.log(t),e=e-t;let r=t*t,i=t,s=12*i,a=1/s,u=e+a;if(u===e||(e=u,i=i*r,s=360*i,a=1/s,u=e-a,u===e))return n.exp(e);e=u,i=i*r,s=1260*i;let f=1/s;return e=e+f,i=i*r,s=1680*i,f=1/s,e=e-f,n.exp(e)}else return this.layer===1?n.exp(n.mul(this,n.ln(this).sub(1))):n.exp(this)}lngamma(){return this.gamma().ln()}exp(){return this.mag<0?p(1,0,1):this.layer===0&&this.mag<=709.7?n.fromNumber(Math.exp(this.sign*this.mag)):this.layer===0?T(1,1,this.sign*Math.log10(Math.E)*this.mag):this.layer===1?T(1,2,this.sign*(Math.log10(.4342944819032518)+this.mag)):T(1,this.layer+1,this.sign*this.mag)}sqr(){return this.pow(2)}sqrt(){if(this.layer===0)return n.fromNumber(Math.sqrt(this.sign*this.mag));if(this.layer===1)return T(1,2,Math.log10(this.mag)-.3010299956639812);{let t=n.div(p(this.sign,this.layer-1,this.mag),p(1,0,2));return t.layer+=1,t.normalize(),t}}cube(){return this.pow(3)}cbrt(){return this.pow(1/3)}tetrate(t=2,e=p(1,0,1),r=!1){if(t===1)return n.pow(this,e);if(t===0)return new n(e);if(this.eq(n.dOne))return p(1,0,1);if(this.eq(-1))return n.pow(this,e);if(t===Number.POSITIVE_INFINITY){let a=this.toNumber();if(a<=1.444667861009766&&a>=.06598803584531254){let u=n.ln(this).neg(),f=u.lambertw().div(u);if(a<1)return f;let g=u.lambertw(!1).div(u);return a>1.444667861009099&&(f=g=n.fromNumber(Math.E)),e=m(e),e.eq(g)?g:e.lt(g)?f:p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}else return a>1.444667861009766?p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY):p(Number.NaN,Number.NaN,Number.NaN)}if(this.eq(n.dZero)){let a=Math.abs((t+1)%2);return a>1&&(a=2-a),n.fromNumber(a)}if(t<0)return n.iteratedlog(e,this,-t,r);e=new n(e);let i=t;t=Math.trunc(t);let s=i-t;if(this.gt(n.dZero)&&(this.lt(1)||this.lte(1.444667861009766)&&e.lte(n.ln(this).neg().lambertw(!1).div(n.ln(this).neg())))&&(i>1e4||!r)){let a=Math.min(1e4,t);e.eq(n.dOne)?e=this.pow(s):this.lt(1)?e=e.pow(1-s).mul(this.pow(e).pow(s)):e=e.layeradd(s,this);for(let u=0;u1e4&&Math.ceil(i)%2==1?this.pow(e):e}s!==0&&(e.eq(n.dOne)?this.gt(10)||r?e=this.pow(s):(e=n.fromNumber(n.tetrate_critical(this.toNumber(),s)),this.lt(2)&&(e=e.sub(1).mul(this.minus(1)).plus(1))):this.eq(10)?e=e.layeradd10(s,r):this.lt(1)?e=e.pow(1-s).mul(this.pow(e).pow(s)):e=e.layeradd(s,this,r));for(let a=0;a3)return p(e.sign,e.layer+(t-a-1),e.mag);if(a>1e4)return e}return e}iteratedexp(t=2,e=p(1,0,1),r=!1){return this.tetrate(t,e,r)}iteratedlog(t=10,e=1,r=!1){if(e<0)return n.tetrate(t,-e,this,r);t=m(t);let i=n.fromDecimal(this),s=e;e=Math.trunc(e);let a=s-e;if(i.layer-t.layer>3){let u=Math.min(e,i.layer-t.layer-3);e-=u,i.layer-=u}for(let u=0;u1e4)return i}return a>0&&a<1&&(t.eq(10)?i=i.layeradd10(-a,r):i=i.layeradd(-a,t,r)),i}slog(t=10,e=100,r=!1){let i=.001,s=!1,a=!1,u=this.slog_internal(t,r).toNumber();for(let f=1;f1&&a!=l&&(s=!0),a=l,s?i/=2:i*=2,i=Math.abs(i)*(l?-1:1),u+=i,i===0)break}return n.fromNumber(u)}slog_internal(t=10,e=!1){if(t=m(t),t.lte(n.dZero)||t.eq(n.dOne))return p(Number.NaN,Number.NaN,Number.NaN);if(t.lt(n.dOne))return this.eq(n.dOne)?p(0,0,0):this.eq(n.dZero)?p(-1,0,1):p(Number.NaN,Number.NaN,Number.NaN);if(this.mag<0||this.eq(n.dZero))return p(-1,0,1);if(t.lt(1.444667861009766)){let s=n.ln(t).neg(),a=s.lambertw().div(s);if(this.eq(a))return p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.gt(a))return p(Number.NaN,Number.NaN,Number.NaN)}let r=0,i=n.fromDecimal(this);if(i.layer-t.layer>3){let s=i.layer-t.layer-3;r+=s,i.layer-=s}for(let s=0;s<100;++s)if(i.lt(n.dZero))i=n.pow(t,i),r-=1;else{if(i.lte(n.dOne))return e?n.fromNumber(r+i.toNumber()-1):n.fromNumber(r+n.slog_critical(t.toNumber(),i.toNumber()));r+=1,i=n.log(i,t)}return n.fromNumber(r)}static slog_critical(t,e){return t>10?e-1:n.critical_section(t,e,Re)}static tetrate_critical(t,e){return n.critical_section(t,e,Ge)}static critical_section(t,e,r,i=!1){e*=10,e<0&&(e=0),e>10&&(e=10),t<2&&(t=2),t>10&&(t=10);let s=0,a=0;for(let f=0;ft){let g=(t-gt[f])/(gt[f+1]-gt[f]);s=r[f][Math.floor(e)]*(1-g)+r[f+1][Math.floor(e)]*g,a=r[f][Math.ceil(e)]*(1-g)+r[f+1][Math.ceil(e)]*g;break}let u=e-Math.floor(e);return s<=0||a<=0?s*(1-u)+a*u:Math.pow(t,Math.log(s)/Math.log(t)*(1-u)+Math.log(a)/Math.log(t)*u)}layeradd10(t,e=!1){t=n.fromValue_noAlloc(t).toNumber();let r=n.fromDecimal(this);if(t>=1){r.mag<0&&r.layer>0?(r.sign=0,r.mag=0,r.layer=0):r.sign===-1&&r.layer==0&&(r.sign=1,r.mag=-r.mag);let i=Math.trunc(t);t-=i,r.layer+=i}if(t<=-1){let i=Math.trunc(t);if(t-=i,r.layer+=i,r.layer<0)for(let s=0;s<100;++s){if(r.layer++,r.mag=Math.log10(r.mag),!isFinite(r.mag))return r.sign===0&&(r.sign=1),r.layer<0&&(r.layer=0),r.normalize();if(r.layer>=0)break}}for(;r.layer<0;)r.layer++,r.mag=Math.log10(r.mag);return r.sign===0&&(r.sign=1,r.mag===0&&r.layer>=1&&(r.layer-=1,r.mag=1)),r.normalize(),t!==0?r.layeradd(t,10,e):r}layeradd(t,e,r=!1){let i=m(e);if(i.gt(1)&&i.lte(1.444667861009766)){let u=n.excess_slog(this,e,r),f=u[0].toNumber(),g=u[1],l=f+t,S=n.ln(e).neg(),E=S.lambertw().div(S),V=S.lambertw(!1).div(S),q=n.dOne;g==1?q=E.mul(V).sqrt():g==2&&(q=V.mul(2));let U=i.pow(q),_=Math.floor(l),k=l-_,x=q.pow(1-k).mul(U.pow(k));return n.tetrate(i,_,x,r)}let a=this.slog(e,100,r).toNumber()+t;return a>=0?n.tetrate(e,a,n.dOne,r):Number.isFinite(a)?a>=-1?n.log(n.tetrate(e,a+1,n.dOne,r),e):n.log(n.log(n.tetrate(e,a+2,n.dOne,r),e),e):p(Number.NaN,Number.NaN,Number.NaN)}static excess_slog(t,e,r=!1){t=m(t),e=m(e);let i=e;if(e=e.toNumber(),e==1||e<=0)return[p(Number.NaN,Number.NaN,Number.NaN),0];if(e>1.444667861009766)return[t.slog(e,100,r),0];let s=n.ln(e).neg(),a=s.lambertw().div(s),u=n.dInf;if(e>1&&(u=s.lambertw(!1).div(s)),e>1.444667861009099&&(a=u=n.fromNumber(Math.E)),t.lt(a))return[t.slog(e,100,r),0];if(t.eq(a))return[p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),0];if(t.eq(u))return[p(1,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),2];if(t.gt(u)){let f=u.mul(2),g=i.pow(f),l=0;if(t.gte(f)&&t.lt(g))l=0;else if(t.gte(g)){let _=g;for(l=1;_.lt(t);)if(_=i.pow(_),l=l+1,_.layer>3){let k=Math.floor(t.layer-_.layer+1);_=i.iteratedexp(k,_,r),l=l+k}_.gt(t)&&(_=_.log(e),l=l-1)}else if(t.lt(f)){let _=f;for(l=0;_.gt(t);)_=_.log(e),l=l-1}let S=0,E=0,V=.5,q=f,U=n.dZero;for(;V>1e-16;){if(E=S+V,q=f.pow(1-E).mul(g.pow(E)),U=n.iteratedexp(e,l,q),U.eq(t))return[new n(l+E),2];U.lt(t)&&(S+=V),V/=2}return U.neq_tolerance(t,1e-7)?[p(Number.NaN,Number.NaN,Number.NaN),0]:[new n(l+S),2]}if(t.lt(u)&&t.gt(a)){let f=a.mul(u).sqrt(),g=i.pow(f),l=0;if(t.lte(f)&&t.gt(g))l=0;else if(t.lte(g)){let _=g;for(l=1;_.gt(t);)_=i.pow(_),l=l+1;_.lt(t)&&(_=_.log(e),l=l-1)}else if(t.gt(f)){let _=f;for(l=0;_.lt(t);)_=_.log(e),l=l-1}let S=0,E=0,V=.5,q=f,U=n.dZero;for(;V>1e-16;){if(E=S+V,q=f.pow(1-E).mul(g.pow(E)),U=n.iteratedexp(e,l,q),U.eq(t))return[new n(l+E),1];U.gt(t)&&(S+=V),V/=2}return U.neq_tolerance(t,1e-7)?[p(Number.NaN,Number.NaN,Number.NaN),0]:[new n(l+S),1]}throw new Error("Unhandled behavior in excess_slog")}lambertw(t=!0){return this.lt(-.3678794411710499)?p(Number.NaN,Number.NaN,Number.NaN):t?this.abs().lt("1e-300")?new n(this):this.mag<0?n.fromNumber(jt(this.toNumber())):this.layer===0?n.fromNumber(jt(this.sign*this.mag)):this.lt("eee15")?se(this):this.ln():this.sign===1?p(Number.NaN,Number.NaN,Number.NaN):this.layer===0?n.fromNumber(jt(this.sign*this.mag,1e-10,!1)):this.layer==1?se(this,1e-10,!1):this.neg().recip().lambertw().neg()}ssqrt(){return this.linear_sroot(2)}linear_sroot(t){if(t==1)return this;if(this.eq(n.dInf))return p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(!this.isFinite())return p(Number.NaN,Number.NaN,Number.NaN);if(t>0&&t<1)return this.root(t);if(t>-2&&t<-1)return n.fromNumber(t).add(2).pow(this.recip());if(t<=0)return p(Number.NaN,Number.NaN,Number.NaN);if(t==Number.POSITIVE_INFINITY){let e=this.toNumber();return eZe?this.pow(this.recip()):p(Number.NaN,Number.NaN,Number.NaN)}if(this.eq(1))return p(1,0,1);if(this.lt(0))return p(Number.NaN,Number.NaN,Number.NaN);if(this.lte("1ee-16"))return t%2==1?new n(this):p(Number.NaN,Number.NaN,Number.NaN);if(this.gt(1)){let e=n.dTen;this.gte(n.tetrate(10,t,1,!0))&&(e=this.iteratedlog(10,t-1,!0)),t<=1&&(e=this.root(t));let r=n.dZero,i=e.layer,s=e.iteratedlog(10,i,!0),a=s,u=s.div(2),f=!0;for(;f;)u=r.add(s).div(2),n.iteratedexp(10,i,u,!0).tetrate(t,1,!0).gt(this)?s=u:r=u,u.eq(a)?f=!1:a=u;return n.iteratedexp(10,i,u,!0)}else{let e=1,r=T(1,10,1),i=T(1,10,1),s=T(1,10,1),a=T(1,1,-16),u=n.dZero,f=T(1,10,1),g=a.pow10().recip(),l=n.dZero,S=g,E=g,V=Math.ceil(t)%2==0,q=0,U=T(1,10,1),_=!1,k=n.dZero,x=!1;for(;e<4;){if(e==2){if(V)break;s=T(1,10,1),a=r,e=3,f=T(1,10,1),U=T(1,10,1)}for(_=!1;a.neq(s);){if(k=a,a.pow10().recip().tetrate(t,1,!0).eq(1)&&a.pow10().recip().lt(.4))g=a.pow10().recip(),S=a.pow10().recip(),E=a.pow10().recip(),l=n.dZero,q=-1,e==3&&(U=a);else if(a.pow10().recip().tetrate(t,1,!0).eq(a.pow10().recip())&&!V&&a.pow10().recip().lt(.4))g=a.pow10().recip(),S=a.pow10().recip(),E=a.pow10().recip(),l=n.dZero,q=0;else if(a.pow10().recip().tetrate(t,1,!0).eq(a.pow10().recip().mul(2).tetrate(t,1,!0)))g=a.pow10().recip(),S=n.dZero,E=g.mul(2),l=g,V?q=-1:q=0;else{for(u=a.mul(12e-17),g=a.pow10().recip(),S=a.add(u).pow10().recip(),l=g.sub(S),E=g.add(l);S.tetrate(t,1,!0).eq(g.tetrate(t,1,!0))||E.tetrate(t,1,!0).eq(g.tetrate(t,1,!0))||S.gte(g)||E.lte(g);)u=u.mul(2),S=a.add(u).pow10().recip(),l=g.sub(S),E=g.add(l);if((e==1&&E.tetrate(t,1,!0).gt(g.tetrate(t,1,!0))&&S.tetrate(t,1,!0).gt(g.tetrate(t,1,!0))||e==3&&E.tetrate(t,1,!0).lt(g.tetrate(t,1,!0))&&S.tetrate(t,1,!0).lt(g.tetrate(t,1,!0)))&&(U=a),E.tetrate(t,1,!0).lt(g.tetrate(t,1,!0)))q=-1;else if(V)q=1;else if(e==3&&a.gt_tolerance(r,1e-8))q=0;else{for(;S.tetrate(t,1,!0).eq_tolerance(g.tetrate(t,1,!0),1e-8)||E.tetrate(t,1,!0).eq_tolerance(g.tetrate(t,1,!0),1e-8)||S.gte(g)||E.lte(g);)u=u.mul(2),S=a.add(u).pow10().recip(),l=g.sub(S),E=g.add(l);E.tetrate(t,1,!0).sub(g.tetrate(t,1,!0)).lt(g.tetrate(t,1,!0).sub(S.tetrate(t,1,!0)))?q=0:q=1}}if(q==-1&&(x=!0),e==1&&q==1||e==3&&q!=0)if(s.eq(T(1,10,1)))a=a.mul(2);else{let w=!1;if(_&&(q==1&&e==1||q==-1&&e==3)&&(w=!0),a=a.add(s).div(2),w)break}else if(s.eq(T(1,10,1)))s=a,a=a.div(2);else{let w=!1;if(_&&(q==1&&e==1||q==-1&&e==3)&&(w=!0),s=s.sub(f),a=a.sub(f),w)break}if(s.sub(a).div(2).abs().gt(f.mul(1.5))&&(_=!0),f=s.sub(a).div(2).abs(),a.gt("1e18")||a.eq(k))break}if(a.gt("1e18")||!x||U==T(1,10,1))break;e==1?r=U:e==3&&(i=U),e++}s=r,a=T(1,1,-18);let Z=a,o=n.dZero,b=!0;for(;b;)if(s.eq(T(1,10,1))?o=a.mul(2):o=s.add(a).div(2),n.pow(10,o).recip().tetrate(t,1,!0).gt(this)?a=o:s=o,o.eq(Z)?b=!1:Z=o,a.gt("1e18"))return p(Number.NaN,Number.NaN,Number.NaN);if(o.eq_tolerance(r,1e-15)){if(i.eq(T(1,10,1)))return p(Number.NaN,Number.NaN,Number.NaN);for(s=T(1,10,1),a=i,Z=a,o=n.dZero,b=!0;b;)if(s.eq(T(1,10,1))?o=a.mul(2):o=s.add(a).div(2),n.pow(10,o).recip().tetrate(t,1,!0).gt(this)?a=o:s=o,o.eq(Z)?b=!1:Z=o,a.gt("1e18"))return p(Number.NaN,Number.NaN,Number.NaN);return o.pow10().recip()}else return o.pow10().recip()}}static increasingInverse(t,e=!1,r=120,i=n.dLayerMax.neg(),s=n.dLayerMax,a=n.dLayerMax.neg(),u=n.dLayerMax){return function(f){if(f=new n(f),i=new n(i),s=new n(s),a=new n(a),u=new n(u),f.isNan()||s.lt(i)||f.lt(a)||f.gt(u))return p(Number.NaN,Number.NaN,Number.NaN);let g=function(N){return new n(N)},l=!0;if(s.lt(0))l=!1;else if(i.gt(0))l=!0;else{let N=t(n.dZero);if(N.eq(f))return p(0,0,0);l=f.gt(N),e&&(l=!l)}let S=l,E;if(l){if(s.lt(mt))l=!0;else if(i.gt(mt))l=!1;else{let N=t(new n(mt));l=f.lt(N),e&&(l=!l)}if(l){E=!0;let N=n.pow(10,W).recip();if(s.lt(N))l=!1;else if(i.gt(N))l=!0;else{let y=t(new n(N));l=f.gt(y),e&&(l=!l)}if(l)g=function(y){return n.pow(10,y).recip()};else{let y=n.tetrate(10,W);if(s.lt(y))l=!1;else if(i.gt(y))l=!0;else{let M=t(new n(y));l=f.gt(M),e&&(l=!l)}l?g=function(M){return n.tetrate(10,new n(M).toNumber()).recip()}:g=function(M){return new n(M).gt(Math.log10(Number.MAX_VALUE))?n.dZero:n.tetrate(10,n.pow(10,M).toNumber()).recip()}}}else{if(E=!1,s.lt(W))l=!0;else if(i.gt(W))l=!1;else{let N=t(new n(W));l=f.lt(N),e&&(l=!l)}if(l)g=function(N){return new n(N)};else{let N=n.pow(10,W);if(s.lt(N))l=!0;else if(i.gt(N))l=!1;else{let y=t(new n(N));l=f.lt(y),e&&(l=!l)}if(l)g=function(y){return n.pow(10,y)};else{let y=n.tetrate(10,W);if(s.lt(y))l=!0;else if(i.gt(y))l=!1;else{let M=t(new n(y));l=f.lt(M),e&&(l=!l)}l?g=function(M){return n.tetrate(10,new n(M).toNumber())}:g=function(M){return new n(M).gt(Math.log10(Number.MAX_VALUE))?n.dInf:n.tetrate(10,n.pow(10,M).toNumber())}}}}}else{if(E=!0,s.lt(-mt))l=!1;else if(i.gt(-mt))l=!0;else{let N=t(new n(-mt));l=f.gt(N),e&&(l=!l)}if(l){let N=n.pow(10,W).recip().neg();if(s.lt(N))l=!0;else if(i.gt(N))l=!1;else{let y=t(new n(N));l=f.lt(y),e&&(l=!l)}if(l)g=function(y){return n.pow(10,y).recip().neg()};else{let y=n.tetrate(10,W).neg();if(s.lt(y))l=!0;else if(i.gt(y))l=!1;else{let M=t(new n(y));l=f.lt(M),e&&(l=!l)}l?g=function(M){return n.tetrate(10,new n(M).toNumber()).recip().neg()}:g=function(M){return new n(M).gt(Math.log10(Number.MAX_VALUE))?n.dZero:n.tetrate(10,n.pow(10,M).toNumber()).recip().neg()}}}else{if(E=!1,s.lt(-W))l=!1;else if(i.gt(-W))l=!0;else{let N=t(new n(-W));l=f.gt(N),e&&(l=!l)}if(l)g=function(N){return n.neg(N)};else{let N=n.pow(10,W).neg();if(s.lt(N))l=!1;else if(i.gt(N))l=!0;else{let y=t(new n(N));l=f.gt(y),e&&(l=!l)}if(l)g=function(y){return n.pow(10,y).neg()};else{let y=n.tetrate(10,W).neg();if(s.lt(y))l=!1;else if(i.gt(y))l=!0;else{let M=t(new n(y));l=f.gt(M),e&&(l=!l)}l?g=function(M){return n.tetrate(10,new n(M).toNumber()).neg()}:g=function(M){return new n(M).gt(Math.log10(Number.MAX_VALUE))?n.dNegInf:n.tetrate(10,n.pow(10,M).toNumber()).neg()}}}}}let V=S!=E!=e,q=V?function(N,y){return n.gt(N,y)}:function(N,y){return n.lt(N,y)},U=.001,_=!1,k=!1,x=1,Z=n.dOne,o=0,b=!1;for(var w=1;w1&&k!=y&&(_=!0),k=y,_?U/=2:U*=2,y!=V&&Z.eq(s)||y==V&&Z.eq(i))return p(Number.NaN,Number.NaN,Number.NaN);if(U=Math.abs(U)*(y?-1:1),x+=U,U===0||o==x)break}return g(x)}}pentate(t=2,e=p(1,0,1),r=!1){e=new n(e);let i=t;t=Math.floor(t);let s=i-t,a=n.dZero,u=n.dZero;if(s!==0)if(e.eq(n.dOne))++t,e=n.fromNumber(s);else return this.pentate(e.penta_log(this,void 0,r).plus(i).toNumber(),1,r);if(t>0)for(let f=0;f1e4)return e}else for(let f=0;f<-t;++f){if(a=e,e=e.slog(this,void 0,r),e.eq(a)||!isFinite(e.layer)||!isFinite(e.mag))return e.normalize();if(f>100)return e}return e}penta_log(t=10,e=100,r=!1){if(t=new n(t),t.lte(1))return p(Number.NaN,Number.NaN,Number.NaN);if(this.eq(1))return p(0,0,0);if(this.eq(n.dInf))return p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);let i=new n(1),s=0,a=1;if(this.lt(-1)){if(this.lte(-2))return p(Number.NaN,Number.NaN,Number.NaN);let f=t.tetrate(this.toNumber(),1,r);if(this.eq(f))return p(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.gt(f))return p(Number.NaN,Number.NaN,Number.NaN)}if(this.gt(1)){for(;i.lt(this);)if(s++,i=n.tetrate(t,i.toNumber(),1,r),s>1e3)return p(Number.NaN,Number.NaN,Number.NaN)}else for(;i.gt(this);)if(s--,i=n.slog(i,t,r),s>100)return p(Number.NaN,Number.NaN,Number.NaN);for(var u=1;u0&&t<1?this.root(t):this.eq(1)?p(1,0,1):this.lt(0)?p(Number.NaN,Number.NaN,Number.NaN):this.lt(1)?this.linear_sroot(t):n.increasingInverse(function(e){return n.pentate(e,t,1,!0)})(this):p(Number.NaN,Number.NaN,Number.NaN)}sin(){return this.mag<0?new n(this):this.layer===0?n.fromNumber(Math.sin(this.sign*this.mag)):p(0,0,0)}cos(){return this.mag<0?p(1,0,1):this.layer===0?n.fromNumber(Math.cos(this.sign*this.mag)):p(0,0,0)}tan(){return this.mag<0?new n(this):this.layer===0?n.fromNumber(Math.tan(this.sign*this.mag)):p(0,0,0)}asin(){return this.mag<0?new n(this):this.layer===0?n.fromNumber(Math.asin(this.sign*this.mag)):p(Number.NaN,Number.NaN,Number.NaN)}acos(){return this.mag<0?n.fromNumber(Math.acos(this.toNumber())):this.layer===0?n.fromNumber(Math.acos(this.sign*this.mag)):p(Number.NaN,Number.NaN,Number.NaN)}atan(){return this.mag<0?new n(this):this.layer===0?n.fromNumber(Math.atan(this.sign*this.mag)):n.fromNumber(Math.atan(this.sign*(1/0)))}sinh(){return this.exp().sub(this.negate().exp()).div(2)}cosh(){return this.exp().add(this.negate().exp()).div(2)}tanh(){return this.sinh().div(this.cosh())}asinh(){return n.ln(this.add(this.sqr().add(1).sqrt()))}acosh(){return n.ln(this.add(this.sqr().sub(1).sqrt()))}atanh(){return this.abs().gte(1)?p(Number.NaN,Number.NaN,Number.NaN):n.ln(this.add(1).div(n.fromNumber(1).sub(this))).div(2)}ascensionPenalty(t){return t===0?new n(this):this.root(n.pow(10,t))}egg(){return this.add(9)}lessThanOrEqualTo(t){return this.cmp(t)<1}lessThan(t){return this.cmp(t)<0}greaterThanOrEqualTo(t){return this.cmp(t)>-1}greaterThan(t){return this.cmp(t)>0}static smoothDamp(t,e,r,i){return new n(t).add(new n(e).minus(new n(t)).times(new n(r)).times(new n(i)))}clone(){return this}static clone(t){return n.fromComponents(t.sign,t.layer,t.mag)}softcap(t,e,r){let i=this.clone();return i.gte(t)&&([0,"pow"].includes(r)&&(i=i.div(t).pow(e).mul(t)),[1,"mul"].includes(r)&&(i=i.sub(t).div(e).add(t))),i}static softcap(t,e,r,i){return new n(t).softcap(e,r,i)}scale(t,e,r,i=!1){t=new n(t),e=new n(e);let s=this.clone();return s.gte(t)&&([0,"pow"].includes(r)&&(s=i?s.mul(t.pow(e.sub(1))).root(e):s.pow(e).div(t.pow(e.sub(1)))),[1,"exp"].includes(r)&&(s=i?s.div(t).max(1).log(e).add(t):n.pow(e,s.sub(t)).mul(t))),s}static scale(t,e,r,i,s=!1){return new n(t).scale(e,r,i,s)}format(t=2,e=9,r="mixed_sc"){return ht.format(this.clone(),t,e,r)}static format(t,e=2,r=9,i="mixed_sc"){return ht.format(new n(t),e,r,i)}formatST(t=2,e=9,r="st"){return ht.format(this.clone(),t,e,r)}static formatST(t,e=2,r=9,i="st"){return ht.format(new n(t),e,r,i)}formatGain(t,e="mixed_sc",r,i){return ht.formatGain(this.clone(),t,e,r,i)}static formatGain(t,e,r="mixed_sc",i,s){return ht.formatGain(new n(t),e,r,i,s)}toRoman(t=5e3){t=new n(t);let e=this.clone();if(e.gte(t)||e.lt(1))return e;let r=e.toNumber(),i={M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1},s="";for(let a of Object.keys(i)){let u=Math.floor(r/i[a]);r-=u*i[a],s+=a.repeat(u)}return s}static toRoman(t,e){return new n(t).toRoman(e)}static random(t=0,e=1){return t=new n(t),e=new n(e),t=t.lt(e)?t:e,e=e.gt(t)?e:t,new n(Math.random()).mul(e.sub(t)).add(t)}static randomProb(t){return new n(Math.random()).lt(t)}};n.dZero=p(0,0,0),n.dOne=p(1,0,1),n.dNegOne=p(-1,0,1),n.dTwo=p(1,0,2),n.dTen=p(1,0,10),n.dNaN=p(Number.NaN,Number.NaN,Number.NaN),n.dInf=p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),n.dNegInf=p(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),n.dNumberMax=T(1,0,Number.MAX_VALUE),n.dNumberMin=T(1,0,Number.MIN_VALUE),n.dLayerSafeMax=T(1,Number.MAX_SAFE_INTEGER,W-1),n.dLayerSafeMin=T(1,Number.MAX_SAFE_INTEGER,-(W-1)),n.dLayerMax=T(1,Number.MAX_VALUE,W-1),n.dLayerMin=T(1,Number.MAX_VALUE,-(W-1)),n.fromStringCache=new Lt(Ve),tt([_t()],n.prototype,"sign",2),tt([_t()],n.prototype,"mag",2),tt([_t()],n.prototype,"layer",2),n=tt([Ae()],n);var{formats:ht,FORMATS:ze}=qe(n);n.formats=ht;var bt=class{get desc(){return this.description}get description(){return this.descriptionFn()}constructor(t){this.id=t.id,this.name=t.name??"",this.value=t.value,this.order=t.order??99,this.descriptionFn=t.description?typeof t.description=="function"?t.description:()=>t.description:()=>""}},Gt=class{constructor(t=1,e){this.addBoost=this.setBoost.bind(this),e=e?Array.isArray(e)?e:[e]:void 0,this.baseEffect=new n(t),this.boostArray=[],e&&e.forEach(r=>{this.boostArray.push(new bt(r))})}getBoosts(t,e){let r=[],i=[];for(let s=0;sE),l=s,S=this.getBoosts(a,!0);S[0][0]?this.boostArray[S[1][0]]=new bt({id:a,name:u,description:f,value:g,order:l}):this.boostArray.push(new bt({id:a,name:u,description:f,value:g,order:l}))}else{t=Array.isArray(t)?t:[t];for(let a of t){let u=this.getBoosts(a.id,!0);u[0][0]?this.boostArray[u[1][0]]=new bt(a):this.boostArray.push(new bt(a))}}}clearBoosts(){this.boostArray.length=0}calculate(t=this.baseEffect){let e=new n(t),r=this.boostArray;r=r.sort((i,s)=>i.order-s.order);for(let i of r)e=i.value(e);return e}},dr=dt(Nt()),At=30,Rt=.001;function Ye(t,e,r="geometric"){switch(t=new n(t),e=new n(e),r){case"arithmetic":case 1:return t.add(e).div(2);case"geometric":case 2:default:return t.mul(e).sqrt();case"harmonic":case 3:return n.dTwo.div(t.reciprocal().add(e.reciprocal()))}}function $t(t,e,r,i){i=Object.assign({},{verbose:!1,mode:"geometric"},i),t=new n(t),e=new n(e),r=new n(r);let s,a;return i.mode==="geometric"?(s=t.sub(e).abs().div(t.abs().add(e.abs()).div(2)),a=s.lte(r)):(s=t.sub(e).abs(),a=s.lte(r)),(i.verbose===!0||i.verbose==="onlyOnFail"&&!a)&&console.log({a:t,b:e,tolerance:r,config:i,diff:s,result:a}),a}function Zt(t,e,r="geometric",i=At,s=Rt,a=1,u){if(a=new n(a),u=new n(u??e),a.gt(u)&&([a,u]=[u,a]),t(u).eq(0))return{value:n.dZero,lowerBound:n.dZero,upperBound:n.dZero};if(t(u).lt(e))return console.warn("eMath.js: The function is not monotonically increasing. (f(n) < n)"),{value:u,lowerBound:u,upperBound:u};for(let g=0;g=0;f--){let g=r.add(u.mul(f)),l=r.add(u.mul(f+1)),S=a;if(a=a.add(t(g).add(t(l)).div(2).mul(u)),$t(S,a,s,{verbose:!1,mode:"geometric"}))break}return a}function zt(t,e,r=0,i,s){return r=new n(r),e=new n(e),e.sub(r).lte(At)?ae(t,e,r,i):oe(t,e,r,s)}function Be(t,e=10,r=0,i=1e3){if(t=new n(t),e=new n(e),r=new n(r),i=new n(i),e.lt(1)||r.lt(1))return n.dNaN;let s=t.sign;if(t=t.abs(),t.gte(n.pow(e,i)))return t;let a=n.floor(n.log(t,e)),u=t.div(n.pow(e,a));return u=u.mul(n.pow(e,r)).round(),u=u.div(n.pow(e,r)),u=u.mul(n.pow(e,a)).mul(s),u}function ue(t,e,r,i=n.dInf,s,a,u=!1){t=new n(t),r=new n(r??e.level),i=new n(i);let f=i.sub(r);if(f.lt(0))return console.warn("eMath.js: Invalid target for calculateItem: ",f),[n.dZero,n.dZero];if(u=(typeof e.el=="function"?e.el():e.el)??u,f.eq(1)){let E=e.cost(e.level),V=t.gte(E),q=[n.dZero,n.dZero];return u?(q[0]=V?n.dOne:n.dZero,q):(q=[V?n.dOne:n.dZero,V?E:n.dZero],q)}if(e.costBulk){let[E,V]=e.costBulk(t,e.level,f),q=t.gte(V);return[q?E:n.dZero,q&&!u?V:n.dZero]}if(u){let E=U=>e.cost(U.add(r)),V=n.min(i,Zt(E,t,s,a).value.floor()),q=n.dZero;return[V,q]}let g=Zt(E=>zt(e.cost,E,r),t,s,a).value.floor().min(r.add(f).sub(1)),l=zt(e.cost,g,r);return[g.sub(r).add(1).max(0),l]}function le(t){return t=new n(t),`${t.sign}/${t.mag}/${t.layer}`}function De(t){return`el/${le(t)}`}var It=class{constructor(t){t=t??{},this.id=t.id,this.level=t.level?new n(t.level):n.dOne}};tt([_t()],It.prototype,"id",2),tt([pt(()=>n)],It.prototype,"level",2);var fe=class Ie{static{this.cacheSize=15}get data(){return this.dataPointerFn()}get description(){return this.descriptionFn(this.level,this,this.currencyPointerFn())}set description(e){this.descriptionFn=typeof e=="function"?e:()=>e}get level(){return((this??{data:{level:n.dOne}}).data??{level:n.dOne}).level}set level(e){this.data.level=new n(e)}constructor(e,r,i,s){let a=typeof r=="function"?r():r;this.dataPointerFn=typeof r=="function"?r:()=>a,this.currencyPointerFn=typeof i=="function"?i:()=>i,this.cache=new Lt(s??Ie.cacheSize),this.id=e.id,this.name=e.name??e.id,this.descriptionFn=e.description?typeof e.description=="function"?e.description:()=>e.description:()=>"",this.cost=e.cost,this.costBulk=e.costBulk,this.maxLevel=e.maxLevel,this.effect=e.effect,this.el=e.el,this.defaultLevel=e.level??n.dOne}},Nr=dt(Nt());function he(t,e,r=n.dOne,i=n.dInf){if(t=new n(t),r=new n(r),i=new n(i),i.lt(0))return console.warn("eMath.js: Invalid target for calculateItem: ",i),[n.dZero,n.dZero];if(i.eq(1)){let u=e.cost(r);return[t.gte(u)?n.dOne:n.dZero,t.gte(u)?u:n.dZero]}let s=t.div(e.cost(r)).floor().min(i),a=e.cost(r).mul(s);return[s,a]}var ce=class{constructor(t,e,r){this.defaultAmount=n.dZero;let i=typeof e=="function"?e():e;this.dataPointerFn=typeof e=="function"?e:()=>i,this.currencyPointerFn=typeof r=="function"?r:()=>r,this.id=t.id,this.name=t.name??t.id,this.cost=t.cost,this.effect=t.effect,this.descriptionFn=t.description?typeof t.description=="function"?t.description:()=>t.description:()=>"",this.defaultAmount=t.amount??n.dZero}get data(){return this.dataPointerFn()}get description(){return this.descriptionFn(this.amount,this,this.currencyPointerFn())}set description(t){this.descriptionFn=typeof t=="function"?t:()=>t}get amount(){return((this??{data:{amount:n.dOne}}).data??{amount:n.dOne}).amount}set amount(t){this.data.amount=new n(t)}},St=class{constructor(t){t=t??{},this.id=t.id,this.amount=t.amount??n.dZero}};tt([_t()],St.prototype,"id",2),tt([pt(()=>n)],St.prototype,"amount",2);var pr=dt(Nt()),Et=class{constructor(){this.value=n.dZero,this.upgrades={},this.items={}}};tt([pt(()=>n)],Et.prototype,"value",2),tt([pt(()=>It)],Et.prototype,"upgrades",2),tt([pt(()=>St)],Et.prototype,"items",2);var He=class{get pointer(){return this.pointerFn()}get value(){return this.pointer.value}set value(t){this.pointer.value=t}constructor(t=new Et,e,r,i={defaultVal:n.dZero,defaultBoost:n.dOne}){this.defaultVal=i.defaultVal,this.defaultBoost=i.defaultBoost,this.pointerFn=typeof t=="function"?t:()=>t,this.boost=new Gt(this.defaultBoost),this.pointer.value=this.defaultVal,this.upgrades={},e&&this.addUpgrade(e),this.items={},r&&this.addItem(r)}onLoadData(){for(let t of Object.values(this.upgrades))this.runUpgradeEffect(t)}reset(t,e,r){let i={resetCurrency:!0,resetUpgradeLevels:!0,resetItemAmounts:!0,runUpgradeEffect:!0};if(typeof t=="object"?Object.assign(i,t):Object.assign(i,{resetCurrency:t,resetUpgradeLevels:e,runUpgradeEffect:r}),i.resetCurrency&&(this.value=this.defaultVal),i.resetUpgradeLevels)for(let s of Object.values(this.upgrades))s.level=new n(s.defaultLevel),i.runUpgradeEffect&&this.runUpgradeEffect(s);if(i.resetItemAmounts)for(let s of Object.values(this.items))s.amount=new n(s.defaultAmount),i.runUpgradeEffect&&this.runItemEffect(s)}gain(t=1e3){let e=this.boost.calculate().mul(new n(t).div(1e3));return this.pointer.value=this.pointer.value.add(e),e}pointerAddUpgrade(t){let e=new It(t);return this.pointer.upgrades[e.id]=e,e}pointerGetUpgrade(t){return this.pointer.upgrades[t]??null}getUpgrade(t){return this.upgrades[t]??null}queryUpgrade(t){let e=Object.keys(this.upgrades);if(t instanceof RegExp){let i=t;return e.filter(a=>i.test(a)).map(a=>this.upgrades[a])}return typeof t=="string"&&(t=[t]),e.filter(i=>t.includes(i)).map(i=>this.upgrades[i])}addUpgrade(t,e=!0){Array.isArray(t)||(t=[t]);let r=[];for(let i of t){this.pointerAddUpgrade(i);let s=new fe(i,()=>this.pointerGetUpgrade(i.id),()=>this);e&&this.runUpgradeEffect(s),this.upgrades[i.id]=s,r.push(s)}return r}updateUpgrade(t,e){let r=this.getUpgrade(t);r!==null&&Object.assign(r,e)}runUpgradeEffect(t){t.effect?.(t.level,t,this)}runItemEffect(t,e=n.dOne){e=new n(e),t.effect?.(t.amount,e,t,this)}calculateUpgrade(t,e=1/0,r,i){let s=this.getUpgrade(t);return s===null?(console.warn(`eMath.js: Upgrade "${t}" not found.`),[n.dZero,n.dZero]):(e=s.level.add(e),s.maxLevel!==void 0&&(e=n.min(e,s.maxLevel)),ue(this.value,s,s.level,e,r,i))}getNextCost(t,e=1,r,i){let s=this.getUpgrade(t);if(s===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),n.dZero;let a=this.calculateUpgrade(t,e,r,i)[0];return s.cost(s.level.add(a))}getNextCostMax(t,e=1,r,i){let s=this.getUpgrade(t);if(s===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),n.dZero;let a=this.calculateUpgrade(t,e,r,i);return s.cost(s.level.add(a[0])).add(a[1])}buyUpgrade(t,e,r,i){let s=this.getUpgrade(t);if(s===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),!1;let[a,u]=this.calculateUpgrade(t,e,r,i);return a.lte(0)?!1:(this.pointer.value=this.pointer.value.sub(u),s.level=s.level.add(a),this.runUpgradeEffect(s),!0)}pointerAddItem(t){let e=new St(t);return this.pointer.items[t.id]=e,e}pointerGetItem(t){return this.pointer.items[t]??null}addItem(t,e=!0){Array.isArray(t)||(t=[t]);for(let r of t){this.pointerAddItem(r);let i=new ce(r,()=>this.pointerGetItem(r.id),()=>this);e&&this.runItemEffect(i),this.items[r.id]=i}}getItem(t){return this.items[t]??null}calculateItem(t,e,r){let i=this.getItem(t);return i===null?(console.warn(`eMath.js: Item "${t}" not found.`),[n.dZero,n.dZero]):he(this.value,i,e,r)}buyItem(t,e,r){let i=this.getItem(t);if(i===null)return console.warn(`eMath.js: Item "${t}" not found.`),!1;let[s,a]=this.calculateItem(t,e,r);return s.lte(0)?!1:(this.pointer.value=this.pointer.value.sub(a),i.amount=i.amount.add(s),this.runItemEffect(i,e),!0)}},br=dt(Nt()),Yt=class{constructor(t=0){this.value=new n(t)}};tt([pt(()=>n)],Yt.prototype,"value",2);var We=class{get pointer(){return this.pointerFn()}constructor(t,e=!0,r=0){this.initial=new n(r),t??=new Yt(this.initial),this.pointerFn=typeof t=="function"?t:()=>t,this.boost=e?new Gt(this.initial):null}update(){console.warn("eMath.js: AttributeStatic.update is deprecated and will be removed in the future. The value is automatically updated when accessed."),this.boost&&(this.pointer.value=this.boost.calculate())}get value(){return this.boost&&(this.pointer.value=this.boost.calculate()),this.pointer.value}set value(t){if(this.boost)throw new Error("Cannot set value of attributeStatic when boost is enabled.");this.pointer.value=t}},Ct=class{constructor(t,e,r={},i){this.setValue=this.set.bind(this),this.getValue=this.get.bind(this),this.x=t,this.y=e,this.properties=typeof r=="function"?r(this):{...r},this.gridSymbol=i}get grid(){return Bt.getInstance(this.gridSymbol)}set(t,e){return this.properties[t]=e,e}get(t){return this.properties[t]}translate(t=0,e=0){return Bt.getInstance(this.gridSymbol).getCell(this.x+t,this.y+e)}direction(t,e=1,r){let i=this.grid;return(()=>{switch(t){case"up":return i.getCell(this.x,this.y-e);case"right":return i.getCell(this.x+e,this.y);case"down":return i.getCell(this.x,this.y+e);case"left":return i.getCell(this.x-e,this.y);case"adjacent":return i.getAdjacent(this.x,this.y,e,r);case"diagonal":return i.getDiagonal(this.x,this.y,e,r);case"encircling":return i.getEncircling(this.x,this.y,e,r);default:throw new Error("Invalid direction")}})()}up(t=1){return this.direction("up",t)}right(t=1){return this.direction("right",t)}down(t=1){return this.direction("down",t)}left(t=1){return this.direction("left",t)}};function me(t,e,r=!0){let i=r?"Size":"Coordinates";if(typeof t!="number"||typeof e!="number")throw new RangeError(`${i} must be numbers: ${t}, ${e}`);if(!Number.isInteger(t)||!Number.isInteger(e))throw new RangeError(`${i} must be integers: ${t}, ${e}`);if(t<0||e<0)throw new RangeError(`${i} must be positive: ${t}, ${e}`);if(!Number.isFinite(t)||!Number.isFinite(e))throw new RangeError(`${i} must be finite: ${t}, ${e}`);if(!Number.isSafeInteger(t)||!Number.isSafeInteger(e))throw new RangeError(`${i} must be safe integers: ${t}, ${e}`)}var K=class Qt extends Array{constructor(e){e=Array.isArray(e)?e:[e],e=e.filter(r=>r!==void 0),super(...e),this.removeDuplicates()}removeDuplicates(){let e=[];this.forEach((r,i)=>{this.indexOf(r)!==i&&e.push(i)}),e.forEach(r=>this.splice(r,1))}translate(e=0,r=0){return new Qt(this.map(i=>i.translate(e,r)))}direction(e,r,i){return new Qt(this.flatMap(s=>s.direction(e,r,i)))}up(e){return this.direction("up",e)}right(e){return this.direction("right",e)}down(e){return this.direction("down",e)}left(e){return this.direction("left",e)}adjacent(e,r){return this.direction("adjacent",e,r)}diagonal(e,r){return this.direction("diagonal",e,r)}encircling(e,r){return this.direction("encircling",e,r)}},Bt=class Jt{constructor(e,r,i){this.cells=[],this.gridSymbol=Symbol(),this.all=this.getAll.bind(this),this.allX=this.getAllX.bind(this),this.allY=this.getAllY.bind(this),this.get=this.getCell.bind(this),this.set=this.setCell.bind(this),Jt.instances[this.gridSymbol]=this,this.starterProps=i??{},this.xSize=e,this.ySize=r??e,me(this.xSize,this.ySize,!0);for(let s=0;s{if(this.ySize!==s&&(this.ySizes))for(let a=s;a{if(this.xSize!==i){if(this.xSizei)for(let a=0;a{let t=!1,e=r=>(t||(console.warn("eMath.js: The E function is deprecated. Use the Decimal class directly."),t=!0),new n(r));return Object.getOwnPropertyNames(n).filter(r=>!Object.getOwnPropertyNames(class{}).includes(r)).forEach(r=>{e[r]=n[r]}),e})(),Je=ee;if(typeof at.exports=="object"&&typeof Mt=="object"){var Xe=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Object.getOwnPropertyNames(e))!Object.prototype.hasOwnProperty.call(t,s)&&s!==r&&Object.defineProperty(t,s,{get:()=>e[s],enumerable:!(i=Object.getOwnPropertyDescriptor(e,s))||i.enumerable});return t};at.exports=Xe(at.exports,Mt)}return at.exports}); +"use strict";(function(Mt,at){var Tt=typeof exports=="object";if(typeof define=="function"&&define.amd)define([],at);else if(typeof module=="object"&&module.exports)module.exports=at();else{var ut=at(),Ft=Tt?exports:Mt;for(var vt in ut)Ft[vt]=ut[vt]}})(typeof self<"u"?self:exports,()=>{var Mt={},at={exports:Mt},Tt=Object.create,ut=Object.defineProperty,Ft=Object.getOwnPropertyDescriptor,vt=Object.getOwnPropertyNames,Se=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty,Oe=(t,e)=>function(){return e||(0,t[vt(t)[0]])((e={exports:{}}).exports,e),e.exports},Xt=(t,e)=>{for(var r in e)ut(t,r,{get:e[r],enumerable:!0})},Kt=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of vt(e))!Ee.call(t,s)&&s!==r&&ut(t,s,{get:()=>e[s],enumerable:!(i=Ft(e,s))||i.enumerable});return t},dt=(t,e,r)=>(r=t!=null?Tt(Se(t)):{},Kt(e||!t||!t.__esModule?ut(r,"default",{value:t,enumerable:!0}):r,t)),Te=t=>Kt(ut({},"__esModule",{value:!0}),t),tt=(t,e,r,i)=>{for(var s=i>1?void 0:i?Ft(e,r):e,a=t.length-1,u;a>=0;a--)(u=t[a])&&(s=(i?u(e,r,s):u(s))||s);return i&&s&&ut(e,r,s),s},Nt=Oe({"node_modules/reflect-metadata/Reflect.js"(){var t;(function(e){(function(r){var i=typeof globalThis=="object"?globalThis:typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:g(),s=a(e);typeof i.Reflect<"u"&&(s=a(i.Reflect,s)),r(s,i),typeof i.Reflect>"u"&&(i.Reflect=e);function a(l,S){return function(E,V){Object.defineProperty(l,E,{configurable:!0,writable:!0,value:V}),S&&S(E,V)}}function u(){try{return Function("return this;")()}catch{}}function f(){try{return(0,eval)("(function() { return this; })()")}catch{}}function g(){return u()||f()}})(function(r,i){var s=Object.prototype.hasOwnProperty,a=typeof Symbol=="function",u=a&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",f=a&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",g=typeof Object.create=="function",l={__proto__:[]}instanceof Array,S=!g&&!l,E={create:g?function(){return Wt(Object.create(null))}:l?function(){return Wt({__proto__:null})}:function(){return Wt({})},has:S?function(h,c){return s.call(h,c)}:function(h,c){return c in h},get:S?function(h,c){return s.call(h,c)?h[c]:void 0}:function(h,c){return h[c]}},V=Object.getPrototypeOf(Function),q=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:lr(),U=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:fr(),_=typeof WeakMap=="function"?WeakMap:hr(),k=a?Symbol.for("@reflect-metadata:registry"):void 0,x=ar(),Z=or(x);function o(h,c,d,v){if(L(d)){if(!Ne(h))throw new TypeError;if(!pe(c))throw new TypeError;return X(h,c)}else{if(!Ne(h))throw new TypeError;if(!B(c))throw new TypeError;if(!B(v)&&!L(v)&&!wt(v))throw new TypeError;return wt(v)&&(v=void 0),d=ot(d),nt(h,c,d,v)}}r("decorate",o);function b(h,c){function d(v,P){if(!B(v))throw new TypeError;if(!L(P)&&!nr(P))throw new TypeError;qt(h,c,v,P)}return d}r("metadata",b);function w(h,c,d,v){if(!B(d))throw new TypeError;return L(v)||(v=ot(v)),qt(h,c,d,v)}r("defineMetadata",w);function N(h,c,d){if(!B(c))throw new TypeError;return L(d)||(d=ot(d)),J(h,c,d)}r("hasMetadata",N);function y(h,c,d){if(!B(c))throw new TypeError;return L(d)||(d=ot(d)),et(h,c,d)}r("hasOwnMetadata",y);function M(h,c,d){if(!B(c))throw new TypeError;return L(d)||(d=ot(d)),rt(h,c,d)}r("getMetadata",M);function F(h,c,d){if(!B(c))throw new TypeError;return L(d)||(d=ot(d)),ct(h,c,d)}r("getOwnMetadata",F);function $(h,c){if(!B(h))throw new TypeError;return L(c)||(c=ot(c)),Pt(h,c)}r("getMetadataKeys",$);function j(h,c){if(!B(h))throw new TypeError;return L(c)||(c=ot(c)),kt(h,c)}r("getOwnMetadataKeys",j);function z(h,c,d){if(!B(c))throw new TypeError;if(L(d)||(d=ot(d)),!B(c))throw new TypeError;L(d)||(d=ot(d));var v=Ot(c,d,!1);return L(v)?!1:v.OrdinaryDeleteMetadata(h,c,d)}r("deleteMetadata",z);function X(h,c){for(var d=h.length-1;d>=0;--d){var v=h[d],P=v(c);if(!L(P)&&!wt(P)){if(!pe(P))throw new TypeError;c=P}}return c}function nt(h,c,d,v){for(var P=h.length-1;P>=0;--P){var D=h[P],Q=D(c,d,v);if(!L(Q)&&!wt(Q)){if(!B(Q))throw new TypeError;v=Q}}return v}function J(h,c,d){var v=et(h,c,d);if(v)return!0;var P=Ht(c);return wt(P)?!1:J(h,P,d)}function et(h,c,d){var v=Ot(c,d,!1);return L(v)?!1:de(v.OrdinaryHasOwnMetadata(h,c,d))}function rt(h,c,d){var v=et(h,c,d);if(v)return ct(h,c,d);var P=Ht(c);if(!wt(P))return rt(h,P,d)}function ct(h,c,d){var v=Ot(c,d,!1);if(!L(v))return v.OrdinaryGetOwnMetadata(h,c,d)}function qt(h,c,d,v){var P=Ot(d,v,!0);P.OrdinaryDefineOwnMetadata(h,c,d,v)}function Pt(h,c){var d=kt(h,c),v=Ht(h);if(v===null)return d;var P=Pt(v,c);if(P.length<=0)return d;if(d.length<=0)return P;for(var D=new U,Q=[],G=0,I=d;G=0&&I=this._keys.length?(this._index=-1,this._keys=c,this._values=c):this._index++,{value:O,done:!1}}return{value:void 0,done:!0}},G.prototype.throw=function(I){throw this._index>=0&&(this._index=-1,this._keys=c,this._values=c),I},G.prototype.return=function(I){return this._index>=0&&(this._index=-1,this._keys=c,this._values=c),{value:I,done:!0}},G}(),v=function(){function G(){this._keys=[],this._values=[],this._cacheKey=h,this._cacheIndex=-2}return Object.defineProperty(G.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),G.prototype.has=function(I){return this._find(I,!1)>=0},G.prototype.get=function(I){var O=this._find(I,!1);return O>=0?this._values[O]:void 0},G.prototype.set=function(I,O){var A=this._find(I,!0);return this._values[A]=O,this},G.prototype.delete=function(I){var O=this._find(I,!1);if(O>=0){for(var A=this._keys.length,C=O+1;CXe}),at.exports=Te(te);var gr=dt(Nt()),ee={};Xt(ee,{Attribute:()=>Yt,AttributeStatic:()=>Qe,Boost:()=>Gt,BoostObject:()=>bt,Currency:()=>Et,CurrencyStatic:()=>We,DEFAULT_ITERATIONS:()=>At,Decimal:()=>n,E:()=>Je,FORMATS:()=>Ye,FormatTypeList:()=>qe,Grid:()=>Bt,GridCell:()=>Ct,GridCellCollection:()=>K,Item:()=>ce,ItemData:()=>St,LRUCache:()=>Lt,ListNode:()=>re,ST_NAMES:()=>lt,UpgradeData:()=>It,UpgradeStatic:()=>fe,calculateItem:()=>he,calculateSum:()=>zt,calculateSumApprox:()=>oe,calculateSumLoop:()=>ae,calculateUpgrade:()=>ue,decimalToJSONString:()=>le,eMathMetadata:()=>Fe,equalsTolerance:()=>$t,formats:()=>ht,inverseFunctionApprox:()=>Zt,roundingBase:()=>De,upgradeToCacheNameEL:()=>He});var dr=dt(Nt()),Fe={version:(()=>{try{return"9.5.0"}catch{return"9.5.0"}})(),"break_eternity.js":{version:"2.1.0"}},Lt=class{constructor(t){this.map=new Map,this.first=void 0,this.last=void 0,this.maxSize=t}get size(){return this.map.size}get(t){let e=this.map.get(t);if(e!==void 0)return e!==this.first&&(e===this.last?(this.last=e.prev,this.last.next=void 0):(e.prev.next=e.next,e.next.prev=e.prev),e.next=this.first,this.first.prev=e,this.first=e),e.value}set(t,e){if(this.maxSize<1)return;if(this.map.has(t))throw new Error("Cannot update existing keys in the cache");let r=new re(t,e);for(this.first===void 0?(this.first=r,this.last=r):(r.next=this.first,this.first.prev=r,this.first=r),this.map.set(t,r);this.map.size>this.maxSize;){let i=this.last;this.map.delete(i.key),this.last=i.prev,this.last.next=void 0}}},re=class{constructor(t,e){this.next=void 0,this.prev=void 0,this.key=t,this.value=e}},it;(function(t){t[t.PLAIN_TO_CLASS=0]="PLAIN_TO_CLASS",t[t.CLASS_TO_PLAIN=1]="CLASS_TO_PLAIN",t[t.CLASS_TO_CLASS=2]="CLASS_TO_CLASS"})(it||(it={}));var Ae=function(){function t(){this._typeMetadatas=new Map,this._transformMetadatas=new Map,this._exposeMetadatas=new Map,this._excludeMetadatas=new Map,this._ancestorsMap=new Map}return t.prototype.addTypeMetadata=function(e){this._typeMetadatas.has(e.target)||this._typeMetadatas.set(e.target,new Map),this._typeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.addTransformMetadata=function(e){this._transformMetadatas.has(e.target)||this._transformMetadatas.set(e.target,new Map),this._transformMetadatas.get(e.target).has(e.propertyName)||this._transformMetadatas.get(e.target).set(e.propertyName,[]),this._transformMetadatas.get(e.target).get(e.propertyName).push(e)},t.prototype.addExposeMetadata=function(e){this._exposeMetadatas.has(e.target)||this._exposeMetadatas.set(e.target,new Map),this._exposeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.addExcludeMetadata=function(e){this._excludeMetadatas.has(e.target)||this._excludeMetadatas.set(e.target,new Map),this._excludeMetadatas.get(e.target).set(e.propertyName,e)},t.prototype.findTransformMetadatas=function(e,r,i){return this.findMetadatas(this._transformMetadatas,e,r).filter(function(s){return!s.options||s.options.toClassOnly===!0&&s.options.toPlainOnly===!0?!0:s.options.toClassOnly===!0?i===it.CLASS_TO_CLASS||i===it.PLAIN_TO_CLASS:s.options.toPlainOnly===!0?i===it.CLASS_TO_PLAIN:!0})},t.prototype.findExcludeMetadata=function(e,r){return this.findMetadata(this._excludeMetadatas,e,r)},t.prototype.findExposeMetadata=function(e,r){return this.findMetadata(this._exposeMetadatas,e,r)},t.prototype.findExposeMetadataByCustomName=function(e,r){return this.getExposedMetadatas(e).find(function(i){return i.options&&i.options.name===r})},t.prototype.findTypeMetadata=function(e,r){return this.findMetadata(this._typeMetadatas,e,r)},t.prototype.getStrategy=function(e){var r=this._excludeMetadatas.get(e),i=r&&r.get(void 0),s=this._exposeMetadatas.get(e),a=s&&s.get(void 0);return i&&a||!i&&!a?"none":i?"excludeAll":"exposeAll"},t.prototype.getExposedMetadatas=function(e){return this.getMetadata(this._exposeMetadatas,e)},t.prototype.getExcludedMetadatas=function(e){return this.getMetadata(this._excludeMetadatas,e)},t.prototype.getExposedProperties=function(e,r){return this.getExposedMetadatas(e).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?r===it.CLASS_TO_CLASS||r===it.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?r===it.CLASS_TO_PLAIN:!0}).map(function(i){return i.propertyName})},t.prototype.getExcludedProperties=function(e,r){return this.getExcludedMetadatas(e).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?r===it.CLASS_TO_CLASS||r===it.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?r===it.CLASS_TO_PLAIN:!0}).map(function(i){return i.propertyName})},t.prototype.clear=function(){this._typeMetadatas.clear(),this._exposeMetadatas.clear(),this._excludeMetadatas.clear(),this._ancestorsMap.clear()},t.prototype.getMetadata=function(e,r){var i=e.get(r),s;i&&(s=Array.from(i.values()).filter(function(E){return E.propertyName!==void 0}));for(var a=[],u=0,f=this.getAncestors(r);uNumber.MAX_SAFE_INTEGER)&&(N="\u03C9");let M=t.log(o,8e3).toNumber();if(w.equals(0))return N;if(w.gt(0)&&w.lte(3)){let j=[];for(let z=0;zNumber.MAX_SAFE_INTEGER)&&(N="\u03C9");let M=t.log(o,8e3).toNumber();if(w.equals(0))return N;if(w.gt(0)&&w.lte(2)){let j=[];for(let z=0;z118?e.elemental.beyondOg(y):e.elemental.config.element_lists[o-1][N]},beyondOg(o){let b=Math.floor(Math.log10(o)),w=["n","u","b","t","q","p","h","s","o","e"],N="";for(let y=b;y>=0;y--){let M=Math.floor(o/Math.pow(10,y))%10;N==""?N=w[M].toUpperCase():N+=w[M]}return N},abbreviationLength(o){return o==1?1:Math.pow(Math.floor(o/2)+1,2)*2},getAbbreviationAndValue(o){let b=o.log(118).toNumber(),w=Math.floor(b)+1,N=e.elemental.abbreviationLength(w),y=b-w+1,M=Math.floor(y*N),F=e.elemental.getAbbreviation(w,y),$=new t(118).pow(w+M/N-1);return[F,$]},formatElementalPart(o,b){return b.eq(1)?o:`${b.toString()} ${o}`},format(o,b=2){if(o.gt(new t(118).pow(new t(118).pow(new t(118).pow(4)))))return"e"+e.elemental.format(o.log10(),b);let w=o.log(118),y=w.log(118).log(118).toNumber(),M=Math.max(4-y*2,1),F=[];for(;w.gte(1)&&F.length=M)return F.map(j=>e.elemental.formatElementalPart(j[0],j[1])).join(" + ");let $=new t(118).pow(w).toFixed(F.length===1?3:b);return F.length===0?$:F.length===1?`${$} \xD7 ${e.elemental.formatElementalPart(F[0][0],F[0][1])}`:`${$} \xD7 (${F.map(j=>e.elemental.formatElementalPart(j[0],j[1])).join(" + ")})`}},old_sc:{format(o,b){o=new t(o);let w=o.log10().floor();if(w.lt(9))return w.lt(3)?o.toFixed(b):o.floor().toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");{if(o.gte("eeee10")){let y=o.slog();return(y.gte(1e9)?"":t.dTen.pow(y.sub(y.floor())).toFixed(4))+"F"+e.old_sc.format(y.floor(),0)}let N=o.div(t.dTen.pow(w));return(w.log10().gte(9)?"":N.toFixed(4))+"e"+e.old_sc.format(w,0)}}},eng:{format(o,b=2){o=new t(o);let w=o.log10().floor();if(w.lt(9))return w.lt(3)?o.toFixed(b):o.floor().toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");{if(o.gte("eeee10")){let y=o.slog();return(y.gte(1e9)?"":t.dTen.pow(y.sub(y.floor())).toFixed(4))+"F"+e.eng.format(y.floor(),0)}let N=o.div(new t(1e3).pow(w.div(3).floor()));return(w.log10().gte(9)?"":N.toFixed(new t(4).sub(w.sub(w.div(3).floor().mul(3))).toNumber()))+"e"+e.eng.format(w.div(3).floor().mul(3),0)}}},mixed_sc:{format(o,b,w=9){o=new t(o);let N=o.log10().floor();return N.lt(303)&&N.gte(w)?g(o,b,w,"st"):g(o,b,w,"sc")}},layer:{layers:["infinity","eternity","reality","equality","affinity","celerity","identity","vitality","immunity","atrocity"],format(o,b=2,w){o=new t(o);let N=o.max(1).log10().max(1).log(r.log10()).floor();if(N.lte(0))return g(o,b,w,"sc");o=t.dTen.pow(o.max(1).log10().div(r.log10().pow(N)).sub(N.gte(1)?1:0));let y=N.div(10).floor(),M=N.toNumber()%10-1;return g(o,Math.max(4,b),w,"sc")+" "+(y.gte(1)?"meta"+(y.gte(2)?"^"+g(y,0,w,"sc"):"")+"-":"")+(isNaN(M)?"nanity":e.layer.layers[M])}},standard:{tier1(o){return lt[0][0][o%10]+lt[0][1][Math.floor(o/10)%10]+lt[0][2][Math.floor(o/100)]},tier2(o){let b=o%10,w=Math.floor(o/10)%10,N=Math.floor(o/100)%10,y="";return o<10?lt[1][0][o]:(w==1&&b==0?y+="Vec":y+=lt[1][1][b]+lt[1][2][w],y+=lt[1][3][N],y)}},inf:{format(o,b,w){o=new t(o);let N=0,y=new t(Number.MAX_VALUE),M=["","\u221E","\u03A9","\u03A8","\u028A"],F=["","","m","mm","mmm"];for(;o.gte(y);)o=o.log(y),N++;return N==0?g(o,b,w,"sc"):o.gte(3)?F[N]+M[N]+"\u03C9^"+g(o.sub(1),b,w,"sc"):o.gte(2)?F[N]+"\u03C9"+M[N]+"-"+g(y.pow(o.sub(2)),b,w,"sc"):F[N]+M[N]+"-"+g(y.pow(o.sub(1)),b,w,"sc")}},alphabet:{config:{alphabet:"abcdefghijklmnopqrstuvwxyz"},getAbbreviation(o,b=new t(1e15),w=!1,N=9){if(o=new t(o),b=new t(b).div(1e3),o.lt(b.mul(1e3)))return"";let{alphabet:y}=e.alphabet.config,M=y.length,F=o.log(1e3).sub(b.log(1e3)).floor(),$=F.add(1).log(M+1).ceil(),j="",z=(X,nt)=>{let J=X,et="";for(let rt=0;rt=M)return"\u03C9";et=y[ct]+et,J=J.sub(1).div(M).floor()}return et};if($.lt(N))j=z(F,$);else{let X=$.sub(N).add(1),nt=F.div(t.pow(M+1,X.sub(1))).floor();j=`${z(nt,new t(N))}(${X.gt("1e9")?X.format():X.format(0)})`}return j},format(o,b=2,w=9,N="mixed_sc",y=new t(1e15),M=!1,F){if(o=new t(o),y=new t(y).div(1e3),o.lt(y.mul(1e3)))return g(o,b,w,N);let $=e.alphabet.getAbbreviation(o,y,M,F),j=o.div(t.pow(1e3,o.log(1e3).floor()));return`${$.length>(F??9)+2?"":j.toFixed(b)+" "}${$}`}}},r=t.dTwo.pow(1024),i="\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089",s="\u2070\xB9\xB2\xB3\u2074\u2075\u2076\u2077\u2078\u2079";function a(o){return o.toFixed(0).split("").map(b=>b==="-"?"\u208B":i[parseInt(b,10)]).join("")}function u(o){return o.toFixed(0).split("").map(b=>b==="-"?"\u208B":s[parseInt(b,10)]).join("")}function f(o,b=2,w=9,N="st"){return g(o,b,w,N)}function g(o,b=2,w=9,N="mixed_sc"){o=new t(o);let y=o.lt(0)?"-":"";if(o.mag==1/0)return y+"Infinity";if(Number.isNaN(o.mag))return y+"NaN";if(o.lt(0)&&(o=o.mul(-1)),o.eq(0))return o.toFixed(b);let M=o.log10().floor();switch(N){case"sc":case"scientific":if(o.log10().lt(Math.min(-b,0))&&b>1){let F=o.log10().ceil(),$=o.div(F.eq(-1)?new t(.1):t.dTen.pow(F)),j=F.mul(-1).max(1).log10().gte(9);return y+(j?"":$.toFixed(2))+"e"+g(F,0,w,"mixed_sc")}else if(M.lt(w)){let F=Math.max(Math.min(b-M.toNumber(),b),0);return y+(F>0?o.toFixed(F):o.toFixed(F).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"))}else{if(o.gte("eeee10")){let j=o.slog();return(j.gte(1e9)?"":t.dTen.pow(j.sub(j.floor())).toFixed(2))+"F"+g(j.floor(),0)}let F=o.div(t.dTen.pow(M)),$=M.log10().gte(9);return y+($?"":F.toFixed(2))+"e"+g(M,0,w,"mixed_sc")}case"st":case"standard":{let F=o.log(1e3).floor();if(F.lt(1))return y+o.toFixed(Math.max(Math.min(b-M.toNumber(),b),0));let $=F.mul(3),j=F.log10().floor();if(j.gte(3e3))return"e"+g(M,b,w,"st");let z="";if(F.lt(4))z=["","K","M","B"][Math.round(F.toNumber())];else{let J=Math.floor(F.log(1e3).toNumber());for(J<100&&(J=Math.max(J-1,0)),F=F.sub(1).div(t.dTen.pow(J*3));F.gt(0);){let et=F.div(1e3).floor(),rt=F.sub(et.mul(1e3)).floor().toNumber();rt>0&&(rt==1&&!J&&(z="U"),J&&(z=e.standard.tier2(J)+(z?"-"+z:"")),rt>1&&(z=e.standard.tier1(rt)+z)),F=et,J++}}let X=o.div(t.dTen.pow($)),nt=b===2?t.dTwo.sub(M.sub($)).add(1).toNumber():b;return y+(j.gte(10)?"":X.toFixed(nt)+" ")+z}default:return e[N]||console.error('Invalid format type "',N,'"'),y+e[N].format(o,b,w)}}function l(o,b,w="mixed_sc",N,y){o=new t(o),b=new t(b);let M=o.add(b),F,$=M.div(o);return $.gte(10)&&o.gte(1e100)?($=$.log10().mul(20),F="(+"+g($,N,y,w)+" OoMs/sec)"):F="(+"+g(b,N,y,w)+"/sec)",F}function S(o,b=2,w="s"){return o=new t(o),o.gte(86400)?g(o.div(86400).floor(),0,12,"sc")+":"+S(o.mod(86400),b,"d"):o.gte(3600)||w=="d"?(o.div(3600).gte(10)||w!="d"?"":"0")+g(o.div(3600).floor(),0,12,"sc")+":"+S(o.mod(3600),b,"h"):o.gte(60)||w=="h"?(o.div(60).gte(10)||w!="h"?"":"0")+g(o.div(60).floor(),0,12,"sc")+":"+S(o.mod(60),b,"m"):(o.gte(10)||w!="m"?"":"0")+g(o,b,12,"sc")}function E(o,b=!1,w=0,N=9,y="mixed_sc"){let M=kt=>g(kt,w,N,y);o=new t(o);let F=o.mul(1e3).mod(1e3).floor(),$=o.mod(60).floor(),j=o.div(60).mod(60).floor(),z=o.div(3600).mod(24).floor(),X=o.div(86400).mod(365.2425).floor(),nt=o.div(31556952).floor(),J=nt.eq(1)?" year":" years",et=X.eq(1)?" day":" days",rt=z.eq(1)?" hour":" hours",ct=j.eq(1)?" minute":" minutes",qt=$.eq(1)?" second":" seconds",Pt=F.eq(1)?" millisecond":" milliseconds";return`${nt.gt(0)?M(nt)+J+", ":""}${X.gt(0)?M(X)+et+", ":""}${z.gt(0)?M(z)+rt+", ":""}${j.gt(0)?M(j)+ct+", ":""}${$.gt(0)?M($)+qt+",":""}${b&&F.gt(0)?" "+M(F)+Pt:""}`.replace(/,([^,]*)$/,"$1").trim()}function V(o){return o=new t(o),g(t.dOne.sub(o).mul(100))+"%"}function q(o){return o=new t(o),g(o.mul(100))+"%"}function U(o,b=2){return o=new t(o),o.gte(1)?"\xD7"+o.format(b):"/"+o.pow(-1).format(b)}function _(o,b,w=10){return t.gte(o,10)?t.pow(w,t.log(o,w).pow(b)):new t(o)}function k(o,b=0){o=new t(o);let w=(F=>F.map(($,j)=>({name:$.name,altName:$.altName,value:t.pow(1e3,new t(j).add(1))})))([{name:"K",altName:"Kilo"},{name:"M",altName:"Mega"},{name:"G",altName:"Giga"},{name:"T",altName:"Tera"},{name:"P",altName:"Peta"},{name:"Decimal",altName:"Exa"},{name:"Z",altName:"Zetta"},{name:"Y",altName:"Yotta"},{name:"R",altName:"Ronna"},{name:"Q",altName:"Quetta"}]),N="",y=o.lte(0)?0:t.min(t.log(o,1e3).sub(1),w.length-1).floor().toNumber(),M=w[y];if(y===0)switch(b){case 1:N="";break;case 2:case 0:default:N=o.format();break}switch(b){case 1:N=M.name;break;case 2:N=o.divide(M.value).format();break;case 3:N=M.altName;break;case 0:default:N=`${o.divide(M.value).format()} ${M.name}`;break}return N}function x(o,b=!1){return`${k(o,2)} ${k(o,1)}eV${b?"/c^2":""}`}let Z={...e,toSubscript:a,toSuperscript:u,formatST:f,format:g,formatGain:l,formatTime:S,formatTimeLong:E,formatReduction:V,formatPercent:q,formatMult:U,expMult:_,metric:k,ev:x};return{FORMATS:e,formats:Z}}var xt=17,W=9e15,ke=Math.log10(9e15),mt=1/9e15,Le=308,Ve=-324,ie=5,xe=1023,Ue=!0,je=!1,Ge=function(){let t=[];for(let r=Ve+1;r<=Le;r++)t.push(+("1e"+r));let e=323;return function(r){return t[r+e]}}(),gt=[2,Math.E,3,4,5,6,7,8,9,10],Re=[[1,1.0891180521811203,1.1789767925673957,1.2701455431742086,1.3632090180450092,1.4587818160364217,1.5575237916251419,1.6601571006859253,1.767485818836978,1.8804192098842727,2],[1,1.1121114330934079,1.231038924931609,1.3583836963111375,1.4960519303993531,1.6463542337511945,1.8121385357018724,1.996971324618307,2.2053895545527546,2.4432574483385254,Math.E],[1,1.1187738849693603,1.2464963939368214,1.38527004705667,1.5376664685821402,1.7068895236551784,1.897001227148399,2.1132403089001035,2.362480153784171,2.6539010333870774,3],[1,1.1367350847096405,1.2889510672956703,1.4606478703324786,1.6570295196661111,1.8850062585672889,2.1539465047453485,2.476829779693097,2.872061932789197,3.3664204535587183,4],[1,1.1494592900767588,1.319708228183931,1.5166291280087583,1.748171114438024,2.0253263297298045,2.3636668498288547,2.7858359149579424,3.3257226212448145,4.035730287722532,5],[1,1.159225940787673,1.343712473580932,1.5611293155111927,1.8221199554561318,2.14183924486326,2.542468319282638,3.0574682501653316,3.7390572020926873,4.6719550537360774,6],[1,1.1670905356972596,1.3632807444991446,1.5979222279405536,1.8842640123816674,2.2416069644878687,2.69893426559423,3.3012632110403577,4.121250340630164,5.281493033448316,7],[1,1.1736630594087796,1.379783782386201,1.6292821855668218,1.9378971836180754,2.3289975651071977,2.8384347394720835,3.5232708454565906,4.478242031114584,5.868592169644505,8],[1,1.1793017514670474,1.394054150657457,1.65664127441059,1.985170999970283,2.4069682290577457,2.9647310119960752,3.7278665320924946,4.814462547283592,6.436522247411611,9],[1,1.1840100246247336,1.4061375836156955,1.6802272208863964,2.026757028388619,2.4770056063449646,3.080525271755482,3.9191964192627284,5.135152840833187,6.989961179534715,10]],$e=[[-1,-.9194161097107025,-.8335625019330468,-.7425599821143978,-.6466611521029437,-.5462617907227869,-.4419033816638769,-.3342645487554494,-.224140440909962,-.11241087890006762,0],[-1,-.90603157029014,-.80786507256596,-.7064666939634,-.60294836853664,-.49849837513117,-.39430303318768,-.29147201034755,-.19097820800866,-.09361896280296,0],[-1,-.9021579584316141,-.8005762598234203,-.6964780623319391,-.5911906810998454,-.486050182576545,-.3823089430815083,-.28106046722897615,-.1831906535795894,-.08935809204418144,0],[-1,-.8917227442365535,-.781258746326964,-.6705130326902455,-.5612813129406509,-.4551067709033134,-.35319256652135966,-.2563741554088552,-.1651412821106526,-.0796919581982668,0],[-1,-.8843387974366064,-.7678744063886243,-.6529563724510552,-.5415870994657841,-.4352842206588936,-.33504449124791424,-.24138853420685147,-.15445285440944467,-.07409659641336663,0],[-1,-.8786709358426346,-.7577735191184886,-.6399546189952064,-.527284921869926,-.4211627631006314,-.3223479611761232,-.23107655627789858,-.1472057700818259,-.07035171210706326,0],[-1,-.8740862815291583,-.7497032990976209,-.6297119746181752,-.5161838335958787,-.41036238255751956,-.31277212146489963,-.2233976621705518,-.1418697367979619,-.06762117662323441,0],[-1,-.8702632331800649,-.7430366914122081,-.6213373075161548,-.5072025698095242,-.40171437727184167,-.30517930701410456,-.21736343968190863,-.137710238299109,-.06550774483471955,0],[-1,-.8670016295947213,-.7373984232432306,-.6143173985094293,-.49973884395492807,-.394584953527678,-.2989649949848695,-.21245647317021688,-.13434688362382652,-.0638072667348083,0],[-1,-.8641642839543857,-.732534623168535,-.6083127477059322,-.4934049257184696,-.3885773075899922,-.29376029055315767,-.2083678561173622,-.13155653399373268,-.062401588652553186,0]],m=function(e){return n.fromValue_noAlloc(e)},T=function(t,e,r){return n.fromComponents(t,e,r)},p=function(e,r,i){return n.fromComponents_noNormalize(e,r,i)},ft=function(e,r){let i=r+1,s=Math.ceil(Math.log10(Math.abs(e))),a=Math.round(e*Math.pow(10,i-s))*Math.pow(10,s-i);return parseFloat(a.toFixed(Math.max(i-s,0)))},Ut=function(t){return Math.sign(t)*Math.log10(Math.abs(t))},Ze=function(t){if(!isFinite(t))return t;if(t<-50)return t===Math.trunc(t)?Number.NEGATIVE_INFINITY:0;let e=1;for(;t<10;)e=e*t,++t;t-=1;let r=.9189385332046727;r=r+(t+.5)*Math.log(t),r=r-t;let i=t*t,s=t;return r=r+1/(12*s),s=s*i,r=r-1/(360*s),s=s*i,r=r+1/(1260*s),s=s*i,r=r-1/(1680*s),s=s*i,r=r+1/(1188*s),s=s*i,r=r-691/(360360*s),s=s*i,r=r+7/(1092*s),s=s*i,r=r-3617/(122400*s),Math.exp(r)/e},ze=.36787944117144233,ne=.5671432904097838,jt=function(t,e=1e-10,r=!0){let i,s;if(!Number.isFinite(t))return t;if(r){if(t===0)return t;if(t===1)return ne;t<10?i=0:i=Math.log(t)-Math.log(Math.log(t))}else{if(t===0)return-1/0;t<=-.1?i=-2:i=Math.log(-t)-Math.log(-Math.log(-t))}for(let a=0;a<100;++a){if(s=(t*Math.exp(-i)+i*i)/(i+1),Math.abs(s-i).5?1:-1;if(Math.random()*20<1)return p(e,0,1);let r=Math.floor(Math.random()*(t+1)),i=r===0?Math.random()*616-308:Math.random()*16;Math.random()>.9&&(i=Math.trunc(i));let s=Math.pow(10,i);return Math.random()>.9&&(s=Math.trunc(s)),T(e,r,s)}static affordGeometricSeries_core(t,e,r,i){let s=e.mul(r.pow(i));return n.floor(t.div(s).mul(r.sub(1)).add(1).log10().div(r.log10()))}static sumGeometricSeries_core(t,e,r,i){return e.mul(r.pow(i)).mul(n.sub(1,r.pow(t))).div(n.sub(1,r))}static affordArithmeticSeries_core(t,e,r,i){let a=e.add(i.mul(r)).sub(r.div(2)),u=a.pow(2);return a.neg().add(u.add(r.mul(t).mul(2)).sqrt()).div(r).floor()}static sumArithmeticSeries_core(t,e,r,i){let s=e.add(i.mul(r));return t.div(2).mul(s.mul(2).plus(t.sub(1).mul(r)))}static efficiencyOfPurchase_core(t,e,r){return t.div(e).add(t.div(r))}normalize(){if(this.sign===0||this.mag===0&&this.layer===0||this.mag===Number.NEGATIVE_INFINITY&&this.layer>0&&Number.isFinite(this.layer))return this.sign=0,this.mag=0,this.layer=0,this;if(this.layer===0&&this.mag<0&&(this.mag=-this.mag,this.sign=-this.sign),this.mag===Number.POSITIVE_INFINITY||this.layer===Number.POSITIVE_INFINITY||this.mag===Number.NEGATIVE_INFINITY||this.layer===Number.NEGATIVE_INFINITY)return this.mag=Number.POSITIVE_INFINITY,this.layer=Number.POSITIVE_INFINITY,this;if(this.layer===0&&this.mag=W)return this.layer+=1,this.mag=e*Math.log10(t),this;for(;t0;)this.layer-=1,this.layer===0?this.mag=Math.pow(10,this.mag):(this.mag=e*Math.pow(10,t),t=Math.abs(this.mag),e=Math.sign(this.mag));return this.layer===0&&(this.mag<0?(this.mag=-this.mag,this.sign=-this.sign):this.mag===0&&(this.sign=0)),(Number.isNaN(this.sign)||Number.isNaN(this.layer)||Number.isNaN(this.mag))&&(this.sign=Number.NaN,this.layer=Number.NaN,this.mag=Number.NaN),this}fromComponents(t,e,r){return this.sign=t,this.layer=e,this.mag=r,this.normalize(),this}fromComponents_noNormalize(t,e,r){return this.sign=t,this.layer=e,this.mag=r,this}fromMantissaExponent(t,e){return this.layer=1,this.sign=Math.sign(t),t=Math.abs(t),this.mag=e+Math.log10(t),this.normalize(),this}fromMantissaExponent_noNormalize(t,e){return this.fromMantissaExponent(t,e),this}fromDecimal(t){return this.sign=t.sign,this.layer=t.layer,this.mag=t.mag,this}fromNumber(t){return this.mag=Math.abs(t),this.sign=Math.sign(t),this.layer=0,this.normalize(),this}fromString(t,e=!1){let r=t,i=n.fromStringCache.get(r);if(i!==void 0)return this.fromDecimal(i);Ue?t=t.replace(",",""):je&&(t=t.replace(",","."));let s=t.split("^^^");if(s.length===2){let _=parseFloat(s[0]),k=parseFloat(s[1]),x=s[1].split(";"),Z=1;if(x.length===2&&(Z=parseFloat(x[1]),isFinite(Z)||(Z=1)),isFinite(_)&&isFinite(k)){let o=n.pentate(_,k,Z,e);return this.sign=o.sign,this.layer=o.layer,this.mag=o.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}}let a=t.split("^^");if(a.length===2){let _=parseFloat(a[0]),k=parseFloat(a[1]),x=a[1].split(";"),Z=1;if(x.length===2&&(Z=parseFloat(x[1]),isFinite(Z)||(Z=1)),isFinite(_)&&isFinite(k)){let o=n.tetrate(_,k,Z,e);return this.sign=o.sign,this.layer=o.layer,this.mag=o.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}}let u=t.split("^");if(u.length===2){let _=parseFloat(u[0]),k=parseFloat(u[1]);if(isFinite(_)&&isFinite(k)){let x=n.pow(_,k);return this.sign=x.sign,this.layer=x.layer,this.mag=x.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}}t=t.trim().toLowerCase();let f,g,l=t.split("pt");if(l.length===2){f=10;let _=!1;l[0].startsWith("-")&&(_=!0,l[0]=l[0].slice(1)),g=parseFloat(l[0]),l[1]=l[1].replace("(",""),l[1]=l[1].replace(")","");let k=parseFloat(l[1]);if(isFinite(k)||(k=1),isFinite(f)&&isFinite(g)){let x=n.tetrate(f,g,k,e);return this.sign=x.sign,this.layer=x.layer,this.mag=x.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),_&&(this.sign*=-1),this}}if(l=t.split("p"),l.length===2){f=10;let _=!1;l[0].startsWith("-")&&(_=!0,l[0]=l[0].slice(1)),g=parseFloat(l[0]),l[1]=l[1].replace("(",""),l[1]=l[1].replace(")","");let k=parseFloat(l[1]);if(isFinite(k)||(k=1),isFinite(f)&&isFinite(g)){let x=n.tetrate(f,g,k,e);return this.sign=x.sign,this.layer=x.layer,this.mag=x.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),_&&(this.sign*=-1),this}}if(l=t.split("f"),l.length===2){f=10;let _=!1;l[0].startsWith("-")&&(_=!0,l[0]=l[0].slice(1)),l[0]=l[0].replace("(",""),l[0]=l[0].replace(")","");let k=parseFloat(l[0]);if(l[1]=l[1].replace("(",""),l[1]=l[1].replace(")",""),g=parseFloat(l[1]),isFinite(k)||(k=1),isFinite(f)&&isFinite(g)){let x=n.tetrate(f,g,k,e);return this.sign=x.sign,this.layer=x.layer,this.mag=x.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),_&&(this.sign*=-1),this}}let S=t.split("e"),E=S.length-1;if(E===0){let _=parseFloat(t);if(isFinite(_))return this.fromNumber(_),n.fromStringCache.size>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}else if(E===1){let _=parseFloat(t);if(isFinite(_)&&_!==0)return this.fromNumber(_),n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}let V=t.split("e^");if(V.length===2){this.sign=1,V[0].startsWith("-")&&(this.sign=-1);let _="";for(let k=0;k=43&&x<=57||x===101)_+=V[1].charAt(k);else{if(this.layer=parseFloat(_),this.mag=parseFloat(V[1].substr(k+1)),this.layer<0||this.layer%1!=0){let Z=n.tetrate(10,this.layer,this.mag,e);this.sign=Z.sign,this.layer=Z.layer,this.mag=Z.mag}return this.normalize(),n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}}}if(E<1)return this.sign=0,this.layer=0,this.mag=0,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this;let q=parseFloat(S[0]);if(q===0)return this.sign=0,this.layer=0,this.mag=0,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this;let U=parseFloat(S[S.length-1]);if(E>=2){let _=parseFloat(S[S.length-2]);isFinite(_)&&(U*=Math.sign(_),U+=Ut(_))}if(!isFinite(q))this.sign=S[0]==="-"?-1:1,this.layer=E,this.mag=U;else if(E===1)this.sign=Math.sign(q),this.layer=1,this.mag=U+Math.log10(Math.abs(q));else if(this.sign=Math.sign(q),this.layer=E,E===2){let _=n.mul(T(1,2,U),m(q));return this.sign=_.sign,this.layer=_.layer,this.mag=_.mag,n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}else this.mag=U;return this.normalize(),n.fromStringCache.maxSize>=1&&n.fromStringCache.set(r,n.fromDecimal(this)),this}fromValue(t){return t instanceof n?this.fromDecimal(t):typeof t=="number"?this.fromNumber(t):typeof t=="string"?this.fromString(t):(this.sign=0,this.layer=0,this.mag=0,this)}toNumber(){return this.mag===Number.POSITIVE_INFINITY&&this.layer===Number.POSITIVE_INFINITY&&this.sign===1?Number.POSITIVE_INFINITY:this.mag===Number.POSITIVE_INFINITY&&this.layer===Number.POSITIVE_INFINITY&&this.sign===-1?Number.NEGATIVE_INFINITY:Number.isFinite(this.layer)?this.layer===0?this.sign*this.mag:this.layer===1?this.sign*Math.pow(10,this.mag):this.mag>0?this.sign>0?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:0:Number.NaN}mantissaWithDecimalPlaces(t){return isNaN(this.m)?Number.NaN:this.m===0?0:ft(this.m,t)}magnitudeWithDecimalPlaces(t){return isNaN(this.mag)?Number.NaN:this.mag===0?0:ft(this.mag,t)}toString(){return isNaN(this.layer)||isNaN(this.sign)||isNaN(this.mag)?"NaN":this.mag===Number.POSITIVE_INFINITY||this.layer===Number.POSITIVE_INFINITY?this.sign===1?"Infinity":"-Infinity":this.layer===0?this.mag<1e21&&this.mag>1e-7||this.mag===0?(this.sign*this.mag).toString():this.m+"e"+this.e:this.layer===1?this.m+"e"+this.e:this.layer<=ie?(this.sign===-1?"-":"")+"e".repeat(this.layer)+this.mag:(this.sign===-1?"-":"")+"(e^"+this.layer+")"+this.mag}toExponential(t){return this.layer===0?(this.sign*this.mag).toExponential(t):this.toStringWithDecimalPlaces(t)}toFixed(t){return this.layer===0?(this.sign*this.mag).toFixed(t):this.toStringWithDecimalPlaces(t)}toPrecision(t){return this.e<=-7?this.toExponential(t-1):t>this.e?this.toFixed(t-this.exponent-1):this.toExponential(t-1)}valueOf(){return this.toString()}toJSON(){return this.toString()}toStringWithDecimalPlaces(t){return this.layer===0?this.mag<1e21&&this.mag>1e-7||this.mag===0?(this.sign*this.mag).toFixed(t):ft(this.m,t)+"e"+ft(this.e,t):this.layer===1?ft(this.m,t)+"e"+ft(this.e,t):this.layer<=ie?(this.sign===-1?"-":"")+"e".repeat(this.layer)+ft(this.mag,t):(this.sign===-1?"-":"")+"(e^"+this.layer+")"+ft(this.mag,t)}abs(){return p(this.sign===0?0:1,this.layer,this.mag)}neg(){return p(-this.sign,this.layer,this.mag)}negate(){return this.neg()}negated(){return this.neg()}sgn(){return this.sign}round(){return this.mag<0?p(0,0,0):this.layer===0?T(this.sign,0,Math.round(this.mag)):new n(this)}floor(){return this.mag<0?this.sign===-1?p(-1,0,1):p(0,0,0):this.sign===-1?this.neg().ceil().neg():this.layer===0?T(this.sign,0,Math.floor(this.mag)):new n(this)}ceil(){return this.mag<0?this.sign===1?p(1,0,1):p(0,0,0):this.sign===-1?this.neg().floor().neg():this.layer===0?T(this.sign,0,Math.ceil(this.mag)):new n(this)}trunc(){return this.mag<0?p(0,0,0):this.layer===0?T(this.sign,0,Math.trunc(this.mag)):new n(this)}add(t){let e=m(t);if(this.eq(n.dInf)&&e.eq(n.dNegInf)||this.eq(n.dNegInf)&&e.eq(n.dInf))return p(Number.NaN,Number.NaN,Number.NaN);if(!Number.isFinite(this.layer))return new n(this);if(!Number.isFinite(e.layer))return new n(e);if(this.sign===0)return new n(e);if(e.sign===0)return new n(this);if(this.sign===-e.sign&&this.layer===e.layer&&this.mag===e.mag)return p(0,0,0);let r,i;if(this.layer>=2||e.layer>=2)return this.maxabs(e);if(n.cmpabs(this,e)>0?(r=new n(this),i=new n(e)):(r=new n(e),i=new n(this)),r.layer===0&&i.layer===0)return n.fromNumber(r.sign*r.mag+i.sign*i.mag);let s=r.layer*Math.sign(r.mag),a=i.layer*Math.sign(i.mag);if(s-a>=2)return r;if(s===0&&a===-1){if(Math.abs(i.mag-Math.log10(r.mag))>xt)return r;{let u=Math.pow(10,Math.log10(r.mag)-i.mag),f=i.sign+r.sign*u;return T(Math.sign(f),1,i.mag+Math.log10(Math.abs(f)))}}if(s===1&&a===0){if(Math.abs(r.mag-Math.log10(i.mag))>xt)return r;{let u=Math.pow(10,r.mag-Math.log10(i.mag)),f=i.sign+r.sign*u;return T(Math.sign(f),1,Math.log10(i.mag)+Math.log10(Math.abs(f)))}}if(Math.abs(r.mag-i.mag)>xt)return r;{let u=Math.pow(10,r.mag-i.mag),f=i.sign+r.sign*u;return T(Math.sign(f),1,i.mag+Math.log10(Math.abs(f)))}throw Error("Bad arguments to add: "+this+", "+t)}plus(t){return this.add(t)}sub(t){return this.add(m(t).neg())}subtract(t){return this.sub(t)}minus(t){return this.sub(t)}mul(t){let e=m(t);if(this.eq(n.dInf)&&e.eq(n.dNegInf)||this.eq(n.dNegInf)&&e.eq(n.dInf))return p(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.mag==Number.POSITIVE_INFINITY&&e.eq(n.dZero)||this.eq(n.dZero)&&this.mag==Number.POSITIVE_INFINITY)return p(Number.NaN,Number.NaN,Number.NaN);if(!Number.isFinite(this.layer))return new n(this);if(!Number.isFinite(e.layer))return new n(e);if(this.sign===0||e.sign===0)return p(0,0,0);if(this.layer===e.layer&&this.mag===-e.mag)return p(this.sign*e.sign,0,1);let r,i;if(this.layer>e.layer||this.layer==e.layer&&Math.abs(this.mag)>Math.abs(e.mag)?(r=new n(this),i=new n(e)):(r=new n(e),i=new n(this)),r.layer===0&&i.layer===0)return n.fromNumber(r.sign*i.sign*r.mag*i.mag);if(r.layer>=3||r.layer-i.layer>=2)return T(r.sign*i.sign,r.layer,r.mag);if(r.layer===1&&i.layer===0)return T(r.sign*i.sign,1,r.mag+Math.log10(i.mag));if(r.layer===1&&i.layer===1)return T(r.sign*i.sign,1,r.mag+i.mag);if(r.layer===2&&i.layer===1){let s=T(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(T(Math.sign(i.mag),i.layer-1,Math.abs(i.mag)));return T(r.sign*i.sign,s.layer+1,s.sign*s.mag)}if(r.layer===2&&i.layer===2){let s=T(Math.sign(r.mag),r.layer-1,Math.abs(r.mag)).add(T(Math.sign(i.mag),i.layer-1,Math.abs(i.mag)));return T(r.sign*i.sign,s.layer+1,s.sign*s.mag)}throw Error("Bad arguments to mul: "+this+", "+t)}multiply(t){return this.mul(t)}times(t){return this.mul(t)}div(t){let e=m(t);return this.mul(e.recip())}divide(t){return this.div(t)}divideBy(t){return this.div(t)}dividedBy(t){return this.div(t)}recip(){return this.mag===0?p(Number.NaN,Number.NaN,Number.NaN):this.mag===Number.POSITIVE_INFINITY?p(0,0,0):this.layer===0?T(this.sign,0,1/this.mag):T(this.sign,this.layer,-this.mag)}reciprocal(){return this.recip()}reciprocate(){return this.recip()}mod(t,e=!1){let r=m(t),i=r.abs();if(this.eq(n.dZero)||i.eq(n.dZero))return p(0,0,0);if(e){let u=this.abs().mod(i);return this.sign==-1!=(r.sign==-1)&&(u=r.abs().sub(u)),u.mul(r.sign)}let s=this.toNumber(),a=i.toNumber();return isFinite(s)&&isFinite(a)&&s!=0&&a!=0?new n(s%a):this.sub(i).eq(this)?p(0,0,0):i.sub(this).eq(i)?new n(this):this.sign==-1?this.abs().mod(i).neg():this.sub(this.div(i).floor().mul(i))}modulo(t,e=!1){return this.mod(t,e)}modular(t,e=!1){return this.mod(t,e)}cmp(t){let e=m(t);return this.sign>e.sign?1:this.sign0?this.layer:-this.layer,i=e.mag>0?e.layer:-e.layer;return r>i?1:re.mag?1:this.mag0?new n(e):new n(this)}clamp(t,e){return this.max(t).min(e)}clampMin(t){return this.max(t)}clampMax(t){return this.min(t)}cmp_tolerance(t,e){let r=m(t);return this.eq_tolerance(r,e)?0:this.cmp(r)}compare_tolerance(t,e){return this.cmp_tolerance(t,e)}eq_tolerance(t,e){let r=m(t);if(e==null&&(e=1e-7),this.sign!==r.sign||Math.abs(this.layer-r.layer)>1)return!1;let i=this.mag,s=r.mag;return this.layer>r.layer&&(s=Ut(s)),this.layer0?T(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):T(1,0,Math.log10(this.mag))}log10(){return this.sign<=0?p(Number.NaN,Number.NaN,Number.NaN):this.layer>0?T(Math.sign(this.mag),this.layer-1,Math.abs(this.mag)):T(this.sign,0,Math.log10(this.mag))}log(t){return t=m(t),this.sign<=0||t.sign<=0||t.sign===1&&t.layer===0&&t.mag===1?p(Number.NaN,Number.NaN,Number.NaN):this.layer===0&&t.layer===0?T(this.sign,0,Math.log(this.mag)/Math.log(t.mag)):n.div(this.log10(),t.log10())}log2(){return this.sign<=0?p(Number.NaN,Number.NaN,Number.NaN):this.layer===0?T(this.sign,0,Math.log2(this.mag)):this.layer===1?T(Math.sign(this.mag),0,Math.abs(this.mag)*3.321928094887362):this.layer===2?T(Math.sign(this.mag),1,Math.abs(this.mag)+.5213902276543247):T(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))}ln(){return this.sign<=0?p(Number.NaN,Number.NaN,Number.NaN):this.layer===0?T(this.sign,0,Math.log(this.mag)):this.layer===1?T(Math.sign(this.mag),0,Math.abs(this.mag)*2.302585092994046):this.layer===2?T(Math.sign(this.mag),1,Math.abs(this.mag)+.36221568869946325):T(Math.sign(this.mag),this.layer-1,Math.abs(this.mag))}logarithm(t){return this.log(t)}pow(t){let e=m(t),r=new n(this),i=new n(e);if(r.sign===0)return i.eq(0)?p(1,0,1):r;if(r.sign===1&&r.layer===0&&r.mag===1)return r;if(i.sign===0)return p(1,0,1);if(i.sign===1&&i.layer===0&&i.mag===1)return r;let s=r.absLog10().mul(i).pow10();return this.sign===-1?Math.abs(i.toNumber()%2)%2===1?s.neg():Math.abs(i.toNumber()%2)%2===0?s:p(Number.NaN,Number.NaN,Number.NaN):s}pow10(){if(this.eq(n.dInf))return p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.eq(n.dNegInf))return p(0,0,0);if(!Number.isFinite(this.layer)||!Number.isFinite(this.mag))return p(Number.NaN,Number.NaN,Number.NaN);let t=new n(this);if(t.layer===0){let e=Math.pow(10,t.sign*t.mag);if(Number.isFinite(e)&&Math.abs(e)>=.1)return T(1,0,e);if(t.sign===0)return p(1,0,1);t=p(t.sign,t.layer+1,Math.log10(t.mag))}return t.sign>0&&t.mag>=0?T(t.sign,t.layer+1,t.mag):t.sign<0&&t.mag>=0?T(-t.sign,t.layer+1,-t.mag):p(1,0,1)}pow_base(t){return m(t).pow(this)}root(t){let e=m(t);return this.pow(e.recip())}factorial(){return this.mag<0?this.add(1).gamma():this.layer===0?this.add(1).gamma():this.layer===1?n.exp(n.mul(this,n.ln(this).sub(1))):n.exp(this)}gamma(){if(this.mag<0)return this.recip();if(this.layer===0){if(this.lt(p(1,0,24)))return n.fromNumber(Ze(this.sign*this.mag));let t=this.mag-1,e=.9189385332046727;e=e+(t+.5)*Math.log(t),e=e-t;let r=t*t,i=t,s=12*i,a=1/s,u=e+a;if(u===e||(e=u,i=i*r,s=360*i,a=1/s,u=e-a,u===e))return n.exp(e);e=u,i=i*r,s=1260*i;let f=1/s;return e=e+f,i=i*r,s=1680*i,f=1/s,e=e-f,n.exp(e)}else return this.layer===1?n.exp(n.mul(this,n.ln(this).sub(1))):n.exp(this)}lngamma(){return this.gamma().ln()}exp(){return this.mag<0?p(1,0,1):this.layer===0&&this.mag<=709.7?n.fromNumber(Math.exp(this.sign*this.mag)):this.layer===0?T(1,1,this.sign*Math.log10(Math.E)*this.mag):this.layer===1?T(1,2,this.sign*(Math.log10(.4342944819032518)+this.mag)):T(1,this.layer+1,this.sign*this.mag)}sqr(){return this.pow(2)}sqrt(){if(this.layer===0)return n.fromNumber(Math.sqrt(this.sign*this.mag));if(this.layer===1)return T(1,2,Math.log10(this.mag)-.3010299956639812);{let t=n.div(p(this.sign,this.layer-1,this.mag),p(1,0,2));return t.layer+=1,t.normalize(),t}}cube(){return this.pow(3)}cbrt(){return this.pow(1/3)}tetrate(t=2,e=p(1,0,1),r=!1){if(t===1)return n.pow(this,e);if(t===0)return new n(e);if(this.eq(n.dOne))return p(1,0,1);if(this.eq(-1))return n.pow(this,e);if(t===Number.POSITIVE_INFINITY){let a=this.toNumber();if(a<=1.444667861009766&&a>=.06598803584531254){let u=n.ln(this).neg(),f=u.lambertw().div(u);if(a<1)return f;let g=u.lambertw(!1).div(u);return a>1.444667861009099&&(f=g=n.fromNumber(Math.E)),e=m(e),e.eq(g)?g:e.lt(g)?f:p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}else return a>1.444667861009766?p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY):p(Number.NaN,Number.NaN,Number.NaN)}if(this.eq(n.dZero)){let a=Math.abs((t+1)%2);return a>1&&(a=2-a),n.fromNumber(a)}if(t<0)return n.iteratedlog(e,this,-t,r);e=new n(e);let i=t;t=Math.trunc(t);let s=i-t;if(this.gt(n.dZero)&&(this.lt(1)||this.lte(1.444667861009766)&&e.lte(n.ln(this).neg().lambertw(!1).div(n.ln(this).neg())))&&(i>1e4||!r)){let a=Math.min(1e4,t);e.eq(n.dOne)?e=this.pow(s):this.lt(1)?e=e.pow(1-s).mul(this.pow(e).pow(s)):e=e.layeradd(s,this);for(let u=0;u1e4&&Math.ceil(i)%2==1?this.pow(e):e}s!==0&&(e.eq(n.dOne)?this.gt(10)||r?e=this.pow(s):(e=n.fromNumber(n.tetrate_critical(this.toNumber(),s)),this.lt(2)&&(e=e.sub(1).mul(this.minus(1)).plus(1))):this.eq(10)?e=e.layeradd10(s,r):this.lt(1)?e=e.pow(1-s).mul(this.pow(e).pow(s)):e=e.layeradd(s,this,r));for(let a=0;a3)return p(e.sign,e.layer+(t-a-1),e.mag);if(a>1e4)return e}return e}iteratedexp(t=2,e=p(1,0,1),r=!1){return this.tetrate(t,e,r)}iteratedlog(t=10,e=1,r=!1){if(e<0)return n.tetrate(t,-e,this,r);t=m(t);let i=n.fromDecimal(this),s=e;e=Math.trunc(e);let a=s-e;if(i.layer-t.layer>3){let u=Math.min(e,i.layer-t.layer-3);e-=u,i.layer-=u}for(let u=0;u1e4)return i}return a>0&&a<1&&(t.eq(10)?i=i.layeradd10(-a,r):i=i.layeradd(-a,t,r)),i}slog(t=10,e=100,r=!1){let i=.001,s=!1,a=!1,u=this.slog_internal(t,r).toNumber();for(let f=1;f1&&a!=l&&(s=!0),a=l,s?i/=2:i*=2,i=Math.abs(i)*(l?-1:1),u+=i,i===0)break}return n.fromNumber(u)}slog_internal(t=10,e=!1){if(t=m(t),t.lte(n.dZero)||t.eq(n.dOne))return p(Number.NaN,Number.NaN,Number.NaN);if(t.lt(n.dOne))return this.eq(n.dOne)?p(0,0,0):this.eq(n.dZero)?p(-1,0,1):p(Number.NaN,Number.NaN,Number.NaN);if(this.mag<0||this.eq(n.dZero))return p(-1,0,1);if(t.lt(1.444667861009766)){let s=n.ln(t).neg(),a=s.lambertw().div(s);if(this.eq(a))return p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.gt(a))return p(Number.NaN,Number.NaN,Number.NaN)}let r=0,i=n.fromDecimal(this);if(i.layer-t.layer>3){let s=i.layer-t.layer-3;r+=s,i.layer-=s}for(let s=0;s<100;++s)if(i.lt(n.dZero))i=n.pow(t,i),r-=1;else{if(i.lte(n.dOne))return e?n.fromNumber(r+i.toNumber()-1):n.fromNumber(r+n.slog_critical(t.toNumber(),i.toNumber()));r+=1,i=n.log(i,t)}return n.fromNumber(r)}static slog_critical(t,e){return t>10?e-1:n.critical_section(t,e,$e)}static tetrate_critical(t,e){return n.critical_section(t,e,Re)}static critical_section(t,e,r,i=!1){e*=10,e<0&&(e=0),e>10&&(e=10),t<2&&(t=2),t>10&&(t=10);let s=0,a=0;for(let f=0;ft){let g=(t-gt[f])/(gt[f+1]-gt[f]);s=r[f][Math.floor(e)]*(1-g)+r[f+1][Math.floor(e)]*g,a=r[f][Math.ceil(e)]*(1-g)+r[f+1][Math.ceil(e)]*g;break}let u=e-Math.floor(e);return s<=0||a<=0?s*(1-u)+a*u:Math.pow(t,Math.log(s)/Math.log(t)*(1-u)+Math.log(a)/Math.log(t)*u)}layeradd10(t,e=!1){t=n.fromValue_noAlloc(t).toNumber();let r=n.fromDecimal(this);if(t>=1){r.mag<0&&r.layer>0?(r.sign=0,r.mag=0,r.layer=0):r.sign===-1&&r.layer==0&&(r.sign=1,r.mag=-r.mag);let i=Math.trunc(t);t-=i,r.layer+=i}if(t<=-1){let i=Math.trunc(t);if(t-=i,r.layer+=i,r.layer<0)for(let s=0;s<100;++s){if(r.layer++,r.mag=Math.log10(r.mag),!isFinite(r.mag))return r.sign===0&&(r.sign=1),r.layer<0&&(r.layer=0),r.normalize();if(r.layer>=0)break}}for(;r.layer<0;)r.layer++,r.mag=Math.log10(r.mag);return r.sign===0&&(r.sign=1,r.mag===0&&r.layer>=1&&(r.layer-=1,r.mag=1)),r.normalize(),t!==0?r.layeradd(t,10,e):r}layeradd(t,e,r=!1){let i=m(e);if(i.gt(1)&&i.lte(1.444667861009766)){let u=n.excess_slog(this,e,r),f=u[0].toNumber(),g=u[1],l=f+t,S=n.ln(e).neg(),E=S.lambertw().div(S),V=S.lambertw(!1).div(S),q=n.dOne;g==1?q=E.mul(V).sqrt():g==2&&(q=V.mul(2));let U=i.pow(q),_=Math.floor(l),k=l-_,x=q.pow(1-k).mul(U.pow(k));return n.tetrate(i,_,x,r)}let a=this.slog(e,100,r).toNumber()+t;return a>=0?n.tetrate(e,a,n.dOne,r):Number.isFinite(a)?a>=-1?n.log(n.tetrate(e,a+1,n.dOne,r),e):n.log(n.log(n.tetrate(e,a+2,n.dOne,r),e),e):p(Number.NaN,Number.NaN,Number.NaN)}static excess_slog(t,e,r=!1){t=m(t),e=m(e);let i=e;if(e=e.toNumber(),e==1||e<=0)return[p(Number.NaN,Number.NaN,Number.NaN),0];if(e>1.444667861009766)return[t.slog(e,100,r),0];let s=n.ln(e).neg(),a=s.lambertw().div(s),u=n.dInf;if(e>1&&(u=s.lambertw(!1).div(s)),e>1.444667861009099&&(a=u=n.fromNumber(Math.E)),t.lt(a))return[t.slog(e,100,r),0];if(t.eq(a))return[p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),0];if(t.eq(u))return[p(1,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),2];if(t.gt(u)){let f=u.mul(2),g=i.pow(f),l=0;if(t.gte(f)&&t.lt(g))l=0;else if(t.gte(g)){let _=g;for(l=1;_.lt(t);)if(_=i.pow(_),l=l+1,_.layer>3){let k=Math.floor(t.layer-_.layer+1);_=i.iteratedexp(k,_,r),l=l+k}_.gt(t)&&(_=_.log(e),l=l-1)}else if(t.lt(f)){let _=f;for(l=0;_.gt(t);)_=_.log(e),l=l-1}let S=0,E=0,V=.5,q=f,U=n.dZero;for(;V>1e-16;){if(E=S+V,q=f.pow(1-E).mul(g.pow(E)),U=n.iteratedexp(e,l,q),U.eq(t))return[new n(l+E),2];U.lt(t)&&(S+=V),V/=2}return U.neq_tolerance(t,1e-7)?[p(Number.NaN,Number.NaN,Number.NaN),0]:[new n(l+S),2]}if(t.lt(u)&&t.gt(a)){let f=a.mul(u).sqrt(),g=i.pow(f),l=0;if(t.lte(f)&&t.gt(g))l=0;else if(t.lte(g)){let _=g;for(l=1;_.gt(t);)_=i.pow(_),l=l+1;_.lt(t)&&(_=_.log(e),l=l-1)}else if(t.gt(f)){let _=f;for(l=0;_.lt(t);)_=_.log(e),l=l-1}let S=0,E=0,V=.5,q=f,U=n.dZero;for(;V>1e-16;){if(E=S+V,q=f.pow(1-E).mul(g.pow(E)),U=n.iteratedexp(e,l,q),U.eq(t))return[new n(l+E),1];U.gt(t)&&(S+=V),V/=2}return U.neq_tolerance(t,1e-7)?[p(Number.NaN,Number.NaN,Number.NaN),0]:[new n(l+S),1]}throw new Error("Unhandled behavior in excess_slog")}lambertw(t=!0){return this.lt(-.3678794411710499)?p(Number.NaN,Number.NaN,Number.NaN):t?this.abs().lt("1e-300")?new n(this):this.mag<0?n.fromNumber(jt(this.toNumber())):this.layer===0?n.fromNumber(jt(this.sign*this.mag)):this.lt("eee15")?se(this):this.ln():this.sign===1?p(Number.NaN,Number.NaN,Number.NaN):this.layer===0?n.fromNumber(jt(this.sign*this.mag,1e-10,!1)):this.layer==1?se(this,1e-10,!1):this.neg().recip().lambertw().neg()}ssqrt(){return this.linear_sroot(2)}linear_sroot(t){if(t==1)return this;if(this.eq(n.dInf))return p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(!this.isFinite())return p(Number.NaN,Number.NaN,Number.NaN);if(t>0&&t<1)return this.root(t);if(t>-2&&t<-1)return n.fromNumber(t).add(2).pow(this.recip());if(t<=0)return p(Number.NaN,Number.NaN,Number.NaN);if(t==Number.POSITIVE_INFINITY){let e=this.toNumber();return eze?this.pow(this.recip()):p(Number.NaN,Number.NaN,Number.NaN)}if(this.eq(1))return p(1,0,1);if(this.lt(0))return p(Number.NaN,Number.NaN,Number.NaN);if(this.lte("1ee-16"))return t%2==1?new n(this):p(Number.NaN,Number.NaN,Number.NaN);if(this.gt(1)){let e=n.dTen;this.gte(n.tetrate(10,t,1,!0))&&(e=this.iteratedlog(10,t-1,!0)),t<=1&&(e=this.root(t));let r=n.dZero,i=e.layer,s=e.iteratedlog(10,i,!0),a=s,u=s.div(2),f=!0;for(;f;)u=r.add(s).div(2),n.iteratedexp(10,i,u,!0).tetrate(t,1,!0).gt(this)?s=u:r=u,u.eq(a)?f=!1:a=u;return n.iteratedexp(10,i,u,!0)}else{let e=1,r=T(1,10,1),i=T(1,10,1),s=T(1,10,1),a=T(1,1,-16),u=n.dZero,f=T(1,10,1),g=a.pow10().recip(),l=n.dZero,S=g,E=g,V=Math.ceil(t)%2==0,q=0,U=T(1,10,1),_=!1,k=n.dZero,x=!1;for(;e<4;){if(e==2){if(V)break;s=T(1,10,1),a=r,e=3,f=T(1,10,1),U=T(1,10,1)}for(_=!1;a.neq(s);){if(k=a,a.pow10().recip().tetrate(t,1,!0).eq(1)&&a.pow10().recip().lt(.4))g=a.pow10().recip(),S=a.pow10().recip(),E=a.pow10().recip(),l=n.dZero,q=-1,e==3&&(U=a);else if(a.pow10().recip().tetrate(t,1,!0).eq(a.pow10().recip())&&!V&&a.pow10().recip().lt(.4))g=a.pow10().recip(),S=a.pow10().recip(),E=a.pow10().recip(),l=n.dZero,q=0;else if(a.pow10().recip().tetrate(t,1,!0).eq(a.pow10().recip().mul(2).tetrate(t,1,!0)))g=a.pow10().recip(),S=n.dZero,E=g.mul(2),l=g,V?q=-1:q=0;else{for(u=a.mul(12e-17),g=a.pow10().recip(),S=a.add(u).pow10().recip(),l=g.sub(S),E=g.add(l);S.tetrate(t,1,!0).eq(g.tetrate(t,1,!0))||E.tetrate(t,1,!0).eq(g.tetrate(t,1,!0))||S.gte(g)||E.lte(g);)u=u.mul(2),S=a.add(u).pow10().recip(),l=g.sub(S),E=g.add(l);if((e==1&&E.tetrate(t,1,!0).gt(g.tetrate(t,1,!0))&&S.tetrate(t,1,!0).gt(g.tetrate(t,1,!0))||e==3&&E.tetrate(t,1,!0).lt(g.tetrate(t,1,!0))&&S.tetrate(t,1,!0).lt(g.tetrate(t,1,!0)))&&(U=a),E.tetrate(t,1,!0).lt(g.tetrate(t,1,!0)))q=-1;else if(V)q=1;else if(e==3&&a.gt_tolerance(r,1e-8))q=0;else{for(;S.tetrate(t,1,!0).eq_tolerance(g.tetrate(t,1,!0),1e-8)||E.tetrate(t,1,!0).eq_tolerance(g.tetrate(t,1,!0),1e-8)||S.gte(g)||E.lte(g);)u=u.mul(2),S=a.add(u).pow10().recip(),l=g.sub(S),E=g.add(l);E.tetrate(t,1,!0).sub(g.tetrate(t,1,!0)).lt(g.tetrate(t,1,!0).sub(S.tetrate(t,1,!0)))?q=0:q=1}}if(q==-1&&(x=!0),e==1&&q==1||e==3&&q!=0)if(s.eq(T(1,10,1)))a=a.mul(2);else{let w=!1;if(_&&(q==1&&e==1||q==-1&&e==3)&&(w=!0),a=a.add(s).div(2),w)break}else if(s.eq(T(1,10,1)))s=a,a=a.div(2);else{let w=!1;if(_&&(q==1&&e==1||q==-1&&e==3)&&(w=!0),s=s.sub(f),a=a.sub(f),w)break}if(s.sub(a).div(2).abs().gt(f.mul(1.5))&&(_=!0),f=s.sub(a).div(2).abs(),a.gt("1e18")||a.eq(k))break}if(a.gt("1e18")||!x||U==T(1,10,1))break;e==1?r=U:e==3&&(i=U),e++}s=r,a=T(1,1,-18);let Z=a,o=n.dZero,b=!0;for(;b;)if(s.eq(T(1,10,1))?o=a.mul(2):o=s.add(a).div(2),n.pow(10,o).recip().tetrate(t,1,!0).gt(this)?a=o:s=o,o.eq(Z)?b=!1:Z=o,a.gt("1e18"))return p(Number.NaN,Number.NaN,Number.NaN);if(o.eq_tolerance(r,1e-15)){if(i.eq(T(1,10,1)))return p(Number.NaN,Number.NaN,Number.NaN);for(s=T(1,10,1),a=i,Z=a,o=n.dZero,b=!0;b;)if(s.eq(T(1,10,1))?o=a.mul(2):o=s.add(a).div(2),n.pow(10,o).recip().tetrate(t,1,!0).gt(this)?a=o:s=o,o.eq(Z)?b=!1:Z=o,a.gt("1e18"))return p(Number.NaN,Number.NaN,Number.NaN);return o.pow10().recip()}else return o.pow10().recip()}}static increasingInverse(t,e=!1,r=120,i=n.dLayerMax.neg(),s=n.dLayerMax,a=n.dLayerMax.neg(),u=n.dLayerMax){return function(f){if(f=new n(f),i=new n(i),s=new n(s),a=new n(a),u=new n(u),f.isNan()||s.lt(i)||f.lt(a)||f.gt(u))return p(Number.NaN,Number.NaN,Number.NaN);let g=function(N){return new n(N)},l=!0;if(s.lt(0))l=!1;else if(i.gt(0))l=!0;else{let N=t(n.dZero);if(N.eq(f))return p(0,0,0);l=f.gt(N),e&&(l=!l)}let S=l,E;if(l){if(s.lt(mt))l=!0;else if(i.gt(mt))l=!1;else{let N=t(new n(mt));l=f.lt(N),e&&(l=!l)}if(l){E=!0;let N=n.pow(10,W).recip();if(s.lt(N))l=!1;else if(i.gt(N))l=!0;else{let y=t(new n(N));l=f.gt(y),e&&(l=!l)}if(l)g=function(y){return n.pow(10,y).recip()};else{let y=n.tetrate(10,W);if(s.lt(y))l=!1;else if(i.gt(y))l=!0;else{let M=t(new n(y));l=f.gt(M),e&&(l=!l)}l?g=function(M){return n.tetrate(10,new n(M).toNumber()).recip()}:g=function(M){return new n(M).gt(Math.log10(Number.MAX_VALUE))?n.dZero:n.tetrate(10,n.pow(10,M).toNumber()).recip()}}}else{if(E=!1,s.lt(W))l=!0;else if(i.gt(W))l=!1;else{let N=t(new n(W));l=f.lt(N),e&&(l=!l)}if(l)g=function(N){return new n(N)};else{let N=n.pow(10,W);if(s.lt(N))l=!0;else if(i.gt(N))l=!1;else{let y=t(new n(N));l=f.lt(y),e&&(l=!l)}if(l)g=function(y){return n.pow(10,y)};else{let y=n.tetrate(10,W);if(s.lt(y))l=!0;else if(i.gt(y))l=!1;else{let M=t(new n(y));l=f.lt(M),e&&(l=!l)}l?g=function(M){return n.tetrate(10,new n(M).toNumber())}:g=function(M){return new n(M).gt(Math.log10(Number.MAX_VALUE))?n.dInf:n.tetrate(10,n.pow(10,M).toNumber())}}}}}else{if(E=!0,s.lt(-mt))l=!1;else if(i.gt(-mt))l=!0;else{let N=t(new n(-mt));l=f.gt(N),e&&(l=!l)}if(l){let N=n.pow(10,W).recip().neg();if(s.lt(N))l=!0;else if(i.gt(N))l=!1;else{let y=t(new n(N));l=f.lt(y),e&&(l=!l)}if(l)g=function(y){return n.pow(10,y).recip().neg()};else{let y=n.tetrate(10,W).neg();if(s.lt(y))l=!0;else if(i.gt(y))l=!1;else{let M=t(new n(y));l=f.lt(M),e&&(l=!l)}l?g=function(M){return n.tetrate(10,new n(M).toNumber()).recip().neg()}:g=function(M){return new n(M).gt(Math.log10(Number.MAX_VALUE))?n.dZero:n.tetrate(10,n.pow(10,M).toNumber()).recip().neg()}}}else{if(E=!1,s.lt(-W))l=!1;else if(i.gt(-W))l=!0;else{let N=t(new n(-W));l=f.gt(N),e&&(l=!l)}if(l)g=function(N){return n.neg(N)};else{let N=n.pow(10,W).neg();if(s.lt(N))l=!1;else if(i.gt(N))l=!0;else{let y=t(new n(N));l=f.gt(y),e&&(l=!l)}if(l)g=function(y){return n.pow(10,y).neg()};else{let y=n.tetrate(10,W).neg();if(s.lt(y))l=!1;else if(i.gt(y))l=!0;else{let M=t(new n(y));l=f.gt(M),e&&(l=!l)}l?g=function(M){return n.tetrate(10,new n(M).toNumber()).neg()}:g=function(M){return new n(M).gt(Math.log10(Number.MAX_VALUE))?n.dNegInf:n.tetrate(10,n.pow(10,M).toNumber()).neg()}}}}}let V=S!=E!=e,q=V?function(N,y){return n.gt(N,y)}:function(N,y){return n.lt(N,y)},U=.001,_=!1,k=!1,x=1,Z=n.dOne,o=0,b=!1;for(var w=1;w1&&k!=y&&(_=!0),k=y,_?U/=2:U*=2,y!=V&&Z.eq(s)||y==V&&Z.eq(i))return p(Number.NaN,Number.NaN,Number.NaN);if(U=Math.abs(U)*(y?-1:1),x+=U,U===0||o==x)break}return g(x)}}pentate(t=2,e=p(1,0,1),r=!1){e=new n(e);let i=t;t=Math.floor(t);let s=i-t,a=n.dZero,u=n.dZero;if(s!==0)if(e.eq(n.dOne))++t,e=n.fromNumber(s);else return this.pentate(e.penta_log(this,void 0,r).plus(i).toNumber(),1,r);if(t>0)for(let f=0;f1e4)return e}else for(let f=0;f<-t;++f){if(a=e,e=e.slog(this,void 0,r),e.eq(a)||!isFinite(e.layer)||!isFinite(e.mag))return e.normalize();if(f>100)return e}return e}penta_log(t=10,e=100,r=!1){if(t=new n(t),t.lte(1))return p(Number.NaN,Number.NaN,Number.NaN);if(this.eq(1))return p(0,0,0);if(this.eq(n.dInf))return p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);let i=new n(1),s=0,a=1;if(this.lt(-1)){if(this.lte(-2))return p(Number.NaN,Number.NaN,Number.NaN);let f=t.tetrate(this.toNumber(),1,r);if(this.eq(f))return p(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY);if(this.gt(f))return p(Number.NaN,Number.NaN,Number.NaN)}if(this.gt(1)){for(;i.lt(this);)if(s++,i=n.tetrate(t,i.toNumber(),1,r),s>1e3)return p(Number.NaN,Number.NaN,Number.NaN)}else for(;i.gt(this);)if(s--,i=n.slog(i,t,r),s>100)return p(Number.NaN,Number.NaN,Number.NaN);for(var u=1;u0&&t<1?this.root(t):this.eq(1)?p(1,0,1):this.lt(0)?p(Number.NaN,Number.NaN,Number.NaN):this.lt(1)?this.linear_sroot(t):n.increasingInverse(function(e){return n.pentate(e,t,1,!0)})(this):p(Number.NaN,Number.NaN,Number.NaN)}sin(){return this.mag<0?new n(this):this.layer===0?n.fromNumber(Math.sin(this.sign*this.mag)):p(0,0,0)}cos(){return this.mag<0?p(1,0,1):this.layer===0?n.fromNumber(Math.cos(this.sign*this.mag)):p(0,0,0)}tan(){return this.mag<0?new n(this):this.layer===0?n.fromNumber(Math.tan(this.sign*this.mag)):p(0,0,0)}asin(){return this.mag<0?new n(this):this.layer===0?n.fromNumber(Math.asin(this.sign*this.mag)):p(Number.NaN,Number.NaN,Number.NaN)}acos(){return this.mag<0?n.fromNumber(Math.acos(this.toNumber())):this.layer===0?n.fromNumber(Math.acos(this.sign*this.mag)):p(Number.NaN,Number.NaN,Number.NaN)}atan(){return this.mag<0?new n(this):this.layer===0?n.fromNumber(Math.atan(this.sign*this.mag)):n.fromNumber(Math.atan(this.sign*(1/0)))}sinh(){return this.exp().sub(this.negate().exp()).div(2)}cosh(){return this.exp().add(this.negate().exp()).div(2)}tanh(){return this.sinh().div(this.cosh())}asinh(){return n.ln(this.add(this.sqr().add(1).sqrt()))}acosh(){return n.ln(this.add(this.sqr().sub(1).sqrt()))}atanh(){return this.abs().gte(1)?p(Number.NaN,Number.NaN,Number.NaN):n.ln(this.add(1).div(n.fromNumber(1).sub(this))).div(2)}ascensionPenalty(t){return t===0?new n(this):this.root(n.pow(10,t))}egg(){return this.add(9)}lessThanOrEqualTo(t){return this.cmp(t)<1}lessThan(t){return this.cmp(t)<0}greaterThanOrEqualTo(t){return this.cmp(t)>-1}greaterThan(t){return this.cmp(t)>0}static smoothDamp(t,e,r,i){return new n(t).add(new n(e).minus(new n(t)).times(new n(r)).times(new n(i)))}clone(){return this}static clone(t){return n.fromComponents(t.sign,t.layer,t.mag)}softcap(t,e,r){let i=this.clone();return i.gte(t)&&([0,"pow"].includes(r)&&(i=i.div(t).pow(e).mul(t)),[1,"mul"].includes(r)&&(i=i.sub(t).div(e).add(t))),i}static softcap(t,e,r,i){return new n(t).softcap(e,r,i)}scale(t,e,r,i=!1){t=new n(t),e=new n(e);let s=this.clone();return s.gte(t)&&([0,"pow"].includes(r)&&(s=i?s.mul(t.pow(e.sub(1))).root(e):s.pow(e).div(t.pow(e.sub(1)))),[1,"exp"].includes(r)&&(s=i?s.div(t).max(1).log(e).add(t):n.pow(e,s.sub(t)).mul(t))),s}static scale(t,e,r,i,s=!1){return new n(t).scale(e,r,i,s)}format(t=2,e=9,r="mixed_sc"){return ht.format(this.clone(),t,e,r)}static format(t,e=2,r=9,i="mixed_sc"){return ht.format(new n(t),e,r,i)}formatST(t=2,e=9,r="st"){return ht.format(this.clone(),t,e,r)}static formatST(t,e=2,r=9,i="st"){return ht.format(new n(t),e,r,i)}formatGain(t,e="mixed_sc",r,i){return ht.formatGain(this.clone(),t,e,r,i)}static formatGain(t,e,r="mixed_sc",i,s){return ht.formatGain(new n(t),e,r,i,s)}toRoman(t=5e3){t=new n(t);let e=this.clone();if(e.gte(t)||e.lt(1))return e;let r=e.toNumber(),i={M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1},s="";for(let a of Object.keys(i)){let u=Math.floor(r/i[a]);r-=u*i[a],s+=a.repeat(u)}return s}static toRoman(t,e){return new n(t).toRoman(e)}static random(t=0,e=1){return t=new n(t),e=new n(e),t=t.lt(e)?t:e,e=e.gt(t)?e:t,new n(Math.random()).mul(e.sub(t)).add(t)}static randomProb(t){return new n(Math.random()).lt(t)}};n.dZero=p(0,0,0),n.dOne=p(1,0,1),n.dNegOne=p(-1,0,1),n.dTwo=p(1,0,2),n.dTen=p(1,0,10),n.dNaN=p(Number.NaN,Number.NaN,Number.NaN),n.dInf=p(1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),n.dNegInf=p(-1,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),n.dNumberMax=T(1,0,Number.MAX_VALUE),n.dNumberMin=T(1,0,Number.MIN_VALUE),n.dLayerSafeMax=T(1,Number.MAX_SAFE_INTEGER,W-1),n.dLayerSafeMin=T(1,Number.MAX_SAFE_INTEGER,-(W-1)),n.dLayerMax=T(1,Number.MAX_VALUE,W-1),n.dLayerMin=T(1,Number.MAX_VALUE,-(W-1)),n.fromStringCache=new Lt(xe),tt([_t()],n.prototype,"sign",2),tt([_t()],n.prototype,"mag",2),tt([_t()],n.prototype,"layer",2),n=tt([Ce()],n);var{formats:ht,FORMATS:Ye}=Pe(n);n.formats=ht;var bt=class{get desc(){return this.description}get description(){return this.descriptionFn()}constructor(t){this.id=t.id,this.name=t.name??"",this.value=t.value,this.order=t.order??99,this.descriptionFn=t.description?typeof t.description=="function"?t.description:()=>t.description:()=>""}},Gt=class{constructor(t=1,e){this.addBoost=this.setBoost.bind(this),e=e?Array.isArray(e)?e:[e]:void 0,this.baseEffect=new n(t),this.boostArray=[],e&&e.forEach(r=>{this.boostArray.push(new bt(r))})}getBoosts(t,e){let r=[],i=[];for(let s=0;sE),l=s,S=this.getBoosts(a,!0);S[0][0]?this.boostArray[S[1][0]]=new bt({id:a,name:u,description:f,value:g,order:l}):this.boostArray.push(new bt({id:a,name:u,description:f,value:g,order:l}))}else{t=Array.isArray(t)?t:[t];for(let a of t){let u=this.getBoosts(a.id,!0);u[0][0]?this.boostArray[u[1][0]]=new bt(a):this.boostArray.push(new bt(a))}}}clearBoosts(){this.boostArray.length=0}calculate(t=this.baseEffect){let e=new n(t),r=this.boostArray;r=r.sort((i,s)=>i.order-s.order);for(let i of r)e=i.value(e);return e}},Nr=dt(Nt()),At=30,Rt=.001;function Be(t,e,r="geometric"){switch(t=new n(t),e=new n(e),r){case"arithmetic":case 1:return t.add(e).div(2);case"geometric":case 2:default:return t.mul(e).sqrt();case"harmonic":case 3:return n.dTwo.div(t.reciprocal().add(e.reciprocal()))}}function $t(t,e,r,i){i=Object.assign({},{verbose:!1,mode:"geometric"},i),t=new n(t),e=new n(e),r=new n(r);let s,a;return i.mode==="geometric"?(s=t.sub(e).abs().div(t.abs().add(e.abs()).div(2)),a=s.lte(r)):(s=t.sub(e).abs(),a=s.lte(r)),(i.verbose===!0||i.verbose==="onlyOnFail"&&!a)&&console.log({a:t,b:e,tolerance:r,config:i,diff:s,result:a}),a}function Zt(t,e,r="geometric",i=At,s=Rt,a=1,u){if(a=new n(a),u=new n(u??e),a.gt(u)&&([a,u]=[u,a]),t(u).eq(0))return{value:n.dZero,lowerBound:n.dZero,upperBound:n.dZero};if(t(u).lt(e))return console.warn("eMath.js: The function is not monotonically increasing. (f(n) < n)"),{value:u,lowerBound:u,upperBound:u};for(let g=0;g=0;f--){let g=r.add(u.mul(f)),l=r.add(u.mul(f+1)),S=a;if(a=a.add(t(g).add(t(l)).div(2).mul(u)),$t(S,a,s,{verbose:!1,mode:"geometric"}))break}return a}function zt(t,e,r=0,i,s){return r=new n(r),e=new n(e),e.sub(r).lte(At)?ae(t,e,r,i):oe(t,e,r,s)}function De(t,e=10,r=0,i=1e3){if(t=new n(t),e=new n(e),r=new n(r),i=new n(i),e.lt(1)||r.lt(1))return n.dNaN;let s=t.sign;if(t=t.abs(),t.gte(n.pow(e,i)))return t;let a=n.floor(n.log(t,e)),u=t.div(n.pow(e,a));return u=u.mul(n.pow(e,r)).round(),u=u.div(n.pow(e,r)),u=u.mul(n.pow(e,a)).mul(s),u}function ue(t,e,r,i=n.dInf,s,a,u=!1){t=new n(t),r=new n(r??e.level),i=new n(i);let f=i.sub(r);if(f.lt(0))return console.warn("eMath.js: Invalid target for calculateItem: ",f),[n.dZero,n.dZero];if(u=(typeof e.el=="function"?e.el():e.el)??u,f.eq(1)){let E=e.cost(e.level),V=t.gte(E),q=[n.dZero,n.dZero];return u?(q[0]=V?n.dOne:n.dZero,q):(q=[V?n.dOne:n.dZero,V?E:n.dZero],q)}if(e.costBulk){let[E,V]=e.costBulk(t,e.level,f),q=t.gte(V);return[q?E:n.dZero,q&&!u?V:n.dZero]}if(u){let E=U=>e.cost(U.add(r)),V=n.min(i,Zt(E,t,s,a).value.floor()),q=n.dZero;return[V,q]}let g=Zt(E=>zt(e.cost,E,r),t,s,a).value.floor().min(r.add(f).sub(1)),l=zt(e.cost,g,r);return[g.sub(r).add(1).max(0),l]}function le(t){return t=new n(t),`${t.sign}/${t.mag}/${t.layer}`}function He(t){return`el/${le(t)}`}var It=class{constructor(t){t=t??{},this.id=t.id,this.level=t.level?new n(t.level):n.dOne}};tt([_t()],It.prototype,"id",2),tt([pt(()=>n)],It.prototype,"level",2);var fe=class Ie{static{this.cacheSize=15}get data(){return this.dataPointerFn()}get description(){return this.descriptionFn(this.level,this,this.currencyPointerFn())}set description(e){this.descriptionFn=typeof e=="function"?e:()=>e}get level(){return((this??{data:{level:n.dOne}}).data??{level:n.dOne}).level}set level(e){this.data.level=new n(e)}constructor(e,r,i,s){let a=typeof r=="function"?r():r;this.dataPointerFn=typeof r=="function"?r:()=>a,this.currencyPointerFn=typeof i=="function"?i:()=>i,this.cache=new Lt(s??Ie.cacheSize),this.id=e.id,this.name=e.name??e.id,this.descriptionFn=e.description?typeof e.description=="function"?e.description:()=>e.description:()=>"",this.cost=e.cost,this.costBulk=e.costBulk,this.maxLevel=e.maxLevel,this.effect=e.effect,this.el=e.el,this.defaultLevel=e.level??n.dOne}},pr=dt(Nt());function he(t,e,r=n.dOne,i=n.dInf){if(t=new n(t),r=new n(r),i=new n(i),i.lt(0))return console.warn("eMath.js: Invalid target for calculateItem: ",i),[n.dZero,n.dZero];if(i.eq(1)){let u=e.cost(r);return[t.gte(u)?n.dOne:n.dZero,t.gte(u)?u:n.dZero]}let s=t.div(e.cost(r)).floor().min(i),a=e.cost(r).mul(s);return[s,a]}var ce=class{constructor(t,e,r){this.defaultAmount=n.dZero;let i=typeof e=="function"?e():e;this.dataPointerFn=typeof e=="function"?e:()=>i,this.currencyPointerFn=typeof r=="function"?r:()=>r,this.id=t.id,this.name=t.name??t.id,this.cost=t.cost,this.effect=t.effect,this.descriptionFn=t.description?typeof t.description=="function"?t.description:()=>t.description:()=>"",this.defaultAmount=t.amount??n.dZero}get data(){return this.dataPointerFn()}get description(){return this.descriptionFn(this.amount,this,this.currencyPointerFn())}set description(t){this.descriptionFn=typeof t=="function"?t:()=>t}get amount(){return((this??{data:{amount:n.dOne}}).data??{amount:n.dOne}).amount}set amount(t){this.data.amount=new n(t)}},St=class{constructor(t){t=t??{},this.id=t.id,this.amount=t.amount??n.dZero}};tt([_t()],St.prototype,"id",2),tt([pt(()=>n)],St.prototype,"amount",2);var br=dt(Nt()),Et=class{constructor(){this.value=n.dZero,this.upgrades={},this.items={}}};tt([pt(()=>n)],Et.prototype,"value",2),tt([pt(()=>It)],Et.prototype,"upgrades",2),tt([pt(()=>St)],Et.prototype,"items",2);var We=class{get pointer(){return this.pointerFn()}get value(){return this.pointer.value}set value(t){this.pointer.value=t}constructor(t=new Et,e,r,i={defaultVal:n.dZero,defaultBoost:n.dOne}){this.defaultVal=i.defaultVal,this.defaultBoost=i.defaultBoost,this.pointerFn=typeof t=="function"?t:()=>t,this.boost=new Gt(this.defaultBoost),this.pointer.value=this.defaultVal,this.upgrades={},e&&this.addUpgrade(e),this.items={},r&&this.addItem(r)}onLoadData(){for(let t of Object.values(this.upgrades))this.runUpgradeEffect(t)}reset(t,e,r){let i={resetCurrency:!0,resetUpgradeLevels:!0,resetItemAmounts:!0,runUpgradeEffect:!0};if(typeof t=="object"?Object.assign(i,t):Object.assign(i,{resetCurrency:t,resetUpgradeLevels:e,runUpgradeEffect:r}),i.resetCurrency&&(this.value=this.defaultVal),i.resetUpgradeLevels)for(let s of Object.values(this.upgrades))s.level=new n(s.defaultLevel),i.runUpgradeEffect&&this.runUpgradeEffect(s);if(i.resetItemAmounts)for(let s of Object.values(this.items))s.amount=new n(s.defaultAmount),i.runUpgradeEffect&&this.runItemEffect(s)}gain(t=1e3){let e=this.boost.calculate().mul(new n(t).div(1e3));return this.pointer.value=this.pointer.value.add(e),e}pointerAddUpgrade(t){let e=new It(t);return this.pointer.upgrades[e.id]=e,e}pointerGetUpgrade(t){return this.pointer.upgrades[t]??null}getUpgrade(t){return this.upgrades[t]??null}queryUpgrade(t){let e=Object.keys(this.upgrades);if(t instanceof RegExp){let i=t;return e.filter(a=>i.test(a)).map(a=>this.upgrades[a])}return typeof t=="string"&&(t=[t]),e.filter(i=>t.includes(i)).map(i=>this.upgrades[i])}addUpgrade(t,e=!0){Array.isArray(t)||(t=[t]);let r=[];for(let i of t){this.pointerAddUpgrade(i);let s=new fe(i,()=>this.pointerGetUpgrade(i.id),()=>this);e&&this.runUpgradeEffect(s),this.upgrades[i.id]=s,r.push(s)}return r}updateUpgrade(t,e){let r=this.getUpgrade(t);r!==null&&Object.assign(r,e)}runUpgradeEffect(t){t.effect?.(t.level,t,this)}runItemEffect(t,e=n.dOne){e=new n(e),t.effect?.(t.amount,e,t,this)}calculateUpgrade(t,e=1/0,r,i){let s=this.getUpgrade(t);return s===null?(console.warn(`eMath.js: Upgrade "${t}" not found.`),[n.dZero,n.dZero]):(e=s.level.add(e),s.maxLevel!==void 0&&(e=n.min(e,s.maxLevel)),ue(this.value,s,s.level,e,r,i))}getNextCost(t,e=1,r,i){let s=this.getUpgrade(t);if(s===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),n.dZero;let a=this.calculateUpgrade(t,e,r,i)[0];return s.cost(s.level.add(a))}getNextCostMax(t,e=1,r,i){let s=this.getUpgrade(t);if(s===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),n.dZero;let a=this.calculateUpgrade(t,e,r,i);return s.cost(s.level.add(a[0])).add(a[1])}buyUpgrade(t,e,r,i){let s=this.getUpgrade(t);if(s===null)return console.warn(`eMath.js: Upgrade "${t}" not found.`),!1;let[a,u]=this.calculateUpgrade(t,e,r,i);return a.lte(0)?!1:(this.pointer.value=this.pointer.value.sub(u),s.level=s.level.add(a),this.runUpgradeEffect(s),!0)}pointerAddItem(t){let e=new St(t);return this.pointer.items[t.id]=e,e}pointerGetItem(t){return this.pointer.items[t]??null}addItem(t,e=!0){Array.isArray(t)||(t=[t]);for(let r of t){this.pointerAddItem(r);let i=new ce(r,()=>this.pointerGetItem(r.id),()=>this);e&&this.runItemEffect(i),this.items[r.id]=i}}getItem(t){return this.items[t]??null}calculateItem(t,e,r){let i=this.getItem(t);return i===null?(console.warn(`eMath.js: Item "${t}" not found.`),[n.dZero,n.dZero]):he(this.value,i,e,r)}buyItem(t,e,r){let i=this.getItem(t);if(i===null)return console.warn(`eMath.js: Item "${t}" not found.`),!1;let[s,a]=this.calculateItem(t,e,r);return s.lte(0)?!1:(this.pointer.value=this.pointer.value.sub(a),i.amount=i.amount.add(s),this.runItemEffect(i,e),!0)}},wr=dt(Nt()),Yt=class{constructor(t=0){this.value=new n(t)}};tt([pt(()=>n)],Yt.prototype,"value",2);var Qe=class{get pointer(){return this.pointerFn()}constructor(t,e=!0,r=0){this.initial=new n(r),t??=new Yt(this.initial),this.pointerFn=typeof t=="function"?t:()=>t,this.boost=e?new Gt(this.initial):null}update(){console.warn("eMath.js: AttributeStatic.update is deprecated and will be removed in the future. The value is automatically updated when accessed."),this.boost&&(this.pointer.value=this.boost.calculate())}get value(){return this.boost&&(this.pointer.value=this.boost.calculate()),this.pointer.value}set value(t){if(this.boost)throw new Error("Cannot set value of attributeStatic when boost is enabled.");this.pointer.value=t}},Ct=class{constructor(t,e,r={},i){this.setValue=this.set.bind(this),this.getValue=this.get.bind(this),this.x=t,this.y=e,this.properties=typeof r=="function"?r(this):{...r},this.gridSymbol=i}get grid(){return Bt.getInstance(this.gridSymbol)}set(t,e){return this.properties[t]=e,e}get(t){return this.properties[t]}translate(t=0,e=0){return Bt.getInstance(this.gridSymbol).getCell(this.x+t,this.y+e)}direction(t,e=1,r){let i=this.grid;return(()=>{switch(t){case"up":return i.getCell(this.x,this.y-e);case"right":return i.getCell(this.x+e,this.y);case"down":return i.getCell(this.x,this.y+e);case"left":return i.getCell(this.x-e,this.y);case"adjacent":return i.getAdjacent(this.x,this.y,e,r);case"diagonal":return i.getDiagonal(this.x,this.y,e,r);case"encircling":return i.getEncircling(this.x,this.y,e,r);default:throw new Error("Invalid direction")}})()}up(t=1){return this.direction("up",t)}right(t=1){return this.direction("right",t)}down(t=1){return this.direction("down",t)}left(t=1){return this.direction("left",t)}};function me(t,e,r=!0){let i=r?"Size":"Coordinates";if(typeof t!="number"||typeof e!="number")throw new RangeError(`${i} must be numbers: ${t}, ${e}`);if(!Number.isInteger(t)||!Number.isInteger(e))throw new RangeError(`${i} must be integers: ${t}, ${e}`);if(t<0||e<0)throw new RangeError(`${i} must be positive: ${t}, ${e}`);if(!Number.isFinite(t)||!Number.isFinite(e))throw new RangeError(`${i} must be finite: ${t}, ${e}`);if(!Number.isSafeInteger(t)||!Number.isSafeInteger(e))throw new RangeError(`${i} must be safe integers: ${t}, ${e}`)}var K=class Qt extends Array{constructor(e){e=Array.isArray(e)?e:[e],e=e.filter(r=>r!==void 0),super(...e),this.removeDuplicates()}removeDuplicates(){let e=[];this.forEach((r,i)=>{this.indexOf(r)!==i&&e.push(i)}),e.forEach(r=>this.splice(r,1))}translate(e=0,r=0){return new Qt(this.map(i=>i.translate(e,r)))}direction(e,r,i){return new Qt(this.flatMap(s=>s.direction(e,r,i)))}up(e){return this.direction("up",e)}right(e){return this.direction("right",e)}down(e){return this.direction("down",e)}left(e){return this.direction("left",e)}adjacent(e,r){return this.direction("adjacent",e,r)}diagonal(e,r){return this.direction("diagonal",e,r)}encircling(e,r){return this.direction("encircling",e,r)}},Bt=class Jt{constructor(e,r,i){this.cells=[],this.gridSymbol=Symbol(),this.all=this.getAll.bind(this),this.allX=this.getAllX.bind(this),this.allY=this.getAllY.bind(this),this.get=this.getCell.bind(this),this.set=this.setCell.bind(this),Jt.instances[this.gridSymbol]=this,this.starterProps=i??{},this.xSize=e,this.ySize=r??e,me(this.xSize,this.ySize,!0);for(let s=0;s{if(this.ySize!==s&&(this.ySizes))for(let a=s;a{if(this.xSize!==i){if(this.xSizei)for(let a=0;a{let t=!1,e=r=>(t||(console.warn("eMath.js: The E function is deprecated. Use the Decimal class directly."),t=!0),new n(r));return Object.getOwnPropertyNames(n).filter(r=>!Object.getOwnPropertyNames(class{}).includes(r)).forEach(r=>{e[r]=n[r]}),e})(),Xe=ee;if(typeof at.exports=="object"&&typeof Mt=="object"){var Ke=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Object.getOwnPropertyNames(e))!Object.prototype.hasOwnProperty.call(t,s)&&s!==r&&Object.defineProperty(t,s,{get:()=>e[s],enumerable:!(i=Object.getOwnPropertyDescriptor(e,s))||i.enumerable});return t};at.exports=Ke(at.exports,Mt)}return at.exports}); /*! Bundled license information: reflect-metadata/Reflect.js: diff --git a/dist/main/eMath.mjs b/dist/main/eMath.mjs index 36372ae..1fde948 100644 --- a/dist/main/eMath.mjs +++ b/dist/main/eMath.mjs @@ -12,6 +12,32 @@ var __decorateClass = (decorators, target, key, kind) => { // src/index.ts import "reflect-metadata"; +// src/metadata.ts +var eMathMetadata = { + /** + * The version of the library + * @example "9.5.0" + */ + version: (() => { + try { + return "9.5.0"; + } catch (error) { + return "9.5.0"; + } + })(), + /** + * The data about the Break Eternity library + */ + // eslint-disable-next-line @typescript-eslint/naming-convention + "break_eternity.js": { + /** + * The version of the Break Eternity library + * @example "2.1.0" + */ + version: "2.1.0" + } +}; + // src/E/lru-cache.ts var LRUCache = class { /** @@ -7038,6 +7064,7 @@ export { calculateSumLoop, calculateUpgrade, decimalToJSONString, + eMathMetadata, equalsTolerance, formats, inverseFunctionApprox, diff --git a/dist/types/game/hookGame.d.ts b/dist/types/game/hookGame.d.ts index 6d21760..27d4dc0 100644 --- a/dist/types/game/hookGame.d.ts +++ b/dist/types/game/hookGame.d.ts @@ -28,6 +28,12 @@ declare const eMath: { EventTypes: typeof eMathGame.EventTypes; DataManager: typeof eMathGame.DataManager; ConfigManager: typeof eMathGame.ConfigManager; + eMathMetadata: { + version: string; + "break_eternity.js": { + version: string; + }; + }; LRUCache: typeof eMathMain.LRUCache; ListNode: typeof eMathMain.ListNode; formats: { diff --git a/dist/types/game/managers/DataManager.d.ts b/dist/types/game/managers/DataManager.d.ts index bbe1967..679f7a3 100644 --- a/dist/types/game/managers/DataManager.d.ts +++ b/dist/types/game/managers/DataManager.d.ts @@ -4,11 +4,12 @@ */ import "reflect-metadata"; import type { Game } from "../Game"; +import { eMathMetadata } from "../../metadata"; import type { UnknownObject, Pointer } from "../../common/types"; /** * Interface for the metadata of a save file. */ -interface SaveMetadata { +type SaveMetadata = typeof eMathMetadata & { /** The hash of the game data (Default hash is MD5) Used to check for tampering. */ hash: string; /** Metadata about the game. */ @@ -20,12 +21,7 @@ interface SaveMetadata { /** The version of the game. */ version: string; }; - /** Metadata about the eMath library. */ - emath: { - /** The version of the eMath library. */ - version: string; - }; -} +}; /** * A class that manages game data, including saving, loading, and exporting data. * @@ -155,6 +151,7 @@ declare class DataManager { /** * Resets the game data to its initial state and saves it. * @param reload - Whether to reload the page after resetting the data. Defaults to `false`. + * (Reloading may help with some issues with saving data) */ resetData(reload?: boolean): void; /** diff --git a/dist/types/index.d.ts b/dist/types/index.d.ts index b562c57..7a4c08d 100644 --- a/dist/types/index.d.ts +++ b/dist/types/index.d.ts @@ -1,8 +1,8 @@ /** - * @file index.ts - * @description This is the entry point for the library and exports all relevant things. + * @file This is the entry point for the library and exports all relevant things. */ import "reflect-metadata"; +export * from "./metadata"; export * from "./E/lru-cache"; export * from "./E/e"; export * from "./classes/Boost"; diff --git a/dist/types/metadata.d.ts b/dist/types/metadata.d.ts new file mode 100644 index 0000000..56aaf31 --- /dev/null +++ b/dist/types/metadata.d.ts @@ -0,0 +1,24 @@ +/** + * @file Declares the metadata for the project. + */ +/** + * Metadata for the project. + */ +declare const eMathMetadata: { + /** + * The version of the library + * @example "9.5.0" + */ + version: string; + /** + * The data about the Break Eternity library + */ + "break_eternity.js": { + /** + * The version of the Break Eternity library + * @example "2.1.0" + */ + version: string; + }; +}; +export { eMathMetadata }; diff --git a/examples/package-lock.json b/examples/package-lock.json index e7f8169..01201cf 100644 --- a/examples/package-lock.json +++ b/examples/package-lock.json @@ -32,7 +32,6 @@ } }, "..": { - "name": "emath.js", "version": "9.5.0", "license": "MIT", "dependencies": { @@ -40,24 +39,24 @@ "reflect-metadata": "^0.2.2" }, "devDependencies": { + "@eslint/js": "^9.9.1", + "@types/eslint__js": "^8.42.3", "@types/md5": "^2.3.5", "@types/node": "^22.0.0", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", "break_eternity.js": "^2.0.0", "concurrently": "^8.2.2", "esbuild": "^0.23.1", "esbuild-plugin-replace": "^1.4.0", - "eslint": "^8.57.0", + "eslint": "^9.9.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jsdoc": "^50.2.2", "eslint-plugin-prettier": "^5.2.1", "lz-string": "^1.5.0", "md5": "^2.3.0", "prettier": "^3.3.3", - "prettier-eslint": "^16.3.0", "typedoc": "^0.26.5", - "typescript": "^5.5.4" + "typescript": "^5.5.4", + "typescript-eslint": "^8.4.0" } }, "../emath.js": { diff --git a/src/game/managers/DataManager.ts b/src/game/managers/DataManager.ts index d7bb45f..f3476ed 100644 --- a/src/game/managers/DataManager.ts +++ b/src/game/managers/DataManager.ts @@ -7,6 +7,8 @@ import { instanceToPlain, plainToInstance } from "class-transformer"; import { compressToBase64, decompressFromBase64 } from "lz-string"; import type { Game } from "../Game"; +import { eMathMetadata } from "../../metadata"; + // Recursive plain to class import { Currency } from "../../classes/Currency"; import { UpgradeData } from "../../classes/Upgrade"; @@ -26,7 +28,7 @@ import type { /** * Interface for the metadata of a save file. */ -interface SaveMetadata { +type SaveMetadata = typeof eMathMetadata & { /** The hash of the game data (Default hash is MD5) Used to check for tampering. */ hash: string; /** Metadata about the game. */ @@ -38,11 +40,211 @@ interface SaveMetadata { /** The version of the game. */ version: string; }; - /** Metadata about the eMath library. */ - emath: { - /** The version of the eMath library. */ - version: string; - }; +}; + +/** + * Checks if the given object is a plain object. + * @param obj - The object to check. + * @returns Whether the object is a plain object. + */ +function isPlainObject(obj: unknown): boolean { + return typeof obj === "object" && obj?.constructor === Object; +} + +const objectHasOwnProperty = (obj: UnknownObject, key: string): boolean => + Object.prototype.hasOwnProperty.call(obj, key); + +/** + * Merge properties from the normal data to the loaded data. This is to ensure that new properties are added to the loaded data. + * @deprecated use Object.assign instead + * @param sourcePlain - The plain source object to reference if the property is missing from the target. + * @param source - The source object to merge from. + * @param target - The target object. + * @returns The merged object. + */ +function deepMerge( + sourcePlain: UnknownObject | null | undefined, + source: UnknownObject | null | undefined, + target: UnknownObject | null, +): UnknownObject { + if (!sourcePlain || !source || !target) { + console.warn( + "eMath.js: dataManager.deepMerge(): Missing arguments:", + sourcePlain, + source, + target, + ); + return target ?? {}; + } + + const out = target; + for (const key in sourcePlain) { + if ( + objectHasOwnProperty(sourcePlain, key) && + !objectHasOwnProperty(target, key) + ) { + // If the property is missing from the target, add it + out[key] = sourcePlain[key]; + } + // Special case for currency.upgrades + if (source[key] instanceof Currency) { + const sourceCurrency = sourcePlain[key] as Currency; + const targetCurrency = target[key] as Currency; + + // Backwards compatibility: In versions before 8.x.x, upgrades was of type UpgradeData[]. Now it's of type Record. + // Convert the old format to the new format + if (Array.isArray(targetCurrency.upgrades)) { + const upgrades = targetCurrency.upgrades; + targetCurrency.upgrades = {}; + for (const upgrade of upgrades) { + // ! warning: might not work + targetCurrency.upgrades[(upgrade as UpgradeData).id] = + upgrade as UpgradeData; + } + } + + // Merge upgrades + targetCurrency.upgrades = { + ...sourceCurrency.upgrades, + ...targetCurrency.upgrades, + }; + out[key] = targetCurrency; + + // Merge items + targetCurrency.items = { + ...sourceCurrency.items, + ...targetCurrency.items, + }; + } else if ( + isPlainObject(sourcePlain[key]) && + isPlainObject(target[key]) + ) { + // Recursive + out[key] = deepMerge( + (sourcePlain as Record)[key], + (source as Record)[key], + (target as Record)[key], + ); + } + } + return out; +} + +// Special cases for Currency.upgrades and Currency.items +const upgradeDataProperties = Object.getOwnPropertyNames( + new UpgradeData({ id: "", level: Decimal.dZero }), +); +const itemDataProperties = Object.getOwnPropertyNames( + new ItemData({ id: "", amount: Decimal.dZero }), +); + +/** + * Converts a plain object to a class instance. + * @param templateClassToConvert - The template class to convert to. + * @param plain - The plain object to convert. + * @returns The converted class instance. + */ +function convertTemplateClass( + templateClassToConvert: ClassType, + plain: UnknownObject, +): ClassType { + // Convert the object + const out = plainToInstance(templateClassToConvert, plain) as ClassType; + + if (out instanceof Currency) { + // Special case for Currency.upgrades + for (const upgradeName in out.upgrades) { + const upgrade = out.upgrades[upgradeName] as + | UpgradeData + | undefined; + + if ( + !upgrade || + !upgradeDataProperties.every((prop) => + Object.getOwnPropertyNames(upgrade).includes(prop), + ) + ) { + // Delete the upgrade if it's invalid (extraneous properties, etc.) + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete out.upgrades[upgradeName]; + continue; + } + out.upgrades[upgradeName] = plainToInstance(UpgradeData, upgrade); + } + + // Special case for Currency.items + for (const itemName in out.items) { + const item = out.items[itemName] as ItemData | undefined; + + if ( + !item || + !itemDataProperties.every((prop) => + Object.getOwnPropertyNames(item).includes(prop), + ) + ) { + // Delete the item if it's invalid (extraneous properties, etc.) + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete out.items[itemName]; + continue; + } + out.items[itemName] = plainToInstance(ItemData, item); + } + } + if (!out) { + throw new Error( + `Failed to convert ${templateClassToConvert.name} to class instance.`, + ); + } + return out; +} + +/** + * Converts a plain object to a class instance. + * @param normal - The normal data to reference. + * @param plain - The plain object to convert. + * @returns The converted class instance. + */ +function plainToInstanceRecursive( + normal: UnknownObject | null | undefined, + plain?: UnknownObject | null | undefined, +): UnknownObject { + if (!normal || !plain) { + throw new Error( + "dataManager.plainToInstanceRecursive(): Missing arguments.", + ); + } + const out = plain; + for (const key in normal) { + if (plain[key] === undefined) { + // Should not happen + console.warn(`eMath.js: Missing property "${key}" in loaded data.`); + continue; + } + + // If it's not an object, skip + if (!isPlainObject(plain[key])) continue; + + // Convert the object using the normal data + const normalDataClass = (normal[key] as ConstructableObject) + .constructor; + + // Check if the object is a plain object + if (normalDataClass === Object) { + // If the object doesn't match a template class, convert it recursively + (out as Record)[key] = plainToInstanceRecursive( + (normal as Record)[key], + (plain as Record)[key], + ); + continue; + } + + // console.log("Normal data class: ", normalDataClass); + out[key] = convertTemplateClass( + normalDataClass, + (plain as Record)[key], + ); + } + return out; } /** @@ -140,8 +342,7 @@ class DataManager { public setData( key: S, value: T, - ): // { [data in s]: t; } - { + ): { value: T; /** @deprecated Use the setter instead. */ setValue: (valueToSet: T) => void; @@ -245,15 +446,6 @@ class DataManager { `${this.gameRef.config.name.id}/${JSON.stringify(gameDataString)}`, ); - // Get the version of the eMath library - let version: string; - try { - // @ts-expect-error - Replaced by esbuild - version = PKG_VERSION as string; - } catch (error) { - version = "9.3.0"; - } - // Create the metadata for the save file const saveMetadata: SaveMetadata = { hash: hasedData, @@ -262,9 +454,7 @@ class DataManager { id: this.gameRef.config.name.id, version: this.gameRef.config.name.version, }, - emath: { - version, - }, + ...eMathMetadata, }; // Return a tuple containing the metadata and the data @@ -289,27 +479,29 @@ class DataManager { public decompileData( data?: string | null, ): [SaveMetadata, UnknownObject] | null { - if (!data && this.localStorage) { + // If the data is not provided, get it from local storage + if (!data) { + // If local storage is not supported, return null + if (!this.localStorage) { + console.warn( + "eMath.js: Local storage is not supported. Methods that rely on local storage will not work: decompileData() requires the data to be passed as an argument.", + ); + return null; + } + // Get the data from local storage data = this.localStorage.getItem( `${this.gameRef.config.name.id}-data`, ); } - if (!data && !this.localStorage) { - console.warn( - "eMath.js: Local storage is not supported. Methods that rely on local storage will not work: decompileData() requires the data to be passed as an argument.", - ); - return null; - } - // If the data is empty, return null if (!data) return null; let parsedData: [SaveMetadata, UnknownObject]; try { - // Decompress the data + // Decompress the data, then JSON parse it parsedData = JSON.parse(decompressFromBase64(data)) as [ SaveMetadata, UnknownObject, @@ -358,6 +550,7 @@ class DataManager { /** * Resets the game data to its initial state and saves it. * @param reload - Whether to reload the page after resetting the data. Defaults to `false`. + * (Reloading may help with some issues with saving data) */ public resetData(reload = false): void { // If the normal data is not set, throw an error. If normalData is not set, there is nothing to reset to. @@ -373,7 +566,7 @@ class DataManager { // Save the data this.saveData(); - // Reload the page if specified (this may help with some issues with saving data) + // Reload the page if specified if (reload) window.location.reload(); } @@ -413,6 +606,14 @@ class DataManager { * If you want to implement a custom data export, use {@link compileData} instead. */ public exportData(): void { + // Check if document is defined + if (typeof document === "undefined") { + console.warn( + "eMath.js: exportData(): Document is not defined. You can use compileData() instead to implement a custom save system.", + ); + return; + } + // Create the content const content = this.compileData(); @@ -452,236 +653,16 @@ class DataManager { // If the data is empty, return null if (!dataToParse) return null; + // Get the loaded data from the data tuple const [, loadedData] = dataToParse; - /** - * Checks if the given object is a plain object. - * @param obj - The object to check. - * @returns Whether the object is a plain object. - */ - function isPlainObject(obj: unknown): boolean { - return typeof obj === "object" && obj?.constructor === Object; - } - - const objectHasOwnProperty = ( - obj: UnknownObject, - key: string, - ): boolean => Object.prototype.hasOwnProperty.call(obj, key); - - /** - * Merge properties from the normal data to the loaded data. This is to ensure that new properties are added to the loaded data. - * @deprecated use Object.assign instead - * @param sourcePlain - The plain source object to reference if the property is missing from the target. - * @param source - The source object to merge from. - * @param target - The target object. - * @returns The merged object. - */ - function deepMerge( - sourcePlain: UnknownObject | null | undefined, - source: UnknownObject | null | undefined, - target: UnknownObject | null, - ): UnknownObject { - if (!sourcePlain || !source || !target) { - console.warn( - "eMath.js: dataManager.deepMerge(): Missing arguments:", - sourcePlain, - source, - target, - ); - return target ?? {}; - } - - const out = target; - for (const key in sourcePlain) { - if ( - objectHasOwnProperty(sourcePlain, key) && - !objectHasOwnProperty(target, key) - ) { - // If the property is missing from the target, add it - out[key] = sourcePlain[key]; - } - // Special case for currency.upgrades - if (source[key] instanceof Currency) { - const sourceCurrency = sourcePlain[key] as Currency; - const targetCurrency = target[key] as Currency; - - // Backwards compatibility: In versions before 8.x.x, upgrades was of type UpgradeData[]. Now it's of type Record. - // Convert the old format to the new format - if (Array.isArray(targetCurrency.upgrades)) { - const upgrades = targetCurrency.upgrades; - targetCurrency.upgrades = {}; - for (const upgrade of upgrades) { - // ! warning: might not work - targetCurrency.upgrades[ - (upgrade as UpgradeData).id - ] = upgrade as UpgradeData; - } - } - - // Merge upgrades - targetCurrency.upgrades = { - ...sourceCurrency.upgrades, - ...targetCurrency.upgrades, - }; - out[key] = targetCurrency; - - // Merge items - targetCurrency.items = { - ...sourceCurrency.items, - ...targetCurrency.items, - }; - } else if ( - isPlainObject(sourcePlain[key]) && - isPlainObject(target[key]) - ) { - // Recursive - out[key] = deepMerge( - (sourcePlain as Record)[key], - (source as Record)[key], - (target as Record)[key], - ); - } - } - return out; - } - - let loadedDataProcessed = !mergeData + // Merge the loaded data with the normal data, if specified + const loadedDataMerged = !mergeData ? loadedData - : deepMerge(this.normalDataPlain, this.normalData, loadedData); // TODO: Fix this - - // Convert plain object to class instance (recursive) + : deepMerge(this.normalDataPlain, this.normalData, loadedData); - const upgradeDataProperties = Object.getOwnPropertyNames( - new UpgradeData({ id: "", level: Decimal.dZero }), - ); - const itemDataProperties = Object.getOwnPropertyNames( - new ItemData({ id: "", amount: Decimal.dZero }), - ); - - /** - * Converts a plain object to a class instance. - * @param templateClassToConvert - The template class to convert to. - * @param plain - The plain object to convert. - * @returns The converted class instance. - */ - function convertTemplateClass( - templateClassToConvert: ClassType, - plain: UnknownObject, - ): ClassType { - // Convert the object - const out = plainToInstance( - templateClassToConvert, - plain, - ) as ClassType; - - if (out instanceof Currency) { - // Special case for Currency.upgrades - for (const upgradeName in out.upgrades) { - const upgrade = out.upgrades[upgradeName] as - | UpgradeData - | undefined; - - if ( - !upgrade || - !upgradeDataProperties.every((prop) => - Object.getOwnPropertyNames(upgrade).includes(prop), - ) - ) { - // Delete the upgrade if it's invalid (extraneous properties, etc.) - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete - delete out.upgrades[upgradeName]; - continue; - } - out.upgrades[upgradeName] = plainToInstance( - UpgradeData, - upgrade, - ); - } - - // Special case for Currency.items - for (const itemName in out.items) { - const item = out.items[itemName] as ItemData | undefined; - - if ( - !item || - !itemDataProperties.every((prop) => - Object.getOwnPropertyNames(item).includes(prop), - ) - ) { - // Delete the item if it's invalid (extraneous properties, etc.) - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete - delete out.items[itemName]; - continue; - } - out.items[itemName] = plainToInstance(ItemData, item); - } - } - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - if (!out) { - throw new Error( - `Failed to convert ${templateClassToConvert.name} to class instance.`, - ); - } - return out; - } - - /** - * Converts a plain object to a class instance. - * @param normal - The normal data to reference. - * @param plain - The plain object to convert. - * @returns The converted class instance. - */ - function plainToInstanceRecursive( - normal: UnknownObject | null | undefined, - plain?: UnknownObject | null | undefined, - ): UnknownObject { - if (!normal || !plain) { - throw new Error( - "dataManager.plainToInstanceRecursive(): Missing arguments.", - ); - } - const out = plain; - for (const key in normal) { - if (plain[key] === undefined) { - // Should not happen - console.warn( - `eMath.js: Missing property "${key}" in loaded data.`, - ); - continue; - } - - // If it's not an object, skip - if (!isPlainObject(plain[key])) continue; - - // Convert the object using the normal data - const normalDataClass = (normal[key] as ConstructableObject) - .constructor; - - // Check if the object is a plain object - if (normalDataClass === Object) { - // If the object doesn't match a template class, convert it recursively - (out as Record)[key] = - plainToInstanceRecursive( - (normal as Record)[key], - (plain as Record)[key], - ); - continue; - } - - // console.log("Normal data class: ", normalDataClass); - out[key] = convertTemplateClass( - normalDataClass, - (plain as Record)[key], - ); - } - return out; - } - - loadedDataProcessed = plainToInstanceRecursive( - this.normalData, - loadedDataProcessed, - ); - return loadedDataProcessed; + // Recursively convert the loaded data to class instances + return plainToInstanceRecursive(this.normalData, loadedDataMerged); } /** @@ -703,10 +684,13 @@ class DataManager { // If the data is empty, return null if (!dataToLoad) return null; + // Check if the data is valid const isDataValid = this.validateData([ dataToLoad[0], instanceToPlain(dataToLoad[1]), - ]); // TODO: dataToLoad somehow plainToInstance?? + ]); + + // TODO: dataToLoad somehow plainToInstance? const parsedData = this.parseData(dataToLoad); // If the data is empty, return null diff --git a/src/index.ts b/src/index.ts index e7a187a..b0b794f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,10 @@ /** - * @file index.ts - * @description This is the entry point for the library and exports all relevant things. + * @file This is the entry point for the library and exports all relevant things. */ import "reflect-metadata"; +export * from "./metadata"; + export * from "./E/lru-cache"; export * from "./E/e"; export * from "./classes/Boost"; diff --git a/src/metadata.ts b/src/metadata.ts new file mode 100644 index 0000000..acfa0c0 --- /dev/null +++ b/src/metadata.ts @@ -0,0 +1,36 @@ +/** + * @file Declares the metadata for the project. + */ + +/** + * Metadata for the project. + */ +const eMathMetadata = { + /** + * The version of the library + * @example "9.5.0" + */ + version: ((): string => { + // Get the version + try { + // @ts-expect-error - Replaced by esbuild + return PKG_VERSION as string; + } catch (error) { + return "9.5.0"; + } + })(), + + /** + * The data about the Break Eternity library + */ + // eslint-disable-next-line @typescript-eslint/naming-convention + "break_eternity.js": { + /** + * The version of the Break Eternity library + * @example "2.1.0" + */ + version: "2.1.0", + }, +}; + +export { eMathMetadata };