!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){function e(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){return t.reject(n)})})}function t(e){return new this(function(t,n){function r(e,n){if(n&&("object"==typeof n||"function"==typeof n)){var f=n.then;if("function"==typeof f)return void f.call(n,function(t){r(e,t)},function(n){o[e]={status:"rejected",reason:n},0==--i&&t(o)})}o[e]={status:"fulfilled",value:n},0==--i&&t(o)}if(!e||"undefined"==typeof e.length)return n(new TypeError(typeof e+" "+e+" is not iterable(cannot read property Symbol(Symbol.iterator))"));var o=Array.prototype.slice.call(e);if(0===o.length)return t([]);for(var i=o.length,f=0;o.length>f;f++)r(f,o[f])})}function n(e,t){this.name="AggregateError",this.errors=e,this.message=t||""}function r(e){var t=this;return new t(function(r,o){if(!e||"undefined"==typeof e.length)return o(new TypeError("Promise.any accepts an array"));var i=Array.prototype.slice.call(e);if(0===i.length)return o();for(var f=[],u=0;i.length>u;u++)try{t.resolve(i[u]).then(r)["catch"](function(e){f.push(e),f.length===i.length&&o(new n(f,"All promises were rejected"))})}catch(c){o(c)}})}function o(e){return!(!e||"undefined"==typeof e.length)}function i(){}function f(e){if(!(this instanceof f))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],s(e,this)}function u(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,f._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var r;try{r=n(e._value)}catch(o){return void a(t.promise,o)}c(t.promise,r)}else(1===e._state?c:a)(t.promise,e._value)})):e._deferreds.push(t)}function c(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if(t instanceof f)return e._state=3,e._value=t,void l(e);if("function"==typeof n)return void s(function(e,t){return function(){e.apply(t,arguments)}}(n,t),e)}e._state=1,e._value=t,l(e)}catch(r){a(e,r)}}function a(e,t){e._state=2,e._value=t,l(e)}function l(e){2===e._state&&0===e._deferreds.length&&f._immediateFn(function(){e._handled||f._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;n>t;t++)u(e,e._deferreds[t]);e._deferreds=null}function s(e,t){var n=!1;try{e(function(e){n||(n=!0,c(t,e))},function(e){n||(n=!0,a(t,e))})}catch(r){if(n)return;n=!0,a(t,r)}}n.prototype=Error.prototype;var d=setTimeout;f.prototype["catch"]=function(e){return this.then(null,e)},f.prototype.then=function(e,t){var n=new this.constructor(i);return u(this,new function(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}(e,t,n)),n},f.prototype["finally"]=e,f.all=function(e){return new f(function(t,n){function r(e,o){try{if(o&&("object"==typeof o||"function"==typeof o)){var u=o.then;if("function"==typeof u)return void u.call(o,function(t){r(e,t)},n)}i[e]=o,0==--f&&t(i)}catch(c){n(c)}}if(!o(e))return n(new TypeError("Promise.all accepts an array"));var i=Array.prototype.slice.call(e);if(0===i.length)return t([]);for(var f=i.length,u=0;i.length>u;u++)r(u,i[u])})},f.any=r,f.allSettled=t,f.resolve=function(e){return e&&"object"==typeof e&&e.constructor===f?e:new f(function(t){t(e)})},f.reject=function(e){return new f(function(t,n){n(e)})},f.race=function(e){return new f(function(t,n){if(!o(e))return n(new TypeError("Promise.race accepts an array"));for(var r=0,i=e.length;i>r;r++)f.resolve(e[r]).then(t,n)})},f._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){d(e,0)},f._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var p=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw Error("unable to locate global object")}();"function"!=typeof p.Promise?p.Promise=f:(p.Promise.prototype["finally"]||(p.Promise.prototype["finally"]=e),p.Promise.allSettled||(p.Promise.allSettled=t),p.Promise.any||(p.Promise.any=r))});var WConverwsClient=function(t){function e(){return"undefined"!=typeof window&&void 0!==window.document}function n(t){let e=Object.prototype.toString.call(t);return"[object Function]"===e||"[object AsyncFunction]"===e}function r(r){let o=null;r.url||(r.url="ws://localhost:8080"),r.token||(r.token="*");let i,u=function(){let t=e(),n="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope;return t=t||n,{isBrowser:t,isWebWorker:n,isNode:"undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node}}().isBrowser;i=u?("undefined"!=typeof self?self:e()?window:"undefined"!=typeof global?global:null).WebSocket:t;try{o=new i(r.url+"/?token="+r.token)}catch(t){o=null}if(null===o)return{error:"can not new MixWS"};function c(){n(r.open)&&r.open()}function a(){n(r.close)&&r.close()}function f(t){n(r.message)&&r.message(t)}function s(t){n(r.error)&&r.error(t),o.close()}return u?(o.onopen=c,o.onmessage=function(t){f(t.data)},o.onclose=a,o.onerror=s):(o.on("open",c),o.on("message",f),o.on("close",a),o.on("error",s)),o}var o=Array.isArray,i="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,c=i||u||Function("return this")(),a=c.Symbol,f=Object.prototype,s=f.hasOwnProperty,l=f.toString,p=a?a.toStringTag:void 0;var y=Object.prototype.toString;var h="[object Null]",v="[object Undefined]",d=a?a.toStringTag:void 0;function g(t){return null==t?void 0===t?v:h:d&&d in Object(t)?function(t){var e=s.call(t,p),n=t[p];try{t[p]=void 0;var r=!0}catch(t){}var o=l.call(t);return r&&(e?t[p]=n:delete t[p]),o}(t):function(t){return y.call(t)}(t)}function b(t){return null!=t&&"object"==typeof t}var _="[object Symbol]";function w(t){return"symbol"==typeof t||b(t)&&g(t)==_}var m=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,j=/^\w*$/;function A(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}var x="[object AsyncFunction]",O="[object Function]",S="[object GeneratorFunction]",U="[object Proxy]";function B(t){if(!A(t))return!1;var e=g(t);return e==O||e==S||e==x||e==U}var k,C=c["__core-js_shared__"],E=(k=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||""))?"Symbol(src)_1."+k:"";var P=Function.prototype.toString;var z=/^\[object .+?Constructor\]$/,M=Function.prototype,T=Object.prototype,L=M.toString,F=T.hasOwnProperty,$=RegExp("^"+L.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function I(t){return!(!A(t)||(e=t,E&&E in e))&&(B(t)?$:z).test(function(t){if(null!=t){try{return P.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t));var e}function W(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return I(n)?n:void 0}var N=W(Object,"create");var R=Object.prototype.hasOwnProperty;var D=Object.prototype.hasOwnProperty;function H(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function G(t,e){return t===e||t!=t&&e!=e}function V(t,e){for(var n=t.length;n--;)if(G(t[n][0],e))return n;return-1}H.prototype.clear=function(){this.__data__=N?N(null):{},this.size=0},H.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},H.prototype.get=function(t){var e=this.__data__;if(N){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return R.call(e,t)?e[t]:void 0},H.prototype.has=function(t){var e=this.__data__;return N?void 0!==e[t]:D.call(e,t)},H.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=N&&void 0===e?"__lodash_hash_undefined__":e,this};var q=Array.prototype.splice;function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var e=this.__data__,n=V(e,t);return!(n<0)&&(n==e.length-1?e.pop():q.call(e,n,1),--this.size,!0)},J.prototype.get=function(t){var e=this.__data__,n=V(e,t);return n<0?void 0:e[n][1]},J.prototype.has=function(t){return V(this.__data__,t)>-1},J.prototype.set=function(t,e){var n=this.__data__,r=V(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this};var K=W(c,"Map");function Q(t,e){var n,r,o=t.__data__;return("string"==(r=typeof(n=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?o["string"==typeof e?"string":"hash"]:o.map}function X(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}X.prototype.clear=function(){this.size=0,this.__data__={hash:new H,map:new(K||J),string:new H}},X.prototype.delete=function(t){var e=Q(this,t).delete(t);return this.size-=e?1:0,e},X.prototype.get=function(t){return Q(this,t).get(t)},X.prototype.has=function(t){return Q(this,t).has(t)},X.prototype.set=function(t,e){var n=Q(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this};var Y="Expected a function";function Z(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(Y);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(Z.Cache||X),n}Z.Cache=X;var tt,et,nt,rt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ot=/\\(\\)?/g,it=(tt=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(rt,(function(t,n,r,o){e.push(r?o.replace(ot,"$1"):n||t)})),e},et=Z(tt,(function(t){return 500===nt.size&&nt.clear(),t})),nt=et.cache,et),ut=it;var ct=1/0,at=a?a.prototype:void 0,ft=at?at.toString:void 0;function st(t){if("string"==typeof t)return t;if(o(t))return function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}(t,st)+"";if(w(t))return ft?ft.call(t):"";var e=t+"";return"0"==e&&1/t==-ct?"-0":e}function lt(t){return null==t?"":st(t)}function pt(t,e){return o(t)?t:function(t,e){if(o(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!w(t))||j.test(t)||!m.test(t)||null!=e&&t in Object(e)}(t,e)?[t]:ut(lt(t))}var yt=1/0;function ht(t){if("string"==typeof t||w(t))return t;var e=t+"";return"0"==e&&1/t==-yt?"-0":e}function vt(t,e,n){var r=null==t?void 0:function(t,e){for(var n=0,r=(e=pt(e,t)).length;null!=t&&n<r;)t=t[ht(e[n++])];return n&&n==r?t:void 0}(t,e);return void 0===r?n:r}var dt=/\s/;var gt=/^\s+/;function bt(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&dt.test(t.charAt(e)););return e}(t)+1).replace(gt,""):t}var _t=NaN,wt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,jt=/^0o[0-7]+$/i,At=parseInt;function xt(t){if("number"==typeof t)return t;if(w(t))return _t;if(A(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=A(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=bt(t);var n=mt.test(t);return n||jt.test(t)?At(t.slice(2),n?2:8):wt.test(t)?_t:+t}var Ot=1/0,St=17976931348623157e292;function Ut(t){return t?(t=xt(t))===Ot||t===-Ot?(t<0?-1:1)*St:t==t?t:0:0===t?t:0}function Bt(t){var e=Ut(t),n=e%1;return e==e?n?e-n:e:0}function kt(t){return"[object String]"===Object.prototype.toString.call(t)}function Ct(t){return!(!kt(t)||""===t)}function Et(t){let e=!1;if(Ct(t))e=!isNaN(Number(t));else if(function(t){return"[object Number]"===Object.prototype.toString.call(t)}(t)){if(function(t){return t!=t}(t))return!1;e=!0}return e}function Pt(t){if(!Et(t))return 0;return Ut(t)}function zt(t){return!!Et(t)&&(t=Pt(t),"number"==typeof(e=t)&&e==Bt(e));var e}var Mt=c.isFinite,Tt=Math.min;var Lt=function(t){var e=Math[t];return function(t,n){if(t=xt(t),(n=null==n?0:Tt(Bt(n),292))&&Mt(t)){var r=(lt(t)+"e").split("e");return+((r=(lt(e(r[0]+"e"+(+r[1]+n)))+"e").split("e"))[0]+"e"+(+r[1]-n))}return e(t)}}("round"),Ft=Lt;function $t(t){if(!Et(t))return 0;t=Pt(t);let e=Ft(t);return"0"===String(e)?0:e}let It="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),Wt=It.length;function Nt(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:32,e=[];var n;t=zt(n=t)&&$t(n)>0?$t(t):32;for(let n=0;n<t;n++)e[n]=It[0|Math.random()*Wt];return e.join("")}var Rt="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Dt(t){if(t.__esModule)return t;var e=t.default;if("function"==typeof e){var n=function t(){if(this instanceof t){var n=[null];return n.push.apply(n,arguments),new(Function.bind.apply(e,n))}return e.apply(this,arguments)};n.prototype=e.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(t).forEach((function(e){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(n,e,r.get?r:{enumerable:!0,get:function(){return t[e]}})})),n}var Ht={};!function(t){var e=Object.prototype.hasOwnProperty,n="~";function r(){}function o(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function i(t,e,r,i,u){if("function"!=typeof r)throw new TypeError("The listener must be a function");var c=new o(r,i||t,u),a=n?n+e:e;return t._events[a]?t._events[a].fn?t._events[a]=[t._events[a],c]:t._events[a].push(c):(t._events[a]=c,t._eventsCount++),t}function u(t,e){0==--t._eventsCount?t._events=new r:delete t._events[e]}function c(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),c.prototype.eventNames=function(){var t,r,o=[];if(0===this._eventsCount)return o;for(r in t=this._events)e.call(t,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(t)):o},c.prototype.listeners=function(t){var e=n?n+t:t,r=this._events[e];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,i=r.length,u=new Array(i);o<i;o++)u[o]=r[o].fn;return u},c.prototype.listenerCount=function(t){var e=n?n+t:t,r=this._events[e];return r?r.fn?1:r.length:0},c.prototype.emit=function(t,e,r,o,i,u){var c=n?n+t:t;if(!this._events[c])return!1;var a,f,s=this._events[c],l=arguments.length;if(s.fn){switch(s.once&&this.removeListener(t,s.fn,void 0,!0),l){case 1:return s.fn.call(s.context),!0;case 2:return s.fn.call(s.context,e),!0;case 3:return s.fn.call(s.context,e,r),!0;case 4:return s.fn.call(s.context,e,r,o),!0;case 5:return s.fn.call(s.context,e,r,o,i),!0;case 6:return s.fn.call(s.context,e,r,o,i,u),!0}for(f=1,a=new Array(l-1);f<l;f++)a[f-1]=arguments[f];s.fn.apply(s.context,a)}else{var p,y=s.length;for(f=0;f<y;f++)switch(s[f].once&&this.removeListener(t,s[f].fn,void 0,!0),l){case 1:s[f].fn.call(s[f].context);break;case 2:s[f].fn.call(s[f].context,e);break;case 3:s[f].fn.call(s[f].context,e,r);break;case 4:s[f].fn.call(s[f].context,e,r,o);break;default:if(!a)for(p=1,a=new Array(l-1);p<l;p++)a[p-1]=arguments[p];s[f].fn.apply(s[f].context,a)}}return!0},c.prototype.on=function(t,e,n){return i(this,t,e,n,!1)},c.prototype.once=function(t,e,n){return i(this,t,e,n,!0)},c.prototype.removeListener=function(t,e,r,o){var i=n?n+t:t;if(!this._events[i])return this;if(!e)return u(this,i),this;var c=this._events[i];if(c.fn)c.fn!==e||o&&!c.once||r&&c.context!==r||u(this,i);else{for(var a=0,f=[],s=c.length;a<s;a++)(c[a].fn!==e||o&&!c[a].once||r&&c[a].context!==r)&&f.push(c[a]);f.length?this._events[i]=1===f.length?f[0]:f:u(this,i)}return this},c.prototype.removeAllListeners=function(t){var e;return t?(e=n?n+t:t,this._events[e]&&u(this,e)):(this._events=new r,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=n,c.EventEmitter=c,t.exports=c}({get exports(){return Ht},set exports(t){Ht=t}});var Gt=Ht;function Vt(){return new Gt}function qt(t,e,n){var r=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(o);++r<o;)i[r]=t[r+e];return i}var Jt=9007199254740991;function Kt(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Jt}function Qt(t){return null!=t&&Kt(t.length)&&!B(t)}var Xt=9007199254740991,Yt=/^(?:0|[1-9]\d*)$/;function Zt(t,e){var n=typeof t;return!!(e=null==e?Xt:e)&&("number"==n||"symbol"!=n&&Yt.test(t))&&t>-1&&t%1==0&&t<e}function te(t,e,n){if(!A(n))return!1;var r=typeof e;return!!("number"==r?Qt(n)&&Zt(e,n.length):"string"==r&&e in n)&&G(n[e],t)}var ee=Math.ceil,ne=Math.max;var re=Array.prototype.join;function oe(t,e){return null==t?"":re.call(t,e)}function ie(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}var ue,ce=function(t,e,n){for(var r=-1,o=Object(t),i=n(t),u=i.length;u--;){var c=i[ue?u:++r];if(!1===e(o[c],c,o))break}return t};function ae(t){return b(t)&&"[object Arguments]"==g(t)}var fe=Object.prototype,se=fe.hasOwnProperty,le=fe.propertyIsEnumerable,pe=ae(function(){return arguments}())?ae:function(t){return b(t)&&se.call(t,"callee")&&!le.call(t,"callee")},ye=pe;var he="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=he&&"object"==typeof module&&module&&!module.nodeType&&module,de=ve&&ve.exports===he?c.Buffer:void 0,ge=(de?de.isBuffer:void 0)||function(){return!1},be={};function _e(t){return function(e){return t(e)}}be["[object Float32Array]"]=be["[object Float64Array]"]=be["[object Int8Array]"]=be["[object Int16Array]"]=be["[object Int32Array]"]=be["[object Uint8Array]"]=be["[object Uint8ClampedArray]"]=be["[object Uint16Array]"]=be["[object Uint32Array]"]=!0,be["[object Arguments]"]=be["[object Array]"]=be["[object ArrayBuffer]"]=be["[object Boolean]"]=be["[object DataView]"]=be["[object Date]"]=be["[object Error]"]=be["[object Function]"]=be["[object Map]"]=be["[object Number]"]=be["[object Object]"]=be["[object RegExp]"]=be["[object Set]"]=be["[object String]"]=be["[object WeakMap]"]=!1;var we="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=we&&"object"==typeof module&&module&&!module.nodeType&&module,je=me&&me.exports===we&&i.process,Ae=function(){try{var t=me&&me.require&&me.require("util").types;return t||je&&je.binding&&je.binding("util")}catch(t){}}(),xe=Ae&&Ae.isTypedArray,Oe=xe?_e(xe):function(t){return b(t)&&Kt(t.length)&&!!be[g(t)]},Se=Object.prototype.hasOwnProperty;function Ue(t,e){var n=o(t),r=!n&&ye(t),i=!n&&!r&&ge(t),u=!n&&!r&&!i&&Oe(t),c=n||r||i||u,a=c?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],f=a.length;for(var s in t)!e&&!Se.call(t,s)||c&&("length"==s||i&&("offset"==s||"parent"==s)||u&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||Zt(s,f))||a.push(s);return a}var Be=Object.prototype;var ke=function(t,e){return function(n){return t(e(n))}}(Object.keys,Object),Ce=ke,Ee=Object.prototype.hasOwnProperty;function Pe(t){if(n=(e=t)&&e.constructor,e!==("function"==typeof n&&n.prototype||Be))return Ce(t);var e,n,r=[];for(var o in Object(t))Ee.call(t,o)&&"constructor"!=o&&r.push(o);return r}function ze(t){return Qt(t)?Ue(t):Pe(t)}var Me=function(t,e){return function(n,r){if(null==n)return n;if(!Qt(n))return t(n,r);for(var o=n.length,i=e?o:-1,u=Object(n);(e?i--:++i<o)&&!1!==r(u[i],i,u););return n}}((function(t,e){return t&&ce(t,e,ze)})),Te=Me;function Le(t){return t}function Fe(t,e){var n;return(o(t)?ie:Te)(t,"function"==typeof(n=e)?n:Le)}function $e(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)}function Ie(t){return"[object Uint16Array]"===Object.prototype.toString.call(t)}function We(t){if(!zt(t))return!1;return $t(t)>=0}function Ne(t,e){return Ct(t)&&We(e)?0===(e=$t(e))?"":t.substring(0,e):""}function Re(t,e){return Ct(t)&&We(e)?0===(e=$t(e))?t:function(t,e){if(!Ct(t))return"";if(!We(e))return"";if(0===(e=$t(e)))return"";let n=t.length-e;return n<0&&(n=0),t.substring(n,n+e)}(t,t.length-e):""}var De={},He={get exports(){return De},set exports(t){De=t}};var Ge,Ve={},qe={get exports(){return Ve},set exports(t){Ve=t}},Je=Dt(Object.freeze({__proto__:null,default:{}}));function Ke(){return Ge||(Ge=1,function(t,e){var n;t.exports=(n=n||function(t,e){var n;if("undefined"!=typeof window&&window.crypto&&(n=window.crypto),"undefined"!=typeof self&&self.crypto&&(n=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!=typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&void 0!==Rt&&Rt.crypto&&(n=Rt.crypto),!n)try{n=Je}catch(t){}var r=function(){if(n){if("function"==typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")},o=Object.create||function(){function t(){}return function(e){var n;return t.prototype=e,n=new t,t.prototype=null,n}}(),i={},u=i.lib={},c=u.Base={extend:function(t){var e=o(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},a=u.WordArray=c.extend({init:function(t,n){t=this.words=t||[],this.sigBytes=n!=e?n:4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,n=t.words,r=this.sigBytes,o=t.sigBytes;if(this.clamp(),r%4)for(var i=0;i<o;i++){var u=n[i>>>2]>>>24-i%4*8&255;e[r+i>>>2]|=u<<24-(r+i)%4*8}else for(var c=0;c<o;c+=4)e[r+c>>>2]=n[c>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,n=this.sigBytes;e[n>>>2]&=4294967295<<32-n%4*8,e.length=t.ceil(n/4)},clone:function(){var t=c.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],n=0;n<t;n+=4)e.push(r());return new a.init(e,t)}}),f=i.enc={},s=f.Hex={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;o<n;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push((i>>>4).toString(16)),r.push((15&i).toString(16))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;r<e;r+=2)n[r>>>3]|=parseInt(t.substr(r,2),16)<<24-r%8*4;return new a.init(n,e/2)}},l=f.Latin1={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;o<n;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(i))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;r<e;r++)n[r>>>2]|=(255&t.charCodeAt(r))<<24-r%4*8;return new a.init(n,e)}},p=f.Utf8={stringify:function(t){try{return decodeURIComponent(escape(l.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return l.parse(unescape(encodeURIComponent(t)))}},y=u.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var n,r=this._data,o=r.words,i=r.sigBytes,u=this.blockSize,c=i/(4*u),f=(c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0))*u,s=t.min(4*f,i);if(f){for(var l=0;l<f;l+=u)this._doProcessBlock(o,l);n=o.splice(0,f),r.sigBytes-=s}return new a.init(n,s)},clone:function(){var t=c.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0});u.Hasher=y.extend({cfg:c.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){y.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(t){return function(e,n){return new t.init(n).finalize(e)}},_createHmacHelper:function(t){return function(e,n){return new h.HMAC.init(t,n).finalize(e)}}});var h=i.algo={};return i}(Math),n)}(qe)),Ve}!function(t,e){var n;t.exports=(n=Ke(),function(){var t=n,e=t.lib.WordArray;function r(t,n,r){for(var o=[],i=0,u=0;u<n;u++)if(u%4){var c=r[t.charCodeAt(u-1)]<<u%4*2|r[t.charCodeAt(u)]>>>6-u%4*2;o[i>>>2]|=c<<24-i%4*8,i++}return e.create(o,i)}t.enc.Base64={stringify:function(t){var e=t.words,n=t.sigBytes,r=this._map;t.clamp();for(var o=[],i=0;i<n;i+=3)for(var u=(e[i>>>2]>>>24-i%4*8&255)<<16|(e[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|e[i+2>>>2]>>>24-(i+2)%4*8&255,c=0;c<4&&i+.75*c<n;c++)o.push(r.charAt(u>>>6*(3-c)&63));var a=r.charAt(64);if(a)for(;o.length%4;)o.push(a);return o.join("")},parse:function(t){var e=t.length,n=this._map,o=this._reverseMap;if(!o){o=this._reverseMap=[];for(var i=0;i<n.length;i++)o[n.charCodeAt(i)]=i}var u=n.charAt(64);if(u){var c=t.indexOf(u);-1!==c&&(e=c)}return r(t,e,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),n.enc.Base64)}(He);var Qe=De,Xe={};!function(t,e){var n;t.exports=(n=Ke(),function(){if("function"==typeof ArrayBuffer){var t=n.lib.WordArray,e=t.init,r=t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var n=t.byteLength,r=[],o=0;o<n;o++)r[o>>>2]|=t[o]<<24-o%4*8;e.call(this,r,n)}else e.apply(this,arguments)};r.prototype=t}}(),n.lib.WordArray)}({get exports(){return Xe},set exports(t){Xe=t}});var Ye=Xe;function Ze(t){if(!$e(t))return"";return Ye.create(t).toString(Qe)}function tn(t){if(!kt(t))return new Uint8Array;let e=Qe.parse(t),n=e.words,r=e.sigBytes,o=new Uint8Array(r);for(let t=0;t<r;t++){let e=n[t>>>2]>>>24-t%4*8&255;o[t]=e}return o}function en(t){return Ie(t)?Ze(function(t){return Ie(t)?new Uint8Array(t):new Uint8Array}(t)):""}function nn(t){if(!kt(t))return new Uint16Array;let e=function(t){return $e(t)?new Uint16Array(t):new Uint16Array}(tn(t));return e}let rn="[Uint8Array]::";let on="[Uint16Array]::";let un={tagU8A:rn,u8arr2b64:function(t){return $e(t)?rn+Ze(t):t},b642u8arr:function(t){return kt(t)&&Ne(t,rn.length)===rn?tn(t=Re(t,rn.length)):t},tagU16A:on,u16arr2b64:function(t){return Ie(t)?on+en(t):t},b642u16arr:function(t){return kt(t)&&Ne(t,on.length)===on?nn(t=Re(t,on.length)):t}};function cn(t){return"[object Array]"===Object.prototype.toString.call(t)}function an(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Uint8Array";if(n=t,"[object Undefined]"===Object.prototype.toString.call(n))return"";var n;kt(e)?e=[e]:cn(e)||(e=["Uint8Array"]);let r="";try{r=JSON.stringify(t,(function(t,n){return e.indexOf("Uint8Array")>=0&&(n=un.u8arr2b64(n)),e.indexOf("Uint16Array")>=0&&(n=un.u16arr2b64(n)),n}))}catch(t){r=""}return r}function fn(t,e,n,r,o){let i=function(t,e,n){e=(n?te(t,e,n):void 0===e)?1:ne(Bt(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var o=0,i=0,u=Array(ee(r/e));o<r;)u[i++]=qt(t,o,o+=e);return u}(an(n),e),u=Nt(),c=i.length;Fe(i,(function(e,n){e=oe(e,"");let i=`${u}|${n}|${c}|${e}`;t.send(i,(function(t){t&&B(o)&&o(t)})),B(r)&&r((n+1)/c*100)}))}var sn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");function ln(t){return sn.test(t)}var pn=Ae&&Ae.isRegExp,yn=pn?_e(pn):function(t){return b(t)&&"[object RegExp]"==g(t)};var hn="\\ud800-\\udfff",vn="["+hn+"]",dn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",gn="\\ud83c[\\udffb-\\udfff]",bn="[^"+hn+"]",_n="(?:\\ud83c[\\udde6-\\uddff]){2}",wn="[\\ud800-\\udbff][\\udc00-\\udfff]",mn="(?:"+dn+"|"+gn+")"+"?",jn="[\\ufe0e\\ufe0f]?",An=jn+mn+("(?:\\u200d(?:"+[bn,_n,wn].join("|")+")"+jn+mn+")*"),xn="(?:"+[bn+dn+"?",dn,_n,wn,vn].join("|")+")",On=RegExp(gn+"(?="+gn+")|"+xn+An,"g");function Sn(t){return ln(t)?function(t){return t.match(On)||[]}(t):function(t){return t.split("")}(t)}var Un=4294967295;function Bn(t,e,n){return n&&"number"!=typeof n&&te(t,e,n)&&(e=n=void 0),(n=void 0===n?Un:n>>>0)?(t=lt(t))&&("string"==typeof e||null!=e&&!yn(e))&&!(e=st(e))&&ln(t)?(r=Sn(t),o=0,i=n,u=r.length,i=void 0===i?u:i,!o&&i>=u?r:qt(r,o,i)):t.split(e,n):[];var r,o,i,u}var kn=Math.ceil,Cn=Math.max;var En=function(t){return function(e,n,r){return r&&"number"!=typeof r&&te(e,n,r)&&(n=r=void 0),e=Ut(e),void 0===n?(n=e,e=0):n=Ut(n),function(t,e,n,r){for(var o=-1,i=Cn(kn((e-t)/(n||1)),0),u=Array(i);i--;)u[r?i:++o]=t,t+=n;return u}(e,n,r=void 0===r?e<n?1:-1:Ut(r),t)}}(),Pn=En;function zn(t,e){return n=t,"[object Object]"===Object.prototype.toString.call(n)&&(!(!Ct(e)&&!Et(e))&&e in t);var n}let Mn={};function Tn(t,e){let n=Bn(t,"|"),r=n[0],o=xt(n[1]),i=xt(n[2]),u=oe((a=3,(s=null==(c=n)?0:c.length)?qt(c,(a=f||void 0===a?1:Bt(a))<0?0:a,s):[]),"|");var c,a,f,s;if(zn(Mn,r)||(Mn[r]={}),Mn[r]["_"+o]=u,o===i-1){let t="";Fe(Pn(i),(function(e){t+=Mn[r]["_"+e]})),delete Mn[r];let n=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Uint8Array";kt(e)?e=[e]:cn(e)||(e=["Uint8Array"]);let n={};try{n=JSON.parse(t,(function(t,n){return e.indexOf("Uint8Array")>=0&&(n=un.b642u8arr(n)),e.indexOf("Uint16Array")>=0&&(n=un.b642u16arr(n)),n}))}catch(t){n={}}return n}(t);e(n)}}return function(t){let e=!1,n=null,o=new Vt,i=new Vt,u=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];setTimeout((()=>{o.emit(t,...n)}),1)};function c(){t.url||(t.url="ws://localhost:8080"),t.token||(t.token="*"),t.strSplitLength||(t.strSplitLength=1e6);let c={url:t.url,token:t.token,open:function(){u("open"),e||(u("openOnce"),e=!0)},close:function(){u("close"),a()},message:function(t){!function(t){Tn(t,s)}(t)},error:function(t){f(t)}};try{n=new r(c)}catch(t){return u("error",{msg:"can not create websocket",err:t}),void a()}if(vt(n,"error"))return u("error",{msg:"can not create websocket",err:"can not new MixWS in WWebsocketClient"}),void a();function f(t){u("error",{msg:"websocket error",err:t}),n.close()}function s(t){let e=vt(t,"_mode","");if("execute"===e)if(vt(t,"_id")&&vt(t,"output")){let e=vt(t,"_id"),n=vt(t,"output");i.emit(e,n)}else u("error",{msg:"can not find _id and output in data",err:t});else"broadcast"===e?u("broadcast",vt(t,"data")):"deliver"===e?u("deliver",vt(t,"data")):f({msg:"can not find _mode in data",err:t})}function l(e,r){n.readyState===n.OPEN&&fn(n,t.strSplitLength,e,r,(function(t){u("error",{msg:"can not send message",err:t})}))}o.removeAllListeners("triggerExecute"),o.on("triggerExecute",(function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,o=Nt();l({_mode:"execute",_id:o,func:t,input:e},r),i.on(o,(function(t){n(t),i.removeAllListeners(o)}))})),o.removeAllListeners("triggerBroadcast"),o.on("triggerBroadcast",(function(t,e){l({_mode:"broadcast",data:t},e)})),o.removeAllListeners("triggerDeliver"),o.on("triggerDeliver",(function(t,e){l({_mode:"deliver",data:t},e)}))}function a(){setTimeout((function(){u("reconn"),c()}),1e3)}return o.execute=function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=function(){let t,e,n=new Promise((function(){t=arguments[0],e=arguments[1]}));return n.resolve=t,n.reject=e,n}();return u("triggerExecute",t,e,(function(t){r.resolve(t)}),n),r},o.broadcast=function(t){u("triggerBroadcast",t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){})},o.deliver=function(t){u("triggerDeliver",t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){})},c(),o}}();var wo=null,bInit=!1;function init(a){bInit||(wo=new WConverwsClient(a),wo.on("open",function(){sendSystemMessage("open")}),wo.on("openOnce",function(){sendSystemMessage("openOnce"),bInit=!0}),wo.on("close",function(){sendSystemMessage("close")}),wo.on("error",function(a){sendSystemMessage("error",a)}),wo.on("reconn",function(){sendSystemMessage("reconn")}),wo.on("broadcast",function(a){sendSystemMessage("broadcast",a)}),wo.on("deliver",function(a){sendSystemMessage("deliver",a)}))}function sendMessage(a){self.postMessage(a)}function sendSystemMessage(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:null;sendMessage({_id:"system",func:a,data:b})}self.onmessage=function(a){var b=a.data,c=b.type;if("init"===c){var d=b._id,e=b.input;init(e);var f=setInterval(function(){if(bInit){sendMessage({_id:d,output:null}),clearInterval(f)}},10)}else if("execute"===c){var g=b._id,h=b.func,i=b.input;wo.execute(h,i,function(a){sendMessage({_id:g,prog:a})}).then(function(a){sendMessage({_id:g,output:a})})}else if("broadcast"===c||"deliver"===c){var j=b._id,k=b.input;wo[c](k,function(a){sendMessage({_id:j,prog:a})})}else sendSystemMessage("error","type error: ".concat(c))};