/*! For license information please see main.dd76cdc0.js.LICENSE.txt */
(()=>{var e={97:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,a(n)))}return e}function a(e){if("string"===typeof e||"number"===typeof e)return e;if("object"!==typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},276:(e,t)=>{"use strict";var n,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.server_context"),d=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),p=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),v=Symbol.for("react.offscreen");function g(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case a:case s:case i:case f:case p:return e;default:switch(e=e&&e.$$typeof){case u:case c:case d:case m:case h:case l:return e;default:return t}}case o:return t}}}n=Symbol.for("react.module.reference"),t.ForwardRef=d,t.isMemo=function(e){return g(e)===h}},317:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,a=s(e),i=a[0],l=a[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,i,l)),u=0,d=l>0?i-4:i;for(n=0;n<d;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,a=[],i=16383,s=0,c=r-o;s<c;s+=i)a.push(l(e,s,s+i>c?c:s+i));1===o?(t=e[r-1],a.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],a.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return a.join("")};for(var n=[],r=[],o="undefined"!==typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)n[i]=a[i],r[a.charCodeAt(i)]=i;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,r){for(var o,a,i=[],s=t;s<r;s+=3)o=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),i.push(n[(a=o)>>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return i.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},365:e=>{var t,n,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"===typeof setTimeout?setTimeout:o}catch(e){t=o}try{n="function"===typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var s,l=[],c=!1,u=-1;function d(){c&&s&&(c=!1,s.length?l=s.concat(l):u=-1,l.length&&f())}function f(){if(!c){var e=i(d);c=!0;for(var t=l.length;t;){for(s=l,l=[];++u<t;)s&&s[u].run();u=-1,t=l.length}s=null,c=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===a||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function h(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new p(e,t)),1!==l.length||c||i(f)},p.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=h,r.addListener=h,r.once=h,r.off=h,r.removeListener=h,r.removeAllListeners=h,r.emit=h,r.prependListener=h,r.prependOnceListener=h,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},478:(e,t,n)=>{"use strict";const r=n(317),o=n(956),a="function"===typeof Symbol&&"function"===typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.hp=l,t.IS=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"===typeof e){if("string"===typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return d(e)}return c(e,t,n)}function c(e,t,n){if("string"===typeof e)return function(e,t){"string"===typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|m(e,t);let r=s(n);const o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if($(e,Uint8Array)){const t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if($(e,ArrayBuffer)||e&&$(e.buffer,ArrayBuffer))return p(e,t,n);if("undefined"!==typeof SharedArrayBuffer&&($(e,SharedArrayBuffer)||e&&$(e.buffer,SharedArrayBuffer)))return p(e,t,n);if("number"===typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const o=function(e){if(l.isBuffer(e)){const t=0|h(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!==typeof e.length||G(e.length)?s(0):f(e);if("Buffer"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(o)return o;if("undefined"!==typeof Symbol&&null!=Symbol.toPrimitive&&"function"===typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function u(e){if("number"!==typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function d(e){return u(e),s(e<0?0:0|h(e))}function f(e){const t=e.length<0?0:0|h(e.length),n=s(t);for(let r=0;r<t;r+=1)n[r]=255&e[r];return n}function p(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('"length" is outside of buffer bounds');let r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,l.prototype),r}function h(e){if(e>=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||$(e,ArrayBuffer))return e.byteLength;if("string"!==typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Q(e).length;default:if(o)return r?-1:V(e).length;t=(""+t).toLowerCase(),o=!0}}function v(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return N(this,t,n);case"ascii":return D(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return C(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function y(e,t,n,r,o){if(0===e.length)return-1;if("string"===typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),G(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"===typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"===typeof t)return t&=255,"function"===typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){let a,i=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;i=2,s/=2,l/=2,n/=2}function c(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let r=-1;for(a=n;a<s;a++)if(c(e,a)===c(t,-1===r?0:a-r)){if(-1===r&&(r=a),a-r+1===l)return r*i}else-1!==r&&(a-=a-r),r=-1}else for(n+l>s&&(n=s-l),a=n;a>=0;a--){let n=!0;for(let r=0;r<l;r++)if(c(e,a+r)!==c(t,r)){n=!1;break}if(n)return a}return-1}function w(e,t,n,r){n=Number(n)||0;const o=e.length-n;r?(r=Number(r))>o&&(r=o):r=o;const a=t.length;let i;for(r>a/2&&(r=a/2),i=0;i<r;++i){const r=parseInt(t.substr(2*i,2),16);if(G(r))return i;e[n+i]=r}return i}function x(e,t,n,r){return K(V(t,e.length-n),e,n,r)}function k(e,t,n,r){return K(function(e){const t=[];for(let n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function S(e,t,n,r){return K(Q(t),e,n,r)}function E(e,t,n,r){return K(function(e,t){let n,r,o;const a=[];for(let i=0;i<e.length&&!((t-=2)<0);++i)n=e.charCodeAt(i),r=n>>8,o=n%256,a.push(o),a.push(r);return a}(t,e.length-n),e,n,r)}function C(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function N(e,t,n){n=Math.min(e.length,n);const r=[];let o=t;for(;o<n;){const t=e[o];let a=null,i=t>239?4:t>223?3:t>191?2:1;if(o+i<=n){let n,r,s,l;switch(i){case 1:t<128&&(a=t);break;case 2:n=e[o+1],128===(192&n)&&(l=(31&t)<<6|63&n,l>127&&(a=l));break;case 3:n=e[o+1],r=e[o+2],128===(192&n)&&128===(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(a=l));break;case 4:n=e[o+1],r=e[o+2],s=e[o+3],128===(192&n)&&128===(192&r)&&128===(192&s)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&s,l>65535&&l<1114112&&(a=l))}}null===a?(a=65533,i=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),o+=i}return function(e){const t=e.length;if(t<=j)return String.fromCharCode.apply(String,e);let n="",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=j));return n}(r)}l.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),l.TYPED_ARRAY_SUPPORT||"undefined"===typeof console||"function"!==typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(l.prototype,"parent",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,"offset",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(e,t,n){return c(e,t,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(e,t,n){return function(e,t,n){return u(e),e<=0?s(e):void 0!==t?"string"===typeof n?s(e).fill(t,n):s(e).fill(t):s(e)}(e,t,n)},l.allocUnsafe=function(e){return d(e)},l.allocUnsafeSlow=function(e){return d(e)},l.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==l.prototype},l.compare=function(e,t){if($(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),$(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let n=e.length,r=t.length;for(let o=0,a=Math.min(n,r);o<a;++o)if(e[o]!==t[o]){n=e[o],r=t[o];break}return n<r?-1:r<n?1:0},l.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},l.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return l.alloc(0);let n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;const r=l.allocUnsafe(t);let o=0;for(n=0;n<e.length;++n){let t=e[n];if($(t,Uint8Array))o+t.length>r.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,o)):Uint8Array.prototype.set.call(r,t,o);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(r,o)}o+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;t<e;t+=2)g(this,t,t+1);return this},l.prototype.swap32=function(){const e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},l.prototype.swap64=function(){const e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},l.prototype.toString=function(){const e=this.length;return 0===e?"":0===arguments.length?N(this,0,e):v.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){let e="";const n=t.IS;return e=this.toString("hex",0,n).replace(/(.{2})/g,"$1 ").trim(),this.length>n&&(e+=" ... "),"<Buffer "+e+">"},a&&(l.prototype[a]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,o){if($(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;let a=(o>>>=0)-(r>>>=0),i=(n>>>=0)-(t>>>=0);const s=Math.min(a,i),c=this.slice(r,o),u=e.slice(t,n);for(let l=0;l<s;++l)if(c[l]!==u[l]){a=c[l],i=u[l];break}return a<i?-1:i<a?1:0},l.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},l.prototype.indexOf=function(e,t,n){return y(this,e,t,n,!0)},l.prototype.lastIndexOf=function(e,t,n){return y(this,e,t,n,!1)},l.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"===typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}const o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let a=!1;for(;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return x(this,e,t,n);case"ascii":case"latin1":case"binary":return k(this,e,t,n);case"base64":return S(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const j=4096;function D(e,t,n){let r="";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(127&e[o]);return r}function P(e,t,n){let r="";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(e[o]);return r}function T(e,t,n){const r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);let o="";for(let a=t;a<n;++a)o+=X[e[a]];return o}function _(e,t,n){const r=e.slice(t,n);let o="";for(let a=0;a<r.length-1;a+=2)o+=String.fromCharCode(r[a]+256*r[a+1]);return o}function O(e,t,n){if(e%1!==0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,n,r,o,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||t<a)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function R(e,t,n,r,o){U(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,n}function A(e,t,n,r,o){U(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n+7]=a,a>>=8,e[n+6]=a,a>>=8,e[n+5]=a,a>>=8,e[n+4]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=i,i>>=8,e[n+2]=i,i>>=8,e[n+1]=i,i>>=8,e[n]=i,n+8}function L(e,t,n,r,o,a){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function I(e,t,n,r,a){return t=+t,n>>>=0,a||L(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function F(e,t,n,r,a){return t=+t,n>>>=0,a||L(e,0,n,8),o.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e);const r=this.subarray(e,t);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e],o=1,a=0;for(;++a<t&&(o*=256);)r+=this[e+a]*o;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e+--t],o=1;for(;t>0&&(o*=256);)r+=this[e+--t]*o;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(o)<<BigInt(32))})),l.prototype.readBigUInt64BE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<<BigInt(32))+BigInt(o)})),l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e],o=1,a=0;for(;++a<t&&(o*=256);)r+=this[e+a]*o;return o*=128,r>=o&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=t,o=1,a=this[e+--r];for(;r>0&&(o*=256);)a+=this[e+--r]*o;return o*=128,a>=o&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||O(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||O(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),l.prototype.readBigInt64BE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+n)})),l.prototype.readFloatLE=function(e,t){return e>>>=0,t||O(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||O(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||O(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||O(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){M(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=1,a=0;for(this[t]=255&e;++a<n&&(o*=256);)this[t+a]=e/o&255;return t+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){M(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=n-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=J((function(e){return R(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=J((function(e){return A(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);M(this,e,t,n,r-1,-r)}let o=0,a=1,i=0;for(this[t]=255&e;++o<n&&(a*=256);)e<0&&0===i&&0!==this[t+o-1]&&(i=1),this[t+o]=(e/a|0)-i&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);M(this,e,t,n,r-1,-r)}let o=n-1,a=1,i=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/a|0)-i&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=J((function(e){return R(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=J((function(e){return A(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return I(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return I(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return F(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return F(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);const o=r-n;return this===e&&"function"===typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),o},l.prototype.fill=function(e,t,n,r){if("string"===typeof e){if("string"===typeof t?(r=t,t=0,n=this.length):"string"===typeof n&&(r=n,n=this.length),void 0!==r&&"string"!==typeof r)throw new TypeError("encoding must be a string");if("string"===typeof r&&!l.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===e.length){const t=e.charCodeAt(0);("utf8"===r&&t<128||"latin1"===r)&&(e=t)}}else"number"===typeof e?e&=255:"boolean"===typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;let o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"===typeof e)for(o=t;o<n;++o)this[o]=e;else{const a=l.isBuffer(e)?e:l.from(e,r),i=a.length;if(0===i)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(o=0;o<n-t;++o)this[o+t]=a[o%i]}return this};const z={};function B(e,t,n){z[e]=class extends n{constructor(){super(),Object.defineProperty(this,"message",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name="".concat(this.name," [").concat(e,"]"),this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return"".concat(this.name," [").concat(e,"]: ").concat(this.message)}}}function H(e){let t="",n=e.length;const r="-"===e[0]?1:0;for(;n>=r+4;n-=3)t="_".concat(e.slice(n-3,n)).concat(t);return"".concat(e.slice(0,n)).concat(t)}function U(e,t,n,r,o,a){if(e>n||e<t){const r="bigint"===typeof t?"n":"";let o;throw o=a>3?0===t||t===BigInt(0)?">= 0".concat(r," and < 2").concat(r," ** ").concat(8*(a+1)).concat(r):">= -(2".concat(r," ** ").concat(8*(a+1)-1).concat(r,") and < 2 ** ")+"".concat(8*(a+1)-1).concat(r):">= ".concat(t).concat(r," and <= ").concat(n).concat(r),new z.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,n){Y(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||W(t,e.length-(n+1))}(r,o,a)}function Y(e,t){if("number"!==typeof e)throw new z.ERR_INVALID_ARG_TYPE(t,"number",e)}function W(e,t,n){if(Math.floor(e)!==e)throw Y(e,n),new z.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new z.ERR_BUFFER_OUT_OF_BOUNDS;throw new z.ERR_OUT_OF_RANGE(n||"offset",">= ".concat(n?1:0," and <= ").concat(t),e)}B("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?"".concat(e," is outside of buffer bounds"):"Attempt to access memory outside buffer bounds"}),RangeError),B("ERR_INVALID_ARG_TYPE",(function(e,t){return'The "'.concat(e,'" argument must be of type number. Received type ').concat(typeof t)}),TypeError),B("ERR_OUT_OF_RANGE",(function(e,t,n){let r='The value of "'.concat(e,'" is out of range.'),o=n;return Number.isInteger(n)&&Math.abs(n)>2**32?o=H(String(n)):"bigint"===typeof n&&(o=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(o=H(o)),o+="n"),r+=" It must be ".concat(t,". Received ").concat(o),r}),RangeError);const q=/[^+/0-9A-Za-z-_]/g;function V(e,t){let n;t=t||1/0;const r=e.length;let o=null;const a=[];for(let i=0;i<r;++i){if(n=e.charCodeAt(i),n>55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(i+1===r){(t-=3)>-1&&a.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&a.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function Q(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(q,"")).length<2)return"";for(;e.length%4!==0;)e+="=";return e}(e))}function K(e,t,n,r){let o;for(o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function $(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function G(e){return e!==e}const X=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let o=0;o<16;++o)t[r+o]=e[n]+e[o]}return t}();function J(e){return"undefined"===typeof BigInt?Z:e}function Z(){throw new Error("BigInt not supported")}},483:(e,t,n)=>{"use strict";e.exports=n(592)},556:(e,t,n)=>{"use strict";var r=n(557),o=n(483),a=n(998);function i(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function s(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function l(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!==(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function c(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function u(e){if(l(e)!==e)throw Error(i(188))}function d(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e;for(e=e.child;null!==e;){if(null!==(t=d(e)))return t;e=e.sibling}return null}var f=Object.assign,p=Symbol.for("react.element"),h=Symbol.for("react.transitional.element"),m=Symbol.for("react.portal"),v=Symbol.for("react.fragment"),g=Symbol.for("react.strict_mode"),y=Symbol.for("react.profiler"),b=Symbol.for("react.provider"),w=Symbol.for("react.consumer"),x=Symbol.for("react.context"),k=Symbol.for("react.forward_ref"),S=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),C=Symbol.for("react.memo"),N=Symbol.for("react.lazy");Symbol.for("react.scope");var j=Symbol.for("react.activity");Symbol.for("react.legacy_hidden"),Symbol.for("react.tracing_marker");var D=Symbol.for("react.memo_cache_sentinel");Symbol.for("react.view_transition");var P=Symbol.iterator;function T(e){return null===e||"object"!==typeof e?null:"function"===typeof(e=P&&e[P]||e["@@iterator"])?e:null}var _=Symbol.for("react.client.reference");function O(e){if(null==e)return null;if("function"===typeof e)return e.$$typeof===_?null:e.displayName||e.name||null;if("string"===typeof e)return e;switch(e){case v:return"Fragment";case y:return"Profiler";case g:return"StrictMode";case S:return"Suspense";case E:return"SuspenseList";case j:return"Activity"}if("object"===typeof e)switch(e.$$typeof){case m:return"Portal";case x:return(e.displayName||"Context")+".Provider";case w:return(e._context.displayName||"Context")+".Consumer";case k:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case C:return null!==(t=e.displayName||null)?t:O(e.type)||"Memo";case N:t=e._payload,e=e._init;try{return O(e(t))}catch(n){}}return null}var M=Array.isArray,R=o.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,A=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,L={pending:!1,data:null,method:null,action:null},I=[],F=-1;function z(e){return{current:e}}function B(e){0>F||(e.current=I[F],I[F]=null,F--)}function H(e,t){F++,I[F]=e.current,e.current=t}var U=z(null),Y=z(null),W=z(null),q=z(null);function V(e,t){switch(H(W,t),H(Y,e),H(U,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?od(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)e=ad(t=od(t),e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}B(U),H(U,e)}function Q(){B(U),B(Y),B(W)}function K(e){null!==e.memoizedState&&H(q,e);var t=U.current,n=ad(t,e.type);t!==n&&(H(Y,e),H(U,n))}function $(e){Y.current===e&&(B(U),B(Y)),q.current===e&&(B(q),Kd._currentValue=L)}var G=Object.prototype.hasOwnProperty,X=r.unstable_scheduleCallback,J=r.unstable_cancelCallback,Z=r.unstable_shouldYield,ee=r.unstable_requestPaint,te=r.unstable_now,ne=r.unstable_getCurrentPriorityLevel,re=r.unstable_ImmediatePriority,oe=r.unstable_UserBlockingPriority,ae=r.unstable_NormalPriority,ie=r.unstable_LowPriority,se=r.unstable_IdlePriority,le=r.log,ce=r.unstable_setDisableYieldValue,ue=null,de=null;function fe(e){if("function"===typeof le&&ce(e),de&&"function"===typeof de.setStrictMode)try{de.setStrictMode(ue,e)}catch(t){}}var pe=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(he(e)/me|0)|0},he=Math.log,me=Math.LN2;var ve=256,ge=4194304;function ye(e){var t=42&e;if(0!==t)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 16777216:case 33554432:return 62914560&e;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function be(e,t,n){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var s=134217727&r;return 0!==s?0!==(r=s&~a)?o=ye(r):0!==(i&=s)?o=ye(i):n||0!==(n=s&~e)&&(o=ye(n)):0!==(s=r&~a)?o=ye(s):0!==i?o=ye(i):n||0!==(n=r&~e)&&(o=ye(n)),0===o?0:0!==t&&t!==o&&0===(t&a)&&((a=o&-o)>=(n=t&-t)||32===a&&0!==(4194048&n))?t:o}function we(e,t){return 0===(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)}function xe(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function ke(){var e=ve;return 0===(4194048&(ve<<=1))&&(ve=256),e}function Se(){var e=ge;return 0===(62914560&(ge<<=1))&&(ge=4194304),e}function Ee(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ce(e,t){e.pendingLanes|=t,268435456!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ne(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-pe(t);e.entangledLanes|=t,e.entanglements[r]=1073741824|e.entanglements[r]|4194090&n}function je(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-pe(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}function De(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Pe(e){return 2<(e&=-e)?8<e?0!==(134217727&e)?32:268435456:8:2}function Te(){var e=A.p;return 0!==e?e:void 0===(e=window.event)?32:uf(e.type)}var _e=Math.random().toString(36).slice(2),Oe="__reactFiber$"+_e,Me="__reactProps$"+_e,Re="__reactContainer$"+_e,Ae="__reactEvents$"+_e,Le="__reactListeners$"+_e,Ie="__reactHandles$"+_e,Fe="__reactResources$"+_e,ze="__reactMarker$"+_e;function Be(e){delete e[Oe],delete e[Me],delete e[Ae],delete e[Le],delete e[Ie]}function He(e){var t=e[Oe];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Re]||n[Oe]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=bd(e);null!==e;){if(n=e[Oe])return n;e=bd(e)}return t}n=(e=n).parentNode}return null}function Ue(e){if(e=e[Oe]||e[Re]){var t=e.tag;if(5===t||6===t||13===t||26===t||27===t||3===t)return e}return null}function Ye(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e.stateNode;throw Error(i(33))}function We(e){var t=e[Fe];return t||(t=e[Fe]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function qe(e){e[ze]=!0}var Ve=new Set,Qe={};function Ke(e,t){$e(e,t),$e(e+"Capture",t)}function $e(e,t){for(Qe[e]=t,e=0;e<t.length;e++)Ve.add(t[e])}var Ge,Xe,Je=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Ze={},et={};function tt(e,t,n){if(o=t,G.call(et,o)||!G.call(Ze,o)&&(Je.test(o)?et[o]=!0:(Ze[o]=!0,0)))if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":return void e.removeAttribute(t);case"boolean":var r=t.toLowerCase().slice(0,5);if("data-"!==r&&"aria-"!==r)return void e.removeAttribute(t)}e.setAttribute(t,""+n)}var o}function nt(e,t,n){if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(t)}e.setAttribute(t,""+n)}}function rt(e,t,n,r){if(null===r)e.removeAttribute(n);else{switch(typeof r){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(n)}e.setAttributeNS(t,n,""+r)}}function ot(e){if(void 0===Ge)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Ge=t&&t[1]||"",Xe=-1<n.stack.indexOf("\n    at")?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return"\n"+Ge+e+Xe}var at=!1;function it(e,t){if(!e||at)return"";at=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(o){var r=o}Reflect.construct(e,[],n)}else{try{n.call()}catch(a){r=a}e.call(n.prototype)}}else{try{throw Error()}catch(i){r=i}(n=e())&&"function"===typeof n.catch&&n.catch((function(){}))}}catch(s){if(s&&r&&"string"===typeof s.stack)return[s.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,"name");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var a=r.DetermineComponentFrameRoot(),i=a[0],s=a[1];if(i&&s){var l=i.split("\n"),c=s.split("\n");for(o=r=0;r<l.length&&!l[r].includes("DetermineComponentFrameRoot");)r++;for(;o<c.length&&!c[o].includes("DetermineComponentFrameRoot");)o++;if(r===l.length||o===c.length)for(r=l.length-1,o=c.length-1;1<=r&&0<=o&&l[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(l[r]!==c[o]){if(1!==r||1!==o)do{if(r--,0>--o||l[r]!==c[o]){var u="\n"+l[r].replace(" at new "," at ");return e.displayName&&u.includes("<anonymous>")&&(u=u.replace("<anonymous>",e.displayName)),u}}while(1<=r&&0<=o);break}}}finally{at=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ot(n):""}function st(e){switch(e.tag){case 26:case 27:case 5:return ot(e.type);case 16:return ot("Lazy");case 13:return ot("Suspense");case 19:return ot("SuspenseList");case 0:case 15:return it(e.type,!1);case 11:return it(e.type.render,!1);case 1:return it(e.type,!0);case 31:return ot("Activity");default:return""}}function lt(e){try{var t="";do{t+=st(e),e=e.return}while(e);return t}catch(n){return"\nError generating stack: "+n.message+"\n"+n.stack}}function ct(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function ut(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function dt(e){e._valueTracker||(e._valueTracker=function(e){var t=ut(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&"undefined"!==typeof n&&"function"===typeof n.get&&"function"===typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function ft(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ut(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function pt(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}var ht=/[\n"\\]/g;function mt(e){return e.replace(ht,(function(e){return"\\"+e.charCodeAt(0).toString(16)+" "}))}function vt(e,t,n,r,o,a,i,s){e.name="",null!=i&&"function"!==typeof i&&"symbol"!==typeof i&&"boolean"!==typeof i?e.type=i:e.removeAttribute("type"),null!=t?"number"===i?(0===t&&""===e.value||e.value!=t)&&(e.value=""+ct(t)):e.value!==""+ct(t)&&(e.value=""+ct(t)):"submit"!==i&&"reset"!==i||e.removeAttribute("value"),null!=t?yt(e,i,ct(t)):null!=n?yt(e,i,ct(n)):null!=r&&e.removeAttribute("value"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&"function"!==typeof o&&"symbol"!==typeof o),null!=s&&"function"!==typeof s&&"symbol"!==typeof s&&"boolean"!==typeof s?e.name=""+ct(s):e.removeAttribute("name")}function gt(e,t,n,r,o,a,i,s){if(null!=a&&"function"!==typeof a&&"symbol"!==typeof a&&"boolean"!==typeof a&&(e.type=a),null!=t||null!=n){if(!("submit"!==a&&"reset"!==a||void 0!==t&&null!==t))return;n=null!=n?""+ct(n):"",t=null!=t?""+ct(t):n,s||t===e.value||(e.value=t),e.defaultValue=t}r="function"!==typeof(r=null!=r?r:o)&&"symbol"!==typeof r&&!!r,e.checked=s?e.checked:!!r,e.defaultChecked=!!r,null!=i&&"function"!==typeof i&&"symbol"!==typeof i&&"boolean"!==typeof i&&(e.name=i)}function yt(e,t,n){"number"===t&&pt(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function bt(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ct(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function wt(e,t,n){null==t||((t=""+ct(t))!==e.value&&(e.value=t),null!=n)?e.defaultValue=null!=n?""+ct(n):"":e.defaultValue!==t&&(e.defaultValue=t)}function xt(e,t,n,r){if(null==t){if(null!=r){if(null!=n)throw Error(i(92));if(M(r)){if(1<r.length)throw Error(i(93));r=r[0]}n=r}null==n&&(n=""),t=n}n=ct(t),e.defaultValue=n,(r=e.textContent)===n&&""!==r&&null!==r&&(e.value=r)}function kt(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var St=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function Et(e,t,n){var r=0===t.indexOf("--");null==n||"boolean"===typeof n||""===n?r?e.setProperty(t,""):"float"===t?e.cssFloat="":e[t]="":r?e.setProperty(t,n):"number"!==typeof n||0===n||St.has(t)?"float"===t?e.cssFloat=n:e[t]=(""+n).trim():e[t]=n+"px"}function Ct(e,t,n){if(null!=t&&"object"!==typeof t)throw Error(i(62));if(e=e.style,null!=n){for(var r in n)!n.hasOwnProperty(r)||null!=t&&t.hasOwnProperty(r)||(0===r.indexOf("--")?e.setProperty(r,""):"float"===r?e.cssFloat="":e[r]="");for(var o in t)r=t[o],t.hasOwnProperty(o)&&n[o]!==r&&Et(e,o,r)}else for(var a in t)t.hasOwnProperty(a)&&Et(e,a,t[a])}function Nt(e){if(-1===e.indexOf("-"))return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var jt=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),Dt=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Pt(e){return Dt.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}var Tt=null;function _t(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ot=null,Mt=null;function Rt(e){var t=Ue(e);if(t&&(e=t.stateNode)){var n=e[Me]||null;e:switch(e=t.stateNode,t.type){case"input":if(vt(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name="'+mt(""+t)+'"][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=r[Me]||null;if(!o)throw Error(i(90));vt(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(t=0;t<n.length;t++)(r=n[t]).form===e.form&&ft(r)}break e;case"textarea":wt(e,n.value,n.defaultValue);break e;case"select":null!=(t=n.value)&&bt(e,!!n.multiple,t,!1)}}}var At=!1;function Lt(e,t,n){if(At)return e(t,n);At=!0;try{return e(t)}finally{if(At=!1,(null!==Ot||null!==Mt)&&(Hc(),Ot&&(t=Ot,e=Mt,Mt=Ot=null,Rt(t),e)))for(t=0;t<e.length;t++)Rt(e[t])}}function It(e,t){var n=e.stateNode;if(null===n)return null;var r=n[Me]||null;if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!==typeof n)throw Error(i(231,t,typeof n));return n}var Ft=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement),zt=!1;if(Ft)try{var Bt={};Object.defineProperty(Bt,"passive",{get:function(){zt=!0}}),window.addEventListener("test",Bt,Bt),window.removeEventListener("test",Bt,Bt)}catch(Rf){zt=!1}var Ht=null,Ut=null,Yt=null;function Wt(){if(Yt)return Yt;var e,t,n=Ut,r=n.length,o="value"in Ht?Ht.value:Ht.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Yt=o.slice(e,1<t?1-t:void 0)}function qt(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function Vt(){return!0}function Qt(){return!1}function Kt(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?Vt:Qt,this.isPropagationStopped=Qt,this}return f(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Vt)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Vt)},persist:function(){},isPersistent:Vt}),t}var $t,Gt,Xt,Jt={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Zt=Kt(Jt),en=f({},Jt,{view:0,detail:0}),tn=Kt(en),nn=f({},en,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:hn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Xt&&(Xt&&"mousemove"===e.type?($t=e.screenX-Xt.screenX,Gt=e.screenY-Xt.screenY):Gt=$t=0,Xt=e),$t)},movementY:function(e){return"movementY"in e?e.movementY:Gt}}),rn=Kt(nn),on=Kt(f({},nn,{dataTransfer:0})),an=Kt(f({},en,{relatedTarget:0})),sn=Kt(f({},Jt,{animationName:0,elapsedTime:0,pseudoElement:0})),ln=Kt(f({},Jt,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),cn=Kt(f({},Jt,{data:0})),un={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},dn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},fn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function pn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=fn[e])&&!!t[e]}function hn(){return pn}var mn=Kt(f({},en,{key:function(e){if(e.key){var t=un[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=qt(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?dn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:hn,charCode:function(e){return"keypress"===e.type?qt(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?qt(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),vn=Kt(f({},nn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),gn=Kt(f({},en,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:hn})),yn=Kt(f({},Jt,{propertyName:0,elapsedTime:0,pseudoElement:0})),bn=Kt(f({},nn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),wn=Kt(f({},Jt,{newState:0,oldState:0})),xn=[9,13,27,32],kn=Ft&&"CompositionEvent"in window,Sn=null;Ft&&"documentMode"in document&&(Sn=document.documentMode);var En=Ft&&"TextEvent"in window&&!Sn,Cn=Ft&&(!kn||Sn&&8<Sn&&11>=Sn),Nn=String.fromCharCode(32),jn=!1;function Dn(e,t){switch(e){case"keyup":return-1!==xn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Pn(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var Tn=!1;var _n={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function On(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!_n[e.type]:"textarea"===t}function Mn(e,t,n,r){Ot?Mt?Mt.push(r):Mt=[r]:Ot=r,0<(t=Wu(t,"onChange")).length&&(n=new Zt("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Rn=null,An=null;function Ln(e){Lu(e,0)}function In(e){if(ft(Ye(e)))return e}function Fn(e,t){if("change"===e)return t}var zn=!1;if(Ft){var Bn;if(Ft){var Hn="oninput"in document;if(!Hn){var Un=document.createElement("div");Un.setAttribute("oninput","return;"),Hn="function"===typeof Un.oninput}Bn=Hn}else Bn=!1;zn=Bn&&(!document.documentMode||9<document.documentMode)}function Yn(){Rn&&(Rn.detachEvent("onpropertychange",Wn),An=Rn=null)}function Wn(e){if("value"===e.propertyName&&In(An)){var t=[];Mn(t,An,e,_t(e)),Lt(Ln,t)}}function qn(e,t,n){"focusin"===e?(Yn(),An=n,(Rn=t).attachEvent("onpropertychange",Wn)):"focusout"===e&&Yn()}function Vn(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return In(An)}function Qn(e,t){if("click"===e)return In(t)}function Kn(e,t){if("input"===e||"change"===e)return In(t)}var $n="function"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t};function Gn(e,t){if($n(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!G.call(t,o)||!$n(e[o],t[o]))return!1}return!0}function Xn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Jn(e,t){var n,r=Xn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Xn(r)}}function Zn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?Zn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function er(e){for(var t=pt((e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window).document);t instanceof e.HTMLIFrameElement;){try{var n="string"===typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=pt((e=t.contentWindow).document)}return t}function tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var nr=Ft&&"documentMode"in document&&11>=document.documentMode,rr=null,or=null,ar=null,ir=!1;function sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ir||null==rr||rr!==pt(r)||("selectionStart"in(r=rr)&&tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},ar&&Gn(ar,r)||(ar=r,0<(r=Wu(or,"onSelect")).length&&(t=new Zt("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=rr)))}function lr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var cr={animationend:lr("Animation","AnimationEnd"),animationiteration:lr("Animation","AnimationIteration"),animationstart:lr("Animation","AnimationStart"),transitionrun:lr("Transition","TransitionRun"),transitionstart:lr("Transition","TransitionStart"),transitioncancel:lr("Transition","TransitionCancel"),transitionend:lr("Transition","TransitionEnd")},ur={},dr={};function fr(e){if(ur[e])return ur[e];if(!cr[e])return e;var t,n=cr[e];for(t in n)if(n.hasOwnProperty(t)&&t in dr)return ur[e]=n[t];return e}Ft&&(dr=document.createElement("div").style,"AnimationEvent"in window||(delete cr.animationend.animation,delete cr.animationiteration.animation,delete cr.animationstart.animation),"TransitionEvent"in window||delete cr.transitionend.transition);var pr=fr("animationend"),hr=fr("animationiteration"),mr=fr("animationstart"),vr=fr("transitionrun"),gr=fr("transitionstart"),yr=fr("transitioncancel"),br=fr("transitionend"),wr=new Map,xr="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function kr(e,t){wr.set(e,t),Ke(t,[e])}xr.push("scrollEnd");var Sr=new WeakMap;function Er(e,t){if("object"===typeof e&&null!==e){var n=Sr.get(e);return void 0!==n?n:(t={value:e,source:t,stack:lt(t)},Sr.set(e,t),t)}return{value:e,source:t,stack:lt(t)}}var Cr=[],Nr=0,jr=0;function Dr(){for(var e=Nr,t=jr=Nr=0;t<e;){var n=Cr[t];Cr[t++]=null;var r=Cr[t];Cr[t++]=null;var o=Cr[t];Cr[t++]=null;var a=Cr[t];if(Cr[t++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&Or(n,o,a)}}function Pr(e,t,n,r){Cr[Nr++]=e,Cr[Nr++]=t,Cr[Nr++]=n,Cr[Nr++]=r,jr|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function Tr(e,t,n,r){return Pr(e,t,n,r),Mr(e)}function _r(e,t){return Pr(e,null,null,t),Mr(e)}function Or(e,t,n){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n);for(var o=!1,a=e.return;null!==a;)a.childLanes|=n,null!==(r=a.alternate)&&(r.childLanes|=n),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==t&&(o=31-pe(n),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[t]:r.push(t),t.lane=536870912|n),a):null}function Mr(e){if(50<Oc)throw Oc=0,Mc=null,Error(i(185));for(var t=e.return;null!==t;)t=(e=t).return;return 3===e.tag?e.stateNode:null}var Rr={};function Ar(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Lr(e,t,n,r){return new Ar(e,t,n,r)}function Ir(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Fr(e,t){var n=e.alternate;return null===n?((n=Lr(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=65011712&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function zr(e,t){e.flags&=65011714;var n=e.alternate;return null===n?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Br(e,t,n,r,o,a){var s=0;if(r=e,"function"===typeof e)Ir(e)&&(s=1);else if("string"===typeof e)s=function(e,t,n){if(1===n||null!=t.itemProp)return!1;switch(e){case"meta":case"title":return!0;case"style":if("string"!==typeof t.precedence||"string"!==typeof t.href||""===t.href)break;return!0;case"link":if("string"!==typeof t.rel||"string"!==typeof t.href||""===t.href||t.onLoad||t.onError)break;return"stylesheet"!==t.rel||(e=t.disabled,"string"===typeof t.precedence&&null==e);case"script":if(t.async&&"function"!==typeof t.async&&"symbol"!==typeof t.async&&!t.onLoad&&!t.onError&&t.src&&"string"===typeof t.src)return!0}return!1}(e,n,U.current)?26:"html"===e||"head"===e||"body"===e?27:5;else e:switch(e){case j:return(e=Lr(31,n,t,o)).elementType=j,e.lanes=a,e;case v:return Hr(n.children,o,a,t);case g:s=8,o|=24;break;case y:return(e=Lr(12,n,t,2|o)).elementType=y,e.lanes=a,e;case S:return(e=Lr(13,n,t,o)).elementType=S,e.lanes=a,e;case E:return(e=Lr(19,n,t,o)).elementType=E,e.lanes=a,e;default:if("object"===typeof e&&null!==e)switch(e.$$typeof){case b:case x:s=10;break e;case w:s=9;break e;case k:s=11;break e;case C:s=14;break e;case N:s=16,r=null;break e}s=29,n=Error(i(130,null===e?"null":typeof e,"")),r=null}return(t=Lr(s,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function Hr(e,t,n,r){return(e=Lr(7,e,r,t)).lanes=n,e}function Ur(e,t,n){return(e=Lr(6,e,null,t)).lanes=n,e}function Yr(e,t,n){return(t=Lr(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var Wr=[],qr=0,Vr=null,Qr=0,Kr=[],$r=0,Gr=null,Xr=1,Jr="";function Zr(e,t){Wr[qr++]=Qr,Wr[qr++]=Vr,Vr=e,Qr=t}function eo(e,t,n){Kr[$r++]=Xr,Kr[$r++]=Jr,Kr[$r++]=Gr,Gr=e;var r=Xr;e=Jr;var o=32-pe(r)-1;r&=~(1<<o),n+=1;var a=32-pe(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xr=1<<32-pe(t)+o|n<<o|r,Jr=a+e}else Xr=1<<a|n<<o|r,Jr=e}function to(e){null!==e.return&&(Zr(e,1),eo(e,1,0))}function no(e){for(;e===Vr;)Vr=Wr[--qr],Wr[qr]=null,Qr=Wr[--qr],Wr[qr]=null;for(;e===Gr;)Gr=Kr[--$r],Kr[$r]=null,Jr=Kr[--$r],Kr[$r]=null,Xr=Kr[--$r],Kr[$r]=null}var ro=null,oo=null,ao=!1,io=null,so=!1,lo=Error(i(519));function co(e){throw vo(Er(Error(i(418,"")),e)),lo}function uo(e){var t=e.stateNode,n=e.type,r=e.memoizedProps;switch(t[Oe]=e,t[Me]=r,n){case"dialog":Iu("cancel",t),Iu("close",t);break;case"iframe":case"object":case"embed":Iu("load",t);break;case"video":case"audio":for(n=0;n<Ru.length;n++)Iu(Ru[n],t);break;case"source":Iu("error",t);break;case"img":case"image":case"link":Iu("error",t),Iu("load",t);break;case"details":Iu("toggle",t);break;case"input":Iu("invalid",t),gt(t,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0),dt(t);break;case"select":Iu("invalid",t);break;case"textarea":Iu("invalid",t),xt(t,r.value,r.defaultValue,r.children),dt(t)}"string"!==typeof(n=r.children)&&"number"!==typeof n&&"bigint"!==typeof n||t.textContent===""+n||!0===r.suppressHydrationWarning||Gu(t.textContent,n)?(null!=r.popover&&(Iu("beforetoggle",t),Iu("toggle",t)),null!=r.onScroll&&Iu("scroll",t),null!=r.onScrollEnd&&Iu("scrollend",t),null!=r.onClick&&(t.onclick=Xu),t=!0):t=!1,t||co(e)}function fo(e){for(ro=e.return;ro;)switch(ro.tag){case 5:case 13:return void(so=!1);case 27:case 3:return void(so=!0);default:ro=ro.return}}function po(e){if(e!==ro)return!1;if(!ao)return fo(e),ao=!0,!1;var t,n=e.tag;if((t=3!==n&&27!==n)&&((t=5===n)&&(t=!("form"!==(t=e.type)&&"button"!==t)||id(e.type,e.memoizedProps)),t=!t),t&&oo&&co(e),fo(e),13===n){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,n=0;e;){if(8===e.nodeType)if("/$"===(t=e.data)){if(0===n){oo=gd(e.nextSibling);break e}n--}else"$"!==t&&"$!"!==t&&"$?"!==t||n++;e=e.nextSibling}oo=null}}else 27===n?(n=oo,pd(e.type)?(e=yd,yd=null,oo=e):oo=n):oo=ro?gd(e.stateNode.nextSibling):null;return!0}function ho(){oo=ro=null,ao=!1}function mo(){var e=io;return null!==e&&(null===bc?bc=e:bc.push.apply(bc,e),io=null),e}function vo(e){null===io?io=[e]:io.push(e)}var go=z(null),yo=null,bo=null;function wo(e,t,n){H(go,t._currentValue),t._currentValue=n}function xo(e){e._currentValue=go.current,B(go)}function ko(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function So(e,t,n,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var s=o.child;a=a.firstContext;e:for(;null!==a;){var l=a;a=o;for(var c=0;c<t.length;c++)if(l.context===t[c]){a.lanes|=n,null!==(l=a.alternate)&&(l.lanes|=n),ko(a.return,n,e),r||(s=null);break e}a=l.next}}else if(18===o.tag){if(null===(s=o.return))throw Error(i(341));s.lanes|=n,null!==(a=s.alternate)&&(a.lanes|=n),ko(s,n,e),s=null}else s=o.child;if(null!==s)s.return=o;else for(s=o;null!==s;){if(s===e){s=null;break}if(null!==(o=s.sibling)){o.return=s.return,s=o;break}s=s.return}o=s}}function Eo(e,t,n,r){e=null;for(var o=t,a=!1;null!==o;){if(!a)if(0!==(524288&o.flags))a=!0;else if(0!==(262144&o.flags))break;if(10===o.tag){var s=o.alternate;if(null===s)throw Error(i(387));if(null!==(s=s.memoizedProps)){var l=o.type;$n(o.pendingProps.value,s.value)||(null!==e?e.push(l):e=[l])}}else if(o===q.current){if(null===(s=o.alternate))throw Error(i(387));s.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(Kd):e=[Kd])}o=o.return}null!==e&&So(t,e,n,r),t.flags|=262144}function Co(e){for(e=e.firstContext;null!==e;){if(!$n(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function No(e){yo=e,bo=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function jo(e){return Po(yo,e)}function Do(e,t){return null===yo&&No(e),Po(e,t)}function Po(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},null===bo){if(null===e)throw Error(i(308));bo=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else bo=bo.next=t;return n}var To="undefined"!==typeof AbortController?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach((function(e){return e()}))}},_o=r.unstable_scheduleCallback,Oo=r.unstable_NormalPriority,Mo={$$typeof:x,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Ro(){return{controller:new To,data:new Map,refCount:0}}function Ao(e){e.refCount--,0===e.refCount&&_o(Oo,(function(){e.controller.abort()}))}var Lo=null,Io=0,Fo=0,zo=null;function Bo(){if(0===--Io&&null!==Lo){null!==zo&&(zo.status="fulfilled");var e=Lo;Lo=null,Fo=0,zo=null;for(var t=0;t<e.length;t++)(0,e[t])()}}var Ho=R.S;R.S=function(e,t){"object"===typeof t&&null!==t&&"function"===typeof t.then&&function(e,t){if(null===Lo){var n=Lo=[];Io=0,Fo=Pu(),zo={status:"pending",value:void 0,then:function(e){n.push(e)}}}Io++,t.then(Bo,Bo)}(0,t),null!==Ho&&Ho(e,t)};var Uo=z(null);function Yo(){var e=Uo.current;return null!==e?e:rc.pooledCache}function Wo(e,t){H(Uo,null===t?Uo.current:t.pool)}function qo(){var e=Yo();return null===e?null:{parent:Mo._currentValue,pool:e}}var Vo=Error(i(460)),Qo=Error(i(474)),Ko=Error(i(542)),$o={then:function(){}};function Go(e){return"fulfilled"===(e=e.status)||"rejected"===e}function Xo(){}function Jo(e,t,n){switch(void 0===(n=e[n])?e.push(t):n!==t&&(t.then(Xo,Xo),t=n),t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e;default:if("string"===typeof t.status)t.then(Xo,Xo);else{if(null!==(e=rc)&&100<e.shellSuspendCounter)throw Error(i(482));(e=t).status="pending",e.then((function(e){if("pending"===t.status){var n=t;n.status="fulfilled",n.value=e}}),(function(e){if("pending"===t.status){var n=t;n.status="rejected",n.reason=e}}))}switch(t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e}throw Zo=t,Vo}}var Zo=null;function ea(){if(null===Zo)throw Error(i(459));var e=Zo;return Zo=null,e}function ta(e){if(e===Vo||e===Ko)throw Error(i(483))}var na=!1;function ra(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function oa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function aa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ia(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!==(2&nc)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,t=Mr(e),Or(e,null,n),t}return Pr(e,r,t,n),Mr(e)}function sa(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!==(4194048&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,je(e,n)}}function la(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var ca=!1;function ua(){if(ca){if(null!==zo)throw zo}}function da(e,t,n,r){ca=!1;var o=e.updateQueue;na=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=-536870913&s.lane,h=p!==s.lane;if(h?(ac&p)===p:(r&p)===p){0!==p&&p===Fo&&(ca=!0),null!==u&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});e:{var m=e,v=s;p=t;var g=n;switch(v.tag){case 1:if("function"===typeof(m=v.payload)){d=m.call(g,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null===(p="function"===typeof(m=v.payload)?m.call(g,d,p):m)||void 0===p)break e;d=f({},d,p);break e;case 2:na=!0}}null!==(p=s.callback)&&(e.flags|=64,h&&(e.flags|=8192),null===(h=o.callbacks)?o.callbacks=[p]:h.push(p))}else h={lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=h,l=d):u=u.next=h,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(h=s).next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}}null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),pc|=i,e.lanes=i,e.memoizedState=d}}function fa(e,t){if("function"!==typeof e)throw Error(i(191,e));e.call(t)}function pa(e,t){var n=e.callbacks;if(null!==n)for(e.callbacks=null,e=0;e<n.length;e++)fa(n[e],t)}var ha=z(null),ma=z(0);function va(e,t){H(ma,e=dc),H(ha,t),dc=e|t.baseLanes}function ga(){H(ma,dc),H(ha,ha.current)}function ya(){dc=ma.current,B(ha),B(ma)}var ba=0,wa=null,xa=null,ka=null,Sa=!1,Ea=!1,Ca=!1,Na=0,ja=0,Da=null,Pa=0;function Ta(){throw Error(i(321))}function _a(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!$n(e[n],t[n]))return!1;return!0}function Oa(e,t,n,r,o,a){return ba=a,wa=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,R.H=null===e||null===e.memoizedState?Vi:Qi,Ca=!1,a=n(r,o),Ca=!1,Ea&&(a=Ra(t,n,r,o)),Ma(e),a}function Ma(e){R.H=qi;var t=null!==xa&&null!==xa.next;if(ba=0,ka=xa=wa=null,Sa=!1,ja=0,Da=null,t)throw Error(i(300));null===e||js||null!==(e=e.dependencies)&&Co(e)&&(js=!0)}function Ra(e,t,n,r){wa=e;var o=0;do{if(Ea&&(Da=null),ja=0,Ea=!1,25<=o)throw Error(i(301));if(o+=1,ka=xa=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}R.H=Ki,a=t(n,r)}while(Ea);return a}function Aa(){var e=R.H,t=e.useState()[0];return t="function"===typeof t.then?Ha(t):t,e=e.useState()[0],(null!==xa?xa.memoizedState:null)!==e&&(wa.flags|=1024),t}function La(){var e=0!==Na;return Na=0,e}function Ia(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function Fa(e){if(Sa){for(e=e.memoizedState;null!==e;){var t=e.queue;null!==t&&(t.pending=null),e=e.next}Sa=!1}ba=0,ka=xa=wa=null,Ea=!1,ja=Na=0,Da=null}function za(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ka?wa.memoizedState=ka=e:ka=ka.next=e,ka}function Ba(){if(null===xa){var e=wa.alternate;e=null!==e?e.memoizedState:null}else e=xa.next;var t=null===ka?wa.memoizedState:ka.next;if(null!==t)ka=t,xa=e;else{if(null===e){if(null===wa.alternate)throw Error(i(467));throw Error(i(310))}e={memoizedState:(xa=e).memoizedState,baseState:xa.baseState,baseQueue:xa.baseQueue,queue:xa.queue,next:null},null===ka?wa.memoizedState=ka=e:ka=ka.next=e}return ka}function Ha(e){var t=ja;return ja+=1,null===Da&&(Da=[]),e=Jo(Da,e,t),t=wa,null===(null===ka?t.memoizedState:ka.next)&&(t=t.alternate,R.H=null===t||null===t.memoizedState?Vi:Qi),e}function Ua(e){if(null!==e&&"object"===typeof e){if("function"===typeof e.then)return Ha(e);if(e.$$typeof===x)return jo(e)}throw Error(i(438,String(e)))}function Ya(e){var t=null,n=wa.updateQueue;if(null!==n&&(t=n.memoCache),null==t){var r=wa.alternate;null!==r&&(null!==(r=r.updateQueue)&&(null!=(r=r.memoCache)&&(t={data:r.data.map((function(e){return e.slice()})),index:0})))}if(null==t&&(t={data:[],index:0}),null===n&&(n={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=n),n.memoCache=t,void 0===(n=t.data[t.index]))for(n=t.data[t.index]=Array(e),r=0;r<e;r++)n[r]=D;return t.index++,n}function Wa(e,t){return"function"===typeof t?t(e):t}function qa(e){return Va(Ba(),xa,e)}function Va(e,t,n){var r=e.queue;if(null===r)throw Error(i(311));r.lastRenderedReducer=n;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var s=o.next;o.next=a.next,a.next=s}t.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{var l=s=null,c=null,u=t=o.next,d=!1;do{var f=-536870913&u.lane;if(f!==u.lane?(ac&f)===f:(ba&f)===f){var p=u.revertLane;if(0===p)null!==c&&(c=c.next={lane:0,revertLane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===Fo&&(d=!0);else{if((ba&p)===p){u=u.next,p===Fo&&(d=!0);continue}f={lane:0,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(l=c=f,s=a):c=c.next=f,wa.lanes|=p,pc|=p}f=u.action,Ca&&n(a,f),a=u.hasEagerState?u.eagerState:n(a,f)}else p={lane:f,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(l=c=p,s=a):c=c.next=p,wa.lanes|=f,pc|=f;u=u.next}while(null!==u&&u!==t);if(null===c?s=a:c.next=l,!$n(a,e.memoizedState)&&(js=!0,d&&null!==(n=zo)))throw n;e.memoizedState=a,e.baseState=s,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function Qa(e){var t=Ba(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{a=e(a,s.action),s=s.next}while(s!==o);$n(a,t.memoizedState)||(js=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function Ka(e,t,n){var r=wa,o=Ba(),a=ao;if(a){if(void 0===n)throw Error(i(407));n=n()}else n=t();var s=!$n((xa||o).memoizedState,n);if(s&&(o.memoizedState=n,js=!0),o=o.queue,gi(2048,8,Xa.bind(null,r,o,e),[e]),o.getSnapshot!==t||s||null!==ka&&1&ka.memoizedState.tag){if(r.flags|=2048,hi(9,{destroy:void 0,resource:void 0},Ga.bind(null,r,o,n,t),null),null===rc)throw Error(i(349));a||0!==(124&ba)||$a(r,t,n)}return n}function $a(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=wa.updateQueue)?(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ga(e,t,n,r){t.value=n,t.getSnapshot=r,Ja(t)&&Za(e)}function Xa(e,t,n){return n((function(){Ja(t)&&Za(e)}))}function Ja(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!$n(e,n)}catch(r){return!0}}function Za(e){var t=_r(e,2);null!==t&&Lc(t,e,2)}function ei(e){var t=za();if("function"===typeof e){var n=e;if(e=n(),Ca){fe(!0);try{n()}finally{fe(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:e},t}function ti(e,t,n,r){return e.baseState=n,Va(e,xa,"function"===typeof r?r:Wa)}function ni(e,t,n,r,o){if(Ui(e))throw Error(i(485));if(null!==(e=t.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==R.T?n(!0):a.isTransition=!1,r(a),null===(n=t.pending)?(a.next=t.pending=a,ri(t,a)):(a.next=n.next,t.pending=n.next=a)}}function ri(e,t){var n=t.action,r=t.payload,o=e.state;if(t.isTransition){var a=R.T,i={};R.T=i;try{var s=n(o,r),l=R.S;null!==l&&l(i,s),oi(e,t,s)}catch(c){ii(e,t,c)}finally{R.T=a}}else try{oi(e,t,a=n(o,r))}catch(u){ii(e,t,u)}}function oi(e,t,n){null!==n&&"object"===typeof n&&"function"===typeof n.then?n.then((function(n){ai(e,t,n)}),(function(n){return ii(e,t,n)})):ai(e,t,n)}function ai(e,t,n){t.status="fulfilled",t.value=n,si(t),e.state=n,null!==(t=e.pending)&&((n=t.next)===t?e.pending=null:(n=n.next,t.next=n,ri(e,n)))}function ii(e,t,n){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do{t.status="rejected",t.reason=n,si(t),t=t.next}while(t!==r)}e.action=null}function si(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function li(e,t){return t}function ci(e,t){if(ao){var n=rc.formState;if(null!==n){e:{var r=wa;if(ao){if(oo){t:{for(var o=oo,a=so;8!==o.nodeType;){if(!a){o=null;break t}if(null===(o=gd(o.nextSibling))){o=null;break t}}o="F!"===(a=o.data)||"F"===a?o:null}if(o){oo=gd(o.nextSibling),r="F!"===o.data;break e}}co(r)}r=!1}r&&(t=n[0])}}return(n=za()).memoizedState=n.baseState=t,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:t},n.queue=r,n=zi.bind(null,wa,r),r.dispatch=n,r=ei(!1),a=Hi.bind(null,wa,!1,r.queue),o={state:t,dispatch:null,action:e,pending:null},(r=za()).queue=o,n=ni.bind(null,wa,o,a,n),o.dispatch=n,r.memoizedState=e,[t,n,!1]}function ui(e){return di(Ba(),xa,e)}function di(e,t,n){if(t=Va(e,t,li)[0],e=qa(Wa)[0],"object"===typeof t&&null!==t&&"function"===typeof t.then)try{var r=Ha(t)}catch(i){if(i===Vo)throw Ko;throw i}else r=t;var o=(t=Ba()).queue,a=o.dispatch;return n!==t.memoizedState&&(wa.flags|=2048,hi(9,{destroy:void 0,resource:void 0},fi.bind(null,o,n),null)),[r,a,e]}function fi(e,t){e.action=t}function pi(e){var t=Ba(),n=xa;if(null!==n)return di(t,n,e);Ba(),t=t.memoizedState;var r=(n=Ba()).queue.dispatch;return n.memoizedState=e,[t,r,!1]}function hi(e,t,n,r){return e={tag:e,create:n,deps:r,inst:t,next:null},null===(t=wa.updateQueue)&&(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t),null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function mi(){return Ba().memoizedState}function vi(e,t,n,r){var o=za();r=void 0===r?null:r,wa.flags|=e,o.memoizedState=hi(1|t,{destroy:void 0,resource:void 0},n,r)}function gi(e,t,n,r){var o=Ba();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==xa&&null!==r&&_a(r,xa.memoizedState.deps)?o.memoizedState=hi(t,a,n,r):(wa.flags|=e,o.memoizedState=hi(1|t,a,n,r))}function yi(e,t){vi(8390656,8,e,t)}function bi(e,t){gi(2048,8,e,t)}function wi(e,t){return gi(4,2,e,t)}function xi(e,t){return gi(4,4,e,t)}function ki(e,t){if("function"===typeof t){e=e();var n=t(e);return function(){"function"===typeof n?n():t(null)}}if(null!==t&&void 0!==t)return e=e(),t.current=e,function(){t.current=null}}function Si(e,t,n){n=null!==n&&void 0!==n?n.concat([e]):null,gi(4,4,ki.bind(null,t,e),n)}function Ei(){}function Ci(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;return null!==t&&_a(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ni(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;if(null!==t&&_a(t,r[1]))return r[0];if(r=e(),Ca){fe(!0);try{e()}finally{fe(!1)}}return n.memoizedState=[r,t],r}function ji(e,t,n){return void 0===n||0!==(1073741824&ba)?e.memoizedState=t:(e.memoizedState=n,e=Ac(),wa.lanes|=e,pc|=e,n)}function Di(e,t,n,r){return $n(n,t)?n:null!==ha.current?(e=ji(e,n,r),$n(e,t)||(js=!0),e):0===(42&ba)?(js=!0,e.memoizedState=n):(e=Ac(),wa.lanes|=e,pc|=e,t)}function Pi(e,t,n,r,o){var a=A.p;A.p=0!==a&&8>a?a:8;var i=R.T,s={};R.T=s,Hi(e,!1,t,n);try{var l=o(),c=R.S;if(null!==c&&c(s,l),null!==l&&"object"===typeof l&&"function"===typeof l.then)Bi(e,t,function(e,t){var n=[],r={status:"pending",value:null,reason:null,then:function(e){n.push(e)}};return e.then((function(){r.status="fulfilled",r.value=t;for(var e=0;e<n.length;e++)(0,n[e])(t)}),(function(e){for(r.status="rejected",r.reason=e,e=0;e<n.length;e++)(0,n[e])(void 0)})),r}(l,r),Rc());else Bi(e,t,r,Rc())}catch(u){Bi(e,t,{then:function(){},status:"rejected",reason:u},Rc())}finally{A.p=a,R.T=i}}function Ti(){}function _i(e,t,n,r){if(5!==e.tag)throw Error(i(476));var o=Oi(e).queue;Pi(e,o,t,L,null===n?Ti:function(){return Mi(e),n(r)})}function Oi(e){var t=e.memoizedState;if(null!==t)return t;var n={};return(t={memoizedState:L,baseState:L,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:L},next:null}).next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:n},next:null},e.memoizedState=t,null!==(e=e.alternate)&&(e.memoizedState=t),t}function Mi(e){Bi(e,Oi(e).next.queue,{},Rc())}function Ri(){return jo(Kd)}function Ai(){return Ba().memoizedState}function Li(){return Ba().memoizedState}function Ii(e){for(var t=e.return;null!==t;){switch(t.tag){case 24:case 3:var n=Rc(),r=ia(t,e=aa(n),n);return null!==r&&(Lc(r,t,n),sa(r,t,n)),t={cache:Ro()},void(e.payload=t)}t=t.return}}function Fi(e,t,n){var r=Rc();n={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null},Ui(e)?Yi(t,n):null!==(n=Tr(e,t,n,r))&&(Lc(n,e,r),Wi(n,t,r))}function zi(e,t,n){Bi(e,t,n,Rc())}function Bi(e,t,n,r){var o={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ui(e))Yi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,$n(s,i))return Pr(e,t,o,0),null===rc&&Dr(),!1}catch(l){}if(null!==(n=Tr(e,t,o,r)))return Lc(n,e,r),Wi(n,t,r),!0}return!1}function Hi(e,t,n,r){if(r={lane:2,revertLane:Pu(),action:r,hasEagerState:!1,eagerState:null,next:null},Ui(e)){if(t)throw Error(i(479))}else null!==(t=Tr(e,n,r,2))&&Lc(t,e,2)}function Ui(e){var t=e.alternate;return e===wa||null!==t&&t===wa}function Yi(e,t){Ea=Sa=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Wi(e,t,n){if(0!==(4194048&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,je(e,n)}}var qi={readContext:jo,use:Ua,useCallback:Ta,useContext:Ta,useEffect:Ta,useImperativeHandle:Ta,useLayoutEffect:Ta,useInsertionEffect:Ta,useMemo:Ta,useReducer:Ta,useRef:Ta,useState:Ta,useDebugValue:Ta,useDeferredValue:Ta,useTransition:Ta,useSyncExternalStore:Ta,useId:Ta,useHostTransitionStatus:Ta,useFormState:Ta,useActionState:Ta,useOptimistic:Ta,useMemoCache:Ta,useCacheRefresh:Ta},Vi={readContext:jo,use:Ua,useCallback:function(e,t){return za().memoizedState=[e,void 0===t?null:t],e},useContext:jo,useEffect:yi,useImperativeHandle:function(e,t,n){n=null!==n&&void 0!==n?n.concat([e]):null,vi(4194308,4,ki.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4194308,4,e,t)},useInsertionEffect:function(e,t){vi(4,2,e,t)},useMemo:function(e,t){var n=za();t=void 0===t?null:t;var r=e();if(Ca){fe(!0);try{e()}finally{fe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=za();if(void 0!==n){var o=n(t);if(Ca){fe(!0);try{n(t)}finally{fe(!1)}}}else o=t;return r.memoizedState=r.baseState=o,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},r.queue=e,e=e.dispatch=Fi.bind(null,wa,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},za().memoizedState=e},useState:function(e){var t=(e=ei(e)).queue,n=zi.bind(null,wa,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ei,useDeferredValue:function(e,t){return ji(za(),e,t)},useTransition:function(){var e=ei(!1);return e=Pi.bind(null,wa,e.queue,!0,!1),za().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=wa,o=za();if(ao){if(void 0===n)throw Error(i(407));n=n()}else{if(n=t(),null===rc)throw Error(i(349));0!==(124&ac)||$a(r,t,n)}o.memoizedState=n;var a={value:n,getSnapshot:t};return o.queue=a,yi(Xa.bind(null,r,a,e),[e]),r.flags|=2048,hi(9,{destroy:void 0,resource:void 0},Ga.bind(null,r,a,n,t),null),n},useId:function(){var e=za(),t=rc.identifierPrefix;if(ao){var n=Jr;t="\xab"+t+"R"+(n=(Xr&~(1<<32-pe(Xr)-1)).toString(32)+n),0<(n=Na++)&&(t+="H"+n.toString(32)),t+="\xbb"}else t="\xab"+t+"r"+(n=Pa++).toString(32)+"\xbb";return e.memoizedState=t},useHostTransitionStatus:Ri,useFormState:ci,useActionState:ci,useOptimistic:function(e){var t=za();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=Hi.bind(null,wa,!0,n),n.dispatch=t,[e,t]},useMemoCache:Ya,useCacheRefresh:function(){return za().memoizedState=Ii.bind(null,wa)}},Qi={readContext:jo,use:Ua,useCallback:Ci,useContext:jo,useEffect:bi,useImperativeHandle:Si,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ni,useReducer:qa,useRef:mi,useState:function(){return qa(Wa)},useDebugValue:Ei,useDeferredValue:function(e,t){return Di(Ba(),xa.memoizedState,e,t)},useTransition:function(){var e=qa(Wa)[0],t=Ba().memoizedState;return["boolean"===typeof e?e:Ha(e),t]},useSyncExternalStore:Ka,useId:Ai,useHostTransitionStatus:Ri,useFormState:ui,useActionState:ui,useOptimistic:function(e,t){return ti(Ba(),0,e,t)},useMemoCache:Ya,useCacheRefresh:Li},Ki={readContext:jo,use:Ua,useCallback:Ci,useContext:jo,useEffect:bi,useImperativeHandle:Si,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ni,useReducer:Qa,useRef:mi,useState:function(){return Qa(Wa)},useDebugValue:Ei,useDeferredValue:function(e,t){var n=Ba();return null===xa?ji(n,e,t):Di(n,xa.memoizedState,e,t)},useTransition:function(){var e=Qa(Wa)[0],t=Ba().memoizedState;return["boolean"===typeof e?e:Ha(e),t]},useSyncExternalStore:Ka,useId:Ai,useHostTransitionStatus:Ri,useFormState:pi,useActionState:pi,useOptimistic:function(e,t){var n=Ba();return null!==xa?ti(n,0,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:Ya,useCacheRefresh:Li},$i=null,Gi=0;function Xi(e){var t=Gi;return Gi+=1,null===$i&&($i=[]),Jo($i,e,t)}function Ji(e,t){t=t.props.ref,e.ref=void 0!==t?t:null}function Zi(e,t){if(t.$$typeof===p)throw Error(i(525));throw e=Object.prototype.toString.call(t),Error(i(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function es(e){return(0,e._init)(e._payload)}function ts(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e){for(var t=new Map;null!==e;)null!==e.key?t.set(e.key,e):t.set(e.index,e),e=e.sibling;return t}function o(e,t){return(e=Fr(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=67108866,n):r:(t.flags|=67108866,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=67108866),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Ur(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===v?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"===typeof a&&null!==a&&a.$$typeof===N&&es(a)===t.type)?(Ji(t=o(t,n.props),n),t.return=e,t):(Ji(t=Br(n.type,n.key,n.props,null,e.mode,r),n),t.return=e,t)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Yr(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Hr(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"===typeof t&&""!==t||"number"===typeof t||"bigint"===typeof t)return(t=Ur(""+t,e.mode,n)).return=e,t;if("object"===typeof t&&null!==t){switch(t.$$typeof){case h:return Ji(n=Br(t.type,t.key,t.props,null,e.mode,n),t),n.return=e,n;case m:return(t=Yr(t,e.mode,n)).return=e,t;case N:return f(e,t=(0,t._init)(t._payload),n)}if(M(t)||T(t))return(t=Hr(t,e.mode,n,null)).return=e,t;if("function"===typeof t.then)return f(e,Xi(t),n);if(t.$$typeof===x)return f(e,Do(e,t),n);Zi(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"===typeof n&&""!==n||"number"===typeof n||"bigint"===typeof n)return null!==o?null:l(e,t,""+n,r);if("object"===typeof n&&null!==n){switch(n.$$typeof){case h:return n.key===o?c(e,t,n,r):null;case m:return n.key===o?u(e,t,n,r):null;case N:return p(e,t,n=(o=n._init)(n._payload),r)}if(M(n)||T(n))return null!==o?null:d(e,t,n,r,null);if("function"===typeof n.then)return p(e,t,Xi(n),r);if(n.$$typeof===x)return p(e,t,Do(e,n),r);Zi(e,n)}return null}function g(e,t,n,r,o){if("string"===typeof r&&""!==r||"number"===typeof r||"bigint"===typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"===typeof r&&null!==r){switch(r.$$typeof){case h:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case m:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case N:return g(e,t,n,r=(0,r._init)(r._payload),o)}if(M(r)||T(r))return d(t,e=e.get(n)||null,r,o,null);if("function"===typeof r.then)return g(e,t,n,Xi(r),o);if(r.$$typeof===x)return g(e,t,n,Do(t,r),o);Zi(t,r)}return null}function y(l,c,u,d){if("object"===typeof u&&null!==u&&u.type===v&&null===u.key&&(u=u.props.children),"object"===typeof u&&null!==u){switch(u.$$typeof){case h:e:{for(var b=u.key;null!==c;){if(c.key===b){if((b=u.type)===v){if(7===c.tag){n(l,c.sibling),(d=o(c,u.props.children)).return=l,l=d;break e}}else if(c.elementType===b||"object"===typeof b&&null!==b&&b.$$typeof===N&&es(b)===c.type){n(l,c.sibling),Ji(d=o(c,u.props),u),d.return=l,l=d;break e}n(l,c);break}t(l,c),c=c.sibling}u.type===v?((d=Hr(u.props.children,l.mode,d,u.key)).return=l,l=d):(Ji(d=Br(u.type,u.key,u.props,null,l.mode,d),u),d.return=l,l=d)}return s(l);case m:e:{for(b=u.key;null!==c;){if(c.key===b){if(4===c.tag&&c.stateNode.containerInfo===u.containerInfo&&c.stateNode.implementation===u.implementation){n(l,c.sibling),(d=o(c,u.children||[])).return=l,l=d;break e}n(l,c);break}t(l,c),c=c.sibling}(d=Yr(u,l.mode,d)).return=l,l=d}return s(l);case N:return y(l,c,u=(b=u._init)(u._payload),d)}if(M(u))return function(o,i,s,l){for(var c=null,u=null,d=i,h=i=0,m=null;null!==d&&h<s.length;h++){d.index>h?(m=d,d=null):m=d.sibling;var v=p(o,d,s[h],l);if(null===v){null===d&&(d=m);break}e&&d&&null===v.alternate&&t(o,d),i=a(v,i,h),null===u?c=v:u.sibling=v,u=v,d=m}if(h===s.length)return n(o,d),ao&&Zr(o,h),c;if(null===d){for(;h<s.length;h++)null!==(d=f(o,s[h],l))&&(i=a(d,i,h),null===u?c=d:u.sibling=d,u=d);return ao&&Zr(o,h),c}for(d=r(d);h<s.length;h++)null!==(m=g(d,o,h,s[h],l))&&(e&&null!==m.alternate&&d.delete(null===m.key?h:m.key),i=a(m,i,h),null===u?c=m:u.sibling=m,u=m);return e&&d.forEach((function(e){return t(o,e)})),ao&&Zr(o,h),c}(l,c,u,d);if(T(u)){if("function"!==typeof(b=T(u)))throw Error(i(150));return function(o,s,l,c){if(null==l)throw Error(i(151));for(var u=null,d=null,h=s,m=s=0,v=null,y=l.next();null!==h&&!y.done;m++,y=l.next()){h.index>m?(v=h,h=null):v=h.sibling;var b=p(o,h,y.value,c);if(null===b){null===h&&(h=v);break}e&&h&&null===b.alternate&&t(o,h),s=a(b,s,m),null===d?u=b:d.sibling=b,d=b,h=v}if(y.done)return n(o,h),ao&&Zr(o,m),u;if(null===h){for(;!y.done;m++,y=l.next())null!==(y=f(o,y.value,c))&&(s=a(y,s,m),null===d?u=y:d.sibling=y,d=y);return ao&&Zr(o,m),u}for(h=r(h);!y.done;m++,y=l.next())null!==(y=g(h,o,m,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?m:y.key),s=a(y,s,m),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(o,e)})),ao&&Zr(o,m),u}(l,c,u=b.call(u),d)}if("function"===typeof u.then)return y(l,c,Xi(u),d);if(u.$$typeof===x)return y(l,c,Do(l,u),d);Zi(l,u)}return"string"===typeof u&&""!==u||"number"===typeof u||"bigint"===typeof u?(u=""+u,null!==c&&6===c.tag?(n(l,c.sibling),(d=o(c,u)).return=l,l=d):(n(l,c),(d=Ur(u,l.mode,d)).return=l,l=d),s(l)):n(l,c)}return function(e,t,n,r){try{Gi=0;var o=y(e,t,n,r);return $i=null,o}catch(i){if(i===Vo||i===Ko)throw i;var a=Lr(29,i,null,e.mode);return a.lanes=r,a.return=e,a}}}var ns=ts(!0),rs=ts(!1),os=z(null),as=null;function is(e){var t=e.alternate;H(us,1&us.current),H(os,e),null===as&&(null===t||null!==ha.current||null!==t.memoizedState)&&(as=e)}function ss(e){if(22===e.tag){if(H(us,us.current),H(os,e),null===as){var t=e.alternate;null!==t&&null!==t.memoizedState&&(as=e)}}else ls()}function ls(){H(us,us.current),H(os,os.current)}function cs(e){B(os),as===e&&(as=null),B(us)}var us=z(0);function ds(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||vd(n)))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!==(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function fs(e,t,n,r){n=null===(n=n(r,t=e.memoizedState))||void 0===n?t:f({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ps={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.payload=t,void 0!==n&&null!==n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Lc(t,e,r),sa(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.tag=1,o.payload=t,void 0!==n&&null!==n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Lc(t,e,r),sa(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Rc(),r=aa(n);r.tag=2,void 0!==t&&null!==t&&(r.callback=t),null!==(t=ia(e,r,n))&&(Lc(t,e,n),sa(t,e,n))}};function hs(e,t,n,r,o,a,i){return"function"===typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!Gn(n,r)||!Gn(o,a))}function ms(e,t,n,r){e=t.state,"function"===typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"===typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ps.enqueueReplaceState(t,t.state,null)}function vs(e,t){var n=t;if("ref"in t)for(var r in n={},t)"ref"!==r&&(n[r]=t[r]);if(e=e.defaultProps)for(var o in n===t&&(n=f({},n)),e)void 0===n[o]&&(n[o]=e[o]);return n}var gs="function"===typeof reportError?reportError:function(e){if("object"===typeof window&&"function"===typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"===typeof e&&null!==e&&"string"===typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"===typeof process&&"function"===typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function ys(e){gs(e)}function bs(e){console.error(e)}function ws(e){gs(e)}function xs(e,t){try{(0,e.onUncaughtError)(t.value,{componentStack:t.stack})}catch(n){setTimeout((function(){throw n}))}}function ks(e,t,n){try{(0,e.onCaughtError)(n.value,{componentStack:n.stack,errorBoundary:1===t.tag?t.stateNode:null})}catch(r){setTimeout((function(){throw r}))}}function Ss(e,t,n){return(n=aa(n)).tag=3,n.payload={element:null},n.callback=function(){xs(e,t)},n}function Es(e){return(e=aa(e)).tag=3,e}function Cs(e,t,n,r){var o=n.type.getDerivedStateFromError;if("function"===typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){ks(t,n,r)}}var i=n.stateNode;null!==i&&"function"===typeof i.componentDidCatch&&(e.callback=function(){ks(t,n,r),"function"!==typeof o&&(null===Ec?Ec=new Set([this]):Ec.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:""})})}var Ns=Error(i(461)),js=!1;function Ds(e,t,n,r){t.child=null===e?rs(t,null,n,r):ns(t,e.child,n,r)}function Ps(e,t,n,r,o){n=n.render;var a=t.ref;if("ref"in r){var i={};for(var s in r)"ref"!==s&&(i[s]=r[s])}else i=r;return No(t),r=Oa(e,t,n,i,a,o),s=La(),null===e||js?(ao&&s&&to(t),t.flags|=1,Ds(e,t,r,o),t.child):(Ia(e,t,o),$s(e,t,o))}function Ts(e,t,n,r,o){if(null===e){var a=n.type;return"function"!==typeof a||Ir(a)||void 0!==a.defaultProps||null!==n.compare?((e=Br(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,_s(e,t,a,r,o))}if(a=e.child,!Gs(e,o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:Gn)(i,r)&&e.ref===t.ref)return $s(e,t,o)}return t.flags|=1,(e=Fr(a,r)).ref=t.ref,e.return=t,t.child=e}function _s(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(Gn(a,r)&&e.ref===t.ref){if(js=!1,t.pendingProps=r=a,!Gs(e,o))return t.lanes=e.lanes,$s(e,t,o);0!==(131072&e.flags)&&(js=!0)}}return As(e,t,n,r,o)}function Os(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode){if(0!==(128&t.flags)){if(r=null!==a?a.baseLanes|n:n,null!==e){for(o=t.child=e.child,a=0;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;t.childLanes=a&~r}else t.childLanes=0,t.child=null;return Ms(e,t,r,n)}if(0===(536870912&n))return t.lanes=t.childLanes=536870912,Ms(e,t,null!==a?a.baseLanes|n:n,n);t.memoizedState={baseLanes:0,cachePool:null},null!==e&&Wo(0,null!==a?a.cachePool:null),null!==a?va(t,a):ga(),ss(t)}else null!==a?(Wo(0,a.cachePool),va(t,a),ls(),t.memoizedState=null):(null!==e&&Wo(0,null),ga(),ls());return Ds(e,t,o,n),t.child}function Ms(e,t,n,r){var o=Yo();return o=null===o?null:{parent:Mo._currentValue,pool:o},t.memoizedState={baseLanes:n,cachePool:o},null!==e&&Wo(0,null),ga(),ss(t),null!==e&&Eo(e,t,r,!0),null}function Rs(e,t){var n=t.ref;if(null===n)null!==e&&null!==e.ref&&(t.flags|=4194816);else{if("function"!==typeof n&&"object"!==typeof n)throw Error(i(284));null!==e&&e.ref===n||(t.flags|=4194816)}}function As(e,t,n,r,o){return No(t),n=Oa(e,t,n,r,void 0,o),r=La(),null===e||js?(ao&&r&&to(t),t.flags|=1,Ds(e,t,n,o),t.child):(Ia(e,t,o),$s(e,t,o))}function Ls(e,t,n,r,o,a){return No(t),t.updateQueue=null,n=Ra(t,r,n,o),Ma(e),r=La(),null===e||js?(ao&&r&&to(t),t.flags|=1,Ds(e,t,n,a),t.child):(Ia(e,t,a),$s(e,t,a))}function Is(e,t,n,r,o){if(No(t),null===t.stateNode){var a=Rr,i=n.contextType;"object"===typeof i&&null!==i&&(a=jo(i)),a=new n(r,a),t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,a.updater=ps,t.stateNode=a,a._reactInternals=t,(a=t.stateNode).props=r,a.state=t.memoizedState,a.refs={},ra(t),i=n.contextType,a.context="object"===typeof i&&null!==i?jo(i):Rr,a.state=t.memoizedState,"function"===typeof(i=n.getDerivedStateFromProps)&&(fs(t,n,i,r),a.state=t.memoizedState),"function"===typeof n.getDerivedStateFromProps||"function"===typeof a.getSnapshotBeforeUpdate||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||(i=a.state,"function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&ps.enqueueReplaceState(a,a.state,null),da(t,r,a,o),ua(),a.state=t.memoizedState),"function"===typeof a.componentDidMount&&(t.flags|=4194308),r=!0}else if(null===e){a=t.stateNode;var s=t.memoizedProps,l=vs(n,s);a.props=l;var c=a.context,u=n.contextType;i=Rr,"object"===typeof u&&null!==u&&(i=jo(u));var d=n.getDerivedStateFromProps;u="function"===typeof d||"function"===typeof a.getSnapshotBeforeUpdate,s=t.pendingProps!==s,u||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(s||c!==i)&&ms(t,a,r,i),na=!1;var f=t.memoizedState;a.state=f,da(t,r,a,o),ua(),c=t.memoizedState,s||f!==c||na?("function"===typeof d&&(fs(t,n,d,r),c=t.memoizedState),(l=na||hs(t,n,l,r,f,c,i))?(u||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||("function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"===typeof a.componentDidMount&&(t.flags|=4194308)):("function"===typeof a.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),a.props=r,a.state=c,a.context=i,r=l):("function"===typeof a.componentDidMount&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,oa(e,t),u=vs(n,i=t.memoizedProps),a.props=u,d=t.pendingProps,f=a.context,c=n.contextType,l=Rr,"object"===typeof c&&null!==c&&(l=jo(c)),(c="function"===typeof(s=n.getDerivedStateFromProps)||"function"===typeof a.getSnapshotBeforeUpdate)||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(i!==d||f!==l)&&ms(t,a,r,l),na=!1,f=t.memoizedState,a.state=f,da(t,r,a,o),ua();var p=t.memoizedState;i!==d||f!==p||na||null!==e&&null!==e.dependencies&&Co(e.dependencies)?("function"===typeof s&&(fs(t,n,s,r),p=t.memoizedState),(u=na||hs(t,n,u,r,f,p,l)||null!==e&&null!==e.dependencies&&Co(e.dependencies))?(c||"function"!==typeof a.UNSAFE_componentWillUpdate&&"function"!==typeof a.componentWillUpdate||("function"===typeof a.componentWillUpdate&&a.componentWillUpdate(r,p,l),"function"===typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,p,l)),"function"===typeof a.componentDidUpdate&&(t.flags|=4),"function"===typeof a.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!==typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!==typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=p),a.props=r,a.state=p,a.context=l,r=u):("function"!==typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!==typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,Rs(e,t),r=0!==(128&t.flags),a||r?(a=t.stateNode,n=r&&"function"!==typeof n.getDerivedStateFromError?null:a.render(),t.flags|=1,null!==e&&r?(t.child=ns(t,e.child,null,o),t.child=ns(t,null,n,o)):Ds(e,t,n,o),t.memoizedState=a.state,e=t.child):e=$s(e,t,o),e}function Fs(e,t,n,r){return ho(),t.flags|=256,Ds(e,t,n,r),t.child}var zs={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Bs(e){return{baseLanes:e,cachePool:qo()}}function Hs(e,t,n){return e=null!==e?e.childLanes&~n:0,t&&(e|=vc),e}function Us(e,t,n){var r,o=t.pendingProps,a=!1,s=0!==(128&t.flags);if((r=s)||(r=(null===e||null!==e.memoizedState)&&0!==(2&us.current)),r&&(a=!0,t.flags&=-129),r=0!==(32&t.flags),t.flags&=-33,null===e){if(ao){if(a?is(t):ls(),ao){var l,c=oo;if(l=c){e:{for(l=c,c=so;8!==l.nodeType;){if(!c){c=null;break e}if(null===(l=gd(l.nextSibling))){c=null;break e}}c=l}null!==c?(t.memoizedState={dehydrated:c,treeContext:null!==Gr?{id:Xr,overflow:Jr}:null,retryLane:536870912,hydrationErrors:null},(l=Lr(18,null,null,0)).stateNode=c,l.return=t,t.child=l,ro=t,oo=null,l=!0):l=!1}l||co(t)}if(null!==(c=t.memoizedState)&&null!==(c=c.dehydrated))return vd(c)?t.lanes=32:t.lanes=536870912,null;cs(t)}return c=o.children,o=o.fallback,a?(ls(),c=Ws({mode:"hidden",children:c},a=t.mode),o=Hr(o,a,n,null),c.return=t,o.return=t,c.sibling=o,t.child=c,(a=t.child).memoizedState=Bs(n),a.childLanes=Hs(e,r,n),t.memoizedState=zs,o):(is(t),Ys(t,c))}if(null!==(l=e.memoizedState)&&null!==(c=l.dehydrated)){if(s)256&t.flags?(is(t),t.flags&=-257,t=qs(e,t,n)):null!==t.memoizedState?(ls(),t.child=e.child,t.flags|=128,t=null):(ls(),a=o.fallback,c=t.mode,o=Ws({mode:"visible",children:o.children},c),(a=Hr(a,c,n,null)).flags|=2,o.return=t,a.return=t,o.sibling=a,t.child=o,ns(t,e.child,null,n),(o=t.child).memoizedState=Bs(n),o.childLanes=Hs(e,r,n),t.memoizedState=zs,t=a);else if(is(t),vd(c)){if(r=c.nextSibling&&c.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(i(419))).stack="",o.digest=r,vo({value:o,source:null,stack:null}),t=qs(e,t,n)}else if(js||Eo(e,t,n,!1),r=0!==(n&e.childLanes),js||r){if(null!==(r=rc)&&(0!==(o=0!==((o=0!==(42&(o=n&-n))?1:De(o))&(r.suspendedLanes|n))?0:o)&&o!==l.retryLane))throw l.retryLane=o,_r(e,o),Lc(r,e,o),Ns;"$?"===c.data||Qc(),t=qs(e,t,n)}else"$?"===c.data?(t.flags|=192,t.child=e.child,t=null):(e=l.treeContext,oo=gd(c.nextSibling),ro=t,ao=!0,io=null,so=!1,null!==e&&(Kr[$r++]=Xr,Kr[$r++]=Jr,Kr[$r++]=Gr,Xr=e.id,Jr=e.overflow,Gr=t),(t=Ys(t,o.children)).flags|=4096);return t}return a?(ls(),a=o.fallback,c=t.mode,u=(l=e.child).sibling,(o=Fr(l,{mode:"hidden",children:o.children})).subtreeFlags=65011712&l.subtreeFlags,null!==u?a=Fr(u,a):(a=Hr(a,c,n,null)).flags|=2,a.return=t,o.return=t,o.sibling=a,t.child=o,o=a,a=t.child,null===(c=e.child.memoizedState)?c=Bs(n):(null!==(l=c.cachePool)?(u=Mo._currentValue,l=l.parent!==u?{parent:u,pool:u}:l):l=qo(),c={baseLanes:c.baseLanes|n,cachePool:l}),a.memoizedState=c,a.childLanes=Hs(e,r,n),t.memoizedState=zs,o):(is(t),e=(n=e.child).sibling,(n=Fr(n,{mode:"visible",children:o.children})).return=t,n.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function Ys(e,t){return(t=Ws({mode:"visible",children:t},e.mode)).return=e,e.child=t}function Ws(e,t){return(e=Lr(22,e,null,t)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function qs(e,t,n){return ns(t,e.child,null,n),(e=Ys(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Vs(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),ko(e.return,t,n)}function Qs(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Ks(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Ds(e,t,r.children,n),0!==(2&(r=us.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!==(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Vs(e,n,t);else if(19===e.tag)Vs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}switch(H(us,r),o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ds(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Qs(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ds(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Qs(t,!0,n,null,a);break;case"together":Qs(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function $s(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),pc|=t.lanes,0===(n&t.childLanes)){if(null===e)return null;if(Eo(e,t,n,!1),0===(n&t.childLanes))return null}if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Fr(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Fr(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Gs(e,t){return 0!==(e.lanes&t)||!(null===(e=e.dependencies)||!Co(e))}function Xs(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps)js=!0;else{if(!Gs(e,n)&&0===(128&t.flags))return js=!1,function(e,t,n){switch(t.tag){case 3:V(t,t.stateNode.containerInfo),wo(0,Mo,e.memoizedState.cache),ho();break;case 27:case 5:K(t);break;case 4:V(t,t.stateNode.containerInfo);break;case 10:wo(0,t.type,t.memoizedProps.value);break;case 13:var r=t.memoizedState;if(null!==r)return null!==r.dehydrated?(is(t),t.flags|=128,null):0!==(n&t.child.childLanes)?Us(e,t,n):(is(t),null!==(e=$s(e,t,n))?e.sibling:null);is(t);break;case 19:var o=0!==(128&e.flags);if((r=0!==(n&t.childLanes))||(Eo(e,t,n,!1),r=0!==(n&t.childLanes)),o){if(r)return Ks(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),H(us,us.current),r)break;return null;case 22:case 23:return t.lanes=0,Os(e,t,n);case 24:wo(0,Mo,e.memoizedState.cache)}return $s(e,t,n)}(e,t,n);js=0!==(131072&e.flags)}else js=!1,ao&&0!==(1048576&t.flags)&&eo(t,Qr,t.index);switch(t.lanes=0,t.tag){case 16:e:{e=t.pendingProps;var r=t.elementType,o=r._init;if(r=o(r._payload),t.type=r,"function"!==typeof r){if(void 0!==r&&null!==r){if((o=r.$$typeof)===k){t.tag=11,t=Ps(null,t,r,e,n);break e}if(o===C){t.tag=14,t=Ts(null,t,r,e,n);break e}}throw t=O(r)||r,Error(i(306,t,""))}Ir(r)?(e=vs(r,e),t.tag=1,t=Is(null,t,r,e,n)):(t.tag=0,t=As(null,t,r,e,n))}return t;case 0:return As(e,t,t.type,t.pendingProps,n);case 1:return Is(e,t,r=t.type,o=vs(r,t.pendingProps),n);case 3:e:{if(V(t,t.stateNode.containerInfo),null===e)throw Error(i(387));r=t.pendingProps;var a=t.memoizedState;o=a.element,oa(e,t),da(t,r,null,n);var s=t.memoizedState;if(r=s.cache,wo(0,Mo,r),r!==a.cache&&So(t,[Mo],n,!0),ua(),r=s.element,a.isDehydrated){if(a={element:r,isDehydrated:!1,cache:s.cache},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){t=Fs(e,t,r,n);break e}if(r!==o){vo(o=Er(Error(i(424)),t)),t=Fs(e,t,r,n);break e}if(9===(e=t.stateNode.containerInfo).nodeType)e=e.body;else e="HTML"===e.nodeName?e.ownerDocument.body:e;for(oo=gd(e.firstChild),ro=t,ao=!0,io=null,so=!0,n=rs(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ho(),r===o){t=$s(e,t,n);break e}Ds(e,t,r,n)}t=t.child}return t;case 26:return Rs(e,t),null===e?(n=Dd(t.type,null,t.pendingProps,null))?t.memoizedState=n:ao||(n=t.type,e=t.pendingProps,(r=rd(W.current).createElement(n))[Oe]=t,r[Me]=e,ed(r,n,e),qe(r),t.stateNode=r):t.memoizedState=Dd(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return K(t),null===e&&ao&&(r=t.stateNode=wd(t.type,t.pendingProps,W.current),ro=t,so=!0,o=oo,pd(t.type)?(yd=o,oo=gd(r.firstChild)):oo=o),Ds(e,t,t.pendingProps.children,n),Rs(e,t),null===e&&(t.flags|=4194304),t.child;case 5:return null===e&&ao&&((o=r=oo)&&(null!==(r=function(e,t,n,r){for(;1===e.nodeType;){var o=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&("INPUT"!==e.nodeName||"hidden"!==e.type))break}else if(r){if(!e[ze])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if("stylesheet"===(a=e.getAttribute("rel"))&&e.hasAttribute("data-precedence"))break;if(a!==o.rel||e.getAttribute("href")!==(null==o.href||""===o.href?null:o.href)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin)||e.getAttribute("title")!==(null==o.title?null:o.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(((a=e.getAttribute("src"))!==(null==o.src?null:o.src)||e.getAttribute("type")!==(null==o.type?null:o.type)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin))&&a&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else{if("input"!==t||"hidden"!==e.type)return e;var a=null==o.name?null:""+o.name;if("hidden"===o.type&&e.getAttribute("name")===a)return e}if(null===(e=gd(e.nextSibling)))break}return null}(r,t.type,t.pendingProps,so))?(t.stateNode=r,ro=t,oo=gd(r.firstChild),so=!1,o=!0):o=!1),o||co(t)),K(t),o=t.type,a=t.pendingProps,s=null!==e?e.memoizedProps:null,r=a.children,id(o,a)?r=null:null!==s&&id(o,s)&&(t.flags|=32),null!==t.memoizedState&&(o=Oa(e,t,Aa,null,null,n),Kd._currentValue=o),Rs(e,t),Ds(e,t,r,n),t.child;case 6:return null===e&&ao&&((e=n=oo)&&(null!==(n=function(e,t,n){if(""===t)return null;for(;3!==e.nodeType;){if((1!==e.nodeType||"INPUT"!==e.nodeName||"hidden"!==e.type)&&!n)return null;if(null===(e=gd(e.nextSibling)))return null}return e}(n,t.pendingProps,so))?(t.stateNode=n,ro=t,oo=null,e=!0):e=!1),e||co(t)),null;case 13:return Us(e,t,n);case 4:return V(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=ns(t,null,r,n):Ds(e,t,r,n),t.child;case 11:return Ps(e,t,t.type,t.pendingProps,n);case 7:return Ds(e,t,t.pendingProps,n),t.child;case 8:case 12:return Ds(e,t,t.pendingProps.children,n),t.child;case 10:return r=t.pendingProps,wo(0,t.type,r.value),Ds(e,t,r.children,n),t.child;case 9:return o=t.type._context,r=t.pendingProps.children,No(t),r=r(o=jo(o)),t.flags|=1,Ds(e,t,r,n),t.child;case 14:return Ts(e,t,t.type,t.pendingProps,n);case 15:return _s(e,t,t.type,t.pendingProps,n);case 19:return Ks(e,t,n);case 31:return r=t.pendingProps,n=t.mode,r={mode:r.mode,children:r.children},null===e?((n=Ws(r,n)).ref=t.ref,t.child=n,n.return=t,t=n):((n=Fr(e.child,r)).ref=t.ref,t.child=n,n.return=t,t=n),t;case 22:return Os(e,t,n);case 24:return No(t),r=jo(Mo),null===e?(null===(o=Yo())&&(o=rc,a=Ro(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=n),o=a),t.memoizedState={parent:r,cache:o},ra(t),wo(0,Mo,o)):(0!==(e.lanes&n)&&(oa(e,t),da(t,null,null,n),ua()),o=e.memoizedState,a=t.memoizedState,o.parent!==r?(o={parent:r,cache:r},t.memoizedState=o,0===t.lanes&&(t.memoizedState=t.updateQueue.baseState=o),wo(0,Mo,r)):(r=a.cache,wo(0,Mo,r),r!==o.cache&&So(t,[Mo],n,!0))),Ds(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(i(156,t.tag))}function Js(e){e.flags|=4}function Zs(e,t){if("stylesheet"!==t.type||0!==(4&t.state.loading))e.flags&=-16777217;else if(e.flags|=16777216,!Hd(t)){if(null!==(t=os.current)&&((4194048&ac)===ac?null!==as:(62914560&ac)!==ac&&0===(536870912&ac)||t!==as))throw Zo=$o,Qo;e.flags|=8192}}function el(e,t){null!==t&&(e.flags|=4),16384&e.flags&&(t=22!==e.tag?Se():536870912,e.lanes|=t,gc|=t)}function tl(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function nl(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=65011712&o.subtreeFlags,r|=65011712&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function rl(e,t,n){var r=t.pendingProps;switch(no(t),t.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return nl(t),null;case 3:return n=t.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),xo(Mo),Q(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(po(t)?Js(t):null===e||e.memoizedState.isDehydrated&&0===(256&t.flags)||(t.flags|=1024,mo())),nl(t),null;case 26:return n=t.memoizedState,null===e?(Js(t),null!==n?(nl(t),Zs(t,n)):(nl(t),t.flags&=-16777217)):n?n!==e.memoizedState?(Js(t),nl(t),Zs(t,n)):(nl(t),t.flags&=-16777217):(e.memoizedProps!==r&&Js(t),nl(t),t.flags&=-16777217),null;case 27:$(t),n=W.current;var o=t.type;if(null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return nl(t),null}e=U.current,po(t)?uo(t):(e=wd(o,r,n),t.stateNode=e,Js(t))}return nl(t),null;case 5:if($(t),n=t.type,null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return nl(t),null}if(e=U.current,po(t))uo(t);else{switch(o=rd(W.current),e){case 1:e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case 2:e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;default:switch(n){case"svg":e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case"math":e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;case"script":(e=o.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild);break;case"select":e="string"===typeof r.is?o.createElement("select",{is:r.is}):o.createElement("select"),r.multiple?e.multiple=!0:r.size&&(e.size=r.size);break;default:e="string"===typeof r.is?o.createElement(n,{is:r.is}):o.createElement(n)}}e[Oe]=t,e[Me]=r;e:for(o=t.child;null!==o;){if(5===o.tag||6===o.tag)e.appendChild(o.stateNode);else if(4!==o.tag&&27!==o.tag&&null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;null===o.sibling;){if(null===o.return||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=e;e:switch(ed(e,n,r),n){case"button":case"input":case"select":case"textarea":e=!!r.autoFocus;break e;case"img":e=!0;break e;default:e=!1}e&&Js(t)}}return nl(t),t.flags&=-16777217,null;case 6:if(e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if("string"!==typeof r&&null===t.stateNode)throw Error(i(166));if(e=W.current,po(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,null!==(o=ro))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[Oe]=t,(e=!!(e.nodeValue===n||null!==r&&!0===r.suppressHydrationWarning||Gu(e.nodeValue,n)))||co(t)}else(e=rd(e).createTextNode(r))[Oe]=t,t.stateNode=e}return nl(t),null;case 13:if(r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=po(t),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(i(318));if(!(o=null!==(o=t.memoizedState)?o.dehydrated:null))throw Error(i(317));o[Oe]=t}else ho(),0===(128&t.flags)&&(t.memoizedState=null),t.flags|=4;nl(t),o=!1}else o=mo(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o)return 256&t.flags?(cs(t),t):(cs(t),null)}if(cs(t),0!==(128&t.flags))return t.lanes=n,t;if(n=null!==r,e=null!==e&&null!==e.memoizedState,n){o=null,null!==(r=t.child).alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool);var a=null;null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)}return n!==e&&n&&(t.child.flags|=8192),el(t,t.updateQueue),nl(t),null;case 4:return Q(),null===e&&Bu(t.stateNode.containerInfo),nl(t),null;case 10:return xo(t.type),nl(t),null;case 19:if(B(us),null===(o=t.memoizedState))return nl(t),null;if(r=0!==(128&t.flags),null===(a=o.rendering))if(r)tl(o,!1);else{if(0!==fc||null!==e&&0!==(128&e.flags))for(e=t.child;null!==e;){if(null!==(a=ds(e))){for(t.flags|=128,tl(o,!1),e=a.updateQueue,t.updateQueue=e,el(t,e),t.subtreeFlags=0,e=n,n=t.child;null!==n;)zr(n,e),n=n.sibling;return H(us,1&us.current|2),t.child}e=e.sibling}null!==o.tail&&te()>kc&&(t.flags|=128,r=!0,tl(o,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ds(a))){if(t.flags|=128,r=!0,e=e.updateQueue,t.updateQueue=e,el(t,e),tl(o,!0),null===o.tail&&"hidden"===o.tailMode&&!a.alternate&&!ao)return nl(t),null}else 2*te()-o.renderingStartTime>kc&&536870912!==n&&(t.flags|=128,r=!0,tl(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(null!==(e=o.last)?e.sibling=a:t.child=a,o.last=a)}return null!==o.tail?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=te(),t.sibling=null,e=us.current,H(us,r?1&e|2:1&e),t):(nl(t),null);case 22:case 23:return cs(t),ya(),r=null!==t.memoizedState,null!==e?null!==e.memoizedState!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?0!==(536870912&n)&&0===(128&t.flags)&&(nl(t),6&t.subtreeFlags&&(t.flags|=8192)):nl(t),null!==(n=t.updateQueue)&&el(t,n.retryQueue),n=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),r=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),null!==e&&B(Uo),null;case 24:return n=null,null!==e&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),xo(Mo),nl(t),null;case 25:case 30:return null}throw Error(i(156,t.tag))}function ol(e,t){switch(no(t),t.tag){case 1:return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return xo(Mo),Q(),0!==(65536&(e=t.flags))&&0===(128&e)?(t.flags=-65537&e|128,t):null;case 26:case 27:case 5:return $(t),null;case 13:if(cs(t),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));ho()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return B(us),null;case 4:return Q(),null;case 10:return xo(t.type),null;case 22:case 23:return cs(t),ya(),null!==e&&B(Uo),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 24:return xo(Mo),null;default:return null}}function al(e,t){switch(no(t),t.tag){case 3:xo(Mo),Q();break;case 26:case 27:case 5:$(t);break;case 4:Q();break;case 13:cs(t);break;case 19:B(us);break;case 10:xo(t.type);break;case 22:case 23:cs(t),ya(),null!==e&&B(Uo);break;case 24:xo(Mo)}}function il(e,t){try{var n=t.updateQueue,r=null!==n?n.lastEffect:null;if(null!==r){var o=r.next;n=o;do{if((n.tag&e)===e){r=void 0;var a=n.create,i=n.inst;r=a(),i.destroy=r}n=n.next}while(n!==o)}}catch(s){uu(t,t.return,s)}}function sl(e,t,n){try{var r=t.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,s=i.destroy;if(void 0!==s){i.destroy=void 0,o=t;var l=n,c=s;try{c()}catch(u){uu(o,l,u)}}}r=r.next}while(r!==a)}}catch(u){uu(t,t.return,u)}}function ll(e){var t=e.updateQueue;if(null!==t){var n=e.stateNode;try{pa(t,n)}catch(r){uu(e,e.return,r)}}}function cl(e,t,n){n.props=vs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(r){uu(e,t,r)}}function ul(e,t){try{var n=e.ref;if(null!==n){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}"function"===typeof n?e.refCleanup=n(r):n.current=r}}catch(o){uu(e,t,o)}}function dl(e,t){var n=e.ref,r=e.refCleanup;if(null!==n)if("function"===typeof r)try{r()}catch(o){uu(e,t,o)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if("function"===typeof n)try{n(null)}catch(a){uu(e,t,a)}else n.current=null}function fl(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&r.focus();break e;case"img":n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(o){uu(e,e.return,o)}}function pl(e,t,n){try{var r=e.stateNode;!function(e,t,n,r){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var o=null,a=null,s=null,l=null,c=null,u=null,d=null;for(h in n){var f=n[h];if(n.hasOwnProperty(h)&&null!=f)switch(h){case"checked":case"value":break;case"defaultValue":c=f;default:r.hasOwnProperty(h)||Ju(e,t,h,null,r,f)}}for(var p in r){var h=r[p];if(f=n[p],r.hasOwnProperty(p)&&(null!=h||null!=f))switch(p){case"type":a=h;break;case"name":o=h;break;case"checked":u=h;break;case"defaultChecked":d=h;break;case"value":s=h;break;case"defaultValue":l=h;break;case"children":case"dangerouslySetInnerHTML":if(null!=h)throw Error(i(137,t));break;default:h!==f&&Ju(e,t,p,h,r,f)}}return void vt(e,s,l,c,u,d,a,o);case"select":for(a in h=s=l=p=null,n)if(c=n[a],n.hasOwnProperty(a)&&null!=c)switch(a){case"value":break;case"multiple":h=c;default:r.hasOwnProperty(a)||Ju(e,t,a,null,r,c)}for(o in r)if(a=r[o],c=n[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case"value":p=a;break;case"defaultValue":l=a;break;case"multiple":s=a;default:a!==c&&Ju(e,t,o,a,r,c)}return t=l,n=s,r=h,void(null!=p?bt(e,!!n,p,!1):!!r!==!!n&&(null!=t?bt(e,!!n,t,!0):bt(e,!!n,n?[]:"",!1)));case"textarea":for(l in h=p=null,n)if(o=n[l],n.hasOwnProperty(l)&&null!=o&&!r.hasOwnProperty(l))switch(l){case"value":case"children":break;default:Ju(e,t,l,null,r,o)}for(s in r)if(o=r[s],a=n[s],r.hasOwnProperty(s)&&(null!=o||null!=a))switch(s){case"value":p=o;break;case"defaultValue":h=o;break;case"children":break;case"dangerouslySetInnerHTML":if(null!=o)throw Error(i(91));break;default:o!==a&&Ju(e,t,s,o,r,a)}return void wt(e,p,h);case"option":for(var m in n)if(p=n[m],n.hasOwnProperty(m)&&null!=p&&!r.hasOwnProperty(m))if("selected"===m)e.selected=!1;else Ju(e,t,m,null,r,p);for(c in r)if(p=r[c],h=n[c],r.hasOwnProperty(c)&&p!==h&&(null!=p||null!=h))if("selected"===c)e.selected=p&&"function"!==typeof p&&"symbol"!==typeof p;else Ju(e,t,c,p,r,h);return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var v in n)p=n[v],n.hasOwnProperty(v)&&null!=p&&!r.hasOwnProperty(v)&&Ju(e,t,v,null,r,p);for(u in r)if(p=r[u],h=n[u],r.hasOwnProperty(u)&&p!==h&&(null!=p||null!=h))switch(u){case"children":case"dangerouslySetInnerHTML":if(null!=p)throw Error(i(137,t));break;default:Ju(e,t,u,p,r,h)}return;default:if(Nt(t)){for(var g in n)p=n[g],n.hasOwnProperty(g)&&void 0!==p&&!r.hasOwnProperty(g)&&Zu(e,t,g,void 0,r,p);for(d in r)p=r[d],h=n[d],!r.hasOwnProperty(d)||p===h||void 0===p&&void 0===h||Zu(e,t,d,p,r,h);return}}for(var y in n)p=n[y],n.hasOwnProperty(y)&&null!=p&&!r.hasOwnProperty(y)&&Ju(e,t,y,null,r,p);for(f in r)p=r[f],h=n[f],!r.hasOwnProperty(f)||p===h||null==p&&null==h||Ju(e,t,f,p,r,h)}(r,e.type,n,t),r[Me]=t}catch(o){uu(e,e.return,o)}}function hl(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&pd(e.type)||4===e.tag}function ml(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||hl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&pd(e.type))continue e;if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function vl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?(9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).insertBefore(e,t):((t=9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).appendChild(e),null!==(n=n._reactRootContainer)&&void 0!==n||null!==t.onclick||(t.onclick=Xu));else if(4!==r&&(27===r&&pd(e.type)&&(n=e.stateNode,t=null),null!==(e=e.child)))for(vl(e,t,n),e=e.sibling;null!==e;)vl(e,t,n),e=e.sibling}function gl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&(27===r&&pd(e.type)&&(n=e.stateNode),null!==(e=e.child)))for(gl(e,t,n),e=e.sibling;null!==e;)gl(e,t,n),e=e.sibling}function yl(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);ed(t,r,n),t[Oe]=e,t[Me]=n}catch(a){uu(e,e.return,a)}}var bl=!1,wl=!1,xl=!1,kl="function"===typeof WeakSet?WeakSet:Set,Sl=null;function El(e,t,n){var r=n.flags;switch(n.tag){case 0:case 11:case 15:Il(e,n),4&r&&il(5,n);break;case 1:if(Il(e,n),4&r)if(e=n.stateNode,null===t)try{e.componentDidMount()}catch(i){uu(n,n.return,i)}else{var o=vs(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(o,t,e.__reactInternalSnapshotBeforeUpdate)}catch(s){uu(n,n.return,s)}}64&r&&ll(n),512&r&&ul(n,n.return);break;case 3:if(Il(e,n),64&r&&null!==(e=n.updateQueue)){if(t=null,null!==n.child)switch(n.child.tag){case 27:case 5:case 1:t=n.child.stateNode}try{pa(e,t)}catch(i){uu(n,n.return,i)}}break;case 27:null===t&&4&r&&yl(n);case 26:case 5:Il(e,n),null===t&&4&r&&fl(n),512&r&&ul(n,n.return);break;case 12:Il(e,n);break;case 13:Il(e,n),4&r&&Tl(e,n),64&r&&(null!==(e=n.memoizedState)&&(null!==(e=e.dehydrated)&&function(e,t){var n=e.ownerDocument;if("$?"!==e.data||"complete"===n.readyState)t();else{var r=function(){t(),n.removeEventListener("DOMContentLoaded",r)};n.addEventListener("DOMContentLoaded",r),e._reactRetry=r}}(e,n=hu.bind(null,n))));break;case 22:if(!(r=null!==n.memoizedState||bl)){t=null!==t&&null!==t.memoizedState||wl,o=bl;var a=wl;bl=r,(wl=t)&&!a?zl(e,n,0!==(8772&n.subtreeFlags)):Il(e,n),bl=o,wl=a}break;case 30:break;default:Il(e,n)}}function Cl(e){var t=e.alternate;null!==t&&(e.alternate=null,Cl(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&Be(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var Nl=null,jl=!1;function Dl(e,t,n){for(n=n.child;null!==n;)Pl(e,t,n),n=n.sibling}function Pl(e,t,n){if(de&&"function"===typeof de.onCommitFiberUnmount)try{de.onCommitFiberUnmount(ue,n)}catch(a){}switch(n.tag){case 26:wl||dl(n,t),Dl(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode).parentNode.removeChild(n);break;case 27:wl||dl(n,t);var r=Nl,o=jl;pd(n.type)&&(Nl=n.stateNode,jl=!1),Dl(e,t,n),xd(n.stateNode),Nl=r,jl=o;break;case 5:wl||dl(n,t);case 6:if(r=Nl,o=jl,Nl=null,Dl(e,t,n),jl=o,null!==(Nl=r))if(jl)try{(9===Nl.nodeType?Nl.body:"HTML"===Nl.nodeName?Nl.ownerDocument.body:Nl).removeChild(n.stateNode)}catch(i){uu(n,t,i)}else try{Nl.removeChild(n.stateNode)}catch(i){uu(n,t,i)}break;case 18:null!==Nl&&(jl?(hd(9===(e=Nl).nodeType?e.body:"HTML"===e.nodeName?e.ownerDocument.body:e,n.stateNode),Df(e)):hd(Nl,n.stateNode));break;case 4:r=Nl,o=jl,Nl=n.stateNode.containerInfo,jl=!0,Dl(e,t,n),Nl=r,jl=o;break;case 0:case 11:case 14:case 15:wl||sl(2,n,t),wl||sl(4,n,t),Dl(e,t,n);break;case 1:wl||(dl(n,t),"function"===typeof(r=n.stateNode).componentWillUnmount&&cl(n,t,r)),Dl(e,t,n);break;case 21:Dl(e,t,n);break;case 22:wl=(r=wl)||null!==n.memoizedState,Dl(e,t,n),wl=r;break;default:Dl(e,t,n)}}function Tl(e,t){if(null===t.memoizedState&&(null!==(e=t.alternate)&&(null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))))try{Df(e)}catch(n){uu(t,t.return,n)}}function _l(e,t){var n=function(e){switch(e.tag){case 13:case 19:var t=e.stateNode;return null===t&&(t=e.stateNode=new kl),t;case 22:return null===(t=(e=e.stateNode)._retryCache)&&(t=e._retryCache=new kl),t;default:throw Error(i(435,e.tag))}}(e);t.forEach((function(t){var r=mu.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}function Ol(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r],a=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 27:if(pd(l.type)){Nl=l.stateNode,jl=!1;break e}break;case 5:Nl=l.stateNode,jl=!1;break e;case 3:case 4:Nl=l.stateNode.containerInfo,jl=!0;break e}l=l.return}if(null===Nl)throw Error(i(160));Pl(a,s,o),Nl=null,jl=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&t.subtreeFlags)for(t=t.child;null!==t;)Rl(t,e),t=t.sibling}var Ml=null;function Rl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:Ol(t,e),Al(e),4&r&&(sl(3,e,e.return),il(3,e),sl(5,e,e.return));break;case 1:Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),64&r&&bl&&(null!==(e=e.updateQueue)&&(null!==(r=e.callbacks)&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===n?r:n.concat(r))));break;case 26:var o=Ml;if(Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),4&r){var a=null!==n?n.memoizedState:null;if(r=e.memoizedState,null===n)if(null===r)if(null===e.stateNode){e:{r=e.type,n=e.memoizedProps,o=o.ownerDocument||o;t:switch(r){case"title":(!(a=o.getElementsByTagName("title")[0])||a[ze]||a[Oe]||"http://www.w3.org/2000/svg"===a.namespaceURI||a.hasAttribute("itemprop"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector("head > title"))),ed(a,r,n),a[Oe]=e,qe(a),r=a;break e;case"link":var s=zd("link","href",o).get(r+(n.href||""));if(s)for(var l=0;l<s.length;l++)if((a=s[l]).getAttribute("href")===(null==n.href||""===n.href?null:n.href)&&a.getAttribute("rel")===(null==n.rel?null:n.rel)&&a.getAttribute("title")===(null==n.title?null:n.title)&&a.getAttribute("crossorigin")===(null==n.crossOrigin?null:n.crossOrigin)){s.splice(l,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;case"meta":if(s=zd("meta","content",o).get(r+(n.content||"")))for(l=0;l<s.length;l++)if((a=s[l]).getAttribute("content")===(null==n.content?null:""+n.content)&&a.getAttribute("name")===(null==n.name?null:n.name)&&a.getAttribute("property")===(null==n.property?null:n.property)&&a.getAttribute("http-equiv")===(null==n.httpEquiv?null:n.httpEquiv)&&a.getAttribute("charset")===(null==n.charSet?null:n.charSet)){s.splice(l,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;default:throw Error(i(468,r))}a[Oe]=e,qe(a),r=a}e.stateNode=r}else Bd(o,e.type,e.stateNode);else e.stateNode=Rd(o,r,e.memoizedProps);else a!==r?(null===a?null!==n.stateNode&&(n=n.stateNode).parentNode.removeChild(n):a.count--,null===r?Bd(o,e.type,e.stateNode):Rd(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&pl(e,e.memoizedProps,n.memoizedProps)}break;case 27:Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),null!==n&&4&r&&pl(e,e.memoizedProps,n.memoizedProps);break;case 5:if(Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),32&e.flags){o=e.stateNode;try{kt(o,"")}catch(h){uu(e,e.return,h)}}4&r&&null!=e.stateNode&&pl(e,o=e.memoizedProps,null!==n?n.memoizedProps:o),1024&r&&(xl=!0);break;case 6:if(Ol(t,e),Al(e),4&r){if(null===e.stateNode)throw Error(i(162));r=e.memoizedProps,n=e.stateNode;try{n.nodeValue=r}catch(h){uu(e,e.return,h)}}break;case 3:if(Fd=null,o=Ml,Ml=Ed(t.containerInfo),Ol(t,e),Ml=o,Al(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Df(t.containerInfo)}catch(h){uu(e,e.return,h)}xl&&(xl=!1,Ll(e));break;case 4:r=Ml,Ml=Ed(e.stateNode.containerInfo),Ol(t,e),Al(e),Ml=r;break;case 12:default:Ol(t,e),Al(e);break;case 13:Ol(t,e),Al(e),8192&e.child.flags&&null!==e.memoizedState!==(null!==n&&null!==n.memoizedState)&&(xc=te()),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,_l(e,r)));break;case 22:o=null!==e.memoizedState;var c=null!==n&&null!==n.memoizedState,u=bl,d=wl;if(bl=u||o,wl=d||c,Ol(t,e),wl=d,bl=u,Al(e),8192&r)e:for(t=e.stateNode,t._visibility=o?-2&t._visibility:1|t._visibility,o&&(null===n||c||bl||wl||Fl(e)),n=null,t=e;;){if(5===t.tag||26===t.tag){if(null===n){c=n=t;try{if(a=c.stateNode,o)"function"===typeof(s=a.style).setProperty?s.setProperty("display","none","important"):s.display="none";else{l=c.stateNode;var f=c.memoizedProps.style,p=void 0!==f&&null!==f&&f.hasOwnProperty("display")?f.display:null;l.style.display=null==p||"boolean"===typeof p?"":(""+p).trim()}}catch(h){uu(c,c.return,h)}}}else if(6===t.tag){if(null===n){c=t;try{c.stateNode.nodeValue=o?"":c.memoizedProps}catch(h){uu(c,c.return,h)}}}else if((22!==t.tag&&23!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;null===t.sibling;){if(null===t.return||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}4&r&&(null!==(r=e.updateQueue)&&(null!==(n=r.retryQueue)&&(r.retryQueue=null,_l(e,n))));break;case 19:Ol(t,e),Al(e),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,_l(e,r)));case 30:case 21:}}function Al(e){var t=e.flags;if(2&t){try{for(var n,r=e.return;null!==r;){if(hl(r)){n=r;break}r=r.return}if(null==n)throw Error(i(160));switch(n.tag){case 27:var o=n.stateNode;gl(e,ml(e),o);break;case 5:var a=n.stateNode;32&n.flags&&(kt(a,""),n.flags&=-33),gl(e,ml(e),a);break;case 3:case 4:var s=n.stateNode.containerInfo;vl(e,ml(e),s);break;default:throw Error(i(161))}}catch(l){uu(e,e.return,l)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function Ll(e){if(1024&e.subtreeFlags)for(e=e.child;null!==e;){var t=e;Ll(t),5===t.tag&&1024&t.flags&&t.stateNode.reset(),e=e.sibling}}function Il(e,t){if(8772&t.subtreeFlags)for(t=t.child;null!==t;)El(e,t.alternate,t),t=t.sibling}function Fl(e){for(e=e.child;null!==e;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:sl(4,t,t.return),Fl(t);break;case 1:dl(t,t.return);var n=t.stateNode;"function"===typeof n.componentWillUnmount&&cl(t,t.return,n),Fl(t);break;case 27:xd(t.stateNode);case 26:case 5:dl(t,t.return),Fl(t);break;case 22:null===t.memoizedState&&Fl(t);break;default:Fl(t)}e=e.sibling}}function zl(e,t,n){for(n=n&&0!==(8772&t.subtreeFlags),t=t.child;null!==t;){var r=t.alternate,o=e,a=t,i=a.flags;switch(a.tag){case 0:case 11:case 15:zl(o,a,n),il(4,a);break;case 1:if(zl(o,a,n),"function"===typeof(o=(r=a).stateNode).componentDidMount)try{o.componentDidMount()}catch(c){uu(r,r.return,c)}if(null!==(o=(r=a).updateQueue)){var s=r.stateNode;try{var l=o.shared.hiddenCallbacks;if(null!==l)for(o.shared.hiddenCallbacks=null,o=0;o<l.length;o++)fa(l[o],s)}catch(c){uu(r,r.return,c)}}n&&64&i&&ll(a),ul(a,a.return);break;case 27:yl(a);case 26:case 5:zl(o,a,n),n&&null===r&&4&i&&fl(a),ul(a,a.return);break;case 12:zl(o,a,n);break;case 13:zl(o,a,n),n&&4&i&&Tl(o,a);break;case 22:null===a.memoizedState&&zl(o,a,n),ul(a,a.return);break;case 30:break;default:zl(o,a,n)}t=t.sibling}}function Bl(e,t){var n=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),e=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(e=t.memoizedState.cachePool.pool),e!==n&&(null!=e&&e.refCount++,null!=n&&Ao(n))}function Hl(e,t){e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Ao(e))}function Ul(e,t,n,r){if(10256&t.subtreeFlags)for(t=t.child;null!==t;)Yl(e,t,n,r),t=t.sibling}function Yl(e,t,n,r){var o=t.flags;switch(t.tag){case 0:case 11:case 15:Ul(e,t,n,r),2048&o&&il(9,t);break;case 1:case 13:default:Ul(e,t,n,r);break;case 3:Ul(e,t,n,r),2048&o&&(e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Ao(e)));break;case 12:if(2048&o){Ul(e,t,n,r),e=t.stateNode;try{var a=t.memoizedProps,i=a.id,s=a.onPostCommit;"function"===typeof s&&s(i,null===t.alternate?"mount":"update",e.passiveEffectDuration,-0)}catch(l){uu(t,t.return,l)}}else Ul(e,t,n,r);break;case 23:break;case 22:a=t.stateNode,i=t.alternate,null!==t.memoizedState?2&a._visibility?Ul(e,t,n,r):ql(e,t):2&a._visibility?Ul(e,t,n,r):(a._visibility|=2,Wl(e,t,n,r,0!==(10256&t.subtreeFlags))),2048&o&&Bl(i,t);break;case 24:Ul(e,t,n,r),2048&o&&Hl(t.alternate,t)}}function Wl(e,t,n,r,o){for(o=o&&0!==(10256&t.subtreeFlags),t=t.child;null!==t;){var a=e,i=t,s=n,l=r,c=i.flags;switch(i.tag){case 0:case 11:case 15:Wl(a,i,s,l,o),il(8,i);break;case 23:break;case 22:var u=i.stateNode;null!==i.memoizedState?2&u._visibility?Wl(a,i,s,l,o):ql(a,i):(u._visibility|=2,Wl(a,i,s,l,o)),o&&2048&c&&Bl(i.alternate,i);break;case 24:Wl(a,i,s,l,o),o&&2048&c&&Hl(i.alternate,i);break;default:Wl(a,i,s,l,o)}t=t.sibling}}function ql(e,t){if(10256&t.subtreeFlags)for(t=t.child;null!==t;){var n=e,r=t,o=r.flags;switch(r.tag){case 22:ql(n,r),2048&o&&Bl(r.alternate,r);break;case 24:ql(n,r),2048&o&&Hl(r.alternate,r);break;default:ql(n,r)}t=t.sibling}}var Vl=8192;function Ql(e){if(e.subtreeFlags&Vl)for(e=e.child;null!==e;)Kl(e),e=e.sibling}function Kl(e){switch(e.tag){case 26:Ql(e),e.flags&Vl&&null!==e.memoizedState&&function(e,t,n){if(null===Ud)throw Error(i(475));var r=Ud;if("stylesheet"===t.type&&("string"!==typeof n.media||!1!==matchMedia(n.media).matches)&&0===(4&t.state.loading)){if(null===t.instance){var o=Pd(n.href),a=e.querySelector(Td(o));if(a)return null!==(e=a._p)&&"object"===typeof e&&"function"===typeof e.then&&(r.count++,r=Wd.bind(r),e.then(r,r)),t.state.loading|=4,t.instance=a,void qe(a);a=e.ownerDocument||e,n=_d(n),(o=kd.get(o))&&Ld(n,o),qe(a=a.createElement("link"));var s=a;s._p=new Promise((function(e,t){s.onload=e,s.onerror=t})),ed(a,"link",n),t.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(t,e),(e=t.state.preload)&&0===(3&t.state.loading)&&(r.count++,t=Wd.bind(r),e.addEventListener("load",t),e.addEventListener("error",t))}}(Ml,e.memoizedState,e.memoizedProps);break;case 5:default:Ql(e);break;case 3:case 4:var t=Ml;Ml=Ed(e.stateNode.containerInfo),Ql(e),Ml=t;break;case 22:null===e.memoizedState&&(null!==(t=e.alternate)&&null!==t.memoizedState?(t=Vl,Vl=16777216,Ql(e),Vl=t):Ql(e))}}function $l(e){var t=e.alternate;if(null!==t&&null!==(e=t.child)){t.child=null;do{t=e.sibling,e.sibling=null,e=t}while(null!==e)}}function Gl(e){var t=e.deletions;if(0!==(16&e.flags)){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];Sl=r,Zl(r,e)}$l(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)Xl(e),e=e.sibling}function Xl(e){switch(e.tag){case 0:case 11:case 15:Gl(e),2048&e.flags&&sl(9,e,e.return);break;case 3:case 12:default:Gl(e);break;case 22:var t=e.stateNode;null!==e.memoizedState&&2&t._visibility&&(null===e.return||13!==e.return.tag)?(t._visibility&=-3,Jl(e)):Gl(e)}}function Jl(e){var t=e.deletions;if(0!==(16&e.flags)){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];Sl=r,Zl(r,e)}$l(e)}for(e=e.child;null!==e;){switch((t=e).tag){case 0:case 11:case 15:sl(8,t,t.return),Jl(t);break;case 22:2&(n=t.stateNode)._visibility&&(n._visibility&=-3,Jl(t));break;default:Jl(t)}e=e.sibling}}function Zl(e,t){for(;null!==Sl;){var n=Sl;switch(n.tag){case 0:case 11:case 15:sl(8,n,t);break;case 23:case 22:if(null!==n.memoizedState&&null!==n.memoizedState.cachePool){var r=n.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:Ao(n.memoizedState.cache)}if(null!==(r=n.child))r.return=n,Sl=r;else e:for(n=e;null!==Sl;){var o=(r=Sl).sibling,a=r.return;if(Cl(r),r===n){Sl=null;break e}if(null!==o){o.return=a,Sl=o;break e}Sl=a}}}var ec={getCacheForType:function(e){var t=jo(Mo),n=t.data.get(e);return void 0===n&&(n=e(),t.data.set(e,n)),n}},tc="function"===typeof WeakMap?WeakMap:Map,nc=0,rc=null,oc=null,ac=0,ic=0,sc=null,lc=!1,cc=!1,uc=!1,dc=0,fc=0,pc=0,hc=0,mc=0,vc=0,gc=0,yc=null,bc=null,wc=!1,xc=0,kc=1/0,Sc=null,Ec=null,Cc=0,Nc=null,jc=null,Dc=0,Pc=0,Tc=null,_c=null,Oc=0,Mc=null;function Rc(){if(0!==(2&nc)&&0!==ac)return ac&-ac;if(null!==R.T){return 0!==Fo?Fo:Pu()}return Te()}function Ac(){0===vc&&(vc=0===(536870912&ac)||ao?ke():536870912);var e=os.current;return null!==e&&(e.flags|=32),vc}function Lc(e,t,n){(e!==rc||2!==ic&&9!==ic)&&null===e.cancelPendingCommit||(Yc(e,0),Bc(e,ac,vc,!1)),Ce(e,n),0!==(2&nc)&&e===rc||(e===rc&&(0===(2&nc)&&(hc|=n),4===fc&&Bc(e,ac,vc,!1)),ku(e))}function Ic(e,t,n){if(0!==(6&nc))throw Error(i(327));for(var r=!n&&0===(124&t)&&0===(t&e.expiredLanes)||we(e,t),o=r?function(e,t){var n=nc;nc|=2;var r=qc(),o=Vc();rc!==e||ac!==t?(Sc=null,kc=te()+500,Yc(e,t)):cc=we(e,t);e:for(;;)try{if(0!==ic&&null!==oc){t=oc;var a=sc;t:switch(ic){case 1:ic=0,sc=null,Zc(e,t,a,1);break;case 2:case 9:if(Go(a)){ic=0,sc=null,Jc(t);break}t=function(){2!==ic&&9!==ic||rc!==e||(ic=7),ku(e)},a.then(t,t);break e;case 3:ic=7;break e;case 4:ic=5;break e;case 7:Go(a)?(ic=0,sc=null,Jc(t)):(ic=0,sc=null,Zc(e,t,a,7));break;case 5:var s=null;switch(oc.tag){case 26:s=oc.memoizedState;case 5:case 27:var l=oc;if(!s||Hd(s)){ic=0,sc=null;var c=l.sibling;if(null!==c)oc=c;else{var u=l.return;null!==u?(oc=u,eu(u)):oc=null}break t}}ic=0,sc=null,Zc(e,t,a,5);break;case 6:ic=0,sc=null,Zc(e,t,a,6);break;case 8:Uc(),fc=6;break e;default:throw Error(i(462))}}Gc();break}catch(d){Wc(e,d)}return bo=yo=null,R.H=r,R.A=o,nc=n,null!==oc?0:(rc=null,ac=0,Dr(),fc)}(e,t):Kc(e,t,!0),a=r;;){if(0===o){cc&&!r&&Bc(e,t,0,!1);break}if(n=e.current.alternate,!a||zc(n)){if(2===o){if(a=t,e.errorRecoveryDisabledLanes&a)var s=0;else s=0!==(s=-536870913&e.pendingLanes)?s:536870912&s?536870912:0;if(0!==s){t=s;e:{var l=e;o=yc;var c=l.current.memoizedState.isDehydrated;if(c&&(Yc(l,s).flags|=256),2!==(s=Kc(l,s,!1))){if(uc&&!c){l.errorRecoveryDisabledLanes|=a,hc|=a,o=4;break e}a=bc,bc=o,null!==a&&(null===bc?bc=a:bc.push.apply(bc,a))}o=s}if(a=!1,2!==o)continue}}if(1===o){Yc(e,0),Bc(e,t,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(i(345));case 4:if((4194048&t)!==t)break;case 6:Bc(r,t,vc,!lc);break e;case 2:bc=null;break;case 3:case 5:break;default:throw Error(i(329))}if((62914560&t)===t&&10<(o=xc+300-te())){if(Bc(r,t,vc,!lc),0!==be(r,0,!0))break e;r.timeoutHandle=ld(Fc.bind(null,r,n,bc,Sc,wc,t,vc,hc,gc,lc,a,2,-0,0),o)}else Fc(r,n,bc,Sc,wc,t,vc,hc,gc,lc,a,0,-0,0)}break}o=Kc(e,t,!1),a=!1}ku(e)}function Fc(e,t,n,r,o,a,s,l,c,u,d,f,p,h){if(e.timeoutHandle=-1,(8192&(f=t.subtreeFlags)||16785408===(16785408&f))&&(Ud={stylesheets:null,count:0,unsuspend:Yd},Kl(t),null!==(f=function(){if(null===Ud)throw Error(i(475));var e=Ud;return e.stylesheets&&0===e.count&&Vd(e,e.stylesheets),0<e.count?function(t){var n=setTimeout((function(){if(e.stylesheets&&Vd(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}),6e4);return e.unsuspend=t,function(){e.unsuspend=null,clearTimeout(n)}}:null}())))return e.cancelPendingCommit=f(nu.bind(null,e,t,a,n,r,o,s,l,c,d,1,p,h)),void Bc(e,a,s,!u);nu(e,t,a,n,r,o,s,l,c)}function zc(e){for(var t=e;;){var n=t.tag;if((0===n||11===n||15===n)&&16384&t.flags&&(null!==(n=t.updateQueue)&&null!==(n=n.stores)))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!$n(a(),o))return!1}catch(i){return!1}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Bc(e,t,n,r){t&=~mc,t&=~hc,e.suspendedLanes|=t,e.pingedLanes&=~t,r&&(e.warmLanes|=t),r=e.expirationTimes;for(var o=t;0<o;){var a=31-pe(o),i=1<<a;r[a]=-1,o&=~i}0!==n&&Ne(e,n,t)}function Hc(){return 0!==(6&nc)||(Su(0,!1),!1)}function Uc(){if(null!==oc){if(0===ic)var e=oc.return;else bo=yo=null,Fa(e=oc),$i=null,Gi=0,e=oc;for(;null!==e;)al(e.alternate,e),e=e.return;oc=null}}function Yc(e,t){var n=e.timeoutHandle;-1!==n&&(e.timeoutHandle=-1,cd(n)),null!==(n=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,n()),Uc(),rc=e,oc=n=Fr(e.current,null),ac=t,ic=0,sc=null,lc=!1,cc=we(e,t),uc=!1,gc=vc=mc=hc=pc=fc=0,bc=yc=null,wc=!1,0!==(8&t)&&(t|=32&t);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=t;0<r;){var o=31-pe(r),a=1<<o;t|=e[o],r&=~a}return dc=t,Dr(),n}function Wc(e,t){wa=null,R.H=qi,t===Vo||t===Ko?(t=ea(),ic=3):t===Qo?(t=ea(),ic=4):ic=t===Ns?8:null!==t&&"object"===typeof t&&"function"===typeof t.then?6:1,sc=t,null===oc&&(fc=1,xs(e,Er(t,e.current)))}function qc(){var e=R.H;return R.H=qi,null===e?qi:e}function Vc(){var e=R.A;return R.A=ec,e}function Qc(){fc=4,lc||(4194048&ac)!==ac&&null!==os.current||(cc=!0),0===(134217727&pc)&&0===(134217727&hc)||null===rc||Bc(rc,ac,vc,!1)}function Kc(e,t,n){var r=nc;nc|=2;var o=qc(),a=Vc();rc===e&&ac===t||(Sc=null,Yc(e,t)),t=!1;var i=fc;e:for(;;)try{if(0!==ic&&null!==oc){var s=oc,l=sc;switch(ic){case 8:Uc(),i=6;break e;case 3:case 2:case 9:case 6:null===os.current&&(t=!0);var c=ic;if(ic=0,sc=null,Zc(e,s,l,c),n&&cc){i=0;break e}break;default:c=ic,ic=0,sc=null,Zc(e,s,l,c)}}$c(),i=fc;break}catch(u){Wc(e,u)}return t&&e.shellSuspendCounter++,bo=yo=null,nc=r,R.H=o,R.A=a,null===oc&&(rc=null,ac=0,Dr()),i}function $c(){for(;null!==oc;)Xc(oc)}function Gc(){for(;null!==oc&&!Z();)Xc(oc)}function Xc(e){var t=Xs(e.alternate,e,dc);e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Jc(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=Ls(n,t,t.pendingProps,t.type,void 0,ac);break;case 11:t=Ls(n,t,t.pendingProps,t.type.render,t.ref,ac);break;case 5:Fa(t);default:al(n,t),t=Xs(n,t=oc=zr(t,dc),dc)}e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Zc(e,t,n,r){bo=yo=null,Fa(t),$i=null,Gi=0;var o=t.return;try{if(function(e,t,n,r,o){if(n.flags|=32768,null!==r&&"object"===typeof r&&"function"===typeof r.then){if(null!==(t=n.alternate)&&Eo(t,n,o,!0),null!==(n=os.current)){switch(n.tag){case 13:return null===as?Qc():null===n.alternate&&0===fc&&(fc=3),n.flags&=-257,n.flags|=65536,n.lanes=o,r===$o?n.flags|=16384:(null===(t=n.updateQueue)?n.updateQueue=new Set([r]):t.add(r),du(e,r,o)),!1;case 22:return n.flags|=65536,r===$o?n.flags|=16384:(null===(t=n.updateQueue)?(t={transitions:null,markerInstances:null,retryQueue:new Set([r])},n.updateQueue=t):null===(n=t.retryQueue)?t.retryQueue=new Set([r]):n.add(r),du(e,r,o)),!1}throw Error(i(435,n.tag))}return du(e,r,o),Qc(),!1}if(ao)return null!==(t=os.current)?(0===(65536&t.flags)&&(t.flags|=256),t.flags|=65536,t.lanes=o,r!==lo&&vo(Er(e=Error(i(422),{cause:r}),n))):(r!==lo&&vo(Er(t=Error(i(423),{cause:r}),n)),(e=e.current.alternate).flags|=65536,o&=-o,e.lanes|=o,r=Er(r,n),la(e,o=Ss(e.stateNode,r,o)),4!==fc&&(fc=2)),!1;var a=Error(i(520),{cause:r});if(a=Er(a,n),null===yc?yc=[a]:yc.push(a),4!==fc&&(fc=2),null===t)return!0;r=Er(r,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=o&-o,n.lanes|=e,la(n,e=Ss(n.stateNode,r,e)),!1;case 1:if(t=n.type,a=n.stateNode,0===(128&n.flags)&&("function"===typeof t.getDerivedStateFromError||null!==a&&"function"===typeof a.componentDidCatch&&(null===Ec||!Ec.has(a))))return n.flags|=65536,o&=-o,n.lanes|=o,Cs(o=Es(o),e,n,r),la(n,o),!1}n=n.return}while(null!==n);return!1}(e,o,t,n,ac))return fc=1,xs(e,Er(n,e.current)),void(oc=null)}catch(a){if(null!==o)throw oc=o,a;return fc=1,xs(e,Er(n,e.current)),void(oc=null)}32768&t.flags?(ao||1===r?e=!0:cc||0!==(536870912&ac)?e=!1:(lc=e=!0,(2===r||9===r||3===r||6===r)&&(null!==(r=os.current)&&13===r.tag&&(r.flags|=16384))),tu(t,e)):eu(t)}function eu(e){var t=e;do{if(0!==(32768&t.flags))return void tu(t,lc);e=t.return;var n=rl(t.alternate,t,dc);if(null!==n)return void(oc=n);if(null!==(t=t.sibling))return void(oc=t);oc=t=e}while(null!==t);0===fc&&(fc=5)}function tu(e,t){do{var n=ol(e.alternate,e);if(null!==n)return n.flags&=32767,void(oc=n);if(null!==(n=e.return)&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&null!==(e=e.sibling))return void(oc=e);oc=e=n}while(null!==e);fc=6,oc=null}function nu(e,t,n,r,o,a,s,l,c){e.cancelPendingCommit=null;do{su()}while(0!==Cc);if(0!==(6&nc))throw Error(i(327));if(null!==t){if(t===e.current)throw Error(i(177));if(a=t.lanes|t.childLanes,function(e,t,n,r,o,a){var i=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,l=e.expirationTimes,c=e.hiddenUpdates;for(n=i&~n;0<n;){var u=31-pe(n),d=1<<u;s[u]=0,l[u]=-1;var f=c[u];if(null!==f)for(c[u]=null,u=0;u<f.length;u++){var p=f[u];null!==p&&(p.lane&=-536870913)}n&=~d}0!==r&&Ne(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~t))}(e,n,a|=jr,s,l,c),e===rc&&(oc=rc=null,ac=0),jc=t,Nc=e,Dc=n,Pc=a,Tc=o,_c=r,0!==(10256&t.subtreeFlags)||0!==(10256&t.flags)?(e.callbackNode=null,e.callbackPriority=0,X(ae,(function(){return lu(),null}))):(e.callbackNode=null,e.callbackPriority=0),r=0!==(13878&t.flags),0!==(13878&t.subtreeFlags)||r){r=R.T,R.T=null,o=A.p,A.p=2,s=nc,nc|=4;try{!function(e,t){if(e=e.containerInfo,td=nf,tr(e=er(e))){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,a=r.focusNode;r=r.focusOffset;try{n.nodeType,a.nodeType}catch(v){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,f=e,p=null;t:for(;;){for(var h;f!==n||0!==o&&3!==f.nodeType||(l=s+o),f!==a||0!==r&&3!==f.nodeType||(c=s+r),3===f.nodeType&&(s+=f.nodeValue.length),null!==(h=f.firstChild);)p=f,f=h;for(;;){if(f===e)break t;if(p===n&&++u===o&&(l=s),p===a&&++d===r&&(c=s),null!==(h=f.nextSibling))break;p=(f=p).parentNode}f=h}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(nd={focusedElem:e,selectionRange:n},nf=!1,Sl=t;null!==Sl;)if(e=(t=Sl).child,0!==(1024&t.subtreeFlags)&&null!==e)e.return=t,Sl=e;else for(;null!==Sl;){switch(a=(t=Sl).alternate,e=t.flags,t.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(0!==(1024&e)&&null!==a){e=void 0,n=t,o=a.memoizedProps,a=a.memoizedState,r=n.stateNode;try{var m=vs(n.type,o,(n.elementType,n.type));e=r.getSnapshotBeforeUpdate(m,a),r.__reactInternalSnapshotBeforeUpdate=e}catch(g){uu(n,n.return,g)}}break;case 3:if(0!==(1024&e))if(9===(n=(e=t.stateNode.containerInfo).nodeType))md(e);else if(1===n)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":md(e);break;default:e.textContent=""}break;default:if(0!==(1024&e))throw Error(i(163))}if(null!==(e=t.sibling)){e.return=t.return,Sl=e;break}Sl=t.return}}(e,t)}finally{nc=s,A.p=o,R.T=r}}Cc=1,ru(),ou(),au()}}function ru(){if(1===Cc){Cc=0;var e=Nc,t=jc,n=0!==(13878&t.flags);if(0!==(13878&t.subtreeFlags)||n){n=R.T,R.T=null;var r=A.p;A.p=2;var o=nc;nc|=4;try{Rl(t,e);var a=nd,i=er(e.containerInfo),s=a.focusedElem,l=a.selectionRange;if(i!==s&&s&&s.ownerDocument&&Zn(s.ownerDocument.documentElement,s)){if(null!==l&&tr(s)){var c=l.start,u=l.end;if(void 0===u&&(u=c),"selectionStart"in s)s.selectionStart=c,s.selectionEnd=Math.min(u,s.value.length);else{var d=s.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),h=s.textContent.length,m=Math.min(l.start,h),v=void 0===l.end?m:Math.min(l.end,h);!p.extend&&m>v&&(i=v,v=m,m=i);var g=Jn(s,m),y=Jn(s,v);if(g&&y&&(1!==p.rangeCount||p.anchorNode!==g.node||p.anchorOffset!==g.offset||p.focusNode!==y.node||p.focusOffset!==y.offset)){var b=d.createRange();b.setStart(g.node,g.offset),p.removeAllRanges(),m>v?(p.addRange(b),p.extend(y.node,y.offset)):(b.setEnd(y.node,y.offset),p.addRange(b))}}}}for(d=[],p=s;p=p.parentNode;)1===p.nodeType&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for("function"===typeof s.focus&&s.focus(),s=0;s<d.length;s++){var w=d[s];w.element.scrollLeft=w.left,w.element.scrollTop=w.top}}nf=!!td,nd=td=null}finally{nc=o,A.p=r,R.T=n}}e.current=t,Cc=2}}function ou(){if(2===Cc){Cc=0;var e=Nc,t=jc,n=0!==(8772&t.flags);if(0!==(8772&t.subtreeFlags)||n){n=R.T,R.T=null;var r=A.p;A.p=2;var o=nc;nc|=4;try{El(e,t.alternate,t)}finally{nc=o,A.p=r,R.T=n}}Cc=3}}function au(){if(4===Cc||3===Cc){Cc=0,ee();var e=Nc,t=jc,n=Dc,r=_c;0!==(10256&t.subtreeFlags)||0!==(10256&t.flags)?Cc=5:(Cc=0,jc=Nc=null,iu(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(Ec=null),Pe(n),t=t.stateNode,de&&"function"===typeof de.onCommitFiberRoot)try{de.onCommitFiberRoot(ue,t,void 0,128===(128&t.current.flags))}catch(l){}if(null!==r){t=R.T,o=A.p,A.p=2,R.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var s=r[i];a(s.value,{componentStack:s.stack})}}finally{R.T=t,A.p=o}}0!==(3&Dc)&&su(),ku(e),o=e.pendingLanes,0!==(4194090&n)&&0!==(42&o)?e===Mc?Oc++:(Oc=0,Mc=e):Oc=0,Su(0,!1)}}function iu(e,t){0===(e.pooledCacheLanes&=t)&&(null!=(t=e.pooledCache)&&(e.pooledCache=null,Ao(t)))}function su(e){return ru(),ou(),au(),lu()}function lu(){if(5!==Cc)return!1;var e=Nc,t=Pc;Pc=0;var n=Pe(Dc),r=R.T,o=A.p;try{A.p=32>n?32:n,R.T=null,n=Tc,Tc=null;var a=Nc,s=Dc;if(Cc=0,jc=Nc=null,Dc=0,0!==(6&nc))throw Error(i(331));var l=nc;if(nc|=4,Xl(a.current),Yl(a,a.current,s,n),nc=l,Su(0,!1),de&&"function"===typeof de.onPostCommitFiberRoot)try{de.onPostCommitFiberRoot(ue,a)}catch(c){}return!0}finally{A.p=o,R.T=r,iu(e,t)}}function cu(e,t,n){t=Er(n,t),null!==(e=ia(e,t=Ss(e.stateNode,t,2),2))&&(Ce(e,2),ku(e))}function uu(e,t,n){if(3===e.tag)cu(e,e,n);else for(;null!==t;){if(3===t.tag){cu(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"===typeof t.type.getDerivedStateFromError||"function"===typeof r.componentDidCatch&&(null===Ec||!Ec.has(r))){e=Er(n,e),null!==(r=ia(t,n=Es(2),2))&&(Cs(n,r,t,e),Ce(r,2),ku(r));break}}t=t.return}}function du(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new tc;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(uc=!0,o.add(n),e=fu.bind(null,e,t,n),t.then(e,e))}function fu(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,rc===e&&(ac&n)===n&&(4===fc||3===fc&&(62914560&ac)===ac&&300>te()-xc?0===(2&nc)&&Yc(e,0):mc|=n,gc===ac&&(gc=0)),ku(e)}function pu(e,t){0===t&&(t=Se()),null!==(e=_r(e,t))&&(Ce(e,t),ku(e))}function hu(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),pu(e,n)}function mu(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}null!==r&&r.delete(t),pu(e,n)}var vu=null,gu=null,yu=!1,bu=!1,wu=!1,xu=0;function ku(e){e!==gu&&null===e.next&&(null===gu?vu=gu=e:gu=gu.next=e),bu=!0,yu||(yu=!0,dd((function(){0!==(6&nc)?X(re,Eu):Cu()})))}function Su(e,t){if(!wu&&bu){wu=!0;do{for(var n=!1,r=vu;null!==r;){if(!t)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-pe(42|e)+1)-1,a=201326741&(a&=o&~(i&~s))?201326741&a|1:a?2|a:0}0!==a&&(n=!0,Du(r,a))}else a=ac,0===(3&(a=be(r,r===rc?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||we(r,a)||(n=!0,Du(r,a));r=r.next}}while(n);wu=!1}}function Eu(){Cu()}function Cu(){bu=yu=!1;var e=0;0!==xu&&(function(){var e=window.event;if(e&&"popstate"===e.type)return e!==sd&&(sd=e,!0);return sd=null,!1}()&&(e=xu),xu=0);for(var t=te(),n=null,r=vu;null!==r;){var o=r.next,a=Nu(r,t);0===a?(r.next=null,null===n?vu=o:n.next=o,null===o&&(gu=n)):(n=r,(0!==e||0!==(3&a))&&(bu=!0)),r=o}Su(e,!1)}function Nu(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-62914561&e.pendingLanes;0<a;){var i=31-pe(a),s=1<<i,l=o[i];-1===l?0!==(s&n)&&0===(s&r)||(o[i]=xe(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}if(n=ac,n=be(e,e===(t=rc)?n:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===n||e===t&&(2===ic||9===ic)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&J(r),e.callbackNode=null,e.callbackPriority=0;if(0===(3&n)||we(e,n)){if((t=n&-n)===e.callbackPriority)return t;switch(null!==r&&J(r),Pe(n)){case 2:case 8:n=oe;break;case 32:default:n=ae;break;case 268435456:n=se}return r=ju.bind(null,e),n=X(n,r),e.callbackPriority=t,e.callbackNode=n,t}return null!==r&&null!==r&&J(r),e.callbackPriority=2,e.callbackNode=null,2}function ju(e,t){if(0!==Cc&&5!==Cc)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(su()&&e.callbackNode!==n)return null;var r=ac;return 0===(r=be(e,e===rc?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(Ic(e,r,t),Nu(e,te()),null!=e.callbackNode&&e.callbackNode===n?ju.bind(null,e):null)}function Du(e,t){if(su())return null;Ic(e,t,!0)}function Pu(){return 0===xu&&(xu=ke()),xu}function Tu(e){return null==e||"symbol"===typeof e||"boolean"===typeof e?null:"function"===typeof e?e:Pt(""+e)}function _u(e,t){var n=t.ownerDocument.createElement("input");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute("form",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}for(var Ou=0;Ou<xr.length;Ou++){var Mu=xr[Ou];kr(Mu.toLowerCase(),"on"+(Mu[0].toUpperCase()+Mu.slice(1)))}kr(pr,"onAnimationEnd"),kr(hr,"onAnimationIteration"),kr(mr,"onAnimationStart"),kr("dblclick","onDoubleClick"),kr("focusin","onFocus"),kr("focusout","onBlur"),kr(vr,"onTransitionRun"),kr(gr,"onTransitionStart"),kr(yr,"onTransitionCancel"),kr(br,"onTransitionEnd"),$e("onMouseEnter",["mouseout","mouseover"]),$e("onMouseLeave",["mouseout","mouseover"]),$e("onPointerEnter",["pointerout","pointerover"]),$e("onPointerLeave",["pointerout","pointerover"]),Ke("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Ke("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Ke("onBeforeInput",["compositionend","keypress","textInput","paste"]),Ke("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Ke("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Ke("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ru="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Au=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Ru));function Lu(e,t){t=0!==(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;a=s,o.currentTarget=c;try{a(o)}catch(u){gs(u)}o.currentTarget=null,a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;a=s,o.currentTarget=c;try{a(o)}catch(u){gs(u)}o.currentTarget=null,a=l}}}}function Iu(e,t){var n=t[Ae];void 0===n&&(n=t[Ae]=new Set);var r=e+"__bubble";n.has(r)||(Hu(t,e,2,!1),n.add(r))}function Fu(e,t,n){var r=0;t&&(r|=4),Hu(n,e,r,t)}var zu="_reactListening"+Math.random().toString(36).slice(2);function Bu(e){if(!e[zu]){e[zu]=!0,Ve.forEach((function(t){"selectionchange"!==t&&(Au.has(t)||Fu(t,!1,e),Fu(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[zu]||(t[zu]=!0,Fu("selectionchange",!1,t))}}function Hu(e,t,n,r){switch(uf(t)){case 2:var o=rf;break;case 8:o=of;break;default:o=af}n=o.bind(null,t,n,e),o=void 0,!zt||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Uu(e,t,n,r,o){var a=r;if(0===(1&t)&&0===(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==s;){if(null===(i=He(s)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}s=s.parentNode}}r=r.return}Lt((function(){var r=a,o=_t(n),i=[];e:{var s=wr.get(e);if(void 0!==s){var c=Zt,u=e;switch(e){case"keypress":if(0===qt(n))break e;case"keydown":case"keyup":c=mn;break;case"focusin":u="focus",c=an;break;case"focusout":u="blur",c=an;break;case"beforeblur":case"afterblur":c=an;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=rn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=on;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=gn;break;case pr:case hr:case mr:c=sn;break;case br:c=yn;break;case"scroll":case"scrollend":c=tn;break;case"wheel":c=bn;break;case"copy":case"cut":case"paste":c=ln;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=vn;break;case"toggle":case"beforetoggle":c=wn}var d=0!==(4&t),f=!d&&("scroll"===e||"scrollend"===e),p=d?null!==s?s+"Capture":null:s;d=[];for(var h,m=r;null!==m;){var v=m;if(h=v.stateNode,5!==(v=v.tag)&&26!==v&&27!==v||null===h||null===p||null!=(v=It(m,p))&&d.push(Yu(m,v,h)),f)break;m=m.return}0<d.length&&(s=new c(s,u,null,n,o),i.push({event:s,listeners:d}))}}if(0===(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===Tt||!(u=n.relatedTarget||n.fromElement)||!He(u)&&!u[Re])&&(c||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,c?(c=r,null!==(u=(u=n.relatedTarget||n.toElement)?He(u):null)&&(f=l(u),d=u.tag,u!==f||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=rn,v="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(d=vn,v="onPointerLeave",p="onPointerEnter",m="pointer"),f=null==c?s:Ye(c),h=null==u?s:Ye(u),(s=new d(v,m+"leave",c,n,o)).target=f,s.relatedTarget=h,v=null,He(o)===r&&((d=new d(p,m+"enter",u,n,o)).target=h,d.relatedTarget=f,v=d),f=v,c&&u)e:{for(p=u,m=0,h=d=c;h;h=qu(h))m++;for(h=0,v=p;v;v=qu(v))h++;for(;0<m-h;)d=qu(d),m--;for(;0<h-m;)p=qu(p),h--;for(;m--;){if(d===p||null!==p&&d===p.alternate)break e;d=qu(d),p=qu(p)}d=null}else d=null;null!==c&&Vu(i,s,c,d,!1),null!==u&&null!==f&&Vu(i,f,u,d,!0)}if("select"===(c=(s=r?Ye(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===c&&"file"===s.type)var g=Fn;else if(On(s))if(zn)g=Kn;else{g=Vn;var y=qn}else!(c=s.nodeName)||"input"!==c.toLowerCase()||"checkbox"!==s.type&&"radio"!==s.type?r&&Nt(r.elementType)&&(g=Fn):g=Qn;switch(g&&(g=g(e,r))?Mn(i,g,n,o):(y&&y(e,s,r),"focusout"===e&&r&&"number"===s.type&&null!=r.memoizedProps.value&&yt(s,"number",s.value)),y=r?Ye(r):window,e){case"focusin":(On(y)||"true"===y.contentEditable)&&(rr=y,or=r,ar=null);break;case"focusout":ar=or=rr=null;break;case"mousedown":ir=!0;break;case"contextmenu":case"mouseup":case"dragend":ir=!1,sr(i,n,o);break;case"selectionchange":if(nr)break;case"keydown":case"keyup":sr(i,n,o)}var b;if(kn)e:{switch(e){case"compositionstart":var w="onCompositionStart";break e;case"compositionend":w="onCompositionEnd";break e;case"compositionupdate":w="onCompositionUpdate";break e}w=void 0}else Tn?Dn(e,n)&&(w="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(w="onCompositionStart");w&&(Cn&&"ko"!==n.locale&&(Tn||"onCompositionStart"!==w?"onCompositionEnd"===w&&Tn&&(b=Wt()):(Ut="value"in(Ht=o)?Ht.value:Ht.textContent,Tn=!0)),0<(y=Wu(r,w)).length&&(w=new cn(w,e,null,n,o),i.push({event:w,listeners:y}),b?w.data=b:null!==(b=Pn(n))&&(w.data=b))),(b=En?function(e,t){switch(e){case"compositionend":return Pn(t);case"keypress":return 32!==t.which?null:(jn=!0,Nn);case"textInput":return(e=t.data)===Nn&&jn?null:e;default:return null}}(e,n):function(e,t){if(Tn)return"compositionend"===e||!kn&&Dn(e,t)?(e=Wt(),Yt=Ut=Ht=null,Tn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Cn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(w=Wu(r,"onBeforeInput")).length&&(y=new cn("onBeforeInput","beforeinput",null,n,o),i.push({event:y,listeners:w}),y.data=b)),function(e,t,n,r,o){if("submit"===t&&n&&n.stateNode===o){var a=Tu((o[Me]||null).action),i=r.submitter;i&&null!==(t=(t=i[Me]||null)?Tu(t.formAction):i.getAttribute("formAction"))&&(a=t,i=null);var s=new Zt("action","action",null,r,o);e.push({event:s,listeners:[{instance:null,listener:function(){if(r.defaultPrevented){if(0!==xu){var e=i?_u(o,i):new FormData(o);_i(n,{pending:!0,data:e,method:o.method,action:a},null,e)}}else"function"===typeof a&&(s.preventDefault(),e=i?_u(o,i):new FormData(o),_i(n,{pending:!0,data:e,method:o.method,action:a},a,e))},currentTarget:o}]})}}(i,e,r,n,o)}Lu(i,t)}))}function Yu(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Wu(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=It(e,n))&&r.unshift(Yu(e,o,a)),null!=(o=It(e,t))&&r.push(Yu(e,o,a))),3===e.tag)return r;e=e.return}return[]}function qu(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag&&27!==e.tag);return e||null}function Vu(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(s=s.tag,null!==l&&l===r)break;5!==s&&26!==s&&27!==s||null===c||(l=c,o?null!=(c=It(n,a))&&i.unshift(Yu(n,c,l)):o||null!=(c=It(n,a))&&i.push(Yu(n,c,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Qu=/\r\n?/g,Ku=/\u0000|\uFFFD/g;function $u(e){return("string"===typeof e?e:""+e).replace(Qu,"\n").replace(Ku,"")}function Gu(e,t){return t=$u(t),$u(e)===t}function Xu(){}function Ju(e,t,n,r,o,a){switch(n){case"children":"string"===typeof r?"body"===t||"textarea"===t&&""===r||kt(e,r):("number"===typeof r||"bigint"===typeof r)&&"body"!==t&&kt(e,""+r);break;case"className":nt(e,"class",r);break;case"tabIndex":nt(e,"tabindex",r);break;case"dir":case"role":case"viewBox":case"width":case"height":nt(e,n,r);break;case"style":Ct(e,r,a);break;case"data":if("object"!==t){nt(e,"data",r);break}case"src":case"href":if(""===r&&("a"!==t||"href"!==n)){e.removeAttribute(n);break}if(null==r||"function"===typeof r||"symbol"===typeof r||"boolean"===typeof r){e.removeAttribute(n);break}r=Pt(""+r),e.setAttribute(n,r);break;case"action":case"formAction":if("function"===typeof r){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}if("function"===typeof a&&("formAction"===n?("input"!==t&&Ju(e,t,"name",o.name,o,null),Ju(e,t,"formEncType",o.formEncType,o,null),Ju(e,t,"formMethod",o.formMethod,o,null),Ju(e,t,"formTarget",o.formTarget,o,null)):(Ju(e,t,"encType",o.encType,o,null),Ju(e,t,"method",o.method,o,null),Ju(e,t,"target",o.target,o,null))),null==r||"symbol"===typeof r||"boolean"===typeof r){e.removeAttribute(n);break}r=Pt(""+r),e.setAttribute(n,r);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"onScroll":null!=r&&Iu("scroll",e);break;case"onScrollEnd":null!=r&&Iu("scrollend",e);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!==typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"multiple":e.multiple=r&&"function"!==typeof r&&"symbol"!==typeof r;break;case"muted":e.muted=r&&"function"!==typeof r&&"symbol"!==typeof r;break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":case"autoFocus":break;case"xlinkHref":if(null==r||"function"===typeof r||"boolean"===typeof r||"symbol"===typeof r){e.removeAttribute("xlink:href");break}n=Pt(""+r),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":null!=r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,""+r):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":!0===r?e.setAttribute(n,""):!1!==r&&null!=r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,r):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":null!=r&&"function"!==typeof r&&"symbol"!==typeof r&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case"rowSpan":case"start":null==r||"function"===typeof r||"symbol"===typeof r||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case"popover":Iu("beforetoggle",e),Iu("toggle",e),tt(e,"popover",r);break;case"xlinkActuate":rt(e,"http://www.w3.org/1999/xlink","xlink:actuate",r);break;case"xlinkArcrole":rt(e,"http://www.w3.org/1999/xlink","xlink:arcrole",r);break;case"xlinkRole":rt(e,"http://www.w3.org/1999/xlink","xlink:role",r);break;case"xlinkShow":rt(e,"http://www.w3.org/1999/xlink","xlink:show",r);break;case"xlinkTitle":rt(e,"http://www.w3.org/1999/xlink","xlink:title",r);break;case"xlinkType":rt(e,"http://www.w3.org/1999/xlink","xlink:type",r);break;case"xmlBase":rt(e,"http://www.w3.org/XML/1998/namespace","xml:base",r);break;case"xmlLang":rt(e,"http://www.w3.org/XML/1998/namespace","xml:lang",r);break;case"xmlSpace":rt(e,"http://www.w3.org/XML/1998/namespace","xml:space",r);break;case"is":tt(e,"is",r);break;case"innerText":case"textContent":break;default:(!(2<n.length)||"o"!==n[0]&&"O"!==n[0]||"n"!==n[1]&&"N"!==n[1])&&tt(e,n=jt.get(n)||n,r)}}function Zu(e,t,n,r,o,a){switch(n){case"style":Ct(e,r,a);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!==typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"children":"string"===typeof r?kt(e,r):("number"===typeof r||"bigint"===typeof r)&&kt(e,""+r);break;case"onScroll":null!=r&&Iu("scroll",e);break;case"onScrollEnd":null!=r&&Iu("scrollend",e);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":case"innerText":case"textContent":break;default:Qe.hasOwnProperty(n)||("o"!==n[0]||"n"!==n[1]||(o=n.endsWith("Capture"),t=n.slice(2,o?n.length-7:void 0),"function"===typeof(a=null!=(a=e[Me]||null)?a[n]:null)&&e.removeEventListener(t,a,o),"function"!==typeof r)?n in e?e[n]=r:!0===r?e.setAttribute(n,""):tt(e,n,r):("function"!==typeof a&&null!==a&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,r,o)))}}function ed(e,t,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Iu("error",e),Iu("load",e);var r,o=!1,a=!1;for(r in n)if(n.hasOwnProperty(r)){var s=n[r];if(null!=s)switch(r){case"src":o=!0;break;case"srcSet":a=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Ju(e,t,r,s,n,null)}}return a&&Ju(e,t,"srcSet",n.srcSet,n,null),void(o&&Ju(e,t,"src",n.src,n,null));case"input":Iu("invalid",e);var l=r=s=a=null,c=null,u=null;for(o in n)if(n.hasOwnProperty(o)){var d=n[o];if(null!=d)switch(o){case"name":a=d;break;case"type":s=d;break;case"checked":c=d;break;case"defaultChecked":u=d;break;case"value":r=d;break;case"defaultValue":l=d;break;case"children":case"dangerouslySetInnerHTML":if(null!=d)throw Error(i(137,t));break;default:Ju(e,t,o,d,n,null)}}return gt(e,r,l,c,u,s,a,!1),void dt(e);case"select":for(a in Iu("invalid",e),o=s=r=null,n)if(n.hasOwnProperty(a)&&null!=(l=n[a]))switch(a){case"value":r=l;break;case"defaultValue":s=l;break;case"multiple":o=l;default:Ju(e,t,a,l,n,null)}return t=r,n=s,e.multiple=!!o,void(null!=t?bt(e,!!o,t,!1):null!=n&&bt(e,!!o,n,!0));case"textarea":for(s in Iu("invalid",e),r=a=o=null,n)if(n.hasOwnProperty(s)&&null!=(l=n[s]))switch(s){case"value":o=l;break;case"defaultValue":a=l;break;case"children":r=l;break;case"dangerouslySetInnerHTML":if(null!=l)throw Error(i(91));break;default:Ju(e,t,s,l,n,null)}return xt(e,o,a,r),void dt(e);case"option":for(c in n)if(n.hasOwnProperty(c)&&null!=(o=n[c]))if("selected"===c)e.selected=o&&"function"!==typeof o&&"symbol"!==typeof o;else Ju(e,t,c,o,n,null);return;case"dialog":Iu("beforetoggle",e),Iu("toggle",e),Iu("cancel",e),Iu("close",e);break;case"iframe":case"object":Iu("load",e);break;case"video":case"audio":for(o=0;o<Ru.length;o++)Iu(Ru[o],e);break;case"image":Iu("error",e),Iu("load",e);break;case"details":Iu("toggle",e);break;case"embed":case"source":case"link":Iu("error",e),Iu("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(u in n)if(n.hasOwnProperty(u)&&null!=(o=n[u]))switch(u){case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Ju(e,t,u,o,n,null)}return;default:if(Nt(t)){for(d in n)n.hasOwnProperty(d)&&(void 0!==(o=n[d])&&Zu(e,t,d,o,n,void 0));return}}for(l in n)n.hasOwnProperty(l)&&(null!=(o=n[l])&&Ju(e,t,l,o,n,null))}var td=null,nd=null;function rd(e){return 9===e.nodeType?e:e.ownerDocument}function od(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function ad(e,t){if(0===e)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return 1===e&&"foreignObject"===t?0:e}function id(e,t){return"textarea"===e||"noscript"===e||"string"===typeof t.children||"number"===typeof t.children||"bigint"===typeof t.children||"object"===typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var sd=null;var ld="function"===typeof setTimeout?setTimeout:void 0,cd="function"===typeof clearTimeout?clearTimeout:void 0,ud="function"===typeof Promise?Promise:void 0,dd="function"===typeof queueMicrotask?queueMicrotask:"undefined"!==typeof ud?function(e){return ud.resolve(null).then(e).catch(fd)}:ld;function fd(e){setTimeout((function(){throw e}))}function pd(e){return"head"===e}function hd(e,t){var n=t,r=0,o=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0<r&&8>r){n=r;var i=e.ownerDocument;if(1&n&&xd(i.documentElement),2&n&&xd(i.body),4&n)for(xd(n=i.head),i=n.firstChild;i;){var s=i.nextSibling,l=i.nodeName;i[ze]||"SCRIPT"===l||"STYLE"===l||"LINK"===l&&"stylesheet"===i.rel.toLowerCase()||n.removeChild(i),i=s}}if(0===o)return e.removeChild(a),void Df(t);o--}else"$"===n||"$?"===n||"$!"===n?o++:r=n.charCodeAt(0)-48;else r=0;n=a}while(n);Df(t)}function md(e){var t=e.firstChild;for(t&&10===t.nodeType&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case"HTML":case"HEAD":case"BODY":md(n),Be(n);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if("stylesheet"===n.rel.toLowerCase())continue}e.removeChild(n)}}function vd(e){return"$!"===e.data||"$?"===e.data&&"complete"===e.ownerDocument.readyState}function gd(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t||"F!"===t||"F"===t)break;if("/$"===t)return null}}return e}var yd=null;function bd(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}function wd(e,t,n){switch(t=rd(n),e){case"html":if(!(e=t.documentElement))throw Error(i(452));return e;case"head":if(!(e=t.head))throw Error(i(453));return e;case"body":if(!(e=t.body))throw Error(i(454));return e;default:throw Error(i(451))}}function xd(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);Be(e)}var kd=new Map,Sd=new Set;function Ed(e){return"function"===typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var Cd=A.d;A.d={f:function(){var e=Cd.f(),t=Hc();return e||t},r:function(e){var t=Ue(e);null!==t&&5===t.tag&&"form"===t.type?Mi(t):Cd.r(e)},D:function(e){Cd.D(e),jd("dns-prefetch",e,null)},C:function(e,t){Cd.C(e,t),jd("preconnect",e,t)},L:function(e,t,n){Cd.L(e,t,n);var r=Nd;if(r&&e&&t){var o='link[rel="preload"][as="'+mt(t)+'"]';"image"===t&&n&&n.imageSrcSet?(o+='[imagesrcset="'+mt(n.imageSrcSet)+'"]',"string"===typeof n.imageSizes&&(o+='[imagesizes="'+mt(n.imageSizes)+'"]')):o+='[href="'+mt(e)+'"]';var a=o;switch(t){case"style":a=Pd(e);break;case"script":a=Od(e)}kd.has(a)||(e=f({rel:"preload",href:"image"===t&&n&&n.imageSrcSet?void 0:e,as:t},n),kd.set(a,e),null!==r.querySelector(o)||"style"===t&&r.querySelector(Td(a))||"script"===t&&r.querySelector(Md(a))||(ed(t=r.createElement("link"),"link",e),qe(t),r.head.appendChild(t)))}},m:function(e,t){Cd.m(e,t);var n=Nd;if(n&&e){var r=t&&"string"===typeof t.as?t.as:"script",o='link[rel="modulepreload"][as="'+mt(r)+'"][href="'+mt(e)+'"]',a=o;switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":a=Od(e)}if(!kd.has(a)&&(e=f({rel:"modulepreload",href:e},t),kd.set(a,e),null===n.querySelector(o))){switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Md(a)))return}ed(r=n.createElement("link"),"link",e),qe(r),n.head.appendChild(r)}}},X:function(e,t){Cd.X(e,t);var n=Nd;if(n&&e){var r=We(n).hoistableScripts,o=Od(e),a=r.get(o);a||((a=n.querySelector(Md(o)))||(e=f({src:e,async:!0},t),(t=kd.get(o))&&Id(e,t),qe(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}},S:function(e,t,n){Cd.S(e,t,n);var r=Nd;if(r&&e){var o=We(r).hoistableStyles,a=Pd(e);t=t||"default";var i=o.get(a);if(!i){var s={loading:0,preload:null};if(i=r.querySelector(Td(a)))s.loading=5;else{e=f({rel:"stylesheet",href:e,"data-precedence":t},n),(n=kd.get(a))&&Ld(e,n);var l=i=r.createElement("link");qe(l),ed(l,"link",e),l._p=new Promise((function(e,t){l.onload=e,l.onerror=t})),l.addEventListener("load",(function(){s.loading|=1})),l.addEventListener("error",(function(){s.loading|=2})),s.loading|=4,Ad(i,t,r)}i={type:"stylesheet",instance:i,count:1,state:s},o.set(a,i)}}},M:function(e,t){Cd.M(e,t);var n=Nd;if(n&&e){var r=We(n).hoistableScripts,o=Od(e),a=r.get(o);a||((a=n.querySelector(Md(o)))||(e=f({src:e,async:!0,type:"module"},t),(t=kd.get(o))&&Id(e,t),qe(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}}};var Nd="undefined"===typeof document?null:document;function jd(e,t,n){var r=Nd;if(r&&"string"===typeof t&&t){var o=mt(t);o='link[rel="'+e+'"][href="'+o+'"]',"string"===typeof n&&(o+='[crossorigin="'+n+'"]'),Sd.has(o)||(Sd.add(o),e={rel:e,crossOrigin:n,href:t},null===r.querySelector(o)&&(ed(t=r.createElement("link"),"link",e),qe(t),r.head.appendChild(t)))}}function Dd(e,t,n,r){var o,a,s,l,c=(c=W.current)?Ed(c):null;if(!c)throw Error(i(446));switch(e){case"meta":case"title":return null;case"style":return"string"===typeof n.precedence&&"string"===typeof n.href?(t=Pd(n.href),(r=(n=We(c).hoistableStyles).get(t))||(r={type:"style",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};case"link":if("stylesheet"===n.rel&&"string"===typeof n.href&&"string"===typeof n.precedence){e=Pd(n.href);var u=We(c).hoistableStyles,d=u.get(e);if(d||(c=c.ownerDocument||c,d={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=c.querySelector(Td(e)))&&!u._p&&(d.instance=u,d.state.loading=5),kd.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},kd.set(e,n),u||(o=c,a=e,s=n,l=d.state,o.querySelector('link[rel="preload"][as="style"]['+a+"]")?l.loading=1:(a=o.createElement("link"),l.preload=a,a.addEventListener("load",(function(){return l.loading|=1})),a.addEventListener("error",(function(){return l.loading|=2})),ed(a,"link",s),qe(a),o.head.appendChild(a))))),t&&null===r)throw Error(i(528,""));return d}if(t&&null!==r)throw Error(i(529,""));return null;case"script":return t=n.async,"string"===typeof(n=n.src)&&t&&"function"!==typeof t&&"symbol"!==typeof t?(t=Od(n),(r=(n=We(c).hoistableScripts).get(t))||(r={type:"script",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pd(e){return'href="'+mt(e)+'"'}function Td(e){return'link[rel="stylesheet"]['+e+"]"}function _d(e){return f({},e,{"data-precedence":e.precedence,precedence:null})}function Od(e){return'[src="'+mt(e)+'"]'}function Md(e){return"script[async]"+e}function Rd(e,t,n){if(t.count++,null===t.instance)switch(t.type){case"style":var r=e.querySelector('style[data-href~="'+mt(n.href)+'"]');if(r)return t.instance=r,qe(r),r;var o=f({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return qe(r=(e.ownerDocument||e).createElement("style")),ed(r,"style",o),Ad(r,n.precedence,e),t.instance=r;case"stylesheet":o=Pd(n.href);var a=e.querySelector(Td(o));if(a)return t.state.loading|=4,t.instance=a,qe(a),a;r=_d(n),(o=kd.get(o))&&Ld(r,o),qe(a=(e.ownerDocument||e).createElement("link"));var s=a;return s._p=new Promise((function(e,t){s.onload=e,s.onerror=t})),ed(a,"link",r),t.state.loading|=4,Ad(a,n.precedence,e),t.instance=a;case"script":return a=Od(n.src),(o=e.querySelector(Md(a)))?(t.instance=o,qe(o),o):(r=n,(o=kd.get(a))&&Id(r=f({},n),o),qe(o=(e=e.ownerDocument||e).createElement("script")),ed(o,"link",r),e.head.appendChild(o),t.instance=o);case"void":return null;default:throw Error(i(443,t.type))}else"stylesheet"===t.type&&0===(4&t.state.loading)&&(r=t.instance,t.state.loading|=4,Ad(r,n.precedence,e));return t.instance}function Ad(e,t,n){for(var r=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var s=r[i];if(s.dataset.precedence===t)a=s;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=9===n.nodeType?n.head:n).insertBefore(e,t.firstChild)}function Ld(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.title&&(e.title=t.title)}function Id(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.integrity&&(e.integrity=t.integrity)}var Fd=null;function zd(e,t,n){if(null===Fd){var r=new Map,o=Fd=new Map;o.set(n,r)}else(r=(o=Fd).get(n))||(r=new Map,o.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),o=0;o<n.length;o++){var a=n[o];if(!(a[ze]||a[Oe]||"link"===e&&"stylesheet"===a.getAttribute("rel"))&&"http://www.w3.org/2000/svg"!==a.namespaceURI){var i=a.getAttribute(t)||"";i=e+i;var s=r.get(i);s?s.push(a):r.set(i,[a])}}return r}function Bd(e,t,n){(e=e.ownerDocument||e).head.insertBefore(n,"title"===t?e.querySelector("head > title"):null)}function Hd(e){return"stylesheet"!==e.type||0!==(3&e.state.loading)}var Ud=null;function Yd(){}function Wd(){if(this.count--,0===this.count)if(this.stylesheets)Vd(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}var qd=null;function Vd(e,t){e.stylesheets=null,null!==e.unsuspend&&(e.count++,qd=new Map,t.forEach(Qd,e),qd=null,Wd.call(e))}function Qd(e,t){if(!(4&t.state.loading)){var n=qd.get(e);if(n)var r=n.get(null);else{n=new Map,qd.set(e,n);for(var o=e.querySelectorAll("link[data-precedence],style[data-precedence]"),a=0;a<o.length;a++){var i=o[a];"LINK"!==i.nodeName&&"not all"===i.getAttribute("media")||(n.set(i.dataset.precedence,i),r=i)}r&&n.set(null,r)}i=(o=t.instance).getAttribute("data-precedence"),(a=n.get(i)||r)===r&&n.set(null,o),n.set(i,o),this.count++,r=Wd.bind(this),o.addEventListener("load",r),o.addEventListener("error",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),t.state.loading|=4}}var Kd={$$typeof:x,Provider:null,Consumer:null,_currentValue:L,_currentValue2:L,_threadCount:0};function $d(e,t,n,r,o,a,i,s){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Ee(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ee(0),this.hiddenUpdates=Ee(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=s,this.incompleteTransitions=new Map}function Gd(e,t,n,r,o,a,i,s,l,c,u,d){return e=new $d(e,t,n,i,s,l,c,d),t=1,!0===a&&(t|=24),a=Lr(3,null,null,t),e.current=a,a.stateNode=e,(t=Ro()).refCount++,e.pooledCache=t,t.refCount++,a.memoizedState={element:r,isDehydrated:n,cache:t},ra(a),e}function Xd(e){return e?e=Rr:Rr}function Jd(e,t,n,r,o,a){o=Xd(o),null===r.context?r.context=o:r.pendingContext=o,(r=aa(t)).payload={element:n},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(n=ia(e,r,t))&&(Lc(n,0,t),sa(n,e,t))}function Zd(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ef(e,t){Zd(e,t),(e=e.alternate)&&Zd(e,t)}function tf(e){if(13===e.tag){var t=_r(e,67108864);null!==t&&Lc(t,0,67108864),ef(e,67108864)}}var nf=!0;function rf(e,t,n,r){var o=R.T;R.T=null;var a=A.p;try{A.p=2,af(e,t,n,r)}finally{A.p=a,R.T=o}}function of(e,t,n,r){var o=R.T;R.T=null;var a=A.p;try{A.p=8,af(e,t,n,r)}finally{A.p=a,R.T=o}}function af(e,t,n,r){if(nf){var o=sf(r);if(null===o)Uu(e,t,r,lf,n),bf(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return ff=wf(ff,e,t,n,r,o),!0;case"dragenter":return pf=wf(pf,e,t,n,r,o),!0;case"mouseover":return hf=wf(hf,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return mf.set(a,wf(mf.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,vf.set(a,wf(vf.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(bf(e,r),4&t&&-1<yf.indexOf(e)){for(;null!==o;){var a=Ue(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=ye(a.pendingLanes);if(0!==i){var s=a;for(s.pendingLanes|=2,s.entangledLanes|=2;i;){var l=1<<31-pe(i);s.entanglements[1]|=l,i&=~l}ku(a),0===(6&nc)&&(kc=te()+500,Su(0,!1))}}break;case 13:null!==(s=_r(a,2))&&Lc(s,0,2),Hc(),ef(a,2)}if(null===(a=sf(r))&&Uu(e,t,r,lf,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Uu(e,t,r,null,n)}}function sf(e){return cf(e=_t(e))}var lf=null;function cf(e){if(lf=null,null!==(e=He(e))){var t=l(e);if(null===t)e=null;else{var n=t.tag;if(13===n){if(null!==(e=c(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return lf=e,null}function uf(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(ne()){case re:return 2;case oe:return 8;case ae:case ie:return 32;case se:return 268435456;default:return 32}default:return 32}}var df=!1,ff=null,pf=null,hf=null,mf=new Map,vf=new Map,gf=[],yf="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function bf(e,t){switch(e){case"focusin":case"focusout":ff=null;break;case"dragenter":case"dragleave":pf=null;break;case"mouseover":case"mouseout":hf=null;break;case"pointerover":case"pointerout":mf.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":vf.delete(t.pointerId)}}function wf(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=Ue(t))&&tf(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function xf(e){var t=He(e.target);if(null!==t){var n=l(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=c(n)))return e.blockedOn=t,void function(e,t){var n=A.p;try{return A.p=e,t()}finally{A.p=n}}(e.priority,(function(){if(13===n.tag){var e=Rc();e=De(e);var t=_r(n,e);null!==t&&Lc(t,0,e),ef(n,e)}}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function kf(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=sf(e.nativeEvent);if(null!==n)return null!==(t=Ue(n))&&tf(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);Tt=r,n.target.dispatchEvent(r),Tt=null,t.shift()}return!0}function Sf(e,t,n){kf(e)&&n.delete(t)}function Ef(){df=!1,null!==ff&&kf(ff)&&(ff=null),null!==pf&&kf(pf)&&(pf=null),null!==hf&&kf(hf)&&(hf=null),mf.forEach(Sf),vf.forEach(Sf)}function Cf(e,t){e.blockedOn===t&&(e.blockedOn=null,df||(df=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Ef)))}var Nf=null;function jf(e){Nf!==e&&(Nf=e,r.unstable_scheduleCallback(r.unstable_NormalPriority,(function(){Nf===e&&(Nf=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],o=e[t+2];if("function"!==typeof r){if(null===cf(r||n))continue;break}var a=Ue(n);null!==a&&(e.splice(t,3),t-=3,_i(a,{pending:!0,data:o,method:n.method,action:r},r,o))}})))}function Df(e){function t(t){return Cf(t,e)}null!==ff&&Cf(ff,e),null!==pf&&Cf(pf,e),null!==hf&&Cf(hf,e),mf.forEach(t),vf.forEach(t);for(var n=0;n<gf.length;n++){var r=gf[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<gf.length&&null===(n=gf[0]).blockedOn;)xf(n),null===n.blockedOn&&gf.shift();if(null!=(n=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<n.length;r+=3){var o=n[r],a=n[r+1],i=o[Me]||null;if("function"===typeof a)i||jf(n);else if(i){var s=null;if(a&&a.hasAttribute("formAction")){if(o=a,i=a[Me]||null)s=i.formAction;else if(null!==cf(o))continue}else s=i.action;"function"===typeof s?n[r+1]=s:(n.splice(r,3),r-=3),jf(n)}}}function Pf(e){this._internalRoot=e}function Tf(e){this._internalRoot=e}Tf.prototype.render=Pf.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(i(409));Jd(t.current,Rc(),e,t,null,null)},Tf.prototype.unmount=Pf.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;Jd(e.current,2,null,e,null,null),Hc(),t[Re]=null}},Tf.prototype.unstable_scheduleHydration=function(e){if(e){var t=Te();e={blockedOn:null,target:e,priority:t};for(var n=0;n<gf.length&&0!==t&&t<gf[n].priority;n++);gf.splice(n,0,e),0===n&&xf(e)}};var _f=o.version;if("19.1.0"!==_f)throw Error(i(527,_f,"19.1.0"));A.findDOMNode=function(e){var t=e._reactInternals;if(void 0===t){if("function"===typeof e.render)throw Error(i(188));throw e=Object.keys(e).join(","),Error(i(268,e))}return e=function(e){var t=e.alternate;if(!t){if(null===(t=l(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return u(o),e;if(a===r)return u(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var s=!1,c=o.child;c;){if(c===n){s=!0,n=o,r=a;break}if(c===r){s=!0,r=o,n=a;break}c=c.sibling}if(!s){for(c=a.child;c;){if(c===n){s=!0,n=a,r=o;break}if(c===r){s=!0,r=a,n=o;break}c=c.sibling}if(!s)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(t),e=null===(e=null!==e?d(e):null)?null:e.stateNode};var Of={bundleType:0,version:"19.1.0",rendererPackageName:"react-dom",currentDispatcherRef:R,reconcilerVersion:"19.1.0"};if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var Mf=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Mf.isDisabled&&Mf.supportsFiber)try{ue=Mf.inject(Of),de=Mf}catch(Af){}}t.createRoot=function(e,t){if(!s(e))throw Error(i(299));var n=!1,r="",o=ys,a=bs,l=ws;return null!==t&&void 0!==t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onUncaughtError&&(o=t.onUncaughtError),void 0!==t.onCaughtError&&(a=t.onCaughtError),void 0!==t.onRecoverableError&&(l=t.onRecoverableError),void 0!==t.unstable_transitionCallbacks&&t.unstable_transitionCallbacks),t=Gd(e,1,!1,null,0,n,r,o,a,l,0,null),e[Re]=t.current,Bu(e),new Pf(t)},t.hydrateRoot=function(e,t,n){if(!s(e))throw Error(i(299));var r=!1,o="",a=ys,l=bs,c=ws,u=null;return null!==n&&void 0!==n&&(!0===n.unstable_strictMode&&(r=!0),void 0!==n.identifierPrefix&&(o=n.identifierPrefix),void 0!==n.onUncaughtError&&(a=n.onUncaughtError),void 0!==n.onCaughtError&&(l=n.onCaughtError),void 0!==n.onRecoverableError&&(c=n.onRecoverableError),void 0!==n.unstable_transitionCallbacks&&n.unstable_transitionCallbacks,void 0!==n.formState&&(u=n.formState)),(t=Gd(e,1,!0,t,0,r,o,a,l,c,0,u)).context=Xd(null),n=t.current,(o=aa(r=De(r=Rc()))).callback=null,ia(n,o,r),n=r,t.current.lanes=n,Ce(t,n),ku(t),e[Re]=t.current,Bu(e),new Tf(t)},t.version="19.1.0"},557:(e,t,n)=>{"use strict";e.exports=n(696)},592:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),p=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,v={};function g(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||h}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||h}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!==typeof e&&"function"!==typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var w=b.prototype=new y;w.constructor=b,m(w,g.prototype),w.isPureReactComponent=!0;var x=Array.isArray,k={H:null,A:null,T:null,S:null,V:null},S=Object.prototype.hasOwnProperty;function E(e,t,r,o,a,i){return r=i.ref,{$$typeof:n,type:e,key:t,ref:void 0!==r?r:null,props:i}}function C(e){return"object"===typeof e&&null!==e&&e.$$typeof===n}var N=/\/+/g;function j(e,t){return"object"===typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function D(){}function P(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l,c,u=!1;if(null===e)u=!0;else switch(s){case"bigint":case"string":case"number":u=!0;break;case"object":switch(e.$$typeof){case n:case r:u=!0;break;case f:return P((u=e._init)(e._payload),t,o,a,i)}}if(u)return i=i(e),u=""===a?"."+j(e,0):a,x(i)?(o="",null!=u&&(o=u.replace(N,"$&/")+"/"),P(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(l=i,c=o+(null==i.key||e&&e.key===i.key?"":(""+i.key).replace(N,"$&/")+"/")+u,i=E(l.type,c,void 0,0,0,l.props)),t.push(i)),1;u=0;var d,h=""===a?".":a+":";if(x(e))for(var m=0;m<e.length;m++)u+=P(a=e[m],t,o,s=h+j(a,m),i);else if("function"===typeof(m=null===(d=e)||"object"!==typeof d?null:"function"===typeof(d=p&&d[p]||d["@@iterator"])?d:null))for(e=m.call(e),m=0;!(a=e.next()).done;)u+=P(a=a.value,t,o,s=h+j(a,m++),i);else if("object"===s){if("function"===typeof e.then)return P(function(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch("string"===typeof e.status?e.then(D,D):(e.status="pending",e.then((function(t){"pending"===e.status&&(e.status="fulfilled",e.value=t)}),(function(t){"pending"===e.status&&(e.status="rejected",e.reason=t)}))),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}(e),t,o,a,i);throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return u}function T(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function _(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var O="function"===typeof reportError?reportError:function(e){if("object"===typeof window&&"function"===typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"===typeof e&&null!==e&&"string"===typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"===typeof process&&"function"===typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function M(){}t.Children={map:T,forEach:function(e,t,n){T(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return T(e,(function(){t++})),t},toArray:function(e){return T(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=g,t.Fragment=o,t.Profiler=i,t.PureComponent=b,t.StrictMode=a,t.Suspense=u,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=k,t.__COMPILER_RUNTIME={__proto__:null,c:function(e){return k.H.useMemoCache(e)}},t.cache=function(e){return function(){return e.apply(null,arguments)}},t.cloneElement=function(e,t,n){if(null===e||void 0===e)throw Error("The argument must be a React element, but you passed "+e+".");var r=m({},e.props),o=e.key;if(null!=t)for(a in void 0!==t.ref&&void 0,void 0!==t.key&&(o=""+t.key),t)!S.call(t,a)||"key"===a||"__self"===a||"__source"===a||"ref"===a&&void 0===t.ref||(r[a]=t[a]);var a=arguments.length-2;if(1===a)r.children=n;else if(1<a){for(var i=Array(a),s=0;s<a;s++)i[s]=arguments[s+2];r.children=i}return E(e.type,o,void 0,0,0,r)},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:s,_context:e},e},t.createElement=function(e,t,n){var r,o={},a=null;if(null!=t)for(r in void 0!==t.key&&(a=""+t.key),t)S.call(t,r)&&"key"!==r&&"__self"!==r&&"__source"!==r&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1<i){for(var s=Array(i),l=0;l<i;l++)s[l]=arguments[l+2];o.children=s}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return E(e,a,void 0,0,0,o)},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:_}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=k.T,n={};k.T=n;try{var r=e(),o=k.S;null!==o&&o(n,r),"object"===typeof r&&null!==r&&"function"===typeof r.then&&r.then(M,O)}catch(a){O(a)}finally{k.T=t}},t.unstable_useCacheRefresh=function(){return k.H.useCacheRefresh()},t.use=function(e){return k.H.use(e)},t.useActionState=function(e,t,n){return k.H.useActionState(e,t,n)},t.useCallback=function(e,t){return k.H.useCallback(e,t)},t.useContext=function(e){return k.H.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e,t){return k.H.useDeferredValue(e,t)},t.useEffect=function(e,t,n){var r=k.H;if("function"===typeof n)throw Error("useEffect CRUD overload is not enabled in this build of React.");return r.useEffect(e,t)},t.useId=function(){return k.H.useId()},t.useImperativeHandle=function(e,t,n){return k.H.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return k.H.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return k.H.useLayoutEffect(e,t)},t.useMemo=function(e,t){return k.H.useMemo(e,t)},t.useOptimistic=function(e,t){return k.H.useOptimistic(e,t)},t.useReducer=function(e,t,n){return k.H.useReducer(e,t,n)},t.useRef=function(e){return k.H.useRef(e)},t.useState=function(e){return k.H.useState(e)},t.useSyncExternalStore=function(e,t,n){return k.H.useSyncExternalStore(e,t,n)},t.useTransition=function(){return k.H.useTransition()},t.version="19.1.0"},696:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,"object"===typeof performance&&"function"===typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,f=null,p=3,h=!1,m=!1,v=!1,g=!1,y="function"===typeof setTimeout?setTimeout:null,b="function"===typeof clearTimeout?clearTimeout:null,w="undefined"!==typeof setImmediate?setImmediate:null;function x(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(v=!1,x(e),!m)if(null!==r(c))m=!0,E||(E=!0,S());else{var t=r(u);null!==t&&O(k,t.startTime-e)}}var S,E=!1,C=-1,N=5,j=-1;function D(){return!!g||!(t.unstable_now()-j<N)}function P(){if(g=!1,E){var e=t.unstable_now();j=e;var n=!0;try{e:{m=!1,v&&(v=!1,b(C),C=-1),h=!0;var a=p;try{t:{for(x(e),f=r(c);null!==f&&!(f.expirationTime>e&&D());){var i=f.callback;if("function"===typeof i){f.callback=null,p=f.priorityLevel;var s=i(f.expirationTime<=e);if(e=t.unstable_now(),"function"===typeof s){f.callback=s,x(e),n=!0;break t}f===r(c)&&o(c),x(e)}else o(c);f=r(c)}if(null!==f)n=!0;else{var l=r(u);null!==l&&O(k,l.startTime-e),n=!1}}break e}finally{f=null,p=a,h=!1}n=void 0}}finally{n?S():E=!1}}}if("function"===typeof w)S=function(){w(P)};else if("undefined"!==typeof MessageChannel){var T=new MessageChannel,_=T.port2;T.port1.onmessage=P,S=function(){_.postMessage(null)}}else S=function(){y(P,0)};function O(e,n){C=y((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):N=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return p},t.unstable_next=function(e){switch(p){case 1:case 2:case 3:var t=3;break;default:t=p}var n=p;p=t;try{return e()}finally{p=n}},t.unstable_requestPaint=function(){g=!0},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=p;p=e;try{return t()}finally{p=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"===typeof a&&null!==a?a="number"===typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(v?(b(C),C=-1):v=!0,O(k,a-i))):(e.sortIndex=s,n(c,e),m||h||(m=!0,E||(E=!0,S()))),e},t.unstable_shouldYield=D,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},719:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function o(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in r={},t)"key"!==a&&(r[a]=t[a]);else r=t;return t=r.ref,{$$typeof:n,type:e,key:o,ref:void 0!==t?t:null,props:r}}t.Fragment=r,t.jsx=o,t.jsxs=o},723:(e,t,n)=>{"use strict";e.exports=n(719)},775:(e,t,n)=>{"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(556)},808:(e,t,n)=>{"use strict";e.exports=n(276)},904:(e,t,n)=>{"use strict";var r=n(483);function o(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},s=Symbol.for("react.portal");var l=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,t){return"font"===e?"":"string"===typeof t?"use-credentials"===t?t:"":void 0}t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!t||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(o(299));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:s,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.flushSync=function(e){var t=l.T,n=i.p;try{if(l.T=null,i.p=2,e)return e()}finally{l.T=t,i.p=n,i.d.f()}},t.preconnect=function(e,t){"string"===typeof e&&(t?t="string"===typeof(t=t.crossOrigin)?"use-credentials"===t?t:"":void 0:t=null,i.d.C(e,t))},t.prefetchDNS=function(e){"string"===typeof e&&i.d.D(e)},t.preinit=function(e,t){if("string"===typeof e&&t&&"string"===typeof t.as){var n=t.as,r=c(n,t.crossOrigin),o="string"===typeof t.integrity?t.integrity:void 0,a="string"===typeof t.fetchPriority?t.fetchPriority:void 0;"style"===n?i.d.S(e,"string"===typeof t.precedence?t.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):"script"===n&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:"string"===typeof t.nonce?t.nonce:void 0})}},t.preinitModule=function(e,t){if("string"===typeof e)if("object"===typeof t&&null!==t){if(null==t.as||"script"===t.as){var n=c(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:"string"===typeof t.integrity?t.integrity:void 0,nonce:"string"===typeof t.nonce?t.nonce:void 0})}}else null==t&&i.d.M(e)},t.preload=function(e,t){if("string"===typeof e&&"object"===typeof t&&null!==t&&"string"===typeof t.as){var n=t.as,r=c(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:"string"===typeof t.integrity?t.integrity:void 0,nonce:"string"===typeof t.nonce?t.nonce:void 0,type:"string"===typeof t.type?t.type:void 0,fetchPriority:"string"===typeof t.fetchPriority?t.fetchPriority:void 0,referrerPolicy:"string"===typeof t.referrerPolicy?t.referrerPolicy:void 0,imageSrcSet:"string"===typeof t.imageSrcSet?t.imageSrcSet:void 0,imageSizes:"string"===typeof t.imageSizes?t.imageSizes:void 0,media:"string"===typeof t.media?t.media:void 0})}},t.preloadModule=function(e,t){if("string"===typeof e)if(t){var n=c(t.as,t.crossOrigin);i.d.m(e,{as:"string"===typeof t.as&&"script"!==t.as?t.as:void 0,crossOrigin:n,integrity:"string"===typeof t.integrity?t.integrity:void 0})}else i.d.m(e)},t.requestFormReset=function(e){i.d.r(e)},t.unstable_batchedUpdates=function(e,t){return e(t)},t.useFormState=function(e,t,n){return l.H.useFormState(e,t,n)},t.useFormStatus=function(){return l.H.useHostTransitionStatus()},t.version="19.1.0"},956:(e,t)=>{t.read=function(e,t,n,r,o){var a,i,s=8*o-r-1,l=(1<<s)-1,c=l>>1,u=-7,d=n?o-1:0,f=n?-1:1,p=e[t+d];for(d+=f,a=p&(1<<-u)-1,p>>=-u,u+=s;u>0;a=256*a+e[t+d],d+=f,u-=8);for(i=a&(1<<-u)-1,a>>=-u,u+=r;u>0;i=256*i+e[t+d],d+=f,u-=8);if(0===a)a=1-c;else{if(a===l)return i?NaN:1/0*(p?-1:1);i+=Math.pow(2,r),a-=c}return(p?-1:1)*i*Math.pow(2,a-r)},t.write=function(e,t,n,r,o,a){var i,s,l,c=8*a-o-1,u=(1<<c)-1,d=u>>1,f=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:a-1,h=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),(t+=i+d>=1?f/l:f*Math.pow(2,1-d))*l>=2&&(i++,l/=2),i+d>=u?(s=0,i=u):i+d>=1?(s=(t*l-1)*Math.pow(2,o),i+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,o),i=0));o>=8;e[n+p]=255&s,p+=h,s/=256,o-=8);for(i=i<<o|s,c+=o;c>0;e[n+p]=255&i,p+=h,i/=256,c-=8);e[n+p-h]|=128*m}},998:(e,t,n)=>{"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(904)}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.m=e,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;n.t=function(r,o){if(1&o&&(r=this(r)),8&o)return r;if("object"===typeof r&&r){if(4&o&&r.__esModule)return r;if(16&o&&"function"===typeof r.then)return r}var a=Object.create(null);n.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var s=2&o&&r;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((e=>i[e]=()=>r[e]));return i.default=()=>r,n.d(a,i),a}})(),n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,r)=>(n.f[r](e,t),t)),[])),n.u=e=>"static/js/"+e+".116b9008.chunk.js",n.miniCssF=e=>{},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="frontend:";n.l=(r,o,a,i)=>{if(e[r])e[r].push(o);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++){var d=c[u];if(d.getAttribute("src")==r||d.getAttribute("data-webpack")==t+a){s=d;break}}s||(l=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,n.nc&&s.setAttribute("nonce",n.nc),s.setAttribute("data-webpack",t+a),s.src=r),e[r]=[o];var f=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var o=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((e=>e(n))),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=f.bind(null,s.onerror),s.onload=f.bind(null,s.onload),l&&document.head.appendChild(s)}}})(),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/",(()=>{var e={792:0};n.f.j=(t,r)=>{var o=n.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else{var a=new Promise(((n,r)=>o=e[t]=[n,r]));r.push(o[2]=a);var i=n.p+n.u(t),s=new Error;n.l(i,(r=>{if(n.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var a=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",s.name="ChunkLoadError",s.type=a,s.request=i,o[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var o,a,i=r[0],s=r[1],l=r[2],c=0;if(i.some((t=>0!==e[t]))){for(o in s)n.o(s,o)&&(n.m[o]=s[o]);if(l)l(n)}for(t&&t(r);c<i.length;c++)a=i[c],n.o(e,a)&&e[a]&&e[a][0](),e[a]=0},r=self.webpackChunkfrontend=self.webpackChunkfrontend||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";var e={};n.r(e),n.d(e,{hasBrowserEnv:()=>Ft,hasStandardBrowserEnv:()=>Bt,hasStandardBrowserWebWorkerEnv:()=>Ht,navigator:()=>zt,origin:()=>Ut});var t,r=n(483),o=n.t(r,2),a=n(775),i=n(998),s=n.t(i,2);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(this,arguments)}!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(t||(t={}));const c="popstate";function u(e,t){if(!1===e||null===e||"undefined"===typeof e)throw new Error(t)}function d(e,t){if(!e){"undefined"!==typeof console&&console.warn(t);try{throw new Error(t)}catch(n){}}}function f(e,t){return{usr:e.state,key:e.key,idx:t}}function p(e,t,n,r){return void 0===n&&(n=null),l({pathname:"string"===typeof e?e:e.pathname,search:"",hash:""},"string"===typeof t?m(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function h(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function m(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function v(e,n,r,o){void 0===o&&(o={});let{window:a=document.defaultView,v5Compat:i=!1}=o,s=a.history,d=t.Pop,m=null,v=g();function g(){return(s.state||{idx:null}).idx}function y(){d=t.Pop;let e=g(),n=null==e?null:e-v;v=e,m&&m({action:d,location:w.location,delta:n})}function b(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"===typeof e?e:h(e);return n=n.replace(/ $/,"%20"),u(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==v&&(v=0,s.replaceState(l({},s.state,{idx:v}),""));let w={get action(){return d},get location(){return e(a,s)},listen(e){if(m)throw new Error("A history only accepts one active listener");return a.addEventListener(c,y),m=e,()=>{a.removeEventListener(c,y),m=null}},createHref:e=>n(a,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,n){d=t.Push;let o=p(w.location,e,n);r&&r(o,e),v=g()+1;let l=f(o,v),c=w.createHref(o);try{s.pushState(l,"",c)}catch(u){if(u instanceof DOMException&&"DataCloneError"===u.name)throw u;a.location.assign(c)}i&&m&&m({action:d,location:w.location,delta:1})},replace:function(e,n){d=t.Replace;let o=p(w.location,e,n);r&&r(o,e),v=g();let a=f(o,v),l=w.createHref(o);s.replaceState(a,"",l),i&&m&&m({action:d,location:w.location,delta:0})},go:e=>s.go(e)};return w}var g;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(g||(g={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function y(e,t,n){return void 0===n&&(n="/"),b(e,t,n,!1)}function b(e,t,n,r){let o=M(("string"===typeof t?m(t):t).pathname||"/",n);if(null==o)return null;let a=w(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let s=0;null==i&&s<a.length;++s){let e=O(o);i=T(a[s],e,r)}return i}function w(e,t,n,r){void 0===t&&(t=[]),void 0===n&&(n=[]),void 0===r&&(r="");let o=(e,o,a)=>{let i={relativePath:void 0===a?e.path||"":a,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};i.relativePath.startsWith("/")&&(u(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let s=F([r,i.relativePath]),l=n.concat(i);e.children&&e.children.length>0&&(u(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+s+'".'),w(e.children,t,l,s)),(null!=e.path||e.index)&&t.push({path:s,score:P(s,e.index),routesMeta:l})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of x(e.path))o(e,t,r);else o(e,t)})),t}function x(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,o=n.endsWith("?"),a=n.replace(/\?$/,"");if(0===r.length)return o?[a,""]:[a];let i=x(r.join("/")),s=[];return s.push(...i.map((e=>""===e?a:[a,e].join("/")))),o&&s.push(...i),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const k=/^:[\w-]+$/,S=3,E=2,C=1,N=10,j=-2,D=e=>"*"===e;function P(e,t){let n=e.split("/"),r=n.length;return n.some(D)&&(r+=j),t&&(r+=E),n.filter((e=>!D(e))).reduce(((e,t)=>e+(k.test(t)?S:""===t?C:N)),r)}function T(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,o={},a="/",i=[];for(let s=0;s<r.length;++s){let e=r[s],l=s===r.length-1,c="/"===a?t:t.slice(a.length)||"/",u=_({path:e.relativePath,caseSensitive:e.caseSensitive,end:l},c),d=e.route;if(!u&&l&&n&&!r[r.length-1].route.index&&(u=_({path:e.relativePath,caseSensitive:e.caseSensitive,end:!1},c)),!u)return null;Object.assign(o,u.params),i.push({params:o,pathname:F([a,u.pathname]),pathnameBase:z(F([a,u.pathnameBase])),route:d}),"/"!==u.pathnameBase&&(a=F([a,u.pathnameBase]))}return i}function _(e,t){"string"===typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=!0);d("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,((e,t,n)=>(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");let a=new RegExp(o,t?void 0:"i");return[a,r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let a=o[0],i=a.replace(/(.)\/+$/,"$1"),s=o.slice(1),l=r.reduce(((e,t,n)=>{let{paramName:r,isOptional:o}=t;if("*"===r){let e=s[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}const l=s[n];return e[r]=o&&!l?void 0:(l||"").replace(/%2F/g,"/"),e}),{});return{params:l,pathname:a,pathnameBase:i,pattern:e}}function O(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return d(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function M(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function R(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function A(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function L(e,t){let n=A(e);return t?n.map(((e,t)=>t===n.length-1?e.pathname:e.pathnameBase)):n.map((e=>e.pathnameBase))}function I(e,t,n,r){let o;void 0===r&&(r=!1),"string"===typeof e?o=m(e):(o=l({},e),u(!o.pathname||!o.pathname.includes("?"),R("?","pathname","search",o)),u(!o.pathname||!o.pathname.includes("#"),R("#","pathname","hash",o)),u(!o.search||!o.search.includes("#"),R("#","search","hash",o)));let a,i=""===e||""===o.pathname,s=i?"/":o.pathname;if(null==s)a=n;else{let e=t.length-1;if(!r&&s.startsWith("..")){let t=s.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}a=e>=0?t[e]:"/"}let c=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"===typeof e?m(e):e,a=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:a,search:B(r),hash:H(o)}}(o,a),d=s&&"/"!==s&&s.endsWith("/"),f=(i||"."===s)&&n.endsWith("/");return c.pathname.endsWith("/")||!d&&!f||(c.pathname+="/"),c}const F=e=>e.join("/").replace(/\/\/+/g,"/"),z=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),B=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",H=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;function U(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const Y=["post","put","patch","delete"],W=(new Set(Y),["get",...Y]);new Set(W),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},q.apply(this,arguments)}const V=r.createContext(null);const Q=r.createContext(null);const K=r.createContext(null);const $=r.createContext(null);const G=r.createContext({outlet:null,matches:[],isDataRoute:!1});const X=r.createContext(null);function J(){return null!=r.useContext($)}function Z(){return J()||u(!1),r.useContext($).location}function ee(e){r.useContext(K).static||r.useLayoutEffect(e)}function te(){let{isDataRoute:e}=r.useContext(G);return e?function(){let{router:e}=fe(ue.UseNavigateStable),t=he(de.UseNavigateStable),n=r.useRef(!1);return ee((()=>{n.current=!0})),r.useCallback((function(r,o){void 0===o&&(o={}),n.current&&("number"===typeof r?e.navigate(r):e.navigate(r,q({fromRouteId:t},o)))}),[e,t])}():function(){J()||u(!1);let e=r.useContext(V),{basename:t,future:n,navigator:o}=r.useContext(K),{matches:a}=r.useContext(G),{pathname:i}=Z(),s=JSON.stringify(L(a,n.v7_relativeSplatPath)),l=r.useRef(!1);return ee((()=>{l.current=!0})),r.useCallback((function(n,r){if(void 0===r&&(r={}),!l.current)return;if("number"===typeof n)return void o.go(n);let a=I(n,JSON.parse(s),i,"path"===r.relative);null==e&&"/"!==t&&(a.pathname="/"===a.pathname?t:F([t,a.pathname])),(r.replace?o.replace:o.push)(a,r.state,r)}),[t,o,s,i,e])}()}const ne=r.createContext(null);function re(){let{matches:e}=r.useContext(G),t=e[e.length-1];return t?t.params:{}}function oe(e,n,o,a){J()||u(!1);let{navigator:i,static:s}=r.useContext(K),{matches:l}=r.useContext(G),c=l[l.length-1],d=c?c.params:{},f=(c&&c.pathname,c?c.pathnameBase:"/");c&&c.route;let p,h=Z();if(n){var v;let e="string"===typeof n?m(n):n;"/"===f||(null==(v=e.pathname)?void 0:v.startsWith(f))||u(!1),p=e}else p=h;let g=p.pathname||"/",b=g;if("/"!==f){let e=f.replace(/^\//,"").split("/");b="/"+g.replace(/^\//,"").split("/").slice(e.length).join("/")}let w=!s&&o&&o.matches&&o.matches.length>0?o.matches:y(e,{pathname:b});let x=ce(w&&w.map((e=>Object.assign({},e,{params:Object.assign({},d,e.params),pathname:F([f,i.encodeLocation?i.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?f:F([f,i.encodeLocation?i.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),l,o,a);return n&&x?r.createElement($.Provider,{value:{location:q({pathname:"/",search:"",hash:"",state:null,key:"default"},p),navigationType:t.Pop}},x):x}function ae(){let e=function(){var e;let t=r.useContext(X),n=pe(de.UseRouteError),o=he(de.UseRouteError);if(void 0!==t)return t;return null==(e=n.errors)?void 0:e[o]}(),t=U(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:o};return r.createElement(r.Fragment,null,r.createElement("h2",null,"Unexpected Application Error!"),r.createElement("h3",{style:{fontStyle:"italic"}},t),n?r.createElement("pre",{style:a},n):null,null)}const ie=r.createElement(ae,null);class se extends r.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?r.createElement(G.Provider,{value:this.props.routeContext},r.createElement(X.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function le(e){let{routeContext:t,match:n,children:o}=e,a=r.useContext(V);return a&&a.static&&a.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=n.route.id),r.createElement(G.Provider,{value:t},o)}function ce(e,t,n,o){var a;if(void 0===t&&(t=[]),void 0===n&&(n=null),void 0===o&&(o=null),null==e){var i;if(!n)return null;if(n.errors)e=n.matches;else{if(!(null!=(i=o)&&i.v7_partialHydration&&0===t.length&&!n.initialized&&n.matches.length>0))return null;e=n.matches}}let s=e,l=null==(a=n)?void 0:a.errors;if(null!=l){let e=s.findIndex((e=>e.route.id&&void 0!==(null==l?void 0:l[e.route.id])));e>=0||u(!1),s=s.slice(0,Math.min(s.length,e+1))}let c=!1,d=-1;if(n&&o&&o.v7_partialHydration)for(let r=0;r<s.length;r++){let e=s[r];if((e.route.HydrateFallback||e.route.hydrateFallbackElement)&&(d=r),e.route.id){let{loaderData:t,errors:r}=n,o=e.route.loader&&void 0===t[e.route.id]&&(!r||void 0===r[e.route.id]);if(e.route.lazy||o){c=!0,s=d>=0?s.slice(0,d+1):[s[0]];break}}}return s.reduceRight(((e,o,a)=>{let i,u=!1,f=null,p=null;var h;n&&(i=l&&o.route.id?l[o.route.id]:void 0,f=o.route.errorElement||ie,c&&(d<0&&0===a?(h="route-fallback",!1||me[h]||(me[h]=!0),u=!0,p=null):d===a&&(u=!0,p=o.route.hydrateFallbackElement||null)));let m=t.concat(s.slice(0,a+1)),v=()=>{let t;return t=i?f:u?p:o.route.Component?r.createElement(o.route.Component,null):o.route.element?o.route.element:e,r.createElement(le,{match:o,routeContext:{outlet:e,matches:m,isDataRoute:null!=n},children:t})};return n&&(o.route.ErrorBoundary||o.route.errorElement||0===a)?r.createElement(se,{location:n.location,revalidation:n.revalidation,component:f,error:i,children:v(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):v()}),null)}var ue=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(ue||{}),de=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(de||{});function fe(e){let t=r.useContext(V);return t||u(!1),t}function pe(e){let t=r.useContext(Q);return t||u(!1),t}function he(e){let t=function(){let e=r.useContext(G);return e||u(!1),e}(),n=t.matches[t.matches.length-1];return n.route.id||u(!1),n.route.id}const me={};function ve(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}o.startTransition;function ge(e){let{to:t,replace:n,state:o,relative:a}=e;J()||u(!1);let{future:i,static:s}=r.useContext(K),{matches:l}=r.useContext(G),{pathname:c}=Z(),d=te(),f=I(t,L(l,i.v7_relativeSplatPath),c,"path"===a),p=JSON.stringify(f);return r.useEffect((()=>d(JSON.parse(p),{replace:n,state:o,relative:a})),[d,p,a,n,o]),null}function ye(e){return function(e){let t=r.useContext(G).outlet;return t?r.createElement(ne.Provider,{value:e},t):t}(e.context)}function be(e){u(!1)}function we(e){let{basename:n="/",children:o=null,location:a,navigationType:i=t.Pop,navigator:s,static:l=!1,future:c}=e;J()&&u(!1);let d=n.replace(/^\/*/,"/"),f=r.useMemo((()=>({basename:d,navigator:s,static:l,future:q({v7_relativeSplatPath:!1},c)})),[d,c,s,l]);"string"===typeof a&&(a=m(a));let{pathname:p="/",search:h="",hash:v="",state:g=null,key:y="default"}=a,b=r.useMemo((()=>{let e=M(p,d);return null==e?null:{location:{pathname:e,search:h,hash:v,state:g,key:y},navigationType:i}}),[d,p,h,v,g,y,i]);return null==b?null:r.createElement(K.Provider,{value:f},r.createElement($.Provider,{children:o,value:b}))}function xe(e){let{children:t,location:n}=e;return oe(ke(t),n)}new Promise((()=>{}));r.Component;function ke(e,t){void 0===t&&(t=[]);let n=[];return r.Children.forEach(e,((e,o)=>{if(!r.isValidElement(e))return;let a=[...t,o];if(e.type===r.Fragment)return void n.push.apply(n,ke(e.props.children,a));e.type!==be&&u(!1),e.props.index&&e.props.children&&u(!1);let i={id:e.props.id||a.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=ke(e.props.children,a)),n.push(i)})),n}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(Dy){}new Map;const Se=o.startTransition;s.flushSync,o.useId;function Ee(e){let{basename:t,children:n,future:o,window:a}=e,i=r.useRef();var s;null==i.current&&(i.current=(void 0===(s={window:a,v5Compat:!0})&&(s={}),v((function(e,t){let{pathname:n,search:r,hash:o}=e.location;return p("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"===typeof t?t:h(t)}),null,s)));let l=i.current,[c,u]=r.useState({action:l.action,location:l.location}),{v7_startTransition:d}=o||{},f=r.useCallback((e=>{d&&Se?Se((()=>u(e))):u(e)}),[u,d]);return r.useLayoutEffect((()=>l.listen(f)),[l,f]),r.useEffect((()=>ve(o)),[o]),r.createElement(we,{basename:t,children:n,location:c.location,navigationType:c.action,navigator:l,future:o})}"undefined"!==typeof window&&"undefined"!==typeof window.document&&window.document.createElement;var Ce,Ne;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ce||(Ce={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(Ne||(Ne={}));function je(e){return je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},je(e)}function De(e){var t=function(e,t){if("object"!=je(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==je(t)?t:t+""}function Pe(e,t,n){return(t=De(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Te(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Te(Object(n),!0).forEach((function(t){Pe(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Te(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Oe(e,t){return function(){return e.apply(t,arguments)}}const{toString:Me}=Object.prototype,{getPrototypeOf:Re}=Object,{iterator:Ae,toStringTag:Le}=Symbol,Ie=(Fe=Object.create(null),e=>{const t=Me.call(e);return Fe[t]||(Fe[t]=t.slice(8,-1).toLowerCase())});var Fe;const ze=e=>(e=e.toLowerCase(),t=>Ie(t)===e),Be=e=>t=>typeof t===e,{isArray:He}=Array,Ue=Be("undefined");const Ye=ze("ArrayBuffer");const We=Be("string"),qe=Be("function"),Ve=Be("number"),Qe=e=>null!==e&&"object"===typeof e,Ke=e=>{if("object"!==Ie(e))return!1;const t=Re(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Le in e)&&!(Ae in e)},$e=ze("Date"),Ge=ze("File"),Xe=ze("Blob"),Je=ze("FileList"),Ze=ze("URLSearchParams"),[et,tt,nt,rt]=["ReadableStream","Request","Response","Headers"].map(ze);function ot(e,t){let n,r,{allOwnKeys:o=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),He(e))for(n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else{const r=o?Object.getOwnPropertyNames(e):Object.keys(e),a=r.length;let i;for(n=0;n<a;n++)i=r[n],t.call(null,e[i],i,e)}}function at(e,t){t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const it="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:"undefined"!==typeof window?window:global,st=e=>!Ue(e)&&e!==it;const lt=(ct="undefined"!==typeof Uint8Array&&Re(Uint8Array),e=>ct&&e instanceof ct);var ct;const ut=ze("HTMLFormElement"),dt=(e=>{let{hasOwnProperty:t}=e;return(e,n)=>t.call(e,n)})(Object.prototype),ft=ze("RegExp"),pt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};ot(n,((n,o)=>{let a;!1!==(a=t(n,o,e))&&(r[o]=a||n)})),Object.defineProperties(e,r)};const ht=ze("AsyncFunction"),mt=(vt="function"===typeof setImmediate,gt=qe(it.postMessage),vt?setImmediate:gt?((e,t)=>(it.addEventListener("message",(n=>{let{source:r,data:o}=n;r===it&&o===e&&t.length&&t.shift()()}),!1),n=>{t.push(n),it.postMessage(e,"*")}))("axios@".concat(Math.random()),[]):e=>setTimeout(e));var vt,gt;const yt="undefined"!==typeof queueMicrotask?queueMicrotask.bind(it):"undefined"!==typeof process&&process.nextTick||mt,bt={isArray:He,isArrayBuffer:Ye,isBuffer:function(e){return null!==e&&!Ue(e)&&null!==e.constructor&&!Ue(e.constructor)&&qe(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"===typeof FormData&&e instanceof FormData||qe(e.append)&&("formdata"===(t=Ie(e))||"object"===t&&qe(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ye(e.buffer),t},isString:We,isNumber:Ve,isBoolean:e=>!0===e||!1===e,isObject:Qe,isPlainObject:Ke,isReadableStream:et,isRequest:tt,isResponse:nt,isHeaders:rt,isUndefined:Ue,isDate:$e,isFile:Ge,isBlob:Xe,isRegExp:ft,isFunction:qe,isStream:e=>Qe(e)&&qe(e.pipe),isURLSearchParams:Ze,isTypedArray:lt,isFileList:Je,forEach:ot,merge:function e(){const{caseless:t}=st(this)&&this||{},n={},r=(r,o)=>{const a=t&&at(n,o)||o;Ke(n[a])&&Ke(r)?n[a]=e(n[a],r):Ke(r)?n[a]=e({},r):He(r)?n[a]=r.slice():n[a]=r};for(let o=0,a=arguments.length;o<a;o++)arguments[o]&&ot(arguments[o],r);return n},extend:function(e,t,n){let{allOwnKeys:r}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return ot(t,((t,r)=>{n&&qe(t)?e[r]=Oe(t,n):e[r]=t}),{allOwnKeys:r}),e},trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,a,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),a=o.length;a-- >0;)i=o[a],r&&!r(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&Re(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:Ie,kindOfTest:ze,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(He(e))return e;let t=e.length;if(!Ve(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Ae]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:ut,hasOwnProperty:dt,hasOwnProp:dt,reduceDescriptors:pt,freezeMethods:e=>{pt(e,((t,n)=>{if(qe(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];qe(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return He(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:at,global:it,isContextDefined:st,isSpecCompliantForm:function(e){return!!(e&&qe(e.append)&&"FormData"===e[Le]&&e[Ae])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(Qe(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=He(e)?[]:{};return ot(e,((e,t)=>{const a=n(e,r+1);!Ue(a)&&(o[t]=a)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:ht,isThenable:e=>e&&(Qe(e)||qe(e))&&qe(e.then)&&qe(e.catch),setImmediate:mt,asap:yt,isIterable:e=>null!=e&&qe(e[Ae])};function wt(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}bt.inherits(wt,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:bt.toJSONObject(this.config),code:this.code,status:this.status}}});const xt=wt.prototype,kt={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{kt[e]={value:e}})),Object.defineProperties(wt,kt),Object.defineProperty(xt,"isAxiosError",{value:!0}),wt.from=(e,t,n,r,o,a)=>{const i=Object.create(xt);return bt.toFlatObject(e,i,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),wt.call(i,e.message,t,n,r,o),i.cause=e,i.name=e.name,a&&Object.assign(i,a),i};const St=wt;function Et(e){return bt.isPlainObject(e)||bt.isArray(e)}function Ct(e){return bt.endsWith(e,"[]")?e.slice(0,-2):e}function Nt(e,t,n){return e?e.concat(t).map((function(e,t){return e=Ct(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const jt=bt.toFlatObject(bt,{},null,(function(e){return/^is[A-Z]/.test(e)}));const Dt=function(e,t,n){if(!bt.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=bt.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!bt.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,a=n.dots,i=n.indexes,s=(n.Blob||"undefined"!==typeof Blob&&Blob)&&bt.isSpecCompliantForm(t);if(!bt.isFunction(o))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(bt.isDate(e))return e.toISOString();if(!s&&bt.isBlob(e))throw new St("Blob is not supported. Use a Buffer instead.");return bt.isArrayBuffer(e)||bt.isTypedArray(e)?s&&"function"===typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){let s=e;if(e&&!o&&"object"===typeof e)if(bt.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(bt.isArray(e)&&function(e){return bt.isArray(e)&&!e.some(Et)}(e)||(bt.isFileList(e)||bt.endsWith(n,"[]"))&&(s=bt.toArray(e)))return n=Ct(n),s.forEach((function(e,r){!bt.isUndefined(e)&&null!==e&&t.append(!0===i?Nt([n],r,a):null===i?n:n+"[]",l(e))})),!1;return!!Et(e)||(t.append(Nt(o,n,a),l(e)),!1)}const u=[],d=Object.assign(jt,{defaultVisitor:c,convertValue:l,isVisitable:Et});if(!bt.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!bt.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),bt.forEach(n,(function(n,a){!0===(!(bt.isUndefined(n)||null===n)&&o.call(t,n,bt.isString(a)?a.trim():a,r,d))&&e(n,r?r.concat(a):[a])})),u.pop()}}(e),t};function Pt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Tt(e,t){this._pairs=[],e&&Dt(e,this,t)}const _t=Tt.prototype;_t.append=function(e,t){this._pairs.push([e,t])},_t.toString=function(e){const t=e?function(t){return e.call(this,t,Pt)}:Pt;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const Ot=Tt;function Mt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Rt(e,t,n){if(!t)return e;const r=n&&n.encode||Mt;bt.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let a;if(a=o?o(t,n):bt.isURLSearchParams(t)?t.toString():new Ot(t,n).toString(r),a){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}const At=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){bt.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Lt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},It={isBrowser:!0,classes:{URLSearchParams:"undefined"!==typeof URLSearchParams?URLSearchParams:Ot,FormData:"undefined"!==typeof FormData?FormData:null,Blob:"undefined"!==typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Ft="undefined"!==typeof window&&"undefined"!==typeof document,zt="object"===typeof navigator&&navigator||void 0,Bt=Ft&&(!zt||["ReactNative","NativeScript","NS"].indexOf(zt.product)<0),Ht="undefined"!==typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"===typeof self.importScripts,Ut=Ft&&window.location.href||"http://localhost",Yt=_e(_e({},e),It);const Wt=function(e){function t(e,n,r,o){let a=e[o++];if("__proto__"===a)return!0;const i=Number.isFinite(+a),s=o>=e.length;if(a=!a&&bt.isArray(r)?r.length:a,s)return bt.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!i;r[a]&&bt.isObject(r[a])||(r[a]=[]);return t(e,n,r[a],o)&&bt.isArray(r[a])&&(r[a]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let a;for(r=0;r<o;r++)a=n[r],t[a]=e[a];return t}(r[a])),!i}if(bt.isFormData(e)&&bt.isFunction(e.entries)){const n={};return bt.forEachEntry(e,((e,r)=>{t(function(e){return bt.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null};const qt={transitional:Lt,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=bt.isObject(e);o&&bt.isHTMLForm(e)&&(e=new FormData(e));if(bt.isFormData(e))return r?JSON.stringify(Wt(e)):e;if(bt.isArrayBuffer(e)||bt.isBuffer(e)||bt.isStream(e)||bt.isFile(e)||bt.isBlob(e)||bt.isReadableStream(e))return e;if(bt.isArrayBufferView(e))return e.buffer;if(bt.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Dt(e,new Yt.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return Yt.isNode&&bt.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((a=bt.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Dt(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(bt.isString(e))try{return(t||JSON.parse)(e),bt.trim(e)}catch(Dy){if("SyntaxError"!==Dy.name)throw Dy}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||qt.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(bt.isResponse(e)||bt.isReadableStream(e))return e;if(e&&bt.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(Dy){if(n){if("SyntaxError"===Dy.name)throw St.from(Dy,St.ERR_BAD_RESPONSE,this,null,this.response);throw Dy}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Yt.classes.FormData,Blob:Yt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};bt.forEach(["delete","get","head","post","put","patch"],(e=>{qt.headers[e]={}}));const Vt=qt,Qt=bt.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Kt=Symbol("internals");function $t(e){return e&&String(e).trim().toLowerCase()}function Gt(e){return!1===e||null==e?e:bt.isArray(e)?e.map(Gt):String(e)}function Xt(e,t,n,r,o){return bt.isFunction(r)?r.call(this,t,n):(o&&(t=n),bt.isString(t)?bt.isString(r)?-1!==t.indexOf(r):bt.isRegExp(r)?r.test(t):void 0:void 0)}class Jt{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=$t(t);if(!o)throw new Error("header name must be a non-empty string");const a=bt.findKey(r,o);(!a||void 0===r[a]||!0===n||void 0===n&&!1!==r[a])&&(r[a||t]=Gt(e))}const a=(e,t)=>bt.forEach(e,((e,n)=>o(e,n,t)));if(bt.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(bt.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))a((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Qt[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(bt.isObject(e)&&bt.isIterable(e)){let n,r,o={};for(const t of e){if(!bt.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?bt.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}a(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=$t(e)){const n=bt.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(bt.isFunction(t))return t.call(this,e,n);if(bt.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=$t(e)){const n=bt.findKey(this,e);return!(!n||void 0===this[n]||t&&!Xt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=$t(e)){const o=bt.findKey(n,e);!o||t&&!Xt(0,n[o],o,t)||(delete n[o],r=!0)}}return bt.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Xt(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return bt.forEach(this,((r,o)=>{const a=bt.findKey(n,o);if(a)return t[a]=Gt(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();i!==o&&delete t[o],t[i]=Gt(r),n[i]=!0})),this}concat(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.constructor.concat(this,...t)}toJSON(e){const t=Object.create(null);return bt.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&bt.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((e=>{let[t,n]=e;return t+": "+n})).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e){const t=new this(e);for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.forEach((e=>t.set(e))),t}static accessor(e){const t=(this[Kt]=this[Kt]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=$t(e);t[r]||(!function(e,t){const n=bt.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return bt.isArray(e)?e.forEach(r):r(e),this}}Jt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),bt.reduceDescriptors(Jt.prototype,((e,t)=>{let{value:n}=e,r=t[0].toUpperCase()+t.slice(1);return{get:()=>n,set(e){this[r]=e}}})),bt.freezeMethods(Jt);const Zt=Jt;function en(e,t){const n=this||Vt,r=t||n,o=Zt.from(r.headers);let a=r.data;return bt.forEach(e,(function(e){a=e.call(n,a,o.normalize(),t?t.status:void 0)})),o.normalize(),a}function tn(e){return!(!e||!e.__CANCEL__)}function nn(e,t,n){St.call(this,null==e?"canceled":e,St.ERR_CANCELED,t,n),this.name="CanceledError"}bt.inherits(nn,St,{__CANCEL__:!0});const rn=nn;function on(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new St("Request failed with status code "+n.status,[St.ERR_BAD_REQUEST,St.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const an=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,a=0,i=0;return t=void 0!==t?t:1e3,function(s){const l=Date.now(),c=r[i];o||(o=l),n[a]=s,r[a]=l;let u=i,d=0;for(;u!==a;)d+=n[u++],u%=e;if(a=(a+1)%e,a===i&&(i=(i+1)%e),l-o<t)return;const f=c&&l-c;return f?Math.round(1e3*d/f):void 0}};const sn=function(e,t){let n,r,o=0,a=1e3/t;const i=function(t){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now();o=a,n=null,r&&(clearTimeout(r),r=null),e.apply(null,t)};return[function(){const e=Date.now(),t=e-o;for(var s=arguments.length,l=new Array(s),c=0;c<s;c++)l[c]=arguments[c];t>=a?i(l,e):(n=l,r||(r=setTimeout((()=>{r=null,i(n)}),a-t)))},()=>n&&i(n)]},ln=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,r=0;const o=an(50,250);return sn((n=>{const a=n.loaded,i=n.lengthComputable?n.total:void 0,s=a-r,l=o(s);r=a;e({loaded:a,total:i,progress:i?a/i:void 0,bytes:s,rate:l||void 0,estimated:l&&i&&a<=i?(i-a)/l:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})}),n)},cn=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},un=e=>function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return bt.asap((()=>e(...n)))},dn=Yt.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Yt.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Yt.origin),Yt.navigator&&/(msie|trident)/i.test(Yt.navigator.userAgent)):()=>!0,fn=Yt.hasStandardBrowserEnv?{write(e,t,n,r,o,a){const i=[e+"="+encodeURIComponent(t)];bt.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),bt.isString(r)&&i.push("path="+r),bt.isString(o)&&i.push("domain="+o),!0===a&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function pn(e,t,n){let r=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const hn=e=>e instanceof Zt?_e({},e):e;function mn(e,t){t=t||{};const n={};function r(e,t,n,r){return bt.isPlainObject(e)&&bt.isPlainObject(t)?bt.merge.call({caseless:r},e,t):bt.isPlainObject(t)?bt.merge({},t):bt.isArray(t)?t.slice():t}function o(e,t,n,o){return bt.isUndefined(t)?bt.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function a(e,t){if(!bt.isUndefined(t))return r(void 0,t)}function i(e,t){return bt.isUndefined(t)?bt.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,a){return a in t?r(n,o):a in e?r(void 0,n):void 0}const l={url:a,method:a,data:a,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(hn(e),hn(t),0,!0)};return bt.forEach(Object.keys(Object.assign({},e,t)),(function(r){const a=l[r]||o,i=a(e[r],t[r],r);bt.isUndefined(i)&&a!==s||(n[r]=i)})),n}const vn=e=>{const t=mn({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:a,xsrfCookieName:i,headers:s,auth:l}=t;if(t.headers=s=Zt.from(s),t.url=Rt(pn(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&s.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),bt.isFormData(r))if(Yt.hasStandardBrowserEnv||Yt.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(!1!==(n=s.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];s.setContentType([e||"multipart/form-data",...t].join("; "))}if(Yt.hasStandardBrowserEnv&&(o&&bt.isFunction(o)&&(o=o(t)),o||!1!==o&&dn(t.url))){const e=a&&i&&fn.read(i);e&&s.set(a,e)}return t},gn="undefined"!==typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=vn(e);let o=r.data;const a=Zt.from(r.headers).normalize();let i,s,l,c,u,{responseType:d,onUploadProgress:f,onDownloadProgress:p}=r;function h(){c&&c(),u&&u(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let m=new XMLHttpRequest;function v(){if(!m)return;const r=Zt.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());on((function(e){t(e),h()}),(function(e){n(e),h()}),{data:d&&"text"!==d&&"json"!==d?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=v:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(v)},m.onabort=function(){m&&(n(new St("Request aborted",St.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new St("Network Error",St.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||Lt;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new St(t,o.clarifyTimeoutError?St.ETIMEDOUT:St.ECONNABORTED,e,m)),m=null},void 0===o&&a.setContentType(null),"setRequestHeader"in m&&bt.forEach(a.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),bt.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),d&&"json"!==d&&(m.responseType=r.responseType),p&&([l,u]=ln(p,!0),m.addEventListener("progress",l)),f&&m.upload&&([s,c]=ln(f),m.upload.addEventListener("progress",s),m.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(i=t=>{m&&(n(!t||t.type?new rn(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const g=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);g&&-1===Yt.protocols.indexOf(g)?n(new St("Unsupported protocol "+g+":",St.ERR_BAD_REQUEST,e)):m.send(o||null)}))},yn=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof St?t:new rn(t instanceof Error?t.message:t))}};let a=t&&setTimeout((()=>{a=null,o(new St("timeout ".concat(t," of ms exceeded"),St.ETIMEDOUT))}),t);const i=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)})),e=null)};e.forEach((e=>e.addEventListener("abort",o)));const{signal:s}=r;return s.unsubscribe=()=>bt.asap(i),s}};function bn(e,t){this.v=e,this.k=t}function wn(e){return function(){return new xn(e.apply(this,arguments))}}function xn(e){var t,n;function r(t,n){try{var a=e[t](n),i=a.value,s=i instanceof bn;Promise.resolve(s?i.v:i).then((function(n){if(s){var l="return"===t?"return":"next";if(!i.k||n.done)return r(l,n);n=e[l](n).value}o(a.done?"return":"normal",n)}),(function(e){r("throw",e)}))}catch(e){o("throw",e)}}function o(e,o){switch(e){case"return":t.resolve({value:o,done:!0});break;case"throw":t.reject(o);break;default:t.resolve({value:o,done:!1})}(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,o){return new Promise((function(a,i){var s={key:e,arg:o,resolve:a,reject:i,next:null};n?n=n.next=s:(t=n=s,r(e,o))}))},"function"!=typeof e.return&&(this.return=void 0)}function kn(e){return new bn(e,0)}function Sn(e){var t={},n=!1;function r(t,r){return n=!0,r=new Promise((function(n){n(e[t](r))})),{done:!1,value:new bn(r,1)}}return t["undefined"!=typeof Symbol&&Symbol.iterator||"@@iterator"]=function(){return this},t.next=function(e){return n?(n=!1,e):r("next",e)},"function"==typeof e.throw&&(t.throw=function(e){if(n)throw n=!1,e;return r("throw",e)}),"function"==typeof e.return&&(t.return=function(e){return n?(n=!1,e):r("return",e)}),t}function En(e){var t,n,r,o=2;for("undefined"!=typeof Symbol&&(n=Symbol.asyncIterator,r=Symbol.iterator);o--;){if(n&&null!=(t=e[n]))return t.call(e);if(r&&null!=(t=e[r]))return new Cn(t.call(e));n="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function Cn(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return Cn=function(e){this.s=e,this.n=e.next},Cn.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):t(n.apply(this.s,arguments))}},new Cn(e)}xn.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},xn.prototype.next=function(e){return this._invoke("next",e)},xn.prototype.throw=function(e){return this._invoke("throw",e)},xn.prototype.return=function(e){return this._invoke("return",e)};const Nn=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},jn=function(){var e=wn((function*(e,t){var n,r=!1,o=!1;try{for(var a,i=En(Dn(e));r=!(a=yield kn(i.next())).done;r=!1){const e=a.value;yield*Sn(En(Nn(e,t)))}}catch(s){o=!0,n=s}finally{try{r&&null!=i.return&&(yield kn(i.return()))}finally{if(o)throw n}}}));return function(t,n){return e.apply(this,arguments)}}(),Dn=function(){var e=wn((function*(e){if(e[Symbol.asyncIterator])return void(yield*Sn(En(e)));const t=e.getReader();try{for(;;){const{done:e,value:n}=yield kn(t.read());if(e)break;yield n}}finally{yield kn(t.cancel())}}));return function(t){return e.apply(this,arguments)}}(),Pn=(e,t,n,r)=>{const o=jn(e,t);let a,i=0,s=e=>{a||(a=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return s(),void e.close();let a=r.byteLength;if(n){let e=i+=a;n(e)}e.enqueue(new Uint8Array(r))}catch(t){throw s(t),t}},cancel:e=>(s(e),o.return())},{highWaterMark:2})},Tn="function"===typeof fetch&&"function"===typeof Request&&"function"===typeof Response,_n=Tn&&"function"===typeof ReadableStream,On=Tn&&("function"===typeof TextEncoder?(Mn=new TextEncoder,e=>Mn.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var Mn;const Rn=function(e){try{for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return!!e(...n)}catch(Dy){return!1}},An=_n&&Rn((()=>{let e=!1;const t=new Request(Yt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ln=_n&&Rn((()=>bt.isReadableStream(new Response("").body))),In={stream:Ln&&(e=>e.body)};var Fn;Tn&&(Fn=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!In[e]&&(In[e]=bt.isFunction(Fn[e])?t=>t[e]():(t,n)=>{throw new St("Response type '".concat(e,"' is not supported"),St.ERR_NOT_SUPPORT,n)})})));const zn=async(e,t)=>{const n=bt.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(bt.isBlob(e))return e.size;if(bt.isSpecCompliantForm(e)){const t=new Request(Yt.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return bt.isArrayBufferView(e)||bt.isArrayBuffer(e)?e.byteLength:(bt.isURLSearchParams(e)&&(e+=""),bt.isString(e)?(await On(e)).byteLength:void 0)})(t):n},Bn=Tn&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:a,timeout:i,onDownloadProgress:s,onUploadProgress:l,responseType:c,headers:u,withCredentials:d="same-origin",fetchOptions:f}=vn(e);c=c?(c+"").toLowerCase():"text";let p,h=yn([o,a&&a.toAbortSignal()],i);const m=h&&h.unsubscribe&&(()=>{h.unsubscribe()});let v;try{if(l&&An&&"get"!==n&&"head"!==n&&0!==(v=await zn(u,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(bt.isFormData(r)&&(e=n.headers.get("content-type"))&&u.setContentType(e),n.body){const[e,t]=cn(v,ln(un(l)));r=Pn(n.body,65536,e,t)}}bt.isString(d)||(d=d?"include":"omit");const o="credentials"in Request.prototype;p=new Request(t,_e(_e({},f),{},{signal:h,method:n.toUpperCase(),headers:u.normalize().toJSON(),body:r,duplex:"half",credentials:o?d:void 0}));let a=await fetch(p);const i=Ln&&("stream"===c||"response"===c);if(Ln&&(s||i&&m)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=a[t]}));const t=bt.toFiniteNumber(a.headers.get("content-length")),[n,r]=s&&cn(t,ln(un(s),!0))||[];a=new Response(Pn(a.body,65536,n,(()=>{r&&r(),m&&m()})),e)}c=c||"text";let g=await In[bt.findKey(In,c)||"text"](a,e);return!i&&m&&m(),await new Promise(((t,n)=>{on(t,n,{data:g,headers:Zt.from(a.headers),status:a.status,statusText:a.statusText,config:e,request:p})}))}catch(g){if(m&&m(),g&&"TypeError"===g.name&&/Load failed|fetch/i.test(g.message))throw Object.assign(new St("Network Error",St.ERR_NETWORK,e,p),{cause:g.cause||g});throw St.from(g,g&&g.code,e,p)}}),Hn={http:null,xhr:gn,fetch:Bn};bt.forEach(Hn,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(Dy){}Object.defineProperty(e,"adapterName",{value:t})}}));const Un=e=>"- ".concat(e),Yn=e=>bt.isFunction(e)||null===e||!1===e,Wn=e=>{e=bt.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let a=0;a<t;a++){let t;if(n=e[a],r=n,!Yn(n)&&(r=Hn[(t=String(n)).toLowerCase()],void 0===r))throw new St("Unknown adapter '".concat(t,"'"));if(r)break;o[t||"#"+a]=r}if(!r){const e=Object.entries(o).map((e=>{let[t,n]=e;return"adapter ".concat(t," ")+(!1===n?"is not supported by the environment":"is not available in the build")}));let n=t?e.length>1?"since :\n"+e.map(Un).join("\n"):" "+Un(e[0]):"as no adapter specified";throw new St("There is no suitable adapter to dispatch the request "+n,"ERR_NOT_SUPPORT")}return r};function qn(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new rn(null,e)}function Vn(e){qn(e),e.headers=Zt.from(e.headers),e.data=en.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Wn(e.adapter||Vt.adapter)(e).then((function(t){return qn(e),t.data=en.call(e,e.transformResponse,t),t.headers=Zt.from(t.headers),t}),(function(t){return tn(t)||(qn(e),t&&t.response&&(t.response.data=en.call(e,e.transformResponse,t.response),t.response.headers=Zt.from(t.response.headers))),Promise.reject(t)}))}const Qn="1.9.0",Kn={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Kn[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const $n={};Kn.transitional=function(e,t,n){function r(e,t){return"[Axios v1.9.0] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,a)=>{if(!1===e)throw new St(r(o," has been removed"+(t?" in "+t:"")),St.ERR_DEPRECATED);return t&&!$n[o]&&($n[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,a)}},Kn.spelling=function(e){return(t,n)=>(console.warn("".concat(n," is likely a misspelling of ").concat(e)),!0)};const Gn={assertOptions:function(e,t,n){if("object"!==typeof e)throw new St("options must be an object",St.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const a=r[o],i=t[a];if(i){const t=e[a],n=void 0===t||i(t,a,e);if(!0!==n)throw new St("option "+a+" must be "+n,St.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new St("Unknown option "+a,St.ERR_BAD_OPTION)}},validators:Kn},Xn=Gn.validators;class Jn{constructor(e){this.defaults=e||{},this.interceptors={request:new At,response:new At}}async request(e,t){try{return await this._request(e,t)}catch(n){if(n instanceof Error){let e={};Error.captureStackTrace?Error.captureStackTrace(e):e=new Error;const t=e.stack?e.stack.replace(/^.+\n/,""):"";try{n.stack?t&&!String(n.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(n.stack+="\n"+t):n.stack=t}catch(Dy){}}throw n}}_request(e,t){"string"===typeof e?(t=t||{}).url=e:t=e||{},t=mn(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&Gn.assertOptions(n,{silentJSONParsing:Xn.transitional(Xn.boolean),forcedJSONParsing:Xn.transitional(Xn.boolean),clarifyTimeoutError:Xn.transitional(Xn.boolean)},!1),null!=r&&(bt.isFunction(r)?t.paramsSerializer={serialize:r}:Gn.assertOptions(r,{encode:Xn.function,serialize:Xn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Gn.assertOptions(t,{baseUrl:Xn.spelling("baseURL"),withXsrfToken:Xn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let a=o&&bt.merge(o.common,o[t.method]);o&&bt.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Zt.concat(a,o);const i=[];let s=!0;this.interceptors.request.forEach((function(e){"function"===typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));const l=[];let c;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let u,d=0;if(!s){const e=[Vn.bind(this),void 0];for(e.unshift.apply(e,i),e.push.apply(e,l),u=e.length,c=Promise.resolve(t);d<u;)c=c.then(e[d++],e[d++]);return c}u=i.length;let f=t;for(d=0;d<u;){const e=i[d++],t=i[d++];try{f=e(f)}catch(p){t.call(this,p);break}}try{c=Vn.call(this,f)}catch(p){return Promise.reject(p)}for(d=0,u=l.length;d<u;)c=c.then(l[d++],l[d++]);return c}getUri(e){return Rt(pn((e=mn(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}bt.forEach(["delete","get","head","options"],(function(e){Jn.prototype[e]=function(t,n){return this.request(mn(n||{},{method:e,url:t,data:(n||{}).data}))}})),bt.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(mn(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Jn.prototype[e]=t(),Jn.prototype[e+"Form"]=t(!0)}));const Zn=Jn;class er{constructor(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new rn(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new er((function(t){e=t})),cancel:e}}}const tr=er;const nr={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(nr).forEach((e=>{let[t,n]=e;nr[n]=t}));const rr=nr;const or=function e(t){const n=new Zn(t),r=Oe(Zn.prototype.request,n);return bt.extend(r,Zn.prototype,n,{allOwnKeys:!0}),bt.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(mn(t,n))},r}(Vt);or.Axios=Zn,or.CanceledError=rn,or.CancelToken=tr,or.isCancel=tn,or.VERSION=Qn,or.toFormData=Dt,or.AxiosError=St,or.Cancel=or.CanceledError,or.all=function(e){return Promise.all(e)},or.spread=function(e){return function(t){return e.apply(null,t)}},or.isAxiosError=function(e){return bt.isObject(e)&&!0===e.isAxiosError},or.mergeConfig=mn,or.AxiosHeaders=Zt,or.formToJSON=e=>Wt(bt.isHTMLForm(e)?new FormData(e):e),or.getAdapter=Wn,or.HttpStatusCode=rr,or.default=or;const ar=or,ir=ar.create({baseURL:"http://localhost:8088",timeout:5e3});ir.interceptors.request.use((e=>{const t=localStorage.getItem("token");return t&&(e.headers.Authorization="Bearer ".concat(t)),e}));const sr=async()=>{try{const e=await ir.get("/user/userInfo");if(200===e.data.code)return e.data.data;throw new Error(e.data.message||"\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e),e}};const lr=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/torrent/search",{params:{keyword:e,page:t,size:n}})},cr=e=>ir.get("/help/posts/".concat(e)),ur=e=>ir.get("/request/posts/".concat(e));function dr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function fr(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function pr(e,t){if(e){if("string"==typeof e)return dr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?dr(e,t):void 0}}function hr(e){return function(e){if(Array.isArray(e))return dr(e)}(e)||fr(e)||pr(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}const mr=r.createContext({}),vr="ant",gr="anticon",yr=r.createContext({getPrefixCls:(e,t)=>t||(e?"".concat(vr,"-").concat(e):vr),iconPrefixCls:gr}),{Consumer:br}=yr;function wr(e){if(Array.isArray(e))return e}function xr(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function kr(e,t){return wr(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,s=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(e,t)||pr(e,t)||xr()}const Sr=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)};function Er(){return!("undefined"===typeof window||!window.document||!window.document.createElement)}var Cr="data-rc-order",Nr="data-rc-priority",jr=new Map;function Dr(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).mark;return e?e.startsWith("data-")?e:"data-".concat(e):"rc-util-key"}function Pr(e){return e.attachTo?e.attachTo:document.querySelector("head")||document.body}function Tr(e){return Array.from((jr.get(e)||e).children).filter((function(e){return"STYLE"===e.tagName}))}function _r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Er())return null;var n=t.csp,r=t.prepend,o=t.priority,a=void 0===o?0:o,i=function(e){return"queue"===e?"prependQueue":e?"prepend":"append"}(r),s="prependQueue"===i,l=document.createElement("style");l.setAttribute(Cr,i),s&&a&&l.setAttribute(Nr,"".concat(a)),null!==n&&void 0!==n&&n.nonce&&(l.nonce=null===n||void 0===n?void 0:n.nonce),l.innerHTML=e;var c=Pr(t),u=c.firstChild;if(r){if(s){var d=(t.styles||Tr(c)).filter((function(e){if(!["prepend","prependQueue"].includes(e.getAttribute(Cr)))return!1;var t=Number(e.getAttribute(Nr)||0);return a>=t}));if(d.length)return c.insertBefore(l,d[d.length-1].nextSibling),l}c.insertBefore(l,u)}else c.appendChild(l);return l}function Or(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Pr(t);return(t.styles||Tr(n)).find((function(n){return n.getAttribute(Dr(t))===e}))}function Mr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Or(e,t);n&&Pr(t).removeChild(n)}function Rr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=Pr(n),o=Tr(r),a=_e(_e({},n),{},{styles:o});!function(e,t){var n=jr.get(e);if(!n||!function(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var n=t;n;){if(n===e)return!0;n=n.parentNode}return!1}(document,n)){var r=_r("",t),o=r.parentNode;jr.set(e,o),e.removeChild(r)}}(r,a);var i=Or(t,a);if(i){var s,l,c;if(null!==(s=a.csp)&&void 0!==s&&s.nonce&&i.nonce!==(null===(l=a.csp)||void 0===l?void 0:l.nonce))i.nonce=null===(c=a.csp)||void 0===c?void 0:c.nonce;return i.innerHTML!==e&&(i.innerHTML=e),i}var u=_r(e,a);return u.setAttribute(Dr(a),t),u}function Ar(e,t,n){var o=r.useRef({});return"value"in o.current&&!n(o.current.condition,t)||(o.current.value=e(),o.current.condition=t),o.current.value}var Lr={},Ir=[];function Fr(e,t){}function zr(e,t){}function Br(e,t,n){t||Lr[n]||(e(!1,n),Lr[n]=!0)}function Hr(e,t){Br(Fr,e,t)}Hr.preMessage=function(e){Ir.push(e)},Hr.resetWarned=function(){Lr={}},Hr.noteOnce=function(e,t){Br(zr,e,t)};const Ur=Hr;const Yr=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=new Set;return function e(t,o){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=r.has(t);if(Ur(!i,"Warning: There may be circular references"),i)return!1;if(t===o)return!0;if(n&&a>1)return!1;r.add(t);var s=a+1;if(Array.isArray(t)){if(!Array.isArray(o)||t.length!==o.length)return!1;for(var l=0;l<t.length;l++)if(!e(t[l],o[l],s))return!1;return!0}if(t&&o&&"object"===je(t)&&"object"===je(o)){var c=Object.keys(t);return c.length===Object.keys(o).length&&c.every((function(n){return e(t[n],o[n],s)}))}return!1}(e,t)};function Wr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qr(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,De(r.key),r)}}function Vr(e,t,n){return t&&qr(e.prototype,t),n&&qr(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Qr(e){return e.join("%")}var Kr=function(){function e(t){Wr(this,e),Pe(this,"instanceId",void 0),Pe(this,"cache",new Map),this.instanceId=t}return Vr(e,[{key:"get",value:function(e){return this.opGet(Qr(e))}},{key:"opGet",value:function(e){return this.cache.get(e)||null}},{key:"update",value:function(e,t){return this.opUpdate(Qr(e),t)}},{key:"opUpdate",value:function(e,t){var n=t(this.cache.get(e));null===n?this.cache.delete(e):this.cache.set(e,n)}}]),e}();const $r=Kr;var Gr="data-token-hash",Xr="data-css-hash",Jr="__cssinjs_instance__";function Zr(){var e=Math.random().toString(12).slice(2);if("undefined"!==typeof document&&document.head&&document.body){var t=document.body.querySelectorAll("style[".concat(Xr,"]"))||[],n=document.head.firstChild;Array.from(t).forEach((function(t){t[Jr]=t[Jr]||e,t[Jr]===e&&document.head.insertBefore(t,n)}));var r={};Array.from(document.querySelectorAll("style[".concat(Xr,"]"))).forEach((function(t){var n,o=t.getAttribute(Xr);r[o]?t[Jr]===e&&(null===(n=t.parentNode)||void 0===n||n.removeChild(t)):r[o]=!0}))}return new $r(e)}var eo=r.createContext({hashPriority:"low",cache:Zr(),defaultCache:!0});const to=eo;var no="CALC_UNIT";new RegExp(no,"g");var ro=function(){function e(){Wr(this,e),Pe(this,"cache",void 0),Pe(this,"keys",void 0),Pe(this,"cacheCallTimes",void 0),this.cache=new Map,this.keys=[],this.cacheCallTimes=0}return Vr(e,[{key:"size",value:function(){return this.keys.length}},{key:"internalGet",value:function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o={map:this.cache};return e.forEach((function(e){var t;o?o=null===(t=o)||void 0===t||null===(t=t.map)||void 0===t?void 0:t.get(e):o=void 0})),null!==(t=o)&&void 0!==t&&t.value&&r&&(o.value[1]=this.cacheCallTimes++),null===(n=o)||void 0===n?void 0:n.value}},{key:"get",value:function(e){var t;return null===(t=this.internalGet(e,!0))||void 0===t?void 0:t[0]}},{key:"has",value:function(e){return!!this.internalGet(e)}},{key:"set",value:function(t,n){var r=this;if(!this.has(t)){if(this.size()+1>e.MAX_CACHE_SIZE+e.MAX_CACHE_OFFSET){var o=this.keys.reduce((function(e,t){var n=kr(e,2)[1];return r.internalGet(t)[1]<n?[t,r.internalGet(t)[1]]:e}),[this.keys[0],this.cacheCallTimes]),a=kr(o,1)[0];this.delete(a)}this.keys.push(t)}var i=this.cache;t.forEach((function(e,o){if(o===t.length-1)i.set(e,{value:[n,r.cacheCallTimes++]});else{var a=i.get(e);a?a.map||(a.map=new Map):i.set(e,{map:new Map}),i=i.get(e).map}}))}},{key:"deleteByPath",value:function(e,t){var n,r=e.get(t[0]);if(1===t.length)return r.map?e.set(t[0],{map:r.map}):e.delete(t[0]),null===(n=r.value)||void 0===n?void 0:n[0];var o=this.deleteByPath(r.map,t.slice(1));return r.map&&0!==r.map.size||r.value||e.delete(t[0]),o}},{key:"delete",value:function(e){if(this.has(e))return this.keys=this.keys.filter((function(t){return!function(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}(t,e)})),this.deleteByPath(this.cache,e)}}]),e}();Pe(ro,"MAX_CACHE_SIZE",20),Pe(ro,"MAX_CACHE_OFFSET",5);var oo=0,ao=function(){function e(t){Wr(this,e),Pe(this,"derivatives",void 0),Pe(this,"id",void 0),this.derivatives=Array.isArray(t)?t:[t],this.id=oo,0===t.length&&t.length,oo+=1}return Vr(e,[{key:"getDerivativeToken",value:function(e){return this.derivatives.reduce((function(t,n){return n(e,t)}),void 0)}}]),e}(),io=new ro;function so(e){var t=Array.isArray(e)?e:[e];return io.has(t)||io.set(t,new ao(t)),io.get(t)}var lo=new WeakMap,co={};var uo=new WeakMap;function fo(e){var t=uo.get(e)||"";return t||(Object.keys(e).forEach((function(n){var r=e[n];t+=n,r instanceof ao?t+=r.id:r&&"object"===je(r)?t+=fo(r):t+=r})),t=Sr(t),uo.set(e,t)),t}function po(e,t){return Sr("".concat(t,"_").concat(fo(e)))}"random-".concat(Date.now(),"-").concat(Math.random()).replace(/\./g,"");var ho=Er();function mo(e){return"number"===typeof e?"".concat(e,"px"):e}function vo(e,t,n){var r;if(arguments.length>4&&void 0!==arguments[4]&&arguments[4])return e;var o=_e(_e({},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}),{},(Pe(r={},Gr,t),Pe(r,Xr,n),r)),a=Object.keys(o).map((function(e){var t=o[e];return t?"".concat(e,'="').concat(t,'"'):null})).filter((function(e){return e})).join(" ");return"<style ".concat(a,">").concat(e,"</style>")}var go=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"--".concat(t?"".concat(t,"-"):"").concat(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z0-9]+)/g,"$1-$2").replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase()},yo=function(e,t,n){return Object.keys(e).length?".".concat(t).concat(null!==n&&void 0!==n&&n.scope?".".concat(n.scope):"","{").concat(Object.entries(e).map((function(e){var t=kr(e,2),n=t[0],r=t[1];return"".concat(n,":").concat(r,";")})).join(""),"}"):""},bo=function(e,t,n){var r={},o={};return Object.entries(e).forEach((function(e){var t,a,i=kr(e,2),s=i[0],l=i[1];if(null!==n&&void 0!==n&&null!==(t=n.preserve)&&void 0!==t&&t[s])o[s]=l;else if(("string"===typeof l||"number"===typeof l)&&(null===n||void 0===n||null===(a=n.ignore)||void 0===a||!a[s])){var c,u=go(s,null===n||void 0===n?void 0:n.prefix);r[u]="number"!==typeof l||null!==n&&void 0!==n&&null!==(c=n.unitless)&&void 0!==c&&c[s]?String(l):"".concat(l,"px"),o[s]="var(".concat(u,")")}})),[o,yo(r,t,{scope:null===n||void 0===n?void 0:n.scope})]},wo=Er()?r.useLayoutEffect:r.useEffect,xo=function(e,t){var n=r.useRef(!0);wo((function(){return e(n.current)}),t),wo((function(){return n.current=!1,function(){n.current=!0}}),[])};const ko=xo;var So=_e({},o).useInsertionEffect;const Eo=So?function(e,t,n){return So((function(){return e(),t()}),n)}:function(e,t,n){r.useMemo(e,n),ko((function(){return t(!0)}),n)};const Co="undefined"!==typeof _e({},o).useInsertionEffect?function(e){var t=[],n=!1;return r.useEffect((function(){return n=!1,function(){n=!0,t.length&&t.forEach((function(e){return e()}))}}),e),function(e){n||t.push(e)}}:function(){return function(e){e()}};const No=function(){return!1};function jo(e,t,n,o,a){var i=r.useContext(to).cache,s=Qr([e].concat(hr(t))),l=Co([s]),c=(No(),function(e){i.opUpdate(s,(function(t){var r=kr(t||[void 0,void 0],2),o=r[0];var a=[void 0===o?0:o,r[1]||n()];return e?e(a):a}))});r.useMemo((function(){c()}),[s]);var u=i.opGet(s)[1];return Eo((function(){null===a||void 0===a||a(u)}),(function(e){return c((function(t){var n=kr(t,2),r=n[0],o=n[1];return e&&0===r&&(null===a||void 0===a||a(u)),[r+1,o]})),function(){i.opUpdate(s,(function(t){var n=kr(t||[],2),r=n[0],a=void 0===r?0:r,c=n[1];return 0===a-1?(l((function(){!e&&i.opGet(s)||null===o||void 0===o||o(c,!1)})),null):[a-1,c]}))}}),[s]),u}var Do={},Po=new Map;function To(e,t){Po.set(e,(Po.get(e)||0)-1);var n=Array.from(Po.keys()),r=n.filter((function(e){return(Po.get(e)||0)<=0}));n.length-r.length>0&&r.forEach((function(e){!function(e,t){"undefined"!==typeof document&&document.querySelectorAll("style[".concat(Gr,'="').concat(e,'"]')).forEach((function(e){var n;e[Jr]===t&&(null===(n=e.parentNode)||void 0===n||n.removeChild(e))}))}(e,t),Po.delete(e)}))}var _o="token";function Oo(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=(0,r.useContext)(to),a=o.cache.instanceId,i=o.container,s=n.salt,l=void 0===s?"":s,c=n.override,u=void 0===c?Do:c,d=n.formatToken,f=n.getComputedToken,p=n.cssVar,h=function(e,t){for(var n=lo,r=0;r<t.length;r+=1){var o=t[r];n.has(o)||n.set(o,new WeakMap),n=n.get(o)}return n.has(co)||n.set(co,e()),n.get(co)}((function(){return Object.assign.apply(Object,[{}].concat(hr(t)))}),t),m=fo(h),v=fo(u),g=p?fo(p):"",y=jo(_o,[l,e.id,m,v,g],(function(){var t,n=f?f(h,u,e):function(e,t,n,r){var o=_e(_e({},n.getDerivativeToken(e)),t);return r&&(o=r(o)),o}(h,u,e,d),r=_e({},n),o="";if(p){var a=kr(bo(n,p.key,{prefix:p.prefix,ignore:p.ignore,unitless:p.unitless,preserve:p.preserve}),2);n=a[0],o=a[1]}var i=po(n,l);n._tokenKey=i,r._tokenKey=po(r,l);var s=null!==(t=null===p||void 0===p?void 0:p.key)&&void 0!==t?t:i;n._themeKey=s,function(e){Po.set(e,(Po.get(e)||0)+1)}(s);var c="".concat("css","-").concat(Sr(i));return n._hashId=c,[n,c,r,o,(null===p||void 0===p?void 0:p.key)||""]}),(function(e){To(e[0]._themeKey,a)}),(function(e){var t=kr(e,4),n=t[0],r=t[3];if(p&&r){var o=Rr(r,Sr("css-variables-".concat(n._themeKey)),{mark:Xr,prepend:"queue",attachTo:i,priority:-999});o[Jr]=a,o.setAttribute(Gr,n._themeKey)}}));return y}function Mo(){return Mo=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Mo.apply(null,arguments)}const Ro={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var Ao="comm",Lo="rule",Io="decl",Fo=Math.abs,zo=String.fromCharCode;Object.assign;function Bo(e){return e.trim()}function Ho(e,t,n){return e.replace(t,n)}function Uo(e,t,n){return e.indexOf(t,n)}function Yo(e,t){return 0|e.charCodeAt(t)}function Wo(e,t,n){return e.slice(t,n)}function qo(e){return e.length}function Vo(e,t){return t.push(e),e}function Qo(e,t){for(var n="",r=0;r<e.length;r++)n+=t(e[r],r,e,t)||"";return n}function Ko(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case"@namespace":case Io:return e.return=e.return||e.value;case Ao:return"";case"@keyframes":return e.return=e.value+"{"+Qo(e.children,r)+"}";case Lo:if(!qo(e.value=e.props.join(",")))return""}return qo(n=Qo(e.children,r))?e.return=e.value+"{"+n+"}":""}var $o=1,Go=1,Xo=0,Jo=0,Zo=0,ea="";function ta(e,t,n,r,o,a,i,s){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:$o,column:Go,length:i,return:"",siblings:s}}function na(){return Zo=Jo>0?Yo(ea,--Jo):0,Go--,10===Zo&&(Go=1,$o--),Zo}function ra(){return Zo=Jo<Xo?Yo(ea,Jo++):0,Go++,10===Zo&&(Go=1,$o++),Zo}function oa(){return Yo(ea,Jo)}function aa(){return Jo}function ia(e,t){return Wo(ea,e,t)}function sa(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function la(e){return $o=Go=1,Xo=qo(ea=e),Jo=0,[]}function ca(e){return ea="",e}function ua(e){return Bo(ia(Jo-1,pa(91===e?e+2:40===e?e+1:e)))}function da(e){for(;(Zo=oa())&&Zo<33;)ra();return sa(e)>2||sa(Zo)>3?"":" "}function fa(e,t){for(;--t&&ra()&&!(Zo<48||Zo>102||Zo>57&&Zo<65||Zo>70&&Zo<97););return ia(e,aa()+(t<6&&32==oa()&&32==ra()))}function pa(e){for(;ra();)switch(Zo){case e:return Jo;case 34:case 39:34!==e&&39!==e&&pa(Zo);break;case 40:41===e&&pa(e);break;case 92:ra()}return Jo}function ha(e,t){for(;ra()&&e+Zo!==57&&(e+Zo!==84||47!==oa()););return"/*"+ia(t,Jo-1)+"*"+zo(47===e?e:ra())}function ma(e){for(;!sa(oa());)ra();return ia(e,Jo)}function va(e){return ca(ga("",null,null,null,[""],e=la(e),0,[0],e))}function ga(e,t,n,r,o,a,i,s,l){for(var c=0,u=0,d=i,f=0,p=0,h=0,m=1,v=1,g=1,y=0,b="",w=o,x=a,k=r,S=b;v;)switch(h=y,y=ra()){case 40:if(108!=h&&58==Yo(S,d-1)){-1!=Uo(S+=Ho(ua(y),"&","&\f"),"&\f",Fo(c?s[c-1]:0))&&(g=-1);break}case 34:case 39:case 91:S+=ua(y);break;case 9:case 10:case 13:case 32:S+=da(h);break;case 92:S+=fa(aa()-1,7);continue;case 47:switch(oa()){case 42:case 47:Vo(ba(ha(ra(),aa()),t,n,l),l),5!=sa(h||1)&&5!=sa(oa()||1)||!qo(S)||" "===Wo(S,-1,void 0)||(S+=" ");break;default:S+="/"}break;case 123*m:s[c++]=qo(S)*g;case 125*m:case 59:case 0:switch(y){case 0:case 125:v=0;case 59+u:-1==g&&(S=Ho(S,/\f/g,"")),p>0&&(qo(S)-d||0===m&&47===h)&&Vo(p>32?wa(S+";",r,n,d-1,l):wa(Ho(S," ","")+";",r,n,d-2,l),l);break;case 59:S+=";";default:if(Vo(k=ya(S,t,n,c,u,o,s,b,w=[],x=[],d,a),a),123===y)if(0===u)ga(S,t,k,k,w,a,d,s,x);else{switch(f){case 99:if(110===Yo(S,3))break;case 108:if(97===Yo(S,2))break;default:u=0;case 100:case 109:case 115:}u?ga(e,k,k,r&&Vo(ya(e,k,k,0,0,o,s,b,o,w=[],d,x),x),o,x,d,s,r?w:x):ga(S,k,k,k,[""],x,0,s,x)}}c=u=p=0,m=g=1,b=S="",d=i;break;case 58:d=1+qo(S),p=h;default:if(m<1)if(123==y)--m;else if(125==y&&0==m++&&125==na())continue;switch(S+=zo(y),y*m){case 38:g=u>0?1:(S+="\f",-1);break;case 44:s[c++]=(qo(S)-1)*g,g=1;break;case 64:45===oa()&&(S+=ua(ra())),f=oa(),u=d=qo(b=S+=ma(aa())),y++;break;case 45:45===h&&2==qo(S)&&(m=0)}}return a}function ya(e,t,n,r,o,a,i,s,l,c,u,d){for(var f=o-1,p=0===o?a:[""],h=function(e){return e.length}(p),m=0,v=0,g=0;m<r;++m)for(var y=0,b=Wo(e,f+1,f=Fo(v=i[m])),w=e;y<h;++y)(w=Bo(v>0?p[y]+" "+b:Ho(b,/&\f/g,p[y])))&&(l[g++]=w);return ta(e,t,n,0===o?Lo:s,l,c,u,d)}function ba(e,t,n,r){return ta(e,t,n,Ao,zo(Zo),Wo(e,2,-2),0,r)}function wa(e,t,n,r,o){return ta(e,t,n,Io,Wo(e,0,r),Wo(e,r+1,-1),r,o)}var xa,ka="data-ant-cssinjs-cache-path",Sa="_FILE_STYLE__";var Ea=!0;function Ca(e){return function(){if(!xa&&(xa={},Er())){var e=document.createElement("div");e.className=ka,e.style.position="fixed",e.style.visibility="hidden",e.style.top="-9999px",document.body.appendChild(e);var t=getComputedStyle(e).content||"";(t=t.replace(/^"/,"").replace(/"$/,"")).split(";").forEach((function(e){var t=kr(e.split(":"),2),n=t[0],r=t[1];xa[n]=r}));var n,r=document.querySelector("style[".concat(ka,"]"));r&&(Ea=!1,null===(n=r.parentNode)||void 0===n||n.removeChild(r)),document.body.removeChild(e)}}(),!!xa[e]}var Na="_multi_value_";function ja(e){return Qo(va(e),Ko).replace(/\{%%%\:[^;];}/g,";")}function Da(e,t,n){if(!t)return e;var r=".".concat(t),o="low"===n?":where(".concat(r,")"):r;return e.split(",").map((function(e){var t,n=e.trim().split(/\s+/),r=n[0]||"",a=(null===(t=r.match(/^\w+/))||void 0===t?void 0:t[0])||"";return[r="".concat(a).concat(o).concat(r.slice(a.length))].concat(hr(n.slice(1))).join(" ")})).join(",")}var Pa=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{root:!0,parentSelectors:[]},o=r.root,a=r.injectHash,i=r.parentSelectors,s=n.hashId,l=n.layer,c=(n.path,n.hashPriority),u=n.transformers,d=void 0===u?[]:u,f=(n.linters,""),p={};function h(t){var r=t.getName(s);if(!p[r]){var o=kr(e(t.style,n,{root:!1,parentSelectors:i}),1)[0];p[r]="@keyframes ".concat(t.getName(s)).concat(o)}}var m=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach((function(t){Array.isArray(t)?e(t,n):t&&n.push(t)})),n}(Array.isArray(t)?t:[t]);return m.forEach((function(t){var r="string"!==typeof t||o?t:{};if("string"===typeof r)f+="".concat(r,"\n");else if(r._keyframe)h(r);else{var l=d.reduce((function(e,t){var n;return(null===t||void 0===t||null===(n=t.visit)||void 0===n?void 0:n.call(t,e))||e}),r);Object.keys(l).forEach((function(t){var r=l[t];if("object"!==je(r)||!r||"animationName"===t&&r._keyframe||function(e){return"object"===je(e)&&e&&("_skip_check_"in e||Na in e)}(r)){var u;function x(e,t){var n=e.replace(/[A-Z]/g,(function(e){return"-".concat(e.toLowerCase())})),r=t;Ro[e]||"number"!==typeof r||0===r||(r="".concat(r,"px")),"animationName"===e&&null!==t&&void 0!==t&&t._keyframe&&(h(t),r=t.getName(s)),f+="".concat(n,":").concat(r,";")}var d=null!==(u=null===r||void 0===r?void 0:r.value)&&void 0!==u?u:r;"object"===je(r)&&null!==r&&void 0!==r&&r[Na]&&Array.isArray(d)?d.forEach((function(e){x(t,e)})):x(t,d)}else{var m=!1,v=t.trim(),g=!1;(o||a)&&s?v.startsWith("@")?m=!0:v=Da("&"===v?"":t,s,c):!o||s||"&"!==v&&""!==v||(v="",g=!0);var y=kr(e(r,n,{root:g,injectHash:m,parentSelectors:[].concat(hr(i),[v])}),2),b=y[0],w=y[1];p=_e(_e({},p),w),f+="".concat(v).concat(b)}}))}})),o?l&&(f&&(f="@layer ".concat(l.name," {").concat(f,"}")),l.dependencies&&(p["@layer ".concat(l.name)]=l.dependencies.map((function(e){return"@layer ".concat(e,", ").concat(l.name,";")})).join("\n"))):f="{".concat(f,"}"),[f,p]};function Ta(e,t){return Sr("".concat(e.join("%")).concat(t))}function _a(){return null}var Oa="style";function Ma(e,t){var n=e.token,o=e.path,a=e.hashId,i=e.layer,s=e.nonce,l=e.clientOnly,c=e.order,u=void 0===c?0:c,d=r.useContext(to),f=d.autoClear,p=(d.mock,d.defaultCache),h=d.hashPriority,m=d.container,v=d.ssrInline,g=d.transformers,y=d.linters,b=d.cache,w=d.layer,x=n._tokenKey,k=[x];w&&k.push("layer"),k.push.apply(k,hr(o));var S=ho;var E=jo(Oa,k,(function(){var e=k.join("|");if(Ca(e)){var n=function(e){var t=xa[e],n=null;if(t&&Er())if(Ea)n=Sa;else{var r=document.querySelector("style[".concat(Xr,'="').concat(xa[e],'"]'));r?n=r.innerHTML:delete xa[e]}return[n,t]}(e),r=kr(n,2),s=r[0],c=r[1];if(s)return[s,x,c,{},l,u]}var d=t(),f=kr(Pa(d,{hashId:a,hashPriority:h,layer:w?i:void 0,path:o.join("-"),transformers:g,linters:y}),2),p=f[0],m=f[1],v=ja(p),b=Ta(k,v);return[v,x,b,m,l,u]}),(function(e,t){var n=kr(e,3)[2];(t||f)&&ho&&Mr(n,{mark:Xr})}),(function(e){var t=kr(e,4),n=t[0],r=(t[1],t[2]),o=t[3];if(S&&n!==Sa){var a={mark:Xr,prepend:!w&&"queue",attachTo:m,priority:u},i="function"===typeof s?s():s;i&&(a.csp={nonce:i});var l=[],c=[];Object.keys(o).forEach((function(e){e.startsWith("@layer")?l.push(e):c.push(e)})),l.forEach((function(e){Rr(ja(o[e]),"_layer-".concat(e),_e(_e({},a),{},{prepend:!0}))}));var d=Rr(n,r,a);d[Jr]=b.instanceId,d.setAttribute(Gr,x),c.forEach((function(e){Rr(ja(o[e]),"_effect-".concat(e),a)}))}})),C=kr(E,3),N=C[0],j=C[1],D=C[2];return function(e){var t,n;v&&!S&&p?t=r.createElement("style",Mo({},(Pe(n={},Gr,j),Pe(n,Xr,D),n),{dangerouslySetInnerHTML:{__html:N}})):t=r.createElement(_a,null);return r.createElement(r.Fragment,null,t,e)}}var Ra="cssVar";const Aa=function(e,t){var n=e.key,o=e.prefix,a=e.unitless,i=e.ignore,s=e.token,l=e.scope,c=void 0===l?"":l,u=(0,r.useContext)(to),d=u.cache.instanceId,f=u.container,p=s._tokenKey,h=[].concat(hr(e.path),[n,c,p]),m=jo(Ra,h,(function(){var e=t(),r=kr(bo(e,n,{prefix:o,unitless:a,ignore:i,scope:c}),2),s=r[0],l=r[1];return[s,l,Ta(h,l),n]}),(function(e){var t=kr(e,3)[2];ho&&Mr(t,{mark:Xr})}),(function(e){var t=kr(e,3),r=t[1],o=t[2];if(r){var a=Rr(r,o,{mark:Xr,prepend:"queue",attachTo:f,priority:-999});a[Jr]=d,a.setAttribute(Gr,n)}}));return m};var La;Pe(La={},Oa,(function(e,t,n){var r=kr(e,6),o=r[0],a=r[1],i=r[2],s=r[3],l=r[4],c=r[5],u=(n||{}).plain;if(l)return null;var d=o,f={"data-rc-order":"prependQueue","data-rc-priority":"".concat(c)};return d=vo(o,a,i,f,u),s&&Object.keys(s).forEach((function(e){if(!t[e]){t[e]=!0;var n=vo(ja(s[e]),a,"_effect-".concat(e),f,u);e.startsWith("@layer")?d=n+d:d+=n}})),[c,i,d]})),Pe(La,_o,(function(e,t,n){var r=kr(e,5),o=r[2],a=r[3],i=r[4],s=(n||{}).plain;if(!a)return null;var l=o._tokenKey;return[-999,l,vo(a,i,l,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},s)]})),Pe(La,Ra,(function(e,t,n){var r=kr(e,4),o=r[1],a=r[2],i=r[3],s=(n||{}).plain;if(!o)return null;return[-999,a,vo(o,i,a,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},s)]}));var Ia=function(){function e(t,n){Wr(this,e),Pe(this,"name",void 0),Pe(this,"style",void 0),Pe(this,"_keyframe",!0),this.name=t,this.style=n}return Vr(e,[{key:"getName",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?"".concat(e,"-").concat(this.name):this.name}}]),e}();const Fa=Ia;function za(e){return e.notSplit=!0,e}za(["borderTop","borderBottom"]),za(["borderTop"]),za(["borderBottom"]),za(["borderLeft","borderRight"]),za(["borderLeft"]),za(["borderRight"]);const Ba=(0,r.createContext)({});function Ha(e,t){for(var n=e,r=0;r<t.length;r+=1){if(null===n||void 0===n)return;n=n[t[r]]}return n}function Ua(e,t,n,r){if(!t.length)return n;var o,a=function(e){return wr(e)||fr(e)||pr(e)||xr()}(t),i=a[0],s=a.slice(1);return o=e||"number"!==typeof i?Array.isArray(e)?hr(e):_e({},e):[],r&&void 0===n&&1===s.length?delete o[i][s[0]]:o[i]=Ua(o[i],s,n,r),o}function Ya(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return t.length&&r&&void 0===n&&!Ha(e,t.slice(0,-1))?e:Ua(e,t,n,r)}function Wa(e){return Array.isArray(e)?[]:{}}var qa="undefined"===typeof Reflect?Object.keys:Reflect.ownKeys;function Va(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Wa(t[0]);return t.forEach((function(e){!function t(n,o){var a,i=new Set(o),s=Ha(e,n),l=Array.isArray(s);if(l||"object"===je(a=s)&&null!==a&&Object.getPrototypeOf(a)===Object.prototype){if(!i.has(s)){i.add(s);var c=Ha(r,n);l?r=Ya(r,n,[]):c&&"object"===je(c)||(r=Ya(r,n,Wa(s))),qa(s).forEach((function(e){t([].concat(hr(n),[e]),i)}))}}else r=Ya(r,n,s)}([])})),r}function Qa(){}const Ka=r.createContext({}),$a=()=>{const e=()=>{};return e.deprecated=Qa,e},Ga=(0,r.createContext)(void 0);const Xa={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"Page",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages",page_size:"Page Size"};const Ja=_e(_e({},{yearFormat:"YYYY",dayFormat:"D",cellMeridiemFormat:"A",monthBeforeYear:!0}),{},{locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"OK",clear:"Clear",week:"Week",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",dateFormat:"M/D/YYYY",dateTimeFormat:"M/D/YYYY HH:mm:ss",previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"}),Za={placeholder:"Select time",rangePlaceholder:["Start time","End time"]},ei={lang:Object.assign({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},Ja),timePickerLocale:Object.assign({},Za)},ti="${label} is not a valid ${type}",ni={locale:"en",Pagination:Xa,DatePicker:ei,TimePicker:Za,Calendar:ei,global:{placeholder:"Please select",close:"Close"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckAll:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Tour:{Next:"Next",Previous:"Previous",Finish:"Finish"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",deselectAll:"Deselect all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand",collapse:"Collapse"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:ti,method:ti,array:ti,object:ti,number:ti,date:ti,boolean:ti,integer:ti,float:ti,regexp:ti,email:ti,url:ti,hex:ti},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"},QRCode:{expired:"QR code expired",refresh:"Refresh",scanned:"Scanned"},ColorPicker:{presetEmpty:"Empty",transparent:"Transparent",singleColor:"Single",gradientColor:"Gradient"}};let ri=Object.assign({},ni.Modal),oi=[];const ai=()=>oi.reduce(((e,t)=>Object.assign(Object.assign({},e),t)),ni.Modal);const ii=(0,r.createContext)(void 0);const si=e=>{const{locale:t={},children:n,_ANT_MARK__:o}=e;r.useEffect((()=>{const e=function(e){if(e){const t=Object.assign({},e);return oi.push(t),ri=ai(),()=>{oi=oi.filter((e=>e!==t)),ri=ai()}}ri=Object.assign({},ni.Modal)}(null===t||void 0===t?void 0:t.Modal);return e}),[t]);const a=r.useMemo((()=>Object.assign(Object.assign({},t),{exist:!0})),[t]);return r.createElement(ii.Provider,{value:a},n)},li=Math.round;function ci(e,t){const n=e.replace(/^[^(]*\((.*)/,"$1").replace(/\).*/,"").match(/\d*\.?\d+%?/g)||[],r=n.map((e=>parseFloat(e)));for(let o=0;o<3;o+=1)r[o]=t(r[o]||0,n[o]||"",o);return n[3]?r[3]=n[3].includes("%")?r[3]/100:r[3]:r[3]=1,r}const ui=(e,t,n)=>0===n?e:e/100;function di(e,t){const n=t||255;return e>n?n:e<0?0:e}class fi{constructor(e){function t(t){return t[0]in e&&t[1]in e&&t[2]in e}if(Pe(this,"isValid",!0),Pe(this,"r",0),Pe(this,"g",0),Pe(this,"b",0),Pe(this,"a",1),Pe(this,"_h",void 0),Pe(this,"_s",void 0),Pe(this,"_l",void 0),Pe(this,"_v",void 0),Pe(this,"_max",void 0),Pe(this,"_min",void 0),Pe(this,"_brightness",void 0),e)if("string"===typeof e){const n=e.trim();function r(e){return n.startsWith(e)}/^#?[A-F\d]{3,8}$/i.test(n)?this.fromHexString(n):r("rgb")?this.fromRgbString(n):r("hsl")?this.fromHslString(n):(r("hsv")||r("hsb"))&&this.fromHsvString(n)}else if(e instanceof fi)this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this._h=e._h,this._s=e._s,this._l=e._l,this._v=e._v;else if(t("rgb"))this.r=di(e.r),this.g=di(e.g),this.b=di(e.b),this.a="number"===typeof e.a?di(e.a,1):1;else if(t("hsl"))this.fromHsl(e);else{if(!t("hsv"))throw new Error("@ant-design/fast-color: unsupported input "+JSON.stringify(e));this.fromHsv(e)}else;}setR(e){return this._sc("r",e)}setG(e){return this._sc("g",e)}setB(e){return this._sc("b",e)}setA(e){return this._sc("a",e,1)}setHue(e){const t=this.toHsv();return t.h=e,this._c(t)}getLuminance(){function e(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}return.2126*e(this.r)+.7152*e(this.g)+.0722*e(this.b)}getHue(){if("undefined"===typeof this._h){const e=this.getMax()-this.getMin();this._h=0===e?0:li(60*(this.r===this.getMax()?(this.g-this.b)/e+(this.g<this.b?6:0):this.g===this.getMax()?(this.b-this.r)/e+2:(this.r-this.g)/e+4))}return this._h}getSaturation(){if("undefined"===typeof this._s){const e=this.getMax()-this.getMin();this._s=0===e?0:e/this.getMax()}return this._s}getLightness(){return"undefined"===typeof this._l&&(this._l=(this.getMax()+this.getMin())/510),this._l}getValue(){return"undefined"===typeof this._v&&(this._v=this.getMax()/255),this._v}getBrightness(){return"undefined"===typeof this._brightness&&(this._brightness=(299*this.r+587*this.g+114*this.b)/1e3),this._brightness}darken(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;const t=this.getHue(),n=this.getSaturation();let r=this.getLightness()-e/100;return r<0&&(r=0),this._c({h:t,s:n,l:r,a:this.a})}lighten(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;const t=this.getHue(),n=this.getSaturation();let r=this.getLightness()+e/100;return r>1&&(r=1),this._c({h:t,s:n,l:r,a:this.a})}mix(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50;const n=this._c(e),r=t/100,o=e=>(n[e]-this[e])*r+this[e],a={r:li(o("r")),g:li(o("g")),b:li(o("b")),a:li(100*o("a"))/100};return this._c(a)}tint(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this.mix({r:255,g:255,b:255,a:1},e)}shade(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this.mix({r:0,g:0,b:0,a:1},e)}onBackground(e){const t=this._c(e),n=this.a+t.a*(1-this.a),r=e=>li((this[e]*this.a+t[e]*t.a*(1-this.a))/n);return this._c({r:r("r"),g:r("g"),b:r("b"),a:n})}isDark(){return this.getBrightness()<128}isLight(){return this.getBrightness()>=128}equals(e){return this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}clone(){return this._c(this)}toHexString(){let e="#";const t=(this.r||0).toString(16);e+=2===t.length?t:"0"+t;const n=(this.g||0).toString(16);e+=2===n.length?n:"0"+n;const r=(this.b||0).toString(16);if(e+=2===r.length?r:"0"+r,"number"===typeof this.a&&this.a>=0&&this.a<1){const t=li(255*this.a).toString(16);e+=2===t.length?t:"0"+t}return e}toHsl(){return{h:this.getHue(),s:this.getSaturation(),l:this.getLightness(),a:this.a}}toHslString(){const e=this.getHue(),t=li(100*this.getSaturation()),n=li(100*this.getLightness());return 1!==this.a?"hsla(".concat(e,",").concat(t,"%,").concat(n,"%,").concat(this.a,")"):"hsl(".concat(e,",").concat(t,"%,").concat(n,"%)")}toHsv(){return{h:this.getHue(),s:this.getSaturation(),v:this.getValue(),a:this.a}}toRgb(){return{r:this.r,g:this.g,b:this.b,a:this.a}}toRgbString(){return 1!==this.a?"rgba(".concat(this.r,",").concat(this.g,",").concat(this.b,",").concat(this.a,")"):"rgb(".concat(this.r,",").concat(this.g,",").concat(this.b,")")}toString(){return this.toRgbString()}_sc(e,t,n){const r=this.clone();return r[e]=di(t,n),r}_c(e){return new this.constructor(e)}getMax(){return"undefined"===typeof this._max&&(this._max=Math.max(this.r,this.g,this.b)),this._max}getMin(){return"undefined"===typeof this._min&&(this._min=Math.min(this.r,this.g,this.b)),this._min}fromHexString(e){const t=e.replace("#","");function n(e,n){return parseInt(t[e]+t[n||e],16)}t.length<6?(this.r=n(0),this.g=n(1),this.b=n(2),this.a=t[3]?n(3)/255:1):(this.r=n(0,1),this.g=n(2,3),this.b=n(4,5),this.a=t[6]?n(6,7)/255:1)}fromHsl(e){let{h:t,s:n,l:r,a:o}=e;if(this._h=t%360,this._s=n,this._l=r,this.a="number"===typeof o?o:1,n<=0){const e=li(255*r);this.r=e,this.g=e,this.b=e}let a=0,i=0,s=0;const l=t/60,c=(1-Math.abs(2*r-1))*n,u=c*(1-Math.abs(l%2-1));l>=0&&l<1?(a=c,i=u):l>=1&&l<2?(a=u,i=c):l>=2&&l<3?(i=c,s=u):l>=3&&l<4?(i=u,s=c):l>=4&&l<5?(a=u,s=c):l>=5&&l<6&&(a=c,s=u);const d=r-c/2;this.r=li(255*(a+d)),this.g=li(255*(i+d)),this.b=li(255*(s+d))}fromHsv(e){let{h:t,s:n,v:r,a:o}=e;this._h=t%360,this._s=n,this._v=r,this.a="number"===typeof o?o:1;const a=li(255*r);if(this.r=a,this.g=a,this.b=a,n<=0)return;const i=t/60,s=Math.floor(i),l=i-s,c=li(r*(1-n)*255),u=li(r*(1-n*l)*255),d=li(r*(1-n*(1-l))*255);switch(s){case 0:this.g=d,this.b=c;break;case 1:this.r=u,this.b=c;break;case 2:this.r=c,this.b=d;break;case 3:this.r=c,this.g=u;break;case 4:this.r=d,this.g=c;break;default:this.g=c,this.b=u}}fromHsvString(e){const t=ci(e,ui);this.fromHsv({h:t[0],s:t[1],v:t[2],a:t[3]})}fromHslString(e){const t=ci(e,ui);this.fromHsl({h:t[0],s:t[1],l:t[2],a:t[3]})}fromRgbString(e){const t=ci(e,((e,t)=>t.includes("%")?li(e/100*255):e));this.r=t[0],this.g=t[1],this.b=t[2],this.a=t[3]}}var pi=[{index:7,amount:15},{index:6,amount:25},{index:5,amount:30},{index:5,amount:45},{index:5,amount:65},{index:5,amount:85},{index:4,amount:90},{index:3,amount:95},{index:2,amount:97},{index:1,amount:98}];function hi(e,t,n){var r;return(r=Math.round(e.h)>=60&&Math.round(e.h)<=240?n?Math.round(e.h)-2*t:Math.round(e.h)+2*t:n?Math.round(e.h)+2*t:Math.round(e.h)-2*t)<0?r+=360:r>=360&&(r-=360),r}function mi(e,t,n){return 0===e.h&&0===e.s?e.s:((r=n?e.s-.16*t:4===t?e.s+.16:e.s+.05*t)>1&&(r=1),n&&5===t&&r>.1&&(r=.1),r<.06&&(r=.06),Math.round(100*r)/100);var r}function vi(e,t,n){var r;return r=n?e.v+.05*t:e.v-.15*t,r=Math.max(0,Math.min(1,r)),Math.round(100*r)/100}function gi(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=new fi(e),o=r.toHsv(),a=5;a>0;a-=1){var i=new fi({h:hi(o,a,!0),s:mi(o,a,!0),v:vi(o,a,!0)});n.push(i)}n.push(r);for(var s=1;s<=4;s+=1){var l=new fi({h:hi(o,s),s:mi(o,s),v:vi(o,s)});n.push(l)}return"dark"===t.theme?pi.map((function(e){var r=e.index,o=e.amount;return new fi(t.backgroundColor||"#141414").mix(n[r],o).toHexString()})):n.map((function(e){return e.toHexString()}))}var yi={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1677FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},bi=["#fff1f0","#ffccc7","#ffa39e","#ff7875","#ff4d4f","#f5222d","#cf1322","#a8071a","#820014","#5c0011"];bi.primary=bi[5];var wi=["#fff2e8","#ffd8bf","#ffbb96","#ff9c6e","#ff7a45","#fa541c","#d4380d","#ad2102","#871400","#610b00"];wi.primary=wi[5];var xi=["#fff7e6","#ffe7ba","#ffd591","#ffc069","#ffa940","#fa8c16","#d46b08","#ad4e00","#873800","#612500"];xi.primary=xi[5];var ki=["#fffbe6","#fff1b8","#ffe58f","#ffd666","#ffc53d","#faad14","#d48806","#ad6800","#874d00","#613400"];ki.primary=ki[5];var Si=["#feffe6","#ffffb8","#fffb8f","#fff566","#ffec3d","#fadb14","#d4b106","#ad8b00","#876800","#614700"];Si.primary=Si[5];var Ei=["#fcffe6","#f4ffb8","#eaff8f","#d3f261","#bae637","#a0d911","#7cb305","#5b8c00","#3f6600","#254000"];Ei.primary=Ei[5];var Ci=["#f6ffed","#d9f7be","#b7eb8f","#95de64","#73d13d","#52c41a","#389e0d","#237804","#135200","#092b00"];Ci.primary=Ci[5];var Ni=["#e6fffb","#b5f5ec","#87e8de","#5cdbd3","#36cfc9","#13c2c2","#08979c","#006d75","#00474f","#002329"];Ni.primary=Ni[5];var ji=["#e6f4ff","#bae0ff","#91caff","#69b1ff","#4096ff","#1677ff","#0958d9","#003eb3","#002c8c","#001d66"];ji.primary=ji[5];var Di=["#f0f5ff","#d6e4ff","#adc6ff","#85a5ff","#597ef7","#2f54eb","#1d39c4","#10239e","#061178","#030852"];Di.primary=Di[5];var Pi=["#f9f0ff","#efdbff","#d3adf7","#b37feb","#9254de","#722ed1","#531dab","#391085","#22075e","#120338"];Pi.primary=Pi[5];var Ti=["#fff0f6","#ffd6e7","#ffadd2","#ff85c0","#f759ab","#eb2f96","#c41d7f","#9e1068","#780650","#520339"];Ti.primary=Ti[5];var _i=["#a6a6a6","#999999","#8c8c8c","#808080","#737373","#666666","#404040","#1a1a1a","#000000","#000000"];_i.primary=_i[5];var Oi={red:bi,volcano:wi,orange:xi,gold:ki,yellow:Si,lime:Ei,green:Ci,cyan:Ni,blue:ji,geekblue:Di,purple:Pi,magenta:Ti,grey:_i},Mi=["#2a1215","#431418","#58181c","#791a1f","#a61d24","#d32029","#e84749","#f37370","#f89f9a","#fac8c3"];Mi.primary=Mi[5];var Ri=["#2b1611","#441d12","#592716","#7c3118","#aa3e19","#d84a1b","#e87040","#f3956a","#f8b692","#fad4bc"];Ri.primary=Ri[5];var Ai=["#2b1d11","#442a11","#593815","#7c4a15","#aa6215","#d87a16","#e89a3c","#f3b765","#f8cf8d","#fae3b7"];Ai.primary=Ai[5];var Li=["#2b2111","#443111","#594214","#7c5914","#aa7714","#d89614","#e8b339","#f3cc62","#f8df8b","#faedb5"];Li.primary=Li[5];var Ii=["#2b2611","#443b11","#595014","#7c6e14","#aa9514","#d8bd14","#e8d639","#f3ea62","#f8f48b","#fafab5"];Ii.primary=Ii[5];var Fi=["#1f2611","#2e3c10","#3e4f13","#536d13","#6f9412","#8bbb11","#a9d134","#c9e75d","#e4f88b","#f0fab5"];Fi.primary=Fi[5];var zi=["#162312","#1d3712","#274916","#306317","#3c8618","#49aa19","#6abe39","#8fd460","#b2e58b","#d5f2bb"];zi.primary=zi[5];var Bi=["#112123","#113536","#144848","#146262","#138585","#13a8a8","#33bcb7","#58d1c9","#84e2d8","#b2f1e8"];Bi.primary=Bi[5];var Hi=["#111a2c","#112545","#15325b","#15417e","#1554ad","#1668dc","#3c89e8","#65a9f3","#8dc5f8","#b7dcfa"];Hi.primary=Hi[5];var Ui=["#131629","#161d40","#1c2755","#203175","#263ea0","#2b4acb","#5273e0","#7f9ef3","#a8c1f8","#d2e0fa"];Ui.primary=Ui[5];var Yi=["#1a1325","#24163a","#301c4d","#3e2069","#51258f","#642ab5","#854eca","#ab7ae0","#cda8f0","#ebd7fa"];Yi.primary=Yi[5];var Wi=["#291321","#40162f","#551c3b","#75204f","#a02669","#cb2b83","#e0529c","#f37fb7","#f8a8cc","#fad2e3"];Wi.primary=Wi[5];var qi=["#151515","#1f1f1f","#2d2d2d","#393939","#494949","#5a5a5a","#6a6a6a","#7b7b7b","#888888","#969696"];qi.primary=qi[5];const Vi={blue:"#1677FF",purple:"#722ED1",cyan:"#13C2C2",green:"#52C41A",magenta:"#EB2F96",pink:"#EB2F96",red:"#F5222D",orange:"#FA8C16",yellow:"#FADB14",volcano:"#FA541C",geekblue:"#2F54EB",gold:"#FAAD14",lime:"#A0D911"},Qi=Object.assign(Object.assign({},Vi),{colorPrimary:"#1677ff",colorSuccess:"#52c41a",colorWarning:"#faad14",colorError:"#ff4d4f",colorInfo:"#1677ff",colorLink:"",colorTextBase:"",colorBgBase:"",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n'Noto Color Emoji'",fontFamilyCode:"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace",fontSize:14,lineWidth:1,lineType:"solid",motionUnit:.1,motionBase:0,motionEaseOutCirc:"cubic-bezier(0.08, 0.82, 0.17, 1)",motionEaseInOutCirc:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",motionEaseOut:"cubic-bezier(0.215, 0.61, 0.355, 1)",motionEaseInOut:"cubic-bezier(0.645, 0.045, 0.355, 1)",motionEaseOutBack:"cubic-bezier(0.12, 0.4, 0.29, 1.46)",motionEaseInBack:"cubic-bezier(0.71, -0.46, 0.88, 0.6)",motionEaseInQuint:"cubic-bezier(0.755, 0.05, 0.855, 0.06)",motionEaseOutQuint:"cubic-bezier(0.23, 1, 0.32, 1)",borderRadius:6,sizeUnit:4,sizeStep:4,sizePopupArrow:16,controlHeight:32,zIndexBase:0,zIndexPopupBase:1e3,opacityImage:1,wireframe:!1,motion:!0});const Ki=e=>{let t=e,n=e,r=e,o=e;return e<6&&e>=5?t=e+1:e<16&&e>=6?t=e+2:e>=16&&(t=16),e<7&&e>=5?n=4:e<8&&e>=7?n=5:e<14&&e>=8?n=6:e<16&&e>=14?n=7:e>=16&&(n=8),e<6&&e>=2?r=1:e>=6&&(r=2),e>4&&e<8?o=4:e>=8&&(o=6),{borderRadius:e,borderRadiusXS:r,borderRadiusSM:n,borderRadiusLG:t,borderRadiusOuter:o}};const $i=e=>{const{controlHeight:t}=e;return{controlHeightSM:.75*t,controlHeightXS:.5*t,controlHeightLG:1.25*t}};const Gi=e=>{const t=function(e){const t=Array.from({length:10}).map(((t,n)=>{const r=n-1,o=e*Math.pow(Math.E,r/5),a=n>1?Math.floor(o):Math.ceil(o);return 2*Math.floor(a/2)}));return t[1]=e,t.map((e=>{return{size:e,lineHeight:(t=e,(t+8)/t)};var t}))}(e),n=t.map((e=>e.size)),r=t.map((e=>e.lineHeight)),o=n[1],a=n[0],i=n[2],s=r[1],l=r[0],c=r[2];return{fontSizeSM:a,fontSize:o,fontSizeLG:i,fontSizeXL:n[3],fontSizeHeading1:n[6],fontSizeHeading2:n[5],fontSizeHeading3:n[4],fontSizeHeading4:n[3],fontSizeHeading5:n[2],lineHeight:s,lineHeightLG:c,lineHeightSM:l,fontHeight:Math.round(s*o),fontHeightLG:Math.round(c*i),fontHeightSM:Math.round(l*a),lineHeightHeading1:r[6],lineHeightHeading2:r[5],lineHeightHeading3:r[4],lineHeightHeading4:r[3],lineHeightHeading5:r[2]}};const Xi=(e,t)=>new fi(e).setA(t).toRgbString(),Ji=(e,t)=>new fi(e).darken(t).toHexString(),Zi=e=>{const t=gi(e);return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[4],6:t[5],7:t[6],8:t[4],9:t[5],10:t[6]}},es=(e,t)=>{const n=e||"#fff",r=t||"#000";return{colorBgBase:n,colorTextBase:r,colorText:Xi(r,.88),colorTextSecondary:Xi(r,.65),colorTextTertiary:Xi(r,.45),colorTextQuaternary:Xi(r,.25),colorFill:Xi(r,.15),colorFillSecondary:Xi(r,.06),colorFillTertiary:Xi(r,.04),colorFillQuaternary:Xi(r,.02),colorBgSolid:Xi(r,1),colorBgSolidHover:Xi(r,.75),colorBgSolidActive:Xi(r,.95),colorBgLayout:Ji(n,4),colorBgContainer:Ji(n,0),colorBgElevated:Ji(n,0),colorBgSpotlight:Xi(r,.85),colorBgBlur:"transparent",colorBorder:Ji(n,15),colorBorderSecondary:Ji(n,6)}};const ts=so((function(e){yi.pink=yi.magenta,Oi.pink=Oi.magenta;const t=Object.keys(Vi).map((t=>{const n=e[t]===yi[t]?Oi[t]:gi(e[t]);return Array.from({length:10},(()=>1)).reduce(((e,r,o)=>(e["".concat(t,"-").concat(o+1)]=n[o],e["".concat(t).concat(o+1)]=n[o],e)),{})})).reduce(((e,t)=>e=Object.assign(Object.assign({},e),t)),{});return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},e),t),function(e,t){let{generateColorPalettes:n,generateNeutralColorPalettes:r}=t;const{colorSuccess:o,colorWarning:a,colorError:i,colorInfo:s,colorPrimary:l,colorBgBase:c,colorTextBase:u}=e,d=n(l),f=n(o),p=n(a),h=n(i),m=n(s),v=r(c,u),g=n(e.colorLink||e.colorInfo),y=new fi(h[1]).mix(new fi(h[3]),50).toHexString();return Object.assign(Object.assign({},v),{colorPrimaryBg:d[1],colorPrimaryBgHover:d[2],colorPrimaryBorder:d[3],colorPrimaryBorderHover:d[4],colorPrimaryHover:d[5],colorPrimary:d[6],colorPrimaryActive:d[7],colorPrimaryTextHover:d[8],colorPrimaryText:d[9],colorPrimaryTextActive:d[10],colorSuccessBg:f[1],colorSuccessBgHover:f[2],colorSuccessBorder:f[3],colorSuccessBorderHover:f[4],colorSuccessHover:f[4],colorSuccess:f[6],colorSuccessActive:f[7],colorSuccessTextHover:f[8],colorSuccessText:f[9],colorSuccessTextActive:f[10],colorErrorBg:h[1],colorErrorBgHover:h[2],colorErrorBgFilledHover:y,colorErrorBgActive:h[3],colorErrorBorder:h[3],colorErrorBorderHover:h[4],colorErrorHover:h[5],colorError:h[6],colorErrorActive:h[7],colorErrorTextHover:h[8],colorErrorText:h[9],colorErrorTextActive:h[10],colorWarningBg:p[1],colorWarningBgHover:p[2],colorWarningBorder:p[3],colorWarningBorderHover:p[4],colorWarningHover:p[4],colorWarning:p[6],colorWarningActive:p[7],colorWarningTextHover:p[8],colorWarningText:p[9],colorWarningTextActive:p[10],colorInfoBg:m[1],colorInfoBgHover:m[2],colorInfoBorder:m[3],colorInfoBorderHover:m[4],colorInfoHover:m[4],colorInfo:m[6],colorInfoActive:m[7],colorInfoTextHover:m[8],colorInfoText:m[9],colorInfoTextActive:m[10],colorLinkHover:g[4],colorLink:g[6],colorLinkActive:g[7],colorBgMask:new fi("#000").setA(.45).toRgbString(),colorWhite:"#fff"})}(e,{generateColorPalettes:Zi,generateNeutralColorPalettes:es})),Gi(e.fontSize)),function(e){const{sizeUnit:t,sizeStep:n}=e;return{sizeXXL:t*(n+8),sizeXL:t*(n+4),sizeLG:t*(n+2),sizeMD:t*(n+1),sizeMS:t*n,size:t*n,sizeSM:t*(n-1),sizeXS:t*(n-2),sizeXXS:t*(n-3)}}(e)),$i(e)),function(e){const{motionUnit:t,motionBase:n,borderRadius:r,lineWidth:o}=e;return Object.assign({motionDurationFast:"".concat((n+t).toFixed(1),"s"),motionDurationMid:"".concat((n+2*t).toFixed(1),"s"),motionDurationSlow:"".concat((n+3*t).toFixed(1),"s"),lineWidthBold:o+1},Ki(r))}(e))})),ns=ts,rs={token:Qi,override:{override:Qi},hashed:!0},os=r.createContext(rs),as="-ant-".concat(Date.now(),"-").concat(Math.random());function is(e,t){const n=function(e,t){const n={},r=(e,t)=>{let n=e.clone();return n=(null===t||void 0===t?void 0:t(n))||n,n.toRgbString()},o=(e,t)=>{const o=new fi(e),a=gi(o.toRgbString());n["".concat(t,"-color")]=r(o),n["".concat(t,"-color-disabled")]=a[1],n["".concat(t,"-color-hover")]=a[4],n["".concat(t,"-color-active")]=a[6],n["".concat(t,"-color-outline")]=o.clone().setA(.2).toRgbString(),n["".concat(t,"-color-deprecated-bg")]=a[0],n["".concat(t,"-color-deprecated-border")]=a[2]};if(t.primaryColor){o(t.primaryColor,"primary");const e=new fi(t.primaryColor),a=gi(e.toRgbString());a.forEach(((e,t)=>{n["primary-".concat(t+1)]=e})),n["primary-color-deprecated-l-35"]=r(e,(e=>e.lighten(35))),n["primary-color-deprecated-l-20"]=r(e,(e=>e.lighten(20))),n["primary-color-deprecated-t-20"]=r(e,(e=>e.tint(20))),n["primary-color-deprecated-t-50"]=r(e,(e=>e.tint(50))),n["primary-color-deprecated-f-12"]=r(e,(e=>e.setA(.12*e.a)));const i=new fi(a[0]);n["primary-color-active-deprecated-f-30"]=r(i,(e=>e.setA(.3*e.a))),n["primary-color-active-deprecated-d-02"]=r(i,(e=>e.darken(2)))}t.successColor&&o(t.successColor,"success"),t.warningColor&&o(t.warningColor,"warning"),t.errorColor&&o(t.errorColor,"error"),t.infoColor&&o(t.infoColor,"info");const a=Object.keys(n).map((t=>"--".concat(e,"-").concat(t,": ").concat(n[t],";")));return"\n  :root {\n    ".concat(a.join("\n"),"\n  }\n  ").trim()}(e,t);Er()&&Rr(n,"".concat(as,"-dynamic-theme"))}const ss=r.createContext(!1),ls=e=>{let{children:t,disabled:n}=e;const o=r.useContext(ss);return r.createElement(ss.Provider,{value:null!==n&&void 0!==n?n:o},t)},cs=ss,us=r.createContext(void 0),ds=e=>{let{children:t,size:n}=e;const o=r.useContext(us);return r.createElement(us.Provider,{value:n||o},t)},fs=us;const ps=function(){return{componentDisabled:(0,r.useContext)(cs),componentSize:(0,r.useContext)(fs)}},hs=Object.assign({},o),{useId:ms}=hs,vs="undefined"===typeof ms?()=>"":ms;var gs=n(97),ys=n.n(gs);function bs(e){return e instanceof HTMLElement||e instanceof SVGElement}function ws(e){var t,n=function(e){return e&&"object"===je(e)&&bs(e.nativeElement)?e.nativeElement:bs(e)?e:null}(e);return n||(e instanceof r.Component?null===(t=i.findDOMNode)||void 0===t?void 0:t.call(i,e):null)}var xs=n(808),ks=Symbol.for("react.element"),Ss=Symbol.for("react.transitional.element"),Es=Symbol.for("react.fragment");var Cs=Number(r.version.split(".")[0]),Ns=function(e,t){"function"===typeof e?e(t):"object"===je(e)&&e&&"current"in e&&(e.current=t)},js=function(e){var t,n;if(!e)return!1;if(Ds(e)&&Cs>=19)return!0;var r=(0,xs.isMemo)(e)?e.type.type:e.type;return!!("function"!==typeof r||null!==(t=r.prototype)&&void 0!==t&&t.render||r.$$typeof===xs.ForwardRef)&&!!("function"!==typeof e||null!==(n=e.prototype)&&void 0!==n&&n.render||e.$$typeof===xs.ForwardRef)};function Ds(e){return(0,r.isValidElement)(e)&&!((t=e)&&"object"===je(t)&&(t.$$typeof===ks||t.$$typeof===Ss)&&t.type===Es);var t}function Ps(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ts=["children"],_s=r.createContext({});function Os(e){var t=e.children,n=Ps(e,Ts);return r.createElement(_s.Provider,{value:n},t)}function Ms(e,t){return Ms=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ms(e,t)}function Rs(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ms(e,t)}function As(e){return As=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},As(e)}function Ls(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ls=function(){return!!e})()}function Is(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Fs(e){var t=Ls();return function(){var n,r=As(e);if(t){var o=As(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return function(e,t){if(t&&("object"==je(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return Is(e)}(this,n)}}const zs=function(e){Rs(n,e);var t=Fs(n);function n(){return Wr(this,n),t.apply(this,arguments)}return Vr(n,[{key:"render",value:function(){return this.props.children}}]),n}(r.Component);function Bs(e){var t=r.useRef();t.current=e;var n=r.useCallback((function(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return null===(e=t.current)||void 0===e?void 0:e.call.apply(e,[t].concat(r))}),[]);return n}function Hs(e){var t=r.useRef(!1),n=kr(r.useState(e),2),o=n[0],a=n[1];return r.useEffect((function(){return t.current=!1,function(){t.current=!0}}),[]),[o,function(e,n){n&&t.current||a(e)}]}var Us="none",Ys="appear",Ws="enter",qs="leave",Vs="none",Qs="prepare",Ks="start",$s="active",Gs="end",Xs="prepared";function Js(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit".concat(e)]="webkit".concat(t),n["Moz".concat(e)]="moz".concat(t),n["ms".concat(e)]="MS".concat(t),n["O".concat(e)]="o".concat(t.toLowerCase()),n}var Zs=function(e,t){var n={animationend:Js("Animation","AnimationEnd"),transitionend:Js("Transition","TransitionEnd")};return e&&("AnimationEvent"in t||delete n.animationend.animation,"TransitionEvent"in t||delete n.transitionend.transition),n}(Er(),"undefined"!==typeof window?window:{}),el={};if(Er()){var tl=document.createElement("div");el=tl.style}var nl={};function rl(e){if(nl[e])return nl[e];var t=Zs[e];if(t)for(var n=Object.keys(t),r=n.length,o=0;o<r;o+=1){var a=n[o];if(Object.prototype.hasOwnProperty.call(t,a)&&a in el)return nl[e]=t[a],nl[e]}return""}var ol=rl("animationend"),al=rl("transitionend"),il=!(!ol||!al),sl=ol||"animationend",ll=al||"transitionend";function cl(e,t){if(!e)return null;if("object"===je(e)){var n=t.replace(/-\w/g,(function(e){return e[1].toUpperCase()}));return e[n]}return"".concat(e,"-").concat(t)}const ul=Er()?r.useLayoutEffect:r.useEffect;var dl=function(e){return+setTimeout(e,16)},fl=function(e){return clearTimeout(e)};"undefined"!==typeof window&&"requestAnimationFrame"in window&&(dl=function(e){return window.requestAnimationFrame(e)},fl=function(e){return window.cancelAnimationFrame(e)});var pl=0,hl=new Map;function ml(e){hl.delete(e)}var vl=function(e){var t=pl+=1;return function n(r){if(0===r)ml(t),e();else{var o=dl((function(){n(r-1)}));hl.set(t,o)}}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:1),t};vl.cancel=function(e){var t=hl.get(e);return ml(e),fl(t)};const gl=vl;var yl=[Qs,Ks,$s,Gs],bl=[Qs,Xs],wl=!1;function xl(e){return e===$s||e===Gs}const kl=function(e,t,n){var o=kr(Hs(Vs),2),a=o[0],i=o[1],s=function(){var e=r.useRef(null);function t(){gl.cancel(e.current)}return r.useEffect((function(){return function(){t()}}),[]),[function n(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;t();var a=gl((function(){o<=1?r({isCanceled:function(){return a!==e.current}}):n(r,o-1)}));e.current=a},t]}(),l=kr(s,2),c=l[0],u=l[1];var d=t?bl:yl;return ul((function(){if(a!==Vs&&a!==Gs){var e=d.indexOf(a),t=d[e+1],r=n(a);r===wl?i(t,!0):t&&c((function(e){function n(){e.isCanceled()||i(t,!0)}!0===r?n():Promise.resolve(r).then(n)}))}}),[e,a]),r.useEffect((function(){return function(){u()}}),[]),[function(){i(Qs,!0)},a]};function Sl(e,t,n,o){var a=o.motionEnter,i=void 0===a||a,s=o.motionAppear,l=void 0===s||s,c=o.motionLeave,u=void 0===c||c,d=o.motionDeadline,f=o.motionLeaveImmediately,p=o.onAppearPrepare,h=o.onEnterPrepare,m=o.onLeavePrepare,v=o.onAppearStart,g=o.onEnterStart,y=o.onLeaveStart,b=o.onAppearActive,w=o.onEnterActive,x=o.onLeaveActive,k=o.onAppearEnd,S=o.onEnterEnd,E=o.onLeaveEnd,C=o.onVisibleChanged,N=kr(Hs(),2),j=N[0],D=N[1],P=function(e){var t=kr(r.useReducer((function(e){return e+1}),0),2)[1],n=r.useRef(e);return[Bs((function(){return n.current})),Bs((function(e){n.current="function"===typeof e?e(n.current):e,t()}))]}(Us),T=kr(P,2),_=T[0],O=T[1],M=kr(Hs(null),2),R=M[0],A=M[1],L=_(),I=(0,r.useRef)(!1),F=(0,r.useRef)(null);function z(){return n()}var B=(0,r.useRef)(!1);function H(){O(Us),A(null,!0)}var U=Bs((function(e){var t=_();if(t!==Us){var n=z();if(!e||e.deadline||e.target===n){var r,o=B.current;t===Ys&&o?r=null===k||void 0===k?void 0:k(n,e):t===Ws&&o?r=null===S||void 0===S?void 0:S(n,e):t===qs&&o&&(r=null===E||void 0===E?void 0:E(n,e)),o&&!1!==r&&H()}}})),Y=function(e){var t=(0,r.useRef)();function n(t){t&&(t.removeEventListener(ll,e),t.removeEventListener(sl,e))}return r.useEffect((function(){return function(){n(t.current)}}),[]),[function(r){t.current&&t.current!==r&&n(t.current),r&&r!==t.current&&(r.addEventListener(ll,e),r.addEventListener(sl,e),t.current=r)},n]}(U),W=kr(Y,1)[0],q=function(e){switch(e){case Ys:return Pe(Pe(Pe({},Qs,p),Ks,v),$s,b);case Ws:return Pe(Pe(Pe({},Qs,h),Ks,g),$s,w);case qs:return Pe(Pe(Pe({},Qs,m),Ks,y),$s,x);default:return{}}},V=r.useMemo((function(){return q(L)}),[L]),Q=kr(kl(L,!e,(function(e){if(e===Qs){var t=V[Qs];return t?t(z()):wl}var n;$ in V&&A((null===(n=V[$])||void 0===n?void 0:n.call(V,z(),null))||null);return $===$s&&L!==Us&&(W(z()),d>0&&(clearTimeout(F.current),F.current=setTimeout((function(){U({deadline:!0})}),d))),$===Xs&&H(),true})),2),K=Q[0],$=Q[1],G=xl($);B.current=G;var X=(0,r.useRef)(null);ul((function(){if(!I.current||X.current!==t){D(t);var n,r=I.current;I.current=!0,!r&&t&&l&&(n=Ys),r&&t&&i&&(n=Ws),(r&&!t&&u||!r&&f&&!t&&u)&&(n=qs);var o=q(n);n&&(e||o[Qs])?(O(n),K()):O(Us),X.current=t}}),[t]),(0,r.useEffect)((function(){(L===Ys&&!l||L===Ws&&!i||L===qs&&!u)&&O(Us)}),[l,i,u]),(0,r.useEffect)((function(){return function(){I.current=!1,clearTimeout(F.current)}}),[]);var J=r.useRef(!1);(0,r.useEffect)((function(){j&&(J.current=!0),void 0!==j&&L===Us&&((J.current||j)&&(null===C||void 0===C||C(j)),J.current=!0)}),[j,L]);var Z=R;return V[Qs]&&$===Ks&&(Z=_e({transition:"none"},Z)),[L,$,Z,null!==j&&void 0!==j?j:t]}const El=function(e){var t=e;"object"===je(e)&&(t=e.transitionSupport);var n=r.forwardRef((function(e,n){var o=e.visible,a=void 0===o||o,i=e.removeOnLeave,s=void 0===i||i,l=e.forceRender,c=e.children,u=e.motionName,d=e.leavedClassName,f=e.eventProps,p=function(e,n){return!(!e.motionName||!t||!1===n)}(e,r.useContext(_s).motion),h=(0,r.useRef)(),m=(0,r.useRef)();var v=kr(Sl(p,a,(function(){try{return h.current instanceof HTMLElement?h.current:ws(m.current)}catch(Dy){return null}}),e),4),g=v[0],y=v[1],b=v[2],w=v[3],x=r.useRef(w);w&&(x.current=!0);var k,S=r.useCallback((function(e){h.current=e,Ns(n,e)}),[n]),E=_e(_e({},f),{},{visible:a});if(c)if(g===Us)k=w?c(_e({},E),S):!s&&x.current&&d?c(_e(_e({},E),{},{className:d}),S):l||!s&&!d?c(_e(_e({},E),{},{style:{display:"none"}}),S):null;else{var C;y===Qs?C="prepare":xl(y)?C="active":y===Ks&&(C="start");var N=cl(u,"".concat(g,"-").concat(C));k=c(_e(_e({},E),{},{className:ys()(cl(u,g),Pe(Pe({},N,N&&C),u,"string"===typeof u)),style:b}),S)}else k=null;if(r.isValidElement(k)&&js(k)){var j=function(e){if(e&&Ds(e)){var t=e;return t.props.propertyIsEnumerable("ref")?t.props.ref:t.ref}return null}(k);j||(k=r.cloneElement(k,{ref:S}))}return r.createElement(zs,{ref:m},k)}));return n.displayName="CSSMotion",n}(il);var Cl="add",Nl="keep",jl="remove",Dl="removed";function Pl(e){var t;return _e(_e({},t=e&&"object"===je(e)&&"key"in e?e:{key:e}),{},{key:String(t.key)})}function Tl(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(Pl)}var _l=["component","children","onVisibleChanged","onAllRemoved"],Ol=["status"],Ml=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearPrepare","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"];const Rl=function(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:El,t=function(t){Rs(o,t);var n=Fs(o);function o(){var e;Wr(this,o);for(var t=arguments.length,r=new Array(t),a=0;a<t;a++)r[a]=arguments[a];return Pe(Is(e=n.call.apply(n,[this].concat(r))),"state",{keyEntities:[]}),Pe(Is(e),"removeKey",(function(t){e.setState((function(e){return{keyEntities:e.keyEntities.map((function(e){return e.key!==t?e:_e(_e({},e),{},{status:Dl})}))}}),(function(){0===e.state.keyEntities.filter((function(e){return e.status!==Dl})).length&&e.props.onAllRemoved&&e.props.onAllRemoved()}))})),e}return Vr(o,[{key:"render",value:function(){var t=this,n=this.state.keyEntities,o=this.props,a=o.component,i=o.children,s=o.onVisibleChanged,l=(o.onAllRemoved,Ps(o,_l)),c=a||r.Fragment,u={};return Ml.forEach((function(e){u[e]=l[e],delete l[e]})),delete l.keys,r.createElement(c,l,n.map((function(n,o){var a=n.status,l=Ps(n,Ol),c=a===Cl||a===Nl;return r.createElement(e,Mo({},u,{key:l.key,visible:c,eventProps:l,onVisibleChanged:function(e){null===s||void 0===s||s(e,{key:l.key}),e||t.removeKey(l.key)}}),(function(e,t){return i(_e(_e({},e),{},{index:o}),t)}))})))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.keys,r=t.keyEntities,o=Tl(n),a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=[],r=0,o=t.length,a=Tl(e),i=Tl(t);a.forEach((function(e){for(var t=!1,a=r;a<o;a+=1){var s=i[a];if(s.key===e.key){r<a&&(n=n.concat(i.slice(r,a).map((function(e){return _e(_e({},e),{},{status:Cl})}))),r=a),n.push(_e(_e({},s),{},{status:Nl})),r+=1,t=!0;break}}t||n.push(_e(_e({},e),{},{status:jl}))})),r<o&&(n=n.concat(i.slice(r).map((function(e){return _e(_e({},e),{},{status:Cl})}))));var s={};return n.forEach((function(e){var t=e.key;s[t]=(s[t]||0)+1})),Object.keys(s).filter((function(e){return s[e]>1})).forEach((function(e){(n=n.filter((function(t){var n=t.key,r=t.status;return n!==e||r!==jl}))).forEach((function(t){t.key===e&&(t.status=Nl)}))})),n}(r,o);return{keyEntities:a.filter((function(e){var t=r.find((function(t){var n=t.key;return e.key===n}));return!t||t.status!==Dl||e.status!==jl}))}}}]),o}(r.Component);return Pe(t,"defaultProps",{component:"div"}),t}(il);function Al(e){return e>=0&&e<=255}const Ll=function(e,t){const{r:n,g:r,b:o,a:a}=new fi(e).toRgb();if(a<1)return e;const{r:i,g:s,b:l}=new fi(t).toRgb();for(let c=.01;c<=1;c+=.01){const e=Math.round((n-i*(1-c))/c),t=Math.round((r-s*(1-c))/c),a=Math.round((o-l*(1-c))/c);if(Al(e)&&Al(t)&&Al(a))return new fi({r:e,g:t,b:a,a:Math.round(100*c)/100}).toRgbString()}return new fi({r:n,g:r,b:o,a:1}).toRgbString()};var Il=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};function Fl(e){const{override:t}=e,n=Il(e,["override"]),r=Object.assign({},t);Object.keys(Qi).forEach((e=>{delete r[e]}));const o=Object.assign(Object.assign({},n),r),a=1200,i=1600;if(!1===o.motion){const e="0s";o.motionDurationFast=e,o.motionDurationMid=e,o.motionDurationSlow=e}return Object.assign(Object.assign(Object.assign({},o),{colorFillContent:o.colorFillSecondary,colorFillContentHover:o.colorFill,colorFillAlter:o.colorFillQuaternary,colorBgContainerDisabled:o.colorFillTertiary,colorBorderBg:o.colorBgContainer,colorSplit:Ll(o.colorBorderSecondary,o.colorBgContainer),colorTextPlaceholder:o.colorTextQuaternary,colorTextDisabled:o.colorTextQuaternary,colorTextHeading:o.colorText,colorTextLabel:o.colorTextSecondary,colorTextDescription:o.colorTextTertiary,colorTextLightSolid:o.colorWhite,colorHighlight:o.colorError,colorBgTextHover:o.colorFillSecondary,colorBgTextActive:o.colorFill,colorIcon:o.colorTextTertiary,colorIconHover:o.colorText,colorErrorOutline:Ll(o.colorErrorBg,o.colorBgContainer),colorWarningOutline:Ll(o.colorWarningBg,o.colorBgContainer),fontSizeIcon:o.fontSizeSM,lineWidthFocus:3*o.lineWidth,lineWidth:o.lineWidth,controlOutlineWidth:2*o.lineWidth,controlInteractiveSize:o.controlHeight/2,controlItemBgHover:o.colorFillTertiary,controlItemBgActive:o.colorPrimaryBg,controlItemBgActiveHover:o.colorPrimaryBgHover,controlItemBgActiveDisabled:o.colorFill,controlTmpOutline:o.colorFillQuaternary,controlOutline:Ll(o.colorPrimaryBg,o.colorBgContainer),lineType:o.lineType,borderRadius:o.borderRadius,borderRadiusXS:o.borderRadiusXS,borderRadiusSM:o.borderRadiusSM,borderRadiusLG:o.borderRadiusLG,fontWeightStrong:600,opacityLoading:.65,linkDecoration:"none",linkHoverDecoration:"none",linkFocusDecoration:"none",controlPaddingHorizontal:12,controlPaddingHorizontalSM:8,paddingXXS:o.sizeXXS,paddingXS:o.sizeXS,paddingSM:o.sizeSM,padding:o.size,paddingMD:o.sizeMD,paddingLG:o.sizeLG,paddingXL:o.sizeXL,paddingContentHorizontalLG:o.sizeLG,paddingContentVerticalLG:o.sizeMS,paddingContentHorizontal:o.sizeMS,paddingContentVertical:o.sizeSM,paddingContentHorizontalSM:o.size,paddingContentVerticalSM:o.sizeXS,marginXXS:o.sizeXXS,marginXS:o.sizeXS,marginSM:o.sizeSM,margin:o.size,marginMD:o.sizeMD,marginLG:o.sizeLG,marginXL:o.sizeXL,marginXXL:o.sizeXXL,boxShadow:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowSecondary:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowTertiary:"\n      0 1px 2px 0 rgba(0, 0, 0, 0.03),\n      0 1px 6px -1px rgba(0, 0, 0, 0.02),\n      0 2px 4px 0 rgba(0, 0, 0, 0.02)\n    ",screenXS:480,screenXSMin:480,screenXSMax:575,screenSM:576,screenSMMin:576,screenSMMax:767,screenMD:768,screenMDMin:768,screenMDMax:991,screenLG:992,screenLGMin:992,screenLGMax:1199,screenXL:a,screenXLMin:a,screenXLMax:1599,screenXXL:i,screenXXLMin:i,boxShadowPopoverArrow:"2px 2px 5px rgba(0, 0, 0, 0.05)",boxShadowCard:"\n      0 1px 2px -2px ".concat(new fi("rgba(0, 0, 0, 0.16)").toRgbString(),",\n      0 3px 6px 0 ").concat(new fi("rgba(0, 0, 0, 0.12)").toRgbString(),",\n      0 5px 12px 4px ").concat(new fi("rgba(0, 0, 0, 0.09)").toRgbString(),"\n    "),boxShadowDrawerRight:"\n      -6px 0 16px 0 rgba(0, 0, 0, 0.08),\n      -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n      -9px 0 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerLeft:"\n      6px 0 16px 0 rgba(0, 0, 0, 0.08),\n      3px 0 6px -4px rgba(0, 0, 0, 0.12),\n      9px 0 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerUp:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerDown:"\n      0 -6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 -3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 -9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowTabsOverflowLeft:"inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowRight:"inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowTop:"inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowBottom:"inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)"}),r)}var zl=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Bl={lineHeight:!0,lineHeightSM:!0,lineHeightLG:!0,lineHeightHeading1:!0,lineHeightHeading2:!0,lineHeightHeading3:!0,lineHeightHeading4:!0,lineHeightHeading5:!0,opacityLoading:!0,fontWeightStrong:!0,zIndexPopupBase:!0,zIndexBase:!0,opacityImage:!0},Hl={size:!0,sizeSM:!0,sizeLG:!0,sizeMD:!0,sizeXS:!0,sizeXXS:!0,sizeMS:!0,sizeXL:!0,sizeXXL:!0,sizeUnit:!0,sizeStep:!0,motionBase:!0,motionUnit:!0},Ul={screenXS:!0,screenXSMin:!0,screenXSMax:!0,screenSM:!0,screenSMMin:!0,screenSMMax:!0,screenMD:!0,screenMDMin:!0,screenMDMax:!0,screenLG:!0,screenLGMin:!0,screenLGMax:!0,screenXL:!0,screenXLMin:!0,screenXLMax:!0,screenXXL:!0,screenXXLMin:!0},Yl=(e,t,n)=>{const r=n.getDerivativeToken(e),{override:o}=t,a=zl(t,["override"]);let i=Object.assign(Object.assign({},r),{override:o});return i=Fl(i),a&&Object.entries(a).forEach((e=>{let[t,n]=e;const{theme:r}=n,o=zl(n,["theme"]);let a=o;r&&(a=Yl(Object.assign(Object.assign({},i),o),{override:o},r)),i[t]=a})),i};function Wl(){const{token:e,hashed:t,theme:n,override:o,cssVar:a}=r.useContext(os),i="".concat("5.25.4","-").concat(t||""),s=n||ns,[l,c,u]=Oo(s,[Qi,e],{salt:i,override:o,getComputedToken:Yl,formatToken:Fl,cssVar:a&&{prefix:a.prefix,key:a.key,unitless:Bl,ignore:Hl,preserve:Ul}});return[s,u,t?c:"",l,a]}function ql(e){const{children:t}=e,[,n]=Wl(),{motion:o}=n,a=r.useRef(!1);return a.current=a.current||!1===o,a.current?r.createElement(Os,{motion:o},t):t}const Vl=()=>null,Ql=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{boxSizing:"border-box",margin:0,padding:0,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight,listStyle:"none",fontFamily:t?"inherit":e.fontFamily}},Kl=e=>({[".".concat(e)]:Object.assign(Object.assign({},{display:"inline-flex",alignItems:"center",color:"inherit",fontStyle:"normal",lineHeight:0,textAlign:"center",textTransform:"none",verticalAlign:"-0.125em",textRendering:"optimizeLegibility","-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale","> *":{lineHeight:1},svg:{display:"inline-block"}}),{[".".concat(e," .").concat(e,"-icon")]:{display:"block"}})}),$l=(e,t)=>{const[n,r]=Wl();return Ma({theme:n,token:r,hashId:"",path:["ant-design-icons",e],nonce:()=>null===t||void 0===t?void 0:t.nonce,layer:{name:"antd"}},(()=>[Kl(e)]))};var Gl=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Xl=["getTargetContainer","getPopupContainer","renderEmpty","input","pagination","form","select","button"];let Jl,Zl,ec,tc;function nc(){return Jl||vr}function rc(){return Zl||gr}const oc=()=>({getPrefixCls:(e,t)=>t||(e?"".concat(nc(),"-").concat(e):nc()),getIconPrefixCls:rc,getRootPrefixCls:()=>Jl||nc(),getTheme:()=>ec,holderRender:tc}),ac=e=>{const{children:t,csp:n,autoInsertSpaceInButton:o,alert:a,anchor:i,form:s,locale:l,componentSize:c,direction:u,space:d,splitter:f,virtual:p,dropdownMatchSelectWidth:h,popupMatchSelectWidth:m,popupOverflow:v,legacyLocale:g,parentContext:y,iconPrefixCls:b,theme:w,componentDisabled:x,segmented:k,statistic:S,spin:E,calendar:C,carousel:N,cascader:j,collapse:D,typography:P,checkbox:T,descriptions:_,divider:O,drawer:M,skeleton:R,steps:A,image:L,layout:I,list:F,mentions:z,modal:B,progress:H,result:U,slider:Y,breadcrumb:W,menu:q,pagination:V,input:Q,textArea:K,empty:$,badge:G,radio:X,rate:J,switch:Z,transfer:ee,avatar:te,message:ne,tag:re,table:oe,card:ae,tabs:ie,timeline:se,timePicker:le,upload:ce,notification:ue,tree:de,colorPicker:fe,datePicker:pe,rangePicker:he,flex:me,wave:ve,dropdown:ge,warning:ye,tour:be,tooltip:we,popover:xe,popconfirm:ke,floatButtonGroup:Se,variant:Ee,inputNumber:Ce,treeSelect:Ne}=e,je=r.useCallback(((t,n)=>{const{prefixCls:r}=e;if(n)return n;const o=r||y.getPrefixCls("");return t?"".concat(o,"-").concat(t):o}),[y.getPrefixCls,e.prefixCls]),De=b||y.iconPrefixCls||gr,Pe=n||y.csp;$l(De,Pe);const Te=function(e,t,n){var r;$a("ConfigProvider");const o=e||{},a=!1!==o.inherit&&t?t:Object.assign(Object.assign({},rs),{hashed:null!==(r=null===t||void 0===t?void 0:t.hashed)&&void 0!==r?r:rs.hashed,cssVar:null===t||void 0===t?void 0:t.cssVar}),i=vs();return Ar((()=>{var r,s;if(!e)return t;const l=Object.assign({},a.components);Object.keys(e.components||{}).forEach((t=>{l[t]=Object.assign(Object.assign({},l[t]),e.components[t])}));const c="css-var-".concat(i.replace(/:/g,"")),u=(null!==(r=o.cssVar)&&void 0!==r?r:a.cssVar)&&Object.assign(Object.assign(Object.assign({prefix:null===n||void 0===n?void 0:n.prefixCls},"object"===typeof a.cssVar?a.cssVar:{}),"object"===typeof o.cssVar?o.cssVar:{}),{key:"object"===typeof o.cssVar&&(null===(s=o.cssVar)||void 0===s?void 0:s.key)||c});return Object.assign(Object.assign(Object.assign({},a),o),{token:Object.assign(Object.assign({},a.token),o.token),components:l,cssVar:u})}),[o,a],((e,t)=>e.some(((e,n)=>{const r=t[n];return!Yr(e,r,!0)}))))}(w,y.theme,{prefixCls:je("")});const _e={csp:Pe,autoInsertSpaceInButton:o,alert:a,anchor:i,locale:l||g,direction:u,space:d,splitter:f,virtual:p,popupMatchSelectWidth:null!==m&&void 0!==m?m:h,popupOverflow:v,getPrefixCls:je,iconPrefixCls:De,theme:Te,segmented:k,statistic:S,spin:E,calendar:C,carousel:N,cascader:j,collapse:D,typography:P,checkbox:T,descriptions:_,divider:O,drawer:M,skeleton:R,steps:A,image:L,input:Q,textArea:K,layout:I,list:F,mentions:z,modal:B,progress:H,result:U,slider:Y,breadcrumb:W,menu:q,pagination:V,empty:$,badge:G,radio:X,rate:J,switch:Z,transfer:ee,avatar:te,message:ne,tag:re,table:oe,card:ae,tabs:ie,timeline:se,timePicker:le,upload:ce,notification:ue,tree:de,colorPicker:fe,datePicker:pe,rangePicker:he,flex:me,wave:ve,dropdown:ge,warning:ye,tour:be,tooltip:we,popover:xe,popconfirm:ke,floatButtonGroup:Se,variant:Ee,inputNumber:Ce,treeSelect:Ne};const Oe=Object.assign({},y);Object.keys(_e).forEach((e=>{void 0!==_e[e]&&(Oe[e]=_e[e])})),Xl.forEach((t=>{const n=e[t];n&&(Oe[t]=n)})),"undefined"!==typeof o&&(Oe.button=Object.assign({autoInsertSpace:o},Oe.button));const Me=Ar((()=>Oe),Oe,((e,t)=>{const n=Object.keys(e),r=Object.keys(t);return n.length!==r.length||n.some((n=>e[n]!==t[n]))})),{layer:Re}=r.useContext(to),Ae=r.useMemo((()=>({prefixCls:De,csp:Pe,layer:Re?"antd":void 0})),[De,Pe,Re]);let Le=r.createElement(r.Fragment,null,r.createElement(Vl,{dropdownMatchSelectWidth:h}),t);const Ie=r.useMemo((()=>{var e,t,n,r;return Va((null===(e=ni.Form)||void 0===e?void 0:e.defaultValidateMessages)||{},(null===(n=null===(t=Me.locale)||void 0===t?void 0:t.Form)||void 0===n?void 0:n.defaultValidateMessages)||{},(null===(r=Me.form)||void 0===r?void 0:r.validateMessages)||{},(null===s||void 0===s?void 0:s.validateMessages)||{})}),[Me,null===s||void 0===s?void 0:s.validateMessages]);Object.keys(Ie).length>0&&(Le=r.createElement(Ga.Provider,{value:Ie},Le)),l&&(Le=r.createElement(si,{locale:l,_ANT_MARK__:"internalMark"},Le)),(De||Pe)&&(Le=r.createElement(Ba.Provider,{value:Ae},Le)),c&&(Le=r.createElement(ds,{size:c},Le)),Le=r.createElement(ql,null,Le);const Fe=r.useMemo((()=>{const e=Te||{},{algorithm:t,token:n,components:r,cssVar:o}=e,a=Gl(e,["algorithm","token","components","cssVar"]),i=t&&(!Array.isArray(t)||t.length>0)?so(t):ns,s={};Object.entries(r||{}).forEach((e=>{let[t,n]=e;const r=Object.assign({},n);"algorithm"in r&&(!0===r.algorithm?r.theme=i:(Array.isArray(r.algorithm)||"function"===typeof r.algorithm)&&(r.theme=so(r.algorithm)),delete r.algorithm),s[t]=r}));const l=Object.assign(Object.assign({},Qi),n);return Object.assign(Object.assign({},a),{theme:i,token:l,components:s,override:Object.assign({override:l},s),cssVar:o})}),[Te]);return w&&(Le=r.createElement(os.Provider,{value:Fe},Le)),Me.warning&&(Le=r.createElement(Ka.Provider,{value:Me.warning},Le)),void 0!==x&&(Le=r.createElement(ls,{disabled:x},Le)),r.createElement(yr.Provider,{value:Me},Le)},ic=e=>{const t=r.useContext(yr),n=r.useContext(ii);return r.createElement(ac,Object.assign({parentContext:t,legacyLocale:n},e))};ic.ConfigContext=yr,ic.SizeContext=fs,ic.config=e=>{const{prefixCls:t,iconPrefixCls:n,theme:r,holderRender:o}=e;void 0!==t&&(Jl=t),void 0!==n&&(Zl=n),"holderRender"in e&&(tc=o),r&&(!function(e){return Object.keys(e).some((e=>e.endsWith("Color")))}(r)?ec=r:is(nc(),r))},ic.useConfig=ps,Object.defineProperty(ic,"SizeContext",{get:()=>fs});const sc=ic;function lc(){lc=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",i=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function l(e,t,n,r){return Object.defineProperty(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r})}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function c(t,n,r,o){var a=n&&n.prototype instanceof f?n:f,i=Object.create(a.prototype);return l(i,"_invoke",function(t,n,r){var o=1;return function(a,i){if(3===o)throw Error("Generator is already running");if(4===o){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var s=r.delegate;if(s){var l=x(s,r);if(l){if(l===d)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(1===o)throw o=4,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=3;var c=u(t,n,r);if("normal"===c.type){if(o=r.done?4:2,c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(o=4,r.method="throw",r.arg=c.arg)}}}(t,r,new E(o||[])),!0),i}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var d={};function f(){}function p(){}function h(){}var m={};l(m,a,(function(){return this}));var v=Object.getPrototypeOf,g=v&&v(v(C([])));g&&g!==n&&r.call(g,a)&&(m=g);var y=h.prototype=f.prototype=Object.create(m);function b(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(o,a,i,s){var l=u(e[o],e,a);if("throw"!==l.type){var c=l.arg,d=c.value;return d&&"object"==je(d)&&r.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,i,s)}),(function(e){n("throw",e,i,s)})):t.resolve(d).then((function(e){c.value=e,i(c)}),(function(e){return n("throw",e,i,s)}))}s(l.arg)}var o;l(this,"_invoke",(function(e,r){function a(){return new t((function(t,o){n(e,r,t,o)}))}return o=o?o.then(a,a):a()}),!0)}function x(t,n){var r=n.method,o=t.i[r];if(o===e)return n.delegate=null,"throw"===r&&t.i.return&&(n.method="return",n.arg=e,x(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=u(o,t.i,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,d;var i=a.arg;return i?i.done?(n[t.r]=i.value,n.next=t.n,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,d):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,d)}function k(e){this.tryEntries.push(e)}function S(t){var n=t[4]||{};n.type="normal",n.arg=e,t[4]=n}function E(e){this.tryEntries=[[-1]],e.forEach(k,this),this.reset(!0)}function C(t){if(null!=t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function n(){for(;++o<t.length;)if(r.call(t,o))return n.value=t[o],n.done=!1,n;return n.value=e,n.done=!0,n};return i.next=i}}throw new TypeError(je(t)+" is not iterable")}return p.prototype=h,l(y,"constructor",h),l(h,"constructor",p),p.displayName=l(h,s,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,l(e,s,"GeneratorFunction")),e.prototype=Object.create(y),e},t.awrap=function(e){return{__await:e}},b(w.prototype),l(w.prototype,i,(function(){return this})),t.AsyncIterator=w,t.async=function(e,n,r,o,a){void 0===a&&(a=Promise);var i=new w(c(e,n,r,o),a);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},b(y),l(y,s,"Generator"),l(y,a,(function(){return this})),l(y,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.unshift(r);return function e(){for(;n.length;)if((r=n.pop())in t)return e.value=r,e.done=!1,e;return e.done=!0,e}},t.values=C,E.prototype={constructor:E,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(S),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function r(e){i.type="throw",i.arg=t,n.next=e}for(var o=n.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a[4],s=this.prev,l=a[1],c=a[2];if(-1===a[0])return r("end"),!1;if(!l&&!c)throw Error("try statement without catch or finally");if(null!=a[0]&&a[0]<=s){if(s<l)return this.method="next",this.arg=e,r(l),!0;if(s<c)return r(c),!1}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r[0]>-1&&r[0]<=this.prev&&this.prev<r[2]){var o=r;break}}o&&("break"===e||"continue"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var a=o?o[4]:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o[2],d):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n[2]===e)return this.complete(n[4],n[3]),S(n),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n[0]===e){var r=n[4];if("throw"===r.type){var o=r.arg;S(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={i:C(t),r:n,n:r},"next"===this.method&&(this.arg=e),d}},t}function cc(e,t,n,r,o,a,i){try{var s=e[a](i),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,o)}function uc(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){cc(a,r,o,i,s,"next",e)}function s(e){cc(a,r,o,i,s,"throw",e)}i(void 0)}))}}var dc,fc=_e({},s),pc=fc.version,hc=fc.render,mc=fc.unmountComponentAtNode;try{Number((pc||"").split(".")[0])>=18&&(dc=fc.createRoot)}catch(Dy){}function vc(e){var t=fc.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&"object"===je(t)&&(t.usingClientEntryPoint=e)}var gc="__rc_react_root__";function yc(e,t){dc?function(e,t){vc(!0);var n=t[gc]||dc(t);vc(!1),n.render(e),t[gc]=n}(e,t):function(e,t){null===hc||void 0===hc||hc(e,t)}(e,t)}function bc(e){return wc.apply(this,arguments)}function wc(){return(wc=uc(lc().mark((function e(t){return lc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",Promise.resolve().then((function(){var e;null===(e=t[gc])||void 0===e||e.unmount(),delete t[gc]})));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function xc(e){mc(e)}function kc(){return(kc=uc(lc().mark((function e(t){return lc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0===dc){e.next=2;break}return e.abrupt("return",bc(t));case 2:xc(t);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}let Sc=(e,t)=>(yc(e,t),()=>function(e){return kc.apply(this,arguments)}(t));const Ec={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"};function Cc(e){var t;return null===e||void 0===e||null===(t=e.getRootNode)||void 0===t?void 0:t.call(e)}function Nc(e){return function(e){return Cc(e)instanceof ShadowRoot}(e)?Cc(e):null}function jc(e){return"object"===je(e)&&"string"===typeof e.name&&"string"===typeof e.theme&&("object"===je(e.icon)||"function"===typeof e.icon)}function Dc(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce((function(t,n){var r,o=e[n];if("class"===n)t.className=o,delete t.class;else delete t[n],t[(r=n,r.replace(/-(.)/g,(function(e,t){return t.toUpperCase()})))]=o;return t}),{})}function Pc(e,t,n){return n?r.createElement(e.tag,_e(_e({key:t},Dc(e.attrs)),n),(e.children||[]).map((function(n,r){return Pc(n,"".concat(t,"-").concat(e.tag,"-").concat(r))}))):r.createElement(e.tag,_e({key:t},Dc(e.attrs)),(e.children||[]).map((function(n,r){return Pc(n,"".concat(t,"-").concat(e.tag,"-").concat(r))})))}function Tc(e){return gi(e)[0]}function _c(e){return e?Array.isArray(e)?e:[e]:[]}var Oc=["icon","className","onClick","style","primaryColor","secondaryColor"],Mc={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};var Rc=function(e){var t=e.icon,n=e.className,o=e.onClick,a=e.style,i=e.primaryColor,s=e.secondaryColor,l=Ps(e,Oc),c=r.useRef(),u=Mc;if(i&&(u={primaryColor:i,secondaryColor:s||Tc(i)}),function(e){var t=(0,r.useContext)(Ba),n=t.csp,o=t.prefixCls,a=t.layer,i="\n.anticon {\n  display: inline-flex;\n  align-items: center;\n  color: inherit;\n  font-style: normal;\n  line-height: 0;\n  text-align: center;\n  text-transform: none;\n  vertical-align: -0.125em;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n  line-height: 1;\n}\n\n.anticon svg {\n  display: inline-block;\n}\n\n.anticon::before {\n  display: none;\n}\n\n.anticon .anticon-icon {\n  display: block;\n}\n\n.anticon[tabindex] {\n  cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n  display: inline-block;\n  -webkit-animation: loadingCircle 1s infinite linear;\n  animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes loadingCircle {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n";o&&(i=i.replace(/anticon/g,o)),a&&(i="@layer ".concat(a," {\n").concat(i,"\n}")),(0,r.useEffect)((function(){var t=Nc(e.current);Rr(i,"@ant-design-icons",{prepend:!a,csp:n,attachTo:t})}),[])}(c),function(e,t){Ur(e,"[@ant-design/icons] ".concat(t))}(jc(t),"icon should be icon definiton, but got ".concat(t)),!jc(t))return null;var d=t;return d&&"function"===typeof d.icon&&(d=_e(_e({},d),{},{icon:d.icon(u.primaryColor,u.secondaryColor)})),Pc(d.icon,"svg-".concat(d.name),_e(_e({className:n,onClick:o,style:a,"data-icon":d.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},l),{},{ref:c}))};Rc.displayName="IconReact",Rc.getTwoToneColors=function(){return _e({},Mc)},Rc.setTwoToneColors=function(e){var t=e.primaryColor,n=e.secondaryColor;Mc.primaryColor=t,Mc.secondaryColor=n||Tc(t),Mc.calculated=!!n};const Ac=Rc;function Lc(e){var t=kr(_c(e),2),n=t[0],r=t[1];return Ac.setTwoToneColors({primaryColor:n,secondaryColor:r})}var Ic=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];Lc(ji.primary);var Fc=r.forwardRef((function(e,t){var n=e.className,o=e.icon,a=e.spin,i=e.rotate,s=e.tabIndex,l=e.onClick,c=e.twoToneColor,u=Ps(e,Ic),d=r.useContext(Ba),f=d.prefixCls,p=void 0===f?"anticon":f,h=d.rootClassName,m=ys()(h,p,Pe(Pe({},"".concat(p,"-").concat(o.name),!!o.name),"".concat(p,"-spin"),!!a||"loading"===o.name),n),v=s;void 0===v&&l&&(v=-1);var g=i?{msTransform:"rotate(".concat(i,"deg)"),transform:"rotate(".concat(i,"deg)")}:void 0,y=kr(_c(c),2),b=y[0],w=y[1];return r.createElement("span",Mo({role:"img","aria-label":o.name},u,{ref:t,tabIndex:v,onClick:l,className:m}),r.createElement(Ac,{icon:o,primaryColor:b,secondaryColor:w,style:g}))}));Fc.displayName="AntdIcon",Fc.getTwoToneColor=function(){var e=Ac.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor},Fc.setTwoToneColor=Lc;const zc=Fc;var Bc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Ec}))};const Hc=r.forwardRef(Bc);const Uc={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"};var Yc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Uc}))};const Wc=r.forwardRef(Yc);const qc={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"};var Vc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:qc}))};const Qc=r.forwardRef(Vc);const Kc={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"};var $c=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Kc}))};const Gc=r.forwardRef($c);const Xc={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"};var Jc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Xc}))};const Zc=r.forwardRef(Jc);var eu={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var t=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||t>=eu.F1&&t<=eu.F12)return!1;switch(t){case eu.ALT:case eu.CAPS_LOCK:case eu.CONTEXT_MENU:case eu.CTRL:case eu.DOWN:case eu.END:case eu.ESC:case eu.HOME:case eu.INSERT:case eu.LEFT:case eu.MAC_FF_META:case eu.META:case eu.NUMLOCK:case eu.NUM_CENTER:case eu.PAGE_DOWN:case eu.PAGE_UP:case eu.PAUSE:case eu.PRINT_SCREEN:case eu.RIGHT:case eu.SHIFT:case eu.UP:case eu.WIN_KEY:case eu.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=eu.ZERO&&e<=eu.NINE)return!0;if(e>=eu.NUM_ZERO&&e<=eu.NUM_MULTIPLY)return!0;if(e>=eu.A&&e<=eu.Z)return!0;if(-1!==window.navigator.userAgent.indexOf("WebKit")&&0===e)return!0;switch(e){case eu.SPACE:case eu.QUESTION_MARK:case eu.NUM_PLUS:case eu.NUM_MINUS:case eu.NUM_PERIOD:case eu.NUM_DIVISION:case eu.SEMICOLON:case eu.DASH:case eu.EQUALS:case eu.COMMA:case eu.PERIOD:case eu.SLASH:case eu.APOSTROPHE:case eu.SINGLE_QUOTE:case eu.OPEN_SQUARE_BRACKET:case eu.BACKSLASH:case eu.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const tu=eu;var nu="".concat("accept acceptCharset accessKey action allowFullScreen allowTransparency\n    alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\n    charSet checked classID className colSpan cols content contentEditable contextMenu\n    controls coords crossOrigin data dateTime default defer dir disabled download draggable\n    encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\n    headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\n    is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\n    mediaGroup method min minLength multiple muted name noValidate nonce open\n    optimum pattern placeholder poster preload radioGroup readOnly rel required\n    reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\n    shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\n    summary tabIndex target title type useMap value width wmode wrap"," ").concat("onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\n    onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\n    onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\n    onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\n    onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\n    onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\n    onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError").split(/[\s\n]+/);function ru(e,t){return 0===e.indexOf(t)}var ou=r.forwardRef((function(e,t){var n=e.prefixCls,o=e.style,a=e.className,i=e.duration,s=void 0===i?4.5:i,l=e.showProgress,c=e.pauseOnHover,u=void 0===c||c,d=e.eventKey,f=e.content,p=e.closable,h=e.closeIcon,m=void 0===h?"x":h,v=e.props,g=e.onClick,y=e.onNoticeClose,b=e.times,w=e.hovering,x=kr(r.useState(!1),2),k=x[0],S=x[1],E=kr(r.useState(0),2),C=E[0],N=E[1],j=kr(r.useState(0),2),D=j[0],P=j[1],T=w||k,_=s>0&&l,O=function(){y(d)};r.useEffect((function(){if(!T&&s>0){var e=Date.now()-D,t=setTimeout((function(){O()}),1e3*s-D);return function(){u&&clearTimeout(t),P(Date.now()-e)}}}),[s,T,b]),r.useEffect((function(){if(!T&&_&&(u||0===D)){var e,t=performance.now();return function n(){cancelAnimationFrame(e),e=requestAnimationFrame((function(e){var r=e+D-t,o=Math.min(r/(1e3*s),1);N(100*o),o<1&&n()}))}(),function(){u&&cancelAnimationFrame(e)}}}),[s,D,T,_,b]);var M=r.useMemo((function(){return"object"===je(p)&&null!==p?p:p?{closeIcon:m}:{}}),[p,m]),R=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=!1===n?{aria:!0,data:!0,attr:!0}:!0===n?{aria:!0}:_e({},n);var r={};return Object.keys(e).forEach((function(n){(t.aria&&("role"===n||ru(n,"aria-"))||t.data&&ru(n,"data-")||t.attr&&nu.includes(n))&&(r[n]=e[n])})),r}(M,!0),A=100-(!C||C<0?0:C>100?100:C),L="".concat(n,"-notice");return r.createElement("div",Mo({},v,{ref:t,className:ys()(L,a,Pe({},"".concat(L,"-closable"),p)),style:o,onMouseEnter:function(e){var t;S(!0),null===v||void 0===v||null===(t=v.onMouseEnter)||void 0===t||t.call(v,e)},onMouseLeave:function(e){var t;S(!1),null===v||void 0===v||null===(t=v.onMouseLeave)||void 0===t||t.call(v,e)},onClick:g}),r.createElement("div",{className:"".concat(L,"-content")},f),p&&r.createElement("a",Mo({tabIndex:0,className:"".concat(L,"-close"),onKeyDown:function(e){"Enter"!==e.key&&"Enter"!==e.code&&e.keyCode!==tu.ENTER||O()},"aria-label":"Close"},R,{onClick:function(e){e.preventDefault(),e.stopPropagation(),O()}}),M.closeIcon),_&&r.createElement("progress",{className:"".concat(L,"-progress"),max:"100",value:A},A+"%"))}));const au=ou;var iu=r.createContext({});const su=function(e){var t=e.children,n=e.classNames;return r.createElement(iu.Provider,{value:{classNames:n}},t)};const lu=function(e){var t,n,r,o={offset:8,threshold:3,gap:16};e&&"object"===je(e)&&(o.offset=null!==(t=e.offset)&&void 0!==t?t:8,o.threshold=null!==(n=e.threshold)&&void 0!==n?n:3,o.gap=null!==(r=e.gap)&&void 0!==r?r:16);return[!!e,o]};var cu=["className","style","classNames","styles"];const uu=function(e){var t=e.configList,n=e.placement,o=e.prefixCls,a=e.className,i=e.style,s=e.motion,l=e.onAllNoticeRemoved,c=e.onNoticeClose,u=e.stack,d=(0,r.useContext)(iu).classNames,f=(0,r.useRef)({}),p=kr((0,r.useState)(null),2),h=p[0],m=p[1],v=kr((0,r.useState)([]),2),g=v[0],y=v[1],b=t.map((function(e){return{config:e,key:String(e.key)}})),w=kr(lu(u),2),x=w[0],k=w[1],S=k.offset,E=k.threshold,C=k.gap,N=x&&(g.length>0||b.length<=E),j="function"===typeof s?s(n):s;return(0,r.useEffect)((function(){x&&g.length>1&&y((function(e){return e.filter((function(e){return b.some((function(t){var n=t.key;return e===n}))}))}))}),[g,b,x]),(0,r.useEffect)((function(){var e,t;x&&f.current[null===(e=b[b.length-1])||void 0===e?void 0:e.key]&&m(f.current[null===(t=b[b.length-1])||void 0===t?void 0:t.key])}),[b,x]),r.createElement(Rl,Mo({key:n,className:ys()(o,"".concat(o,"-").concat(n),null===d||void 0===d?void 0:d.list,a,Pe(Pe({},"".concat(o,"-stack"),!!x),"".concat(o,"-stack-expanded"),N)),style:i,keys:b,motionAppear:!0},j,{onAllRemoved:function(){l(n)}}),(function(e,t){var a=e.config,i=e.className,s=e.style,l=e.index,u=a,p=u.key,m=u.times,v=String(p),w=a,k=w.className,E=w.style,j=w.classNames,D=w.styles,P=Ps(w,cu),T=b.findIndex((function(e){return e.key===v})),_={};if(x){var O=b.length-1-(T>-1?T:l-1),M="top"===n||"bottom"===n?"-50%":"0";if(O>0){var R,A,L;_.height=N?null===(R=f.current[v])||void 0===R?void 0:R.offsetHeight:null===h||void 0===h?void 0:h.offsetHeight;for(var I=0,F=0;F<O;F++){var z;I+=(null===(z=f.current[b[b.length-1-F].key])||void 0===z?void 0:z.offsetHeight)+C}var B=(N?I:O*S)*(n.startsWith("top")?1:-1),H=!N&&null!==h&&void 0!==h&&h.offsetWidth&&null!==(A=f.current[v])&&void 0!==A&&A.offsetWidth?((null===h||void 0===h?void 0:h.offsetWidth)-2*S*(O<3?O:3))/(null===(L=f.current[v])||void 0===L?void 0:L.offsetWidth):1;_.transform="translate3d(".concat(M,", ").concat(B,"px, 0) scaleX(").concat(H,")")}else _.transform="translate3d(".concat(M,", 0, 0)")}return r.createElement("div",{ref:t,className:ys()("".concat(o,"-notice-wrapper"),i,null===j||void 0===j?void 0:j.wrapper),style:_e(_e(_e({},s),_),null===D||void 0===D?void 0:D.wrapper),onMouseEnter:function(){return y((function(e){return e.includes(v)?e:[].concat(hr(e),[v])}))},onMouseLeave:function(){return y((function(e){return e.filter((function(e){return e!==v}))}))}},r.createElement(au,Mo({},P,{ref:function(e){T>-1?f.current[v]=e:delete f.current[v]},prefixCls:o,classNames:j,styles:D,className:ys()(k,null===d||void 0===d?void 0:d.notice),style:E,times:m,key:p,eventKey:p,onNoticeClose:c,hovering:x&&g.length>0})))}))};var du=r.forwardRef((function(e,t){var n=e.prefixCls,o=void 0===n?"rc-notification":n,a=e.container,s=e.motion,l=e.maxCount,c=e.className,u=e.style,d=e.onAllRemoved,f=e.stack,p=e.renderNotifications,h=kr(r.useState([]),2),m=h[0],v=h[1],g=function(e){var t,n=m.find((function(t){return t.key===e}));null===n||void 0===n||null===(t=n.onClose)||void 0===t||t.call(n),v((function(t){return t.filter((function(t){return t.key!==e}))}))};r.useImperativeHandle(t,(function(){return{open:function(e){v((function(t){var n,r=hr(t),o=r.findIndex((function(t){return t.key===e.key})),a=_e({},e);o>=0?(a.times=((null===(n=t[o])||void 0===n?void 0:n.times)||0)+1,r[o]=a):(a.times=0,r.push(a));return l>0&&r.length>l&&(r=r.slice(-l)),r}))},close:function(e){g(e)},destroy:function(){v([])}}}));var y=kr(r.useState({}),2),b=y[0],w=y[1];r.useEffect((function(){var e={};m.forEach((function(t){var n=t.placement,r=void 0===n?"topRight":n;r&&(e[r]=e[r]||[],e[r].push(t))})),Object.keys(b).forEach((function(t){e[t]=e[t]||[]})),w(e)}),[m]);var x=function(e){w((function(t){var n=_e({},t);return(n[e]||[]).length||delete n[e],n}))},k=r.useRef(!1);if(r.useEffect((function(){Object.keys(b).length>0?k.current=!0:k.current&&(null===d||void 0===d||d(),k.current=!1)}),[b]),!a)return null;var S=Object.keys(b);return(0,i.createPortal)(r.createElement(r.Fragment,null,S.map((function(e){var t=b[e],n=r.createElement(uu,{key:e,configList:t,placement:e,prefixCls:o,className:null===c||void 0===c?void 0:c(e),style:null===u||void 0===u?void 0:u(e),motion:s,onNoticeClose:g,onAllNoticeRemoved:x,stack:f});return p?p(n,{prefixCls:o,key:e}):n}))),a)}));const fu=du;var pu=["getContainer","motion","prefixCls","maxCount","className","style","onAllRemoved","stack","renderNotifications"],hu=function(){return document.body},mu=0;function vu(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.getContainer,n=void 0===t?hu:t,o=e.motion,a=e.prefixCls,i=e.maxCount,s=e.className,l=e.style,c=e.onAllRemoved,u=e.stack,d=e.renderNotifications,f=Ps(e,pu),p=kr(r.useState(),2),h=p[0],m=p[1],v=r.useRef(),g=r.createElement(fu,{container:h,ref:v,prefixCls:a,motion:o,maxCount:i,className:s,style:l,onAllRemoved:c,stack:u,renderNotifications:d}),y=kr(r.useState([]),2),b=y[0],w=y[1],x=Bs((function(e){var t=function(){for(var e={},t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return n.forEach((function(t){t&&Object.keys(t).forEach((function(n){var r=t[n];void 0!==r&&(e[n]=r)}))})),e}(f,e);null!==t.key&&void 0!==t.key||(t.key="rc-notification-".concat(mu),mu+=1),w((function(e){return[].concat(hr(e),[{type:"open",config:t}])}))})),k=r.useMemo((function(){return{open:x,close:function(e){w((function(t){return[].concat(hr(t),[{type:"close",key:e}])}))},destroy:function(){w((function(e){return[].concat(hr(e),[{type:"destroy"}])}))}}}),[]);return r.useEffect((function(){m(n())})),r.useEffect((function(){var e,t;v.current&&b.length&&(b.forEach((function(e){switch(e.type){case"open":v.current.open(e.config);break;case"close":v.current.close(e.key);break;case"destroy":v.current.destroy()}})),w((function(n){return e===n&&t||(e=n,t=n.filter((function(e){return!b.includes(e)}))),t})))}),[b]),[k,g]}const gu=e=>{const[,,,,t]=Wl();return t?"".concat(e,"-css-var"):""};const yu=Vr((function e(){Wr(this,e)}));var bu="CALC_UNIT",wu=new RegExp(bu,"g");function xu(e){return"number"===typeof e?"".concat(e).concat(bu):e}var ku=function(e){Rs(n,e);var t=Fs(n);function n(e,r){var o;Wr(this,n),Pe(Is(o=t.call(this)),"result",""),Pe(Is(o),"unitlessCssVar",void 0),Pe(Is(o),"lowPriority",void 0);var a=je(e);return o.unitlessCssVar=r,e instanceof n?o.result="(".concat(e.result,")"):"number"===a?o.result=xu(e):"string"===a&&(o.result=e),o}return Vr(n,[{key:"add",value:function(e){return e instanceof n?this.result="".concat(this.result," + ").concat(e.getResult()):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," + ").concat(xu(e))),this.lowPriority=!0,this}},{key:"sub",value:function(e){return e instanceof n?this.result="".concat(this.result," - ").concat(e.getResult()):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," - ").concat(xu(e))),this.lowPriority=!0,this}},{key:"mul",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof n?this.result="".concat(this.result," * ").concat(e.getResult(!0)):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," * ").concat(e)),this.lowPriority=!1,this}},{key:"div",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof n?this.result="".concat(this.result," / ").concat(e.getResult(!0)):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," / ").concat(e)),this.lowPriority=!1,this}},{key:"getResult",value:function(e){return this.lowPriority||e?"(".concat(this.result,")"):this.result}},{key:"equal",value:function(e){var t=this,n=(e||{}).unit,r=!0;return"boolean"===typeof n?r=n:Array.from(this.unitlessCssVar).some((function(e){return t.result.includes(e)}))&&(r=!1),this.result=this.result.replace(wu,r?"px":""),"undefined"!==typeof this.lowPriority?"calc(".concat(this.result,")"):this.result}}]),n}(yu);const Su=function(e){Rs(n,e);var t=Fs(n);function n(e){var r;return Wr(this,n),Pe(Is(r=t.call(this)),"result",0),e instanceof n?r.result=e.result:"number"===typeof e&&(r.result=e),r}return Vr(n,[{key:"add",value:function(e){return e instanceof n?this.result+=e.result:"number"===typeof e&&(this.result+=e),this}},{key:"sub",value:function(e){return e instanceof n?this.result-=e.result:"number"===typeof e&&(this.result-=e),this}},{key:"mul",value:function(e){return e instanceof n?this.result*=e.result:"number"===typeof e&&(this.result*=e),this}},{key:"div",value:function(e){return e instanceof n?this.result/=e.result:"number"===typeof e&&(this.result/=e),this}},{key:"equal",value:function(){return this.result}}]),n}(yu);const Eu=function(e,t){var n="css"===e?ku:Su;return function(e){return new n(e,t)}};const Cu=function(e,t){return"".concat([t,e.replace(/([A-Z]+)([A-Z][a-z]+)/g,"$1-$2").replace(/([a-z])([A-Z])/g,"$1-$2")].filter(Boolean).join("-"))};const Nu=function(e,t,n,r){var o=_e({},t[e]);null!==r&&void 0!==r&&r.deprecatedTokens&&r.deprecatedTokens.forEach((function(e){var t,n=kr(e,2),r=n[0],a=n[1];(null!==o&&void 0!==o&&o[r]||null!==o&&void 0!==o&&o[a])&&(null!==(t=o[a])&&void 0!==t||(o[a]=null===o||void 0===o?void 0:o[r]))}));var a=_e(_e({},n),o);return Object.keys(a).forEach((function(e){a[e]===t[e]&&delete a[e]})),a};var ju="undefined"!==typeof CSSINJS_STATISTIC,Du=!0;function Pu(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(!ju)return Object.assign.apply(Object,[{}].concat(t));Du=!1;var r={};return t.forEach((function(e){"object"===je(e)&&Object.keys(e).forEach((function(t){Object.defineProperty(r,t,{configurable:!0,enumerable:!0,get:function(){return e[t]}})}))})),Du=!0,r}var Tu={};function _u(){}const Ou=function(e){var t,n=e,r=_u;return ju&&"undefined"!==typeof Proxy&&(t=new Set,n=new Proxy(e,{get:function(e,n){var r;Du&&(null===(r=t)||void 0===r||r.add(n));return e[n]}}),r=function(e,n){var r;Tu[e]={global:Array.from(t),component:_e(_e({},null===(r=Tu[e])||void 0===r?void 0:r.component),n)}}),{token:n,keys:t,flush:r}};const Mu=function(e,t,n){var r;return"function"===typeof n?n(Pu(t,null!==(r=t[e])&&void 0!==r?r:{})):null!==n&&void 0!==n?n:{}};const Ru=function(e){return"js"===e?{max:Math.max,min:Math.min}:{max:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return"max(".concat(t.map((function(e){return mo(e)})).join(","),")")},min:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return"min(".concat(t.map((function(e){return mo(e)})).join(","),")")}}};var Au=function(){function e(){Wr(this,e),Pe(this,"map",new Map),Pe(this,"objectIDMap",new WeakMap),Pe(this,"nextID",0),Pe(this,"lastAccessBeat",new Map),Pe(this,"accessBeat",0)}return Vr(e,[{key:"set",value:function(e,t){this.clear();var n=this.getCompositeKey(e);this.map.set(n,t),this.lastAccessBeat.set(n,Date.now())}},{key:"get",value:function(e){var t=this.getCompositeKey(e),n=this.map.get(t);return this.lastAccessBeat.set(t,Date.now()),this.accessBeat+=1,n}},{key:"getCompositeKey",value:function(e){var t=this;return e.map((function(e){return e&&"object"===je(e)?"obj_".concat(t.getObjectID(e)):"".concat(je(e),"_").concat(e)})).join("|")}},{key:"getObjectID",value:function(e){if(this.objectIDMap.has(e))return this.objectIDMap.get(e);var t=this.nextID;return this.objectIDMap.set(e,t),this.nextID+=1,t}},{key:"clear",value:function(){var e=this;if(this.accessBeat>1e4){var t=Date.now();this.lastAccessBeat.forEach((function(n,r){t-n>6e5&&(e.map.delete(r),e.lastAccessBeat.delete(r))})),this.accessBeat=0}}}]),e}(),Lu=new Au;const Iu=function(e,t){return r.useMemo((function(){var n=Lu.get(t);if(n)return n;var r=e();return Lu.set(t,r),r}),t)};const Fu=function(){return{}};const zu=function(e){var t=e.useCSP,n=void 0===t?Fu:t,o=e.useToken,a=e.usePrefix,i=e.getResetStyles,s=e.getCommonStyle,l=e.getCompUnitless;function c(t,r,l){var c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},u=Array.isArray(t)?t:[t,t],d=kr(u,1)[0],f=u.join("-"),p=e.layer||{name:"antd"};return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,u=o(),h=u.theme,m=u.realToken,v=u.hashId,g=u.token,y=u.cssVar,b=a(),w=b.rootPrefixCls,x=b.iconPrefixCls,k=n(),S=y?"css":"js",E=Iu((function(){var e=new Set;return y&&Object.keys(c.unitless||{}).forEach((function(t){e.add(go(t,y.prefix)),e.add(go(t,Cu(d,y.prefix)))})),Eu(S,e)}),[S,d,null===y||void 0===y?void 0:y.prefix]),C=Ru(S),N=C.max,j=C.min,D={theme:h,token:g,hashId:v,nonce:function(){return k.nonce},clientOnly:c.clientOnly,layer:p,order:c.order||-999};return"function"===typeof i&&Ma(_e(_e({},D),{},{clientOnly:!1,path:["Shared",w]}),(function(){return i(g,{prefix:{rootPrefixCls:w,iconPrefixCls:x},csp:k})})),[Ma(_e(_e({},D),{},{path:[f,e,x]}),(function(){if(!1===c.injectStyle)return[];var n=Ou(g),o=n.token,a=n.flush,i=Mu(d,m,l),u=".".concat(e),f=Nu(d,m,i,{deprecatedTokens:c.deprecatedTokens});y&&i&&"object"===je(i)&&Object.keys(i).forEach((function(e){i[e]="var(".concat(go(e,Cu(d,y.prefix)),")")}));var p=Pu(o,{componentCls:u,prefixCls:e,iconCls:".".concat(x),antCls:".".concat(w),calc:E,max:N,min:j},y?i:f),h=r(p,{hashId:v,prefixCls:e,rootPrefixCls:w,iconPrefixCls:x});a(d,f);var b="function"===typeof s?s(p,e,t,c.resetFont):null;return[!1===c.resetStyle?null:b,h]})),v]}}return{genStyleHooks:function(e,t,n,a){var i=Array.isArray(e)?e[0]:e;function s(e){return"".concat(String(i)).concat(e.slice(0,1).toUpperCase()).concat(e.slice(1))}var u=(null===a||void 0===a?void 0:a.unitless)||{},d=_e(_e({},"function"===typeof l?l(e):{}),{},Pe({},s("zIndexPopup"),!0));Object.keys(u).forEach((function(e){d[s(e)]=u[e]}));var f=_e(_e({},a),{},{unitless:d,prefixToken:s}),p=c(e,t,n,f),h=function(e,t,n){var a=n.unitless,i=n.injectStyle,s=void 0===i||i,l=n.prefixToken,c=n.ignore,u=function(r){var i=r.rootCls,s=r.cssVar,u=void 0===s?{}:s,d=o().realToken;return Aa({path:[e],prefix:u.prefix,key:u.key,unitless:a,ignore:c,token:d,scope:i},(function(){var r=Mu(e,d,t),o=Nu(e,d,r,{deprecatedTokens:null===n||void 0===n?void 0:n.deprecatedTokens});return Object.keys(r).forEach((function(e){o[l(e)]=o[e],delete o[e]})),o})),null},d=function(t){var n=o().cssVar;return[function(o){return s&&n?r.createElement(r.Fragment,null,r.createElement(u,{rootCls:t,cssVar:n,component:e}),o):o},null===n||void 0===n?void 0:n.key]};return d}(i,n,f);return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=kr(p(e,t),2)[1],r=kr(h(t),2);return[r[0],n,r[1]]}},genSubStyleComponent:function(e,t,n){var r=c(e,t,n,_e({resetStyle:!1,order:-998},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}));return function(e){var t=e.prefixCls,n=e.rootCls;return r(t,void 0===n?t:n),null}},genComponentStyleHook:c}},{genStyleHooks:Bu,genComponentStyleHook:Hu,genSubStyleComponent:Uu}=zu({usePrefix:()=>{const{getPrefixCls:e,iconPrefixCls:t}=(0,r.useContext)(yr);return{rootPrefixCls:e(),iconPrefixCls:t}},useToken:()=>{const[e,t,n,r,o]=Wl();return{theme:e,realToken:t,hashId:n,token:r,cssVar:o}},useCSP:()=>{const{csp:e}=(0,r.useContext)(yr);return null!==e&&void 0!==e?e:{}},getResetStyles:(e,t)=>{var n;const r=(e=>({a:{color:e.colorLink,textDecoration:e.linkDecoration,backgroundColor:"transparent",outline:"none",cursor:"pointer",transition:"color ".concat(e.motionDurationSlow),"-webkit-text-decoration-skip":"objects","&:hover":{color:e.colorLinkHover},"&:active":{color:e.colorLinkActive},"&:active, &:hover":{textDecoration:e.linkHoverDecoration,outline:0},"&:focus":{textDecoration:e.linkFocusDecoration,outline:0},"&[disabled]":{color:e.colorTextDisabled,cursor:"not-allowed"}}}))(e);return[r,{"&":r},Kl(null!==(n=null===t||void 0===t?void 0:t.prefix.iconPrefixCls)&&void 0!==n?n:gr)]},getCommonStyle:(e,t,n,r)=>{const o='[class^="'.concat(t,'"], [class*=" ').concat(t,'"]'),a=n?".".concat(n):o,i={boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"}};let s={};return!1!==r&&(s={fontFamily:e.fontFamily,fontSize:e.fontSize}),{[a]:Object.assign(Object.assign(Object.assign({},s),i),{[o]:i})}},getCompUnitless:()=>Bl}),Yu=e=>{const{componentCls:t,iconCls:n,boxShadow:r,colorText:o,colorSuccess:a,colorError:i,colorWarning:s,colorInfo:l,fontSizeLG:c,motionEaseInOutCirc:u,motionDurationSlow:d,marginXS:f,paddingXS:p,borderRadiusLG:h,zIndexPopup:m,contentPadding:v,contentBg:g}=e,y="".concat(t,"-notice"),b=new Fa("MessageMoveIn",{"0%":{padding:0,transform:"translateY(-100%)",opacity:0},"100%":{padding:p,transform:"translateY(0)",opacity:1}}),w=new Fa("MessageMoveOut",{"0%":{maxHeight:e.height,padding:p,opacity:1},"100%":{maxHeight:0,padding:0,opacity:0}}),x={padding:p,textAlign:"center",["".concat(t,"-custom-content")]:{display:"flex",alignItems:"center"},["".concat(t,"-custom-content > ").concat(n)]:{marginInlineEnd:f,fontSize:c},["".concat(y,"-content")]:{display:"inline-block",padding:v,background:g,borderRadius:h,boxShadow:r,pointerEvents:"all"},["".concat(t,"-success > ").concat(n)]:{color:a},["".concat(t,"-error > ").concat(n)]:{color:i},["".concat(t,"-warning > ").concat(n)]:{color:s},["".concat(t,"-info > ").concat(n,",\n      ").concat(t,"-loading > ").concat(n)]:{color:l}};return[{[t]:Object.assign(Object.assign({},Ql(e)),{color:o,position:"fixed",top:f,width:"100%",pointerEvents:"none",zIndex:m,["".concat(t,"-move-up")]:{animationFillMode:"forwards"},["\n        ".concat(t,"-move-up-appear,\n        ").concat(t,"-move-up-enter\n      ")]:{animationName:b,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["\n        ".concat(t,"-move-up-appear").concat(t,"-move-up-appear-active,\n        ").concat(t,"-move-up-enter").concat(t,"-move-up-enter-active\n      ")]:{animationPlayState:"running"},["".concat(t,"-move-up-leave")]:{animationName:w,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["".concat(t,"-move-up-leave").concat(t,"-move-up-leave-active")]:{animationPlayState:"running"},"&-rtl":{direction:"rtl",span:{direction:"rtl"}}})},{[t]:{["".concat(y,"-wrapper")]:Object.assign({},x)}},{["".concat(t,"-notice-pure-panel")]:Object.assign(Object.assign({},x),{padding:0,textAlign:"start"})}]},Wu=Bu("Message",(e=>{const t=Pu(e,{height:150});return[Yu(t)]}),(e=>({zIndexPopup:e.zIndexPopupBase+1e3+10,contentBg:e.colorBgElevated,contentPadding:"".concat((e.controlHeightLG-e.fontSize*e.lineHeight)/2,"px ").concat(e.paddingSM,"px")})));var qu=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Vu={info:r.createElement(Gc,null),success:r.createElement(Hc,null),error:r.createElement(Wc,null),warning:r.createElement(Qc,null),loading:r.createElement(Zc,null)},Qu=e=>{let{prefixCls:t,type:n,icon:o,children:a}=e;return r.createElement("div",{className:ys()("".concat(t,"-custom-content"),"".concat(t,"-").concat(n))},o||Vu[n],r.createElement("span",null,a))},Ku=e=>{const{prefixCls:t,className:n,type:o,icon:a,content:i}=e,s=qu(e,["prefixCls","className","type","icon","content"]),{getPrefixCls:l}=r.useContext(yr),c=t||l("message"),u=gu(c),[d,f,p]=Wu(c,u);return d(r.createElement(au,Object.assign({},s,{prefixCls:c,className:ys()(n,f,"".concat(c,"-notice-pure-panel"),p,u),eventKey:"pure",duration:null,content:r.createElement(Qu,{prefixCls:c,type:o,icon:a},i)})))};const $u={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"};var Gu=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:$u}))};const Xu=r.forwardRef(Gu);function Ju(e){let t;const n=new Promise((n=>{t=e((()=>{n(!0)}))})),r=()=>{null===t||void 0===t||t()};return r.then=(e,t)=>n.then(e,t),r.promise=n,r}var Zu=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const ed=3,td=e=>{let{children:t,prefixCls:n}=e;const o=gu(n),[a,i,s]=Wu(n,o);return a(r.createElement(su,{classNames:{list:ys()(i,s,o)}},t))},nd=(e,t)=>{let{prefixCls:n,key:o}=t;return r.createElement(td,{prefixCls:n,key:o},e)},rd=r.forwardRef(((e,t)=>{const{top:n,prefixCls:o,getContainer:a,maxCount:i,duration:s=ed,rtl:l,transitionName:c,onAllRemoved:u}=e,{getPrefixCls:d,getPopupContainer:f,message:p,direction:h}=r.useContext(yr),m=o||d("message"),v=r.createElement("span",{className:"".concat(m,"-close-x")},r.createElement(Xu,{className:"".concat(m,"-close-icon")})),[g,y]=vu({prefixCls:m,style:()=>({left:"50%",transform:"translateX(-50%)",top:null!==n&&void 0!==n?n:8}),className:()=>ys()({["".concat(m,"-rtl")]:null!==l&&void 0!==l?l:"rtl"===h}),motion:()=>function(e,t){return{motionName:null!==t&&void 0!==t?t:"".concat(e,"-move-up")}}(m,c),closable:!1,closeIcon:v,duration:s,getContainer:()=>(null===a||void 0===a?void 0:a())||(null===f||void 0===f?void 0:f())||document.body,maxCount:i,onAllRemoved:u,renderNotifications:nd});return r.useImperativeHandle(t,(()=>Object.assign(Object.assign({},g),{prefixCls:m,message:p}))),y}));let od=0;function ad(e){const t=r.useRef(null),n=($a("Message"),r.useMemo((()=>{const e=e=>{var n;null===(n=t.current)||void 0===n||n.close(e)},n=n=>{if(!t.current){const e=()=>{};return e.then=()=>{},e}const{open:o,prefixCls:a,message:i}=t.current,s="".concat(a,"-notice"),{content:l,icon:c,type:u,key:d,className:f,style:p,onClose:h}=n,m=Zu(n,["content","icon","type","key","className","style","onClose"]);let v=d;return void 0!==v&&null!==v||(od+=1,v="antd-message-".concat(od)),Ju((t=>(o(Object.assign(Object.assign({},m),{key:v,content:r.createElement(Qu,{prefixCls:a,type:u,icon:c},l),placement:"top",className:ys()(u&&"".concat(s,"-").concat(u),f,null===i||void 0===i?void 0:i.className),style:Object.assign(Object.assign({},null===i||void 0===i?void 0:i.style),p),onClose:()=>{null===h||void 0===h||h(),t()}})),()=>{e(v)})))},o={open:n,destroy:n=>{var r;void 0!==n?e(n):null===(r=t.current)||void 0===r||r.destroy()}};return["info","success","warning","error","loading"].forEach((e=>{o[e]=(t,r,o)=>{let a,i,s;a=t&&"object"===typeof t&&"content"in t?t:{content:t},"function"===typeof r?s=r:(i=r,s=o);const l=Object.assign(Object.assign({onClose:s,duration:i},a),{type:e});return n(l)}})),o}),[]));return[n,r.createElement(rd,Object.assign({key:"message-holder"},e,{ref:t}))]}let id=null,sd=e=>e(),ld=[],cd={};function ud(){const{getContainer:e,duration:t,rtl:n,maxCount:r,top:o}=cd,a=(null===e||void 0===e?void 0:e())||document.body;return{getContainer:()=>a,duration:t,rtl:n,maxCount:r,top:o}}const dd=r.forwardRef(((e,t)=>{const{messageConfig:n,sync:o}=e,{getPrefixCls:a}=(0,r.useContext)(yr),i=cd.prefixCls||a("message"),s=(0,r.useContext)(mr),[l,c]=ad(Object.assign(Object.assign(Object.assign({},n),{prefixCls:i}),s.message));return r.useImperativeHandle(t,(()=>{const e=Object.assign({},l);return Object.keys(e).forEach((t=>{e[t]=function(){o();for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return l[t].apply(l,n)}})),{instance:e,sync:o}})),c})),fd=r.forwardRef(((e,t)=>{const[n,o]=r.useState(ud),a=()=>{o(ud)};r.useEffect(a,[]);const i=oc(),s=i.getRootPrefixCls(),l=i.getIconPrefixCls(),c=i.getTheme(),u=r.createElement(dd,{ref:t,sync:a,messageConfig:n});return r.createElement(sc,{prefixCls:s,iconPrefixCls:l,theme:c},i.holderRender?i.holderRender(u):u)}));function pd(){if(!id){const e=document.createDocumentFragment(),t={fragment:e};return id=t,void sd((()=>{const n=function(e){return e&&(Sc=e),Sc}();n(r.createElement(fd,{ref:e=>{const{instance:n,sync:r}=e||{};Promise.resolve().then((()=>{!t.instance&&n&&(t.instance=n,t.sync=r,pd())}))}}),e)}))}id.instance&&(ld.forEach((e=>{const{type:t,skipped:n}=e;if(!n)switch(t){case"open":sd((()=>{const t=id.instance.open(Object.assign(Object.assign({},cd),e.config));null===t||void 0===t||t.then(e.resolve),e.setCloseFn(t)}));break;case"destroy":sd((()=>{null===id||void 0===id||id.instance.destroy(e.key)}));break;default:sd((()=>{var n;const r=(n=id.instance)[t].apply(n,hr(e.args));null===r||void 0===r||r.then(e.resolve),e.setCloseFn(r)}))}})),ld=[])}const hd={open:function(e){const t=Ju((t=>{let n;const r={type:"open",config:e,resolve:t,setCloseFn:e=>{n=e}};return ld.push(r),()=>{n?sd((()=>{n()})):r.skipped=!0}}));return pd(),t},destroy:e=>{ld.push({type:"destroy",key:e}),pd()},config:function(e){cd=Object.assign(Object.assign({},cd),e),sd((()=>{var e;null===(e=null===id||void 0===id?void 0:id.sync)||void 0===e||e.call(id)}))},useMessage:function(e){return ad(e)},_InternalPanelDoNotUseOrYouWillBeFired:Ku},md=hd;["success","info","warning","error","loading"].forEach((e=>{md[e]=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return function(e,t){oc();const n=Ju((n=>{let r;const o={type:e,args:t,resolve:n,setCloseFn:e=>{r=e}};return ld.push(o),()=>{r?sd((()=>{r()})):o.skipped=!0}}));return pd(),n}(e,n)}}));const vd=md,gd="http://localhost:8088",yd=async()=>{try{const n=await ar.get("".concat(gd,"/discount/all"),{headers:{Authorization:localStorage.getItem("token")}});var e,t;if(n.data&&200===n.data.code)return(null===(e=n.data.data)||void 0===e?void 0:e.data)||n.data.data||[];throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u83b7\u53d6\u6298\u6263\u4fe1\u606f\u5931\u8d25")}catch(n){throw console.error("\u83b7\u53d6\u6298\u6263\u5217\u8868\u5931\u8d25:",n),n}};var bd=n(723);const wd=e=>{var t;let{onLogout:n}=e;const o=Z(),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(!1),[c,u]=(0,r.useState)(""),[d,f]=(0,r.useState)(0),p=te(),{tab:h}=re(),[m,v]=(0,r.useState)(!1),[g,y]=(0,r.useState)(!1),[b,w]=(0,r.useState)({name:"",type:"",region:"",subtitle:"",resolution:"",file:null,description:""}),[x,k]=(0,r.useState)(!1),[S,E]=(0,r.useState)(""),[C,N]=(0,r.useState)(""),[j,D]=(0,r.useState)(null),[P,T]=(0,r.useState)([]),[_,O]=(0,r.useState)(!1),[M,R]=(0,r.useState)(null),[A,L]=(0,r.useState)(1),[I,F]=(0,r.useState)(1),[z,B]=(0,r.useState)({}),[H,U]=(0,r.useState)([]),[Y,W]=(0,r.useState)([]),[q,V]=(0,r.useState)(!1),[Q,K]=(0,r.useState)(null),[$,G]=(0,r.useState)([]),[X,J]=(0,r.useState)([]),[ee,ne]=(0,r.useState)(!1),[oe,ae]=(0,r.useState)(null),[ie,se]=(0,r.useState)(X),[le,ce]=(0,r.useState)(!1),[ue,de]=(0,r.useState)(!1),[fe,pe]=(0,r.useState)(null),[he,me]=(0,r.useState)(0),[ve,ge]=(0,r.useState)(!1),[ye,be]=(0,r.useState)("D:/studies/ptPlatform/torrent"),[we,xe]=(0,r.useState)(""),[ke,Se]=(0,r.useState)(""),[Ee,Ce]=(0,r.useState)(""),[Ne,je]=(0,r.useState)(""),De=h||"announcement",Pe=e=>{p("/dashboard/".concat(e),{state:{savedFilters:Xe,activeTab:e}})},Te=async()=>{try{const e=await ir.get("/announcement/latest");U(e.data.data.announcements||[])}catch(c){console.error("\u83b7\u53d6\u516c\u544a\u5931\u8d25:",c)}};(0,r.useEffect)((()=>{"announcement"===De&&(Te(),Oe())}),[De]);const Oe=async()=>{try{const e=await yd();console.log("\u8fd4\u56de\u7684\u6298\u6263\u6570\u636e\uff1a",e);const t=new Date,n=e.filter((e=>Date.parse(e.startTime)<=t.getTime()&&Date.parse(e.endTime)>=t.getTime())),r=e.filter((e=>Date.parse(e.startTime)>t.getTime())).sort(((e,t)=>Date.parse(e.startTime)-Date.parse(t.startTime))),o=[...n.slice(0,3)];for(;o.length<3&&r.length>0;)o.push(r.shift());W(o)}catch(Dy){console.error("\u83b7\u53d6\u6298\u6263\u5931\u8d25:",Dy)}},Me=e=>{xe(e.target.value)},Re=async()=>{try{ne(!0);const e=await lr(ke,1);if(200===e.data.code){J(e.data.data.records);const t=e.data.data.total;F(Math.ceil(t/5)),L(1)}else ae(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){ae(e.message||"\u641c\u7d22\u5931\u8d25")}finally{ne(!1)}},Ae=async()=>{Se(""),Je(Object.keys(Ge).reduce(((e,t)=>(e[t]="all",e)),{})),await Ve(1,!0)},Le=async()=>{try{V(!0);const e=await function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/request/posts/search",{params:{keyword:e,page:t,size:n}})}(Ee,A);if(200===e.data.code){const t=await Promise.all(e.data.data.records.map((async e=>{try{const t=await ur(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));G(t),F(Math.ceil(e.data.data.total/5))}else K(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){K(e.message||"\u641c\u7d22\u5931\u8d25")}finally{V(!1)}},Ie=async()=>{Ce(""),await Qe(1)},Fe=async()=>{try{O(!0);const e=await function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/help/posts/search",{params:{keyword:e,page:t,size:n}})}(Ne,A);if(200===e.data.code){const t=await Promise.all(e.data.data.records.map((async e=>{try{const t=await cr(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));T(t),F(Math.ceil(e.data.data.total/5))}else R(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){R(e.message||"\u641c\u7d22\u5931\u8d25")}finally{O(!1)}},ze=async()=>{je(""),await $e(1)},Be=e=>{w(_e(_e({},b),{},{file:e.target.files[0]}))},He=async e=>{e.preventDefault();try{y(!0);const e={torrentName:b.name,description:b.description,category:b.type,region:b.region,resolution:b.resolution,subtitle:b.subtitle};await async function(e,t){const n=new FormData;n.append("file",e),n.append("body",new Blob([JSON.stringify(t)],{type:"application/json"}));try{return(await ir.post("/torrent",n,{headers:{}})).data}catch(c){throw console.error("\u4e0a\u4f20\u79cd\u5b50\u5931\u8d25:",c),c}}(b.file,e),v(!1),w({name:"",type:"",region:"",subtitle:"",resolution:"",file:null,description:""}),alert("\u79cd\u5b50\u521b\u5efa\u6210\u529f\uff01"),await Ve(A)}catch(c){var t,n;console.error("\u521b\u5efa\u5931\u8d25:",c),alert("\u521b\u5efa\u5931\u8d25: "+((null===(t=c.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||c.message))}finally{y(!1)}},Ue=async e=>{try{return!0}catch(Dy){return console.error("\u68c0\u67e5\u6587\u4ef6\u5b58\u5728\u6027\u5931\u8d25:",Dy),!1}},Ye=async(e,t)=>{t.stopPropagation();try{if(!window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u79cd\u5b50\u5417\uff1f\u6b64\u64cd\u4f5c\u4e0d\u53ef\u64a4\u9500\uff01"))return;await(e=>ir.delete("/torrent/deleteTorrent/".concat(e)))(e),vd.success("\u79cd\u5b50\u5220\u9664\u6210\u529f"),await Ve(A)}catch(c){var n,r;console.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25:",c),vd.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25: "+((null===(n=c.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||c.message))}},We=async e=>{e.preventDefault();try{const e=localStorage.getItem("username"),t=await((e,t,n,r)=>{const o=new FormData;return o.append("title",e),o.append("content",t),o.append("authorId",n),r&&o.append("image",r),ir.post("/request/posts",o)})(S,C,e,j);200===t.data.code?(await Qe(A),k(!1),E(""),N(""),D(null)):R(t.data.message||"\u53d1\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u53d1\u5e16\u5931\u8d25")}},qe=async e=>{e.preventDefault();try{const e=localStorage.getItem("username"),t=await((e,t,n,r)=>{const o=new FormData;return o.append("title",e),o.append("content",t),o.append("authorId",n),r&&o.append("image",r),ir.post("/help/posts",o)})(S,C,e,j);200===t.data.code?(await $e(A),k(!1),E(""),N(""),D(null)):R(t.data.message||"\u53d1\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u53d1\u5e16\u5931\u8d25")}},Ve=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];ne(!0);try{const n={page:e,size:5};!t&&Object.values(Xe).some((e=>"all"!==e))&&("all"!==Xe.type&&(n.category=Xe.type),"all"!==Xe.subtitle&&(n.subtitle=Xe.subtitle),"all"!==Xe.region&&(n.region=Xe.region),"all"!==Xe.resolution&&(n.resolution=Xe.resolution));const r=ke&&!t?await lr(ke,e):await ir.get("http://localhost:8088/torrent",{params:n});if(200===r.data.code){J(r.data.data.records);const t=r.data.data.total;F(Math.ceil(t/5)),L(e)}else ae(r.data.message)}catch(n){ae(n.message)}finally{ne(!1)}};(0,r.useEffect)((()=>{"share"===De&&Ve()}),[De]);const Qe=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;V(!0);try{const t=await function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return ir.get("/request/posts",{params:{page:e,size:t}})}(e);if(200===t.data.code){const n=await Promise.all(t.data.data.records.map((async e=>{try{const t=await ur(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));G(n),F(Math.ceil(t.data.data.total/5)),L(e)}else K(t.data.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}catch(t){K(t.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}finally{V(!1)}},Ke=e=>{D(e.target.files[0])},$e=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;O(!0);try{const t=await function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return ir.get("/help/posts",{params:{page:e,size:t}})}(e);if(200===t.data.code){const n=await Promise.all(t.data.data.records.map((async e=>{try{const t=await cr(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));T(n),F(Math.ceil(t.data.data.total/5)),L(e)}else R(t.data.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}finally{O(!1)}};(0,r.useEffect)((()=>{"request"===De&&Qe(A)}),[De,A]);const Ge={type:{label:"\u7c7b\u578b",options:{all:"\u5168\u90e8","\u7535\u5f71":"\u7535\u5f71","\u7535\u89c6\u5267":"\u7535\u89c6\u5267","\u52a8\u6f2b":"\u52a8\u6f2b","\u7efc\u827a":"\u7efc\u827a","\u97f3\u4e50":"\u97f3\u4e50","\u5176\u4ed6":"\u5176\u4ed6"}},subtitle:{label:"\u5b57\u5e55",options:{all:"\u5168\u90e8","\u65e0\u9700\u5b57\u5e55":"\u65e0\u9700\u5b57\u5e55","\u6682\u65e0\u5b57\u5e55":"\u6682\u65e0\u5b57\u5e55","\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55":"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55","\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)":"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)","\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55":"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55","\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55":"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55"}},region:{label:"\u5730\u533a",options:{all:"\u5168\u90e8","\u4e2d\u56fd":"\u4e2d\u56fd","\u82f1\u56fd":"\u82f1\u56fd","\u7f8e\u56fd":"\u7f8e\u56fd","\u65e5\u672c":"\u65e5\u672c","\u97e9\u56fd":"\u97e9\u56fd","\u5176\u4ed6":"\u5176\u4ed6"}},resolution:{label:"\u5206\u8fa8\u7387",options:{all:"\u5168\u90e8","4K":"4K","2K":"2K","1080P":"1080P","720P":"720P",SD:"SD","\u65e0\u635f\u97f3\u6e90":"\u65e0\u635f\u97f3\u6e90","\u675c\u6bd4\u5168\u666f\u58f0":"\u675c\u6bd4\u5168\u666f\u58f0","\u5176\u4ed6":"\u5176\u4ed6"}}},[Xe,Je]=(0,r.useState)((null===(t=o.state)||void 0===t?void 0:t.savedFilters)||Object.keys(Ge).reduce(((e,t)=>(e[t]="all",e)),{})),Ze=async()=>{try{ne(!0);const e={page:1,size:5};"all"!==Xe.type&&(e.category=Xe.type),"all"!==Xe.subtitle&&(e.subtitle=Xe.subtitle),"all"!==Xe.region&&(e.region=Xe.region),"all"!==Xe.resolution&&(e.resolution=Xe.resolution);const t=await ir.get("http://localhost:8088/torrent",{params:e});200===t.data.code?(J(t.data.data.records),F(Math.ceil(t.data.data.total/5)),L(1)):ae(t.data.message||"\u7b5b\u9009\u5931\u8d25")}catch(e){ae(e.message||"\u7b5b\u9009\u5931\u8d25")}finally{ne(!1)}};(0,r.useEffect)((()=>{var e;null!==(e=o.state)&&void 0!==e&&e.scrollPosition&&window.scrollTo(0,o.state.scrollPosition)}),[o.state]),(0,r.useEffect)((()=>{if(!localStorage.getItem("token"))return void p("/login");(async()=>{try{l(!0);const e=await sr();console.log("\u540e\u7aef\u8fd4\u56de\u7684\u7528\u6237\u6570\u636e:",e),i({name:e.username||"\u6f14\u793a\u7528\u6237",avatar:"https://via.placeholder.com/40",isAdmin:"ADMIN"===e.authority})}catch(c){console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",c),u("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}finally{l(!1)}})()}),[p]),(0,r.useEffect)((()=>{if("announcement"===De){const e=setInterval((()=>{f((e=>(e+1)%(Y.length||1)))}),3e3);return()=>clearInterval(e)}}),[De]),(0,r.useEffect)((()=>{"help"===De&&$e()}),[De,A]);return s?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):c?(0,bd.jsx)("div",{className:"error",children:c}):(0,bd.jsxs)("div",{className:"dashboard-container","data-testid":"dashboard-container",children:[(0,bd.jsxs)("div",{className:"top-bar","data-testid":"top-bar",children:[(0,bd.jsx)("div",{className:"platform-name",children:(0,bd.jsx)("h2",{children:"PT\u8d44\u6e90\u7ad9"})}),(0,bd.jsxs)("div",{className:"user-actions",children:[(null===a||void 0===a?void 0:a.isAdmin)&&(0,bd.jsx)("button",{className:"admin-center-button",onClick:()=>p("/administer"),children:"\u7ba1\u7406\u5458\u4e2d\u5fc3"}),(0,bd.jsxs)("div",{className:"user-info","data-testid":"user-info",children:[(0,bd.jsx)("img",{src:(null===a||void 0===a?void 0:a.avatar)||"https://via.placeholder.com/40",alt:"\u7528\u6237\u5934\u50cf",className:"user-avatar",onClick:()=>p("/personal"),style:{cursor:"pointer"}}),(0,bd.jsx)("span",{className:"username",children:(null===a||void 0===a?void 0:a.name)||"\u7528\u6237"}),(0,bd.jsx)("button",{onClick:n,className:"logout-button",children:"\u9000\u51fa"})]})]})]}),(0,bd.jsxs)("div",{className:"nav-tabs",children:[(0,bd.jsx)("button",{className:"tab-button ".concat("announcement"===De?"active":""),onClick:()=>Pe("announcement"),children:"\u516c\u544a\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("share"===De?"active":""),onClick:()=>Pe("share"),children:"\u5206\u4eab\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("request"===De?"active":""),onClick:()=>Pe("request"),children:"\u6c42\u79cd\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("help"===De?"active":""),onClick:()=>Pe("help"),children:"\u6c42\u52a9\u533a"})]}),(()=>{switch(De){case"announcement":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"announcement-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u516c\u544a...",value:we,onChange:e=>xe(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Me()}),(0,bd.jsx)("button",{className:"search-button",onClick:Me,children:"\u641c\u7d22"})]}),(0,bd.jsxs)("div",{className:"carousel-container",children:[0===Y.length?(0,bd.jsx)("div",{className:"carousel-slide active",children:(0,bd.jsx)("div",{className:"carousel-image gray-bg",children:"\u6682\u65e0\u6298\u6263\u6d3b\u52a8"})}):Y.map(((e,t)=>(0,bd.jsx)("div",{className:"carousel-slide ".concat(d===t?"active":""),children:(0,bd.jsxs)("div",{className:"carousel-image gray-bg",children:[(0,bd.jsx)("h3",{children:e.type}),(0,bd.jsx)("p",{children:e.name}),(0,bd.jsxs)("p",{children:[new Date(e.startTime).toLocaleDateString()," ~ ",new Date(e.endTime).toLocaleDateString()]})]})},t))),(0,bd.jsx)("div",{className:"carousel-dots",children:Y.map(((e,t)=>(0,bd.jsx)("span",{className:"dot ".concat(d===t?"active":"")},t)))})]}),(0,bd.jsx)("div",{className:"announcement-grid",children:H.map((e=>(0,bd.jsxs)("div",{className:"announcement-card",onClick:t=>((e,t)=>{t.target.closest(".exclude-click")||p("/announcement/".concat(e.id),{state:{announcement:e,returnPath:"/dashboard/".concat(De),scrollPosition:window.scrollY,activeTab:De}})})(e,t),children:[(0,bd.jsx)("h3",{children:e.title}),(0,bd.jsxs)("p",{children:[e.content.substring(0,100),"..."]}),(0,bd.jsx)("div",{className:"announcement-footer exclude-click",children:(0,bd.jsx)("span",{children:e.date})})]},e.id)))})]});case"share":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"share-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u8d44\u6e90...",value:ke,onChange:e=>Se(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Re()}),(0,bd.jsx)("button",{className:"search-button",onClick:Re,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:Ae,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"upload-header",children:(0,bd.jsx)("button",{className:"upload-btn",onClick:()=>v(!0),children:"\uff0b \u4e0a\u4f20\u79cd\u5b50"})}),(0,bd.jsxs)("div",{className:"filter-section",children:[Object.entries(Ge).map((e=>{let[t,n]=e;return(0,bd.jsxs)("div",{className:"filter-group",children:[(0,bd.jsxs)("h4",{children:[n.label,"\uff1a"]}),(0,bd.jsx)("div",{className:"filter-options",children:Object.entries(n.options).map((e=>{let[n,r]=e;return(0,bd.jsx)("button",{className:"filter-btn ".concat(Xe[t]===n?"active":""),onClick:()=>((e,t)=>{Je((n=>_e(_e({},n),{},{[e]:n[e]===t?"all":t})))})(t,n),children:r},n)}))})]},t)})),(0,bd.jsx)("button",{className:"confirm-btn",onClick:Ze,children:"\u786e\u8ba4\u7b5b\u9009"})]}),m&&(0,bd.jsx)("div",{className:"modal-overlay",children:(0,bd.jsxs)("div",{className:"upload-modal",children:[(0,bd.jsx)("h3",{children:"\u4e0a\u4f20\u65b0\u79cd\u5b50"}),(0,bd.jsx)("button",{className:"close-btn",onClick:()=>v(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:He,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u79cd\u5b50\u540d\u79f0"}),(0,bd.jsx)("input",{type:"text",value:b.name,onChange:e=>w(_e(_e({},b),{},{name:e.target.value})),required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u8d44\u6e90\u7c7b\u578b"}),(0,bd.jsxs)("select",{value:b.type,onChange:e=>w(_e(_e({},b),{},{type:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u7535\u5f71",children:"\u7535\u5f71"}),(0,bd.jsx)("option",{value:"\u7535\u89c6\u5267",children:"\u7535\u89c6\u5267"}),(0,bd.jsx)("option",{value:"\u52a8\u6f2b",children:"\u52a8\u6f2b"}),(0,bd.jsx)("option",{value:"\u7efc\u827a",children:"\u7efc\u827a"}),(0,bd.jsx)("option",{value:"\u97f3\u4e50",children:"\u97f3\u4e50"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5730\u533a"}),(0,bd.jsxs)("select",{value:b.region||"",onChange:e=>w(_e(_e({},b),{},{region:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u4e2d\u56fd",children:"\u4e2d\u56fd"}),(0,bd.jsx)("option",{value:"\u82f1\u56fd",children:"\u82f1\u56fd"}),(0,bd.jsx)("option",{value:"\u7f8e\u56fd",children:"\u7f8e\u56fd"}),(0,bd.jsx)("option",{value:"\u65e5\u672c",children:"\u65e5\u672c"}),(0,bd.jsx)("option",{value:"\u97e9\u56fd",children:"\u97e9\u56fd"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5206\u8fa8\u7387"}),(0,bd.jsxs)("select",{value:b.resolution||"",onChange:e=>w(_e(_e({},b),{},{resolution:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"4K",children:"4K"}),(0,bd.jsx)("option",{value:"2K",children:"2K"}),(0,bd.jsx)("option",{value:"1080P",children:"1080P"}),(0,bd.jsx)("option",{value:"720P",children:"720P"}),(0,bd.jsx)("option",{value:"SD",children:"SD"}),(0,bd.jsx)("option",{value:"\u65e0\u635f\u97f3\u6e90",children:"\u65e0\u635f\u97f3\u6e90"}),(0,bd.jsx)("option",{value:"\u675c\u6bd4\u5168\u666f\u58f0",children:"\u675c\u6bd4\u5168\u666f\u58f0"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5b57\u5e55\u8bed\u8a00"}),(0,bd.jsxs)("select",{value:b.subtitle||"",onChange:e=>w(_e(_e({},b),{},{subtitle:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u65e0\u9700\u5b57\u5e55",children:"\u65e0\u9700\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u6682\u65e0\u5b57\u5e55",children:"\u6682\u65e0\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55",children:"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)",children:"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)"}),(0,bd.jsx)("option",{value:"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55",children:"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55",children:"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u79cd\u5b50\u6587\u4ef6"}),(0,bd.jsx)("input",{type:"file",accept:".torrent",onChange:Be})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u7b80\u4ecb"}),(0,bd.jsx)("textarea",{value:b.description,onChange:e=>w(_e(_e({},b),{},{description:e.target.value}))})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>v(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"confirm-btn",disabled:g,children:g?"\u4e0a\u4f20\u4e2d...":"\u786e\u8ba4\u4e0a\u4f20"})]})]})]})}),(0,bd.jsx)("div",{className:"resource-list",children:X.map((e=>(0,bd.jsxs)("div",{className:"resource-item",onClick:()=>p("/torrent/".concat(e.id)),children:[(0,bd.jsx)("div",{className:"resource-poster",children:(0,bd.jsx)("div",{className:"poster-image gray-bg",children:e.torrentName.charAt(0)})}),(0,bd.jsxs)("div",{className:"resource-info",children:[(0,bd.jsx)("h3",{className:"resource-title",children:e.torrentName}),(0,bd.jsxs)("p",{className:"resource-meta",children:[e.resolution," | ",e.region," | ",e.category]}),(0,bd.jsxs)("p",{className:"resource-subtitle",children:["\u5b57\u5e55: ",e.subtitle]})]}),(0,bd.jsxs)("div",{className:"resource-stats",children:[(0,bd.jsx)("span",{className:"stat",children:e.size}),(0,bd.jsxs)("span",{className:"stat",children:["\u53d1\u5e03\u8005: ",e.username]})]}),(0,bd.jsx)("button",{className:"download-btn",onClick:t=>((e,t)=>{t.stopPropagation(),pe(e),de(!0)})(e,t),children:"\u7acb\u5373\u4e0b\u8f7d"}),((null===a||void 0===a?void 0:a.isAdmin)||(null===a||void 0===a?void 0:a.name)===e.username)&&(0,bd.jsx)("button",{className:"delete-btn",onClick:t=>Ye(e.id,t),children:"\u5220\u9664"})]},e.id)))}),I>1&&(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>Ve(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>Ve(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>Ve(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]})]});case"request":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"request-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u6c42\u52a9...",value:Ee,onChange:e=>Ce(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Le()}),(0,bd.jsx)("button",{className:"search-button",onClick:Le,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:Ie,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"post-header",children:(0,bd.jsx)("button",{className:"create-post-btn",onClick:()=>k(!0),children:"\uff0b \u53d1\u5e16\u6c42\u52a9"})}),q&&(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}),Q&&(0,bd.jsx)("div",{className:"error",children:M}),(0,bd.jsx)("div",{className:"request-list",children:$.map((e=>(0,bd.jsxs)("div",{className:"request-post ".concat(e.isSolved?"solved":""),onClick:()=>p("/request/".concat(e.id)),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:e.authorAvatar||"https://via.placeholder.com/40",alt:e.authorId,className:"post-avatar"}),(0,bd.jsx)("div",{className:"post-author",children:e.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(e.createTime).toLocaleDateString()}),e.isSolved&&(0,bd.jsx)("span",{className:"solved-badge",children:"\u5df2\u89e3\u51b3"})]}),(0,bd.jsx)("h3",{className:"post-title",children:e.title}),(0,bd.jsx)("p",{className:"post-content",children:e.content}),(0,bd.jsxs)("div",{className:"post-stats",children:[(0,bd.jsxs)("span",{className:"post-likes",children:["\ud83d\udc4d ",e.likeCount||0]}),(0,bd.jsxs)("span",{className:"post-comments",children:["\ud83d\udcac ",e.replyCount||0]})]})]},e.id)))}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>Qe(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>Qe(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>Qe(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]}),x&&(0,bd.jsx)("div",{className:"post-modal-overlay",children:(0,bd.jsxs)("div",{className:"post-modal",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u6c42\u79cd\u5e16"}),(0,bd.jsx)("button",{className:"modal-close-btn",onClick:()=>k(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:We,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u6807\u9898"}),(0,bd.jsx)("input",{type:"text",value:S,onChange:e=>E(e.target.value),placeholder:"\u8bf7\u8f93\u5165\u6807\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u5185\u5bb9"}),(0,bd.jsx)("textarea",{value:C,onChange:e=>N(e.target.value),placeholder:"\u8be6\u7ec6\u63cf\u8ff0\u4f60\u7684\u95ee\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0a\u4f20\u56fe\u7247"}),(0,bd.jsxs)("div",{className:"upload-image-btn",children:[(0,bd.jsx)("input",{type:"file",id:"image-upload",accept:"image/*",onChange:Ke,style:{display:"none"}}),(0,bd.jsx)("label",{htmlFor:"image-upload",children:j?"\u5df2\u9009\u62e9\u56fe\u7247":"\u9009\u62e9\u56fe\u7247"}),j&&(0,bd.jsx)("span",{className:"image-name",children:j.name})]})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>k(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u786e\u8ba4\u53d1\u5e16"})]})]})]})})]});case"help":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"help-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u6c42\u52a9...",value:Ne,onChange:e=>je(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Fe()}),(0,bd.jsx)("button",{className:"search-button",onClick:Fe,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:ze,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"post-header",children:(0,bd.jsx)("button",{className:"create-post-btn",onClick:()=>k(!0),children:"\uff0b \u53d1\u5e16\u6c42\u52a9"})}),_&&(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}),M&&(0,bd.jsx)("div",{className:"error",children:M}),(0,bd.jsx)("div",{className:"help-list",children:P.map((e=>(0,bd.jsxs)("div",{className:"help-post ".concat(e.isSolved?"solved":""),onClick:()=>p("/help/".concat(e.id)),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:e.authorAvatar||"https://via.placeholder.com/40",alt:e.authorId,className:"post-avatar"}),(0,bd.jsx)("div",{className:"post-author",children:e.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(e.createTime).toLocaleDateString()}),e.isSolved&&(0,bd.jsx)("span",{className:"solved-badge",children:"\u5df2\u89e3\u51b3"})]}),(0,bd.jsx)("h3",{className:"post-title",children:e.title}),(0,bd.jsx)("p",{className:"post-content",children:e.content}),(0,bd.jsxs)("div",{className:"post-stats",children:[(0,bd.jsxs)("span",{className:"post-likes",children:["\ud83d\udc4d ",e.likeCount||0]}),(0,bd.jsxs)("span",{className:"post-comments",children:["\ud83d\udcac ",e.replyCount||0]})]})]},e.id)))}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>$e(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>$e(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>$e(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]}),x&&(0,bd.jsx)("div",{className:"post-modal-overlay",children:(0,bd.jsxs)("div",{className:"post-modal",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u6c42\u52a9\u5e16"}),(0,bd.jsx)("button",{className:"modal-close-btn",onClick:()=>k(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:qe,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u6807\u9898"}),(0,bd.jsx)("input",{type:"text",value:S,onChange:e=>E(e.target.value),placeholder:"\u8bf7\u8f93\u5165\u6807\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u5185\u5bb9"}),(0,bd.jsx)("textarea",{value:C,onChange:e=>N(e.target.value),placeholder:"\u8be6\u7ec6\u63cf\u8ff0\u4f60\u7684\u95ee\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0a\u4f20\u56fe\u7247"}),(0,bd.jsxs)("div",{className:"upload-image-btn",children:[(0,bd.jsx)("input",{type:"file",id:"image-upload",accept:"image/*",onChange:Ke,style:{display:"none"}}),(0,bd.jsx)("label",{htmlFor:"image-upload",children:j?"\u5df2\u9009\u62e9\u56fe\u7247":"\u9009\u62e9\u56fe\u7247"}),j&&(0,bd.jsx)("span",{className:"image-name",children:j.name})]})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>k(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u786e\u8ba4\u53d1\u5e16"})]})]})]})})]});default:return(0,bd.jsx)("div",{className:"content-area","data-testid":"default-section",children:"\u516c\u544a\u533a\u5185\u5bb9"})}})(),ue&&fe&&(0,bd.jsx)("div",{className:"modal-overlay",children:(0,bd.jsxs)("div",{className:"download-modal",children:[(0,bd.jsxs)("h3",{children:["\u4e0b\u8f7d ",fe.torrentName]}),(0,bd.jsx)("button",{className:"close-btn",onClick:()=>!ve&&de(!1),disabled:ve,children:"\xd7"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0b\u8f7d\u8def\u5f84:"}),(0,bd.jsx)("input",{type:"text",value:ye,onChange:e=>{let t=e.target.value.replace(/\t/g,"").replace(/\\/g,"/").replace(/\s+/g," ");be(t)},disabled:ve,placeholder:"\u4f8b\u5982: D:/downloads/"})]}),ve&&(0,bd.jsx)("div",{className:"progress-container",children:(0,bd.jsxs)("div",{className:"progress-bar",style:{width:"".concat(he,"%")},children:[he,"%"]})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{onClick:()=>!ve&&de(!1),disabled:ve,children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{onClick:async()=>{if(fe&&ye){ge(!0),me(0);try{const e=ye.replace(/\\/g,"/").replace(/\/+/g,"/").trim(),t=e.endsWith("/")?e:e+"/";await async function(e,t){try{return(await ir.get("/torrent/downloadTorrent",{params:{id:e,downloadPath:t}})).data}catch(c){throw console.error("\u4e0b\u8f7d\u79cd\u5b50\u5931\u8d25:",c),c}}(fe.id,t);const n=setInterval((async()=>{try{const e=await async function(){try{return(await ir.get("/torrent/getProgress")).data}catch(c){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",c),c}}(),t=e.data.progresses;if(t){fe.filePath.replace(/\\/g,"/"),fe.hash;let e=null;for(const[n,r]of Object.entries(t)){const t=n.replace(/\\/g,"/");if(t.includes(fe.hash)||t.includes(fe.torrentName)){e=r;break}}if(null!==e){const t=Math.round(100*e);me(t),t>=100&&(clearInterval(n),ge(!1),vd.success("\u4e0b\u8f7d\u5b8c\u6210\uff01"),setTimeout((()=>de(!1)),2e3))}else console.log("\u5f53\u524d\u4e0b\u8f7d\u8fdb\u5ea6:",t)}}catch(c){console.error("\u83b7\u53d6\u8fdb\u5ea6\u5931\u8d25:",c);const r="".concat(t).concat(fe.torrentName||"downloaded_file");try{await Ue(r)&&(clearInterval(n),me(100),ge(!1),vd.success("\u4e0b\u8f7d\u5b8c\u6210\uff01"),setTimeout((()=>de(!1)),2e3))}catch(Dy){console.error("\u6587\u4ef6\u68c0\u67e5\u5931\u8d25:",Dy)}}}),2e3);return()=>clearInterval(n)}catch(c){ge(!1),c.response&&409===c.response.status?vd.error("\u5206\u4eab\u7387\u4e0d\u8db3\uff0c\u65e0\u6cd5\u4e0b\u8f7d\u6b64\u8d44\u6e90"):vd.error("\u4e0b\u8f7d\u5931\u8d25: "+(c.message||"\u672a\u77e5\u9519\u8bef"))}}},disabled:ve||!ye,children:ve?"\u4e0b\u8f7d\u4e2d...":"\u5f00\u59cb\u4e0b\u8f7d"})]})]})})]})},xd=async()=>{try{const e=await ir.get("/user/userInfo");if(200===e.data.code){const t=e.data.data;return{username:t.username,level:t.level,registTime:Sd(t.registTime),magicPoints:t.magicPoints,upload:t.upload,download:t.download,shareRate:t.shareRate.toFixed(2)}}throw new Error(e.data.message||"\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e),e}},kd=async()=>{try{const e=await ir.get("/user/allowDownload");if(200===e.data.code){const t=e.data.data;return{total:t.total,used:t.used,remaining:t.remaining}}throw new Error(e.data.message||"\u83b7\u53d6\u4e0b\u8f7d\u989d\u5ea6\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u989d\u5ea6\u5931\u8d25:",e),e}},Sd=e=>{const t=new Date(e),n=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0");return"".concat(n,"-").concat(r,"-").concat(o)},Ed=async()=>{try{const e=await ir.get("/invitecode/userInviteCode");if(200===e.data.code)return e.data.data.inviteCode;throw new Error(e.data.message||"\u83b7\u53d6\u9080\u8bf7\u7801\u5217\u8868\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u9080\u8bf7\u7801\u5217\u8868\u5931\u8d25:",e),e}},Cd=()=>{const e=te(),t=Z(),[n,o]=(0,r.useState)(null),[a,i]=(0,r.useState)(!0),[s,l]=(0,r.useState)(null),[c,u]=(0,r.useState)({});(0,r.useEffect)((()=>{(async()=>{try{const[e,t]=await Promise.all([xd(),kd()]);o({username:e.username,avatar:"https://via.placeholder.com/150",joinDate:e.registTime,level:e.level,points:e.magicPoints,upload:e.upload,download:e.download,ratio:e.shareRate,downloadQuota:{total:t.total,used:t.used,remaining:t.remaining}})}catch(e){l(e.message)}finally{i(!1)}})()}),[]);const d=async()=>{try{const e=await(async()=>{try{const e=await ir.get("/torrent/getProgress");if(200===e.data.code)return e.data.data.progresses;throw new Error(e.data.message||"\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25")}catch(s){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",s),s}})();u(e)}catch(e){console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",e)}};if((0,r.useEffect)((()=>{d();const e=setInterval(d,1e4);return()=>clearInterval(e)}),[]),a)return(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."});if(s)return(0,bd.jsxs)("div",{className:"error",children:["\u9519\u8bef: ",s]});if(!n)return(0,bd.jsx)("div",{className:"error",children:"\u672a\u83b7\u53d6\u5230\u7528\u6237\u6570\u636e"});const f=e=>{if(e<1024)return"".concat(e," B");const t=e/1024;if(t<1024)return"".concat(t.toFixed(2)," KB");const n=t/1024;if(n<1024)return"".concat(n.toFixed(2)," MB");return"".concat((n/1024).toFixed(2)," GB")};return(0,bd.jsxs)("div",{className:"personal-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var n;null!==(n=t.state)&&void 0!==n&&n.fromSubpage?e("/dashboard/".concat(t.state.dashboardTab||""),{replace:!0}):e(-1)},children:"\u2190 \u8fd4\u56de"}),(0,bd.jsxs)("div",{className:"profile-card",children:[(0,bd.jsxs)("div",{className:"profile-header",children:[(0,bd.jsx)("img",{src:n.avatar,alt:n.username,className:"profile-avatar"}),(0,bd.jsxs)("div",{className:"profile-info",children:[(0,bd.jsx)("h2",{className:"username",children:n.username}),(0,bd.jsxs)("div",{className:"user-meta",children:[(0,bd.jsxs)("span",{children:["\u52a0\u5165\u65f6\u95f4: ",n.joinDate]}),(0,bd.jsxs)("span",{children:["\u4f1a\u5458\u7b49\u7ea7: Lv.",n.level]})]})]})]}),(0,bd.jsxs)("div",{className:"stats-grid",children:[(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4fdd\u79cd\u79ef\u5206"}),(0,bd.jsx)("div",{className:"stat-value",children:n.points})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("div",{className:"stat-value",children:f(n.upload)})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4e0b\u8f7d\u91cf"}),(0,bd.jsx)("div",{className:"stat-value",children:f(n.download)})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u5206\u4eab\u7387"}),(0,bd.jsx)("div",{className:"stat-value",children:n.ratio})]})]})]}),(0,bd.jsxs)("div",{className:"quota-card",children:[(0,bd.jsx)("h3",{children:"\u4e0b\u8f7d\u989d\u5ea6"}),(0,bd.jsxs)("div",{className:"quota-info",children:[(0,bd.jsxs)("span",{className:"quota-used",children:[f(n.downloadQuota.used)," \u5df2\u4f7f\u7528"]}),(0,bd.jsxs)("span",{className:"quota-remaining",children:[f(n.downloadQuota.remaining)," \u5269\u4f59"]})]}),(0,bd.jsx)("div",{className:"progress-bar",children:(0,bd.jsx)("div",{className:"progress-fill",style:{width:"".concat(n.downloadQuota.used/n.downloadQuota.total*100,"%"),backgroundColor:(p=n.downloadQuota.used/n.downloadQuota.total,p<.3?"#4CAF50":p<.7?"#FFC107":"#F44336")}})}),(0,bd.jsxs)("div",{className:"quota-total",children:["\u603b\u989d\u5ea6: ",f(n.downloadQuota.total)]})]}),Object.keys(c).length>0&&(0,bd.jsxs)("div",{className:"progress-card",children:[(0,bd.jsx)("h3",{children:"\u5f53\u524d\u4e0b\u8f7d\u8fdb\u5ea6"}),Object.entries(c).map((e=>{let[t,n]=e;return(0,bd.jsxs)("div",{className:"download-task",children:[(0,bd.jsxs)("div",{className:"task-info",children:[(0,bd.jsxs)("span",{className:"task-id",children:["\u4efb\u52a1: ",t.substring(0,8),"..."]}),(0,bd.jsxs)("span",{className:"task-progress",children:[Math.round(100*n),"%"]})]}),(0,bd.jsx)("div",{className:"progress-bar",children:(0,bd.jsx)("div",{className:"progress-fill",style:{width:"".concat(100*n,"%")}})})]},t)}))]}),(0,bd.jsx)("div",{className:"action-cards",children:[{title:"\u5151\u6362\u533a",description:"\u4e0b\u8f7d\u91cf/\u9080\u8bf7\u7801",path:"/personal/Exchange"},{title:"\u4e0a\u4f20\u8bb0\u5f55",description:"\u7ba1\u7406\u4e0a\u4f20\u7684\u8d44\u6e90",path:"/personal/Upload"},{title:"\u6d88\u606f\u901a\u77e5",description:"\u67e5\u770b\u7cfb\u7edf\u6d88\u606f",path:"/personal/Notice"},{title:"\u8bbe\u7f6e",description:"\u4fee\u6539\u4e2a\u4eba\u8d44\u6599",path:"/personal/Setting"}].map((t=>(0,bd.jsxs)("div",{className:"action-card",onClick:()=>{return n=t.path,void e(n);var n},children:[(0,bd.jsx)("h3",{children:t.title}),(0,bd.jsx)("p",{children:t.description})]},t.path)))}),(0,bd.jsx)("div",{className:"subpage-container",children:(0,bd.jsx)(ye,{})})]});var p},Nd=e=>{let{onLoginSuccess:t}=e;const[n,o]=(0,r.useState)(!0),[a,i]=(0,r.useState)({username:"",password:"",code:""}),[s,l]=(0,r.useState)(""),[c,u]=(0,r.useState)(!1),d=te(),f=e=>{const{name:t,value:n}=e.target;i((e=>_e(_e({},e),{},{[t]:n})))},p=async e=>{e.preventDefault();try{if(n){const e=await(async(e,t)=>{const n=await ir.post("/user/login",null,{params:{username:e,password:t}});return 200===n.data.code&&n.data.data.token&&localStorage.setItem("token",n.data.data.token),n})(a.username,a.password);200===e.data.code?(localStorage.setItem("token",e.data.data.token),localStorage.setItem("username",a.username),null===t||void 0===t||t(),d("/dashboard")):l(e.data.message||"\u767b\u5f55\u5931\u8d25")}else{const e=await(r=a.username,s=a.password,c=a.code,ir.post("/user/regist",null,{params:{username:r,password:s,code:c}}));200===e.data.code?(l(""),o(!0),i({username:"",password:"",code:""})):l(e.data.message||"\u6ce8\u518c\u5931\u8d25")}}catch(f){l(f.message||(n?"\u767b\u5f55\u5931\u8d25":"\u6ce8\u518c\u5931\u8d25"))}finally{u(!1)}var r,s,c};return(0,bd.jsxs)("div",{className:"auth-container",children:[(0,bd.jsx)("h1",{className:"auth-title",children:"PT\u5f71\u89c6\u8d44\u6e90\u7ad9"}),(0,bd.jsx)("div",{className:"auth-form-wrapper",children:n?(0,bd.jsxs)("form",{className:"auth-form",onSubmit:p,children:[(0,bd.jsx)("h2",{children:"\u7528\u6237\u767b\u5f55"}),s&&(0,bd.jsx)("div",{className:"error-message",children:s}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"username",placeholder:"\u8d26\u53f7",value:a.username,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"password",name:"password",placeholder:"\u5bc6\u7801",value:a.password,onChange:f,required:!0})}),(0,bd.jsx)("button",{type:"submit",className:"auth-button",disabled:c,children:c?"\u767b\u5f55\u4e2d...":"\u767b\u5f55"}),(0,bd.jsxs)("div",{className:"auth-switch",children:[(0,bd.jsx)("span",{children:"\u672a\u6709\u8d26\u6237\uff1f"}),(0,bd.jsx)("button",{type:"button",onClick:()=>o(!1),className:"switch-button",children:"\u53bb\u6ce8\u518c"})]})]}):(0,bd.jsxs)("form",{className:"auth-form",onSubmit:p,children:[(0,bd.jsx)("h2",{children:"\u7528\u6237\u6ce8\u518c"}),s&&(0,bd.jsx)("div",{className:"error-message",children:s}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"username",placeholder:"\u8d26\u53f7",value:a.username,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"password",name:"password",placeholder:"\u5bc6\u7801",value:a.password,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"code",placeholder:"\u9080\u8bf7\u7801",value:a.code,onChange:f,required:!0})}),(0,bd.jsx)("button",{type:"submit",className:"auth-button",disabled:c,children:c?"\u6ce8\u518c\u4e2d...":"\u6ce8\u518c"}),(0,bd.jsxs)("div",{className:"auth-switch",children:[(0,bd.jsx)("span",{children:"\u5df2\u6709\u8d26\u6237\uff1f"}),(0,bd.jsx)("button",{type:"button",onClick:()=>o(!0),className:"switch-button",children:"\u53bb\u767b\u5f55"})]})]})})]})},jd=()=>{const e=te(),{id:t}=re(),[n,o]=(0,r.useState)(null),[a,i]=(0,r.useState)(!0),[s,l]=(0,r.useState)(""),c=Z(),{state:u}=Z(),d=()=>{var t;const n=null===(t=c.state)||void 0===t?void 0:t.fromTab;e(n?"/dashboard/".concat(n):-1)};return(0,r.useEffect)((()=>{(async()=>{try{i(!0);const e=await(e=>ir.get("/announcement/".concat(e)))(t);200===e.data.code?o(e.data.data.announcement):l(e.data.message||"\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25")}catch(e){l("\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25"),vd.error("\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25")}finally{i(!1)}})()}),[t]),s||!n?(0,bd.jsxs)("div",{className:"announcement-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:d,children:"\u2190 \u8fd4\u56de"}),(0,bd.jsx)("div",{className:"error-message",children:s||"\u516c\u544a\u4e0d\u5b58\u5728"})]}):(0,bd.jsxs)("div",{className:"announcement-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:d,children:"\u2190 \u8fd4\u56de"}),(0,bd.jsxs)("div",{className:"announcement-detail",children:[(0,bd.jsxs)("div",{className:"announcement-header",children:[(0,bd.jsx)("h1",{children:n.title}),(0,bd.jsx)("div",{className:"announcement-meta",children:(0,bd.jsxs)("span",{children:["\u53d1\u5e03\u65e5\u671f\uff1a",n.createTime]})})]}),(0,bd.jsx)("div",{className:"announcement-content",children:n.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t)))})]})]})},Dd=e=>{let{onLogout:t}=e;const{id:n}=re(),o=te(),a=Z(),[i,s]=(0,r.useState)(null),[l,c]=(0,r.useState)([]),[u,d]=(0,r.useState)(""),[f]=(0,r.useState)(null),[p,h]=(0,r.useState)(""),[m,v]=(0,r.useState)(!0),[g,y]=(0,r.useState)(""),[b,w]=(0,r.useState)(null),[x,k]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),S=(e,t)=>{k({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},E=()=>{k({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),h("")},C=e=>{let{comment:t,onLike:n,onReply:r,isReply:o=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(o?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"})]})]})]})})},N=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(C,{comment:e,onLike:D,onReply:S,isReply:t>0}),e.replies&&e.replies.map((e=>N(e,t+1)))]},e.id)},j=async()=>{try{v(!0);const e=await(r=n,ir.get("/torrent/".concat(r)).then((e=>e.data&&e.data.data?_e(_e({},e),{},{data:_e(_e({},e.data),{},{data:{torrent:e.data.data.torrent,comments:e.data.data.comments||[]}})}):e)));console.log("API Response:",JSON.parse(JSON.stringify(e.data.data.comments))),s(e.data.data.torrent),c(e.data.data.comments)}catch(o){var e,t;y((null===(e=o.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.message)||"\u83b7\u53d6\u79cd\u5b50\u8be6\u60c5\u5931\u8d25")}finally{v(!1)}var r};(0,r.useEffect)((()=>{j()}),[n]);const D=async e=>{try{await(e=>ir.post("/torrent/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));c((e=>t(e)))}catch(r){var t,n;y("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return m?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):g?(0,bd.jsx)("div",{className:"error",children:g}):i?(0,bd.jsxs)("div",{className:"torrent-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;const t=(null===(e=a.state)||void 0===e?void 0:e.fromTab)||"share";o("/dashboard/".concat(t))},children:"\u2190 \u8fd4\u56de\u8d44\u6e90\u533a"}),(0,bd.jsxs)("div",{className:"torrent-main",children:[(0,bd.jsx)("div",{className:"torrent-cover",children:(0,bd.jsx)("div",{className:"cover-placeholder",children:i.torrentName.charAt(0)})}),(0,bd.jsxs)("div",{className:"torrent-info",children:[(0,bd.jsx)("h1",{className:"torrent-title",children:i.torrentName}),(0,bd.jsxs)("div",{className:"uploader-info",children:[(0,bd.jsx)("div",{className:"uploader-avatar",children:i.username.charAt(0)}),(0,bd.jsxs)("div",{className:"uploader-details",children:[(0,bd.jsx)("span",{className:"uploader-name",children:i.username}),(0,bd.jsx)("span",{className:"upload-time",children:new Date(i.createTime).toLocaleString()})]})]}),(0,bd.jsxs)("div",{className:"torrent-meta",children:[(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u7c7b\u578b:"})," ",i.category]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5730\u533a:"})," ",i.region]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5206\u8fa8\u7387:"})," ",i.resolution]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5b57\u5e55:"})," ",i.subtitle]}),i.size&&(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5927\u5c0f:"})," ",i.size]})]}),(0,bd.jsxs)("div",{className:"torrent-description",children:[(0,bd.jsx)("h3",{children:"\u8d44\u6e90\u63cf\u8ff0"}),(0,bd.jsx)("p",{children:i.description})]}),(0,bd.jsxs)("div",{className:"interaction-buttons",children:[(0,bd.jsx)("button",{className:"like-button",onClick:async()=>{try{await(r=n,ir.post("/torrent/".concat(r,"/like"))),s((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(o){var e,t;y("\u70b9\u8d5e\u5931\u8d25: "+((null===(e=o.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.message)||o.message))}var r},children:(0,bd.jsxs)("span",{children:["\ud83d\udc4d \u70b9\u8d5e (",i.likeCount,")"]})}),(0,bd.jsx)("button",{className:"download-button",children:(0,bd.jsx)("span",{children:"\u2b07\ufe0f \u7acb\u5373\u4e0b\u8f7d"})})]})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",i.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async e=>{var t,r;if(e.preventDefault(),u.trim())try{const e=localStorage.getItem("username"),o=await(t=n,r={content:u,authorId:e},ir.post("/torrent/".concat(t,"/comments"),r));o.data&&200===o.data.code?(await j(),d("")):y(o.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;y("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:u,onChange:e=>d(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"})]}),(0,bd.jsx)("div",{className:"comment-list",children:l.map((e=>N(e)))}),x.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",x.replyingToUsername]}),(0,bd.jsx)("button",{onClick:E,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{var t,n;if(e.preventDefault(),p.trim())try{const e=localStorage.getItem("username"),r=await(t=x.replyingTo,n={content:p,authorId:e},ir.post("/torrent/comments/".concat(t,"/replies"),n));console.log("\u56de\u590d\u54cd\u5e94:",r.data),r.data&&200===r.data.code&&(await j(),E())}catch(a){var r,o;console.error("\u56de\u590d\u9519\u8bef:",a),y("\u56de\u590d\u5931\u8d25: "+((null===(r=a.response)||void 0===r||null===(o=r.data)||void 0===o?void 0:o.message)||a.message))}},children:[(0,bd.jsx)("textarea",{value:p,onChange:e=>h(e.target.value),placeholder:"\u56de\u590d @".concat(x.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:E,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u79cd\u5b50\u4e0d\u5b58\u5728"})},Pd=()=>{const{id:e}=re(),t=te(),n=Z(),[o,a]=((0,r.useRef)(null),(0,r.useState)(null)),[i,s]=(0,r.useState)([]),[l,c]=(0,r.useState)(!0),[u,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(""),[h,m]=(0,r.useState)(""),[v,g]=(0,r.useState)([]),[y,b]=(0,r.useState)([]),[w,x]=(0,r.useState)({}),[k,S]=(0,r.useState)({}),[E]=(0,r.useState)(null),[C,N]=(0,r.useState)(null),[j,D]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),P=(e,t)=>{D({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},T=()=>{D({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),m("")},_=e=>{let{comment:t,onLike:n,onReply:r,onDelete:o,isReply:a=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(a?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),t.imageUrl&&(0,bd.jsx)("div",{className:"comment-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(t.imageUrl),alt:"\u8bc4\u8bba\u56fe\u7247",className:"comment-image",onClick:()=>window.open(t.imageUrl,"_blank")})}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"}),t.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-comment-btn",onClick:()=>o(t.id),children:"\u5220\u9664"})]})]})]})})},O=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(_,{comment:e,onLike:A,onReply:P,isReply:t>0,onDelete:L}),e.replies&&e.replies.map((e=>O(e,t+1)))]},e.id)},M=async()=>{try{c(!0);const t=await ur(e);console.log("API Response:",JSON.parse(JSON.stringify(t.data.data.comments))),a(t.data.data.post),s(t.data.data.comments)}catch(r){var t,n;d((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5e16\u5b50\u8be6\u60c5\u5931\u8d25")}finally{c(!1)}};(0,r.useEffect)((()=>{M()}),[e]);const R=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u5e16\u5b50\u5417\uff1f\u6240\u6709\u8bc4\u8bba\u4e5f\u5c06\u88ab\u5220\u9664\uff01"))try{const n=localStorage.getItem("username");await((e,t)=>ir.delete("/request/posts/".concat(e),{params:{authorId:t}}))(e,n),t("/dashboard/request")}catch(o){var n,r;d("\u5220\u9664\u5931\u8d25: "+((null===(n=o.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||o.message))}},A=async e=>{try{await(e=>ir.post("/request/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));s((e=>t(e)))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},L=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u6761\u8bc4\u8bba\u5417\uff1f"))try{const t=localStorage.getItem("username");await((e,t)=>ir.delete("/request/comments/".concat(e),{params:{authorId:t}}))(e,t),await M()}catch(r){var t,n;d("\u5220\u9664\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return l?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):u?(0,bd.jsx)("div",{className:"error",children:u}):o?(0,bd.jsxs)("div",{className:"request-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;null===(e=n.state)||void 0===e||e.fromTab;t("/dashboard/request")},children:"\u2190 \u8fd4\u56de\u6c42\u52a9\u533a"}),(0,bd.jsxs)("div",{className:"request-post ".concat(o.isSolved?"solved":""),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:o.authorAvatar||"https://via.placeholder.com/40",alt:o.authorId,className:"post-avatar"}),(0,bd.jsxs)("div",{className:"post-meta",children:[(0,bd.jsx)("div",{className:"post-author",children:o.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(o.createTime).toLocaleString()})]}),o.isSolved&&(0,bd.jsx)("span",{ClassName:"solved-badge",children:"\u5df2\u89e3\u51b3"}),(0,bd.jsx)("div",{classname:"delete-post",children:o.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-button",onClick:()=>R(o.id),children:"\u5220\u9664\u5e16\u5b50"})})]}),(0,bd.jsx)("h1",{className:"post-title",children:o.title}),(0,bd.jsxs)("div",{className:"post-content",children:[o.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t))),o.imageUrl&&(0,bd.jsx)("div",{className:"post-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(o.imageUrl),alt:"\u5e16\u5b50\u56fe\u7247",className:"post-image"})})]}),(0,bd.jsxs)("div",{className:"post-actions",children:[(0,bd.jsxs)("button",{className:"like-button ".concat(o.isLiked?"liked":""),onClick:async()=>{try{await((e,t)=>ir.post("/request/posts/".concat(e,"/like"),null,{params:t}))(e),a((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:["\ud83d\udc4d \u70b9\u8d5e (",o.likeCount,")"]}),(0,bd.jsx)("button",{className:"solve-button ".concat(o.isSolved?"solved":""),onClick:()=>{a((e=>_e(_e({},e),{},{isSolved:!e.isSolved})))},children:o.isSolved?"\u2713 \u5df2\u89e3\u51b3":"\u6807\u8bb0\u4e3a\u5df2\u89e3\u51b3"})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",o.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async t=>{var n,r;if(t.preventDefault(),f.trim())try{const t=localStorage.getItem("username"),o=new FormData;o.append("content",f),o.append("authorId",t),y&&o.append("image",y);const a=await(n=e,r=o,ir.post("/request/posts/".concat(n,"/comments"),r));a.data&&200===a.data.code?(await M(),p(""),b(null)):d(a.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;d("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:f,onChange:e=>p(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>b(e.target.files[0]),"data-testid":"comment-image-input"})})})]}),(0,bd.jsx)("div",{className:"comment-list",children:i.map((e=>O(e)))}),j.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",j.replyingToUsername]}),(0,bd.jsx)("button",{onClick:T,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),h.trim())try{const e=localStorage.getItem("username"),t=await((e,t)=>{const n=new FormData;return n.append("authorId",t.authorId),n.append("content",t.content),t.image&&n.append("image",t.image),ir.post("/request/comments/".concat(e,"/replies"),n)})(j.replyingTo,{authorId:e,content:h,image:v});console.log("\u56de\u590d\u54cd\u5e94:",t.data),t.data&&200===t.data.code&&(await M(),m(""),T())}catch(r){var t,n;console.error("\u56de\u590d\u9519\u8bef:",r),d("\u56de\u590d\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:[(0,bd.jsx)("textarea",{value:h,onChange:e=>m(e.target.value),placeholder:"\u56de\u590d @".concat(j.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>g(e.target.files[0])})})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:T,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u5e16\u5b50\u4e0d\u5b58\u5728"})},Td=()=>{const{id:e}=re(),t=te(),n=Z(),[o,a]=((0,r.useRef)(null),(0,r.useState)(null)),[i,s]=(0,r.useState)([]),[l,c]=(0,r.useState)(!0),[u,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(""),[h,m]=(0,r.useState)(""),[v,g]=(0,r.useState)([]),[y,b]=(0,r.useState)([]),[w,x]=(0,r.useState)({}),[k,S]=(0,r.useState)({}),[E]=(0,r.useState)(null),[C,N]=(0,r.useState)(null),[j,D]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),P=(e,t)=>{D({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},T=()=>{D({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),m("")},_=e=>{let{comment:t,onLike:n,onReply:r,onDelete:o,isReply:a=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(a?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),t.imageUrl&&(0,bd.jsx)("div",{className:"comment-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(t.imageUrl),alt:"\u8bc4\u8bba\u56fe\u7247",className:"comment-image",onClick:()=>window.open(t.imageUrl,"_blank")})}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"}),t.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-comment-btn",onClick:()=>o(t.id),children:"\u5220\u9664"})]})]})]})})},O=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(_,{comment:e,onLike:A,onReply:P,isReply:t>0,onDelete:L}),e.replies&&e.replies.map((e=>O(e,t+1)))]},e.id)},M=async()=>{try{c(!0);const t=await cr(e);console.log("API Response:",JSON.parse(JSON.stringify(t.data.data.comments))),a(t.data.data.post),s(t.data.data.comments)}catch(r){var t,n;d((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5e16\u5b50\u8be6\u60c5\u5931\u8d25")}finally{c(!1)}};(0,r.useEffect)((()=>{M()}),[e]);const R=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u5e16\u5b50\u5417\uff1f\u6240\u6709\u8bc4\u8bba\u4e5f\u5c06\u88ab\u5220\u9664\uff01"))try{const n=localStorage.getItem("username");await((e,t)=>ir.delete("/help/posts/".concat(e),{params:{authorId:t}}))(e,n),t("/dashboard/help")}catch(o){var n,r;d("\u5220\u9664\u5931\u8d25: "+((null===(n=o.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||o.message))}},A=async e=>{try{await(e=>ir.post("/help/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));s((e=>t(e)))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},L=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u6761\u8bc4\u8bba\u5417\uff1f"))try{const t=localStorage.getItem("username");await((e,t)=>ir.delete("/help/comments/".concat(e),{params:{authorId:t}}))(e,t),await M()}catch(r){var t,n;d("\u5220\u9664\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return l?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):u?(0,bd.jsx)("div",{className:"error",children:u}):o?(0,bd.jsxs)("div",{className:"help-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;null===(e=n.state)||void 0===e||e.fromTab;t("/dashboard/help")},children:"\u2190 \u8fd4\u56de\u6c42\u52a9\u533a"}),(0,bd.jsxs)("div",{className:"help-post ".concat(o.isSolved?"solved":""),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:o.authorAvatar||"https://via.placeholder.com/40",alt:o.authorId,className:"post-avatar"}),(0,bd.jsxs)("div",{className:"post-meta",children:[(0,bd.jsx)("div",{className:"post-author",children:o.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(o.createTime).toLocaleString()})]}),o.isSolved&&(0,bd.jsx)("span",{ClassName:"solved-badge",children:"\u5df2\u89e3\u51b3"}),(0,bd.jsx)("div",{classname:"delete-post",children:o.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-button",onClick:()=>R(o.id),children:"\u5220\u9664\u5e16\u5b50"})})]}),(0,bd.jsx)("h1",{className:"post-title",children:o.title}),(0,bd.jsxs)("div",{className:"post-content",children:[o.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t))),o.imageUrl&&(0,bd.jsx)("div",{className:"post-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(o.imageUrl),alt:"\u5e16\u5b50\u56fe\u7247",className:"post-image"})})]}),(0,bd.jsxs)("div",{className:"post-actions",children:[(0,bd.jsxs)("button",{className:"like-button ".concat(o.isLiked?"liked":""),onClick:async()=>{try{await((e,t)=>ir.post("/help/posts/".concat(e,"/like"),null,{params:t}))(e),a((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:["\ud83d\udc4d \u70b9\u8d5e (",o.likeCount,")"]}),(0,bd.jsx)("button",{className:"solve-button ".concat(o.isSolved?"solved":""),onClick:()=>{a((e=>_e(_e({},e),{},{isSolved:!e.isSolved})))},children:o.isSolved?"\u2713 \u5df2\u89e3\u51b3":"\u6807\u8bb0\u4e3a\u5df2\u89e3\u51b3"})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",o.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async t=>{var n,r;if(t.preventDefault(),f.trim())try{const t=localStorage.getItem("username"),o=new FormData;o.append("content",f),o.append("authorId",t),y&&o.append("image",y);const a=await(n=e,r=o,ir.post("/help/posts/".concat(n,"/comments"),r));a.data&&200===a.data.code?(await M(),p(""),b(null)):d(a.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;d("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:f,onChange:e=>p(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>b(e.target.files[0]),"data-testid":"comment-image-input"})})})]}),(0,bd.jsx)("div",{className:"comment-list",children:i.map((e=>O(e)))}),j.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",j.replyingToUsername]}),(0,bd.jsx)("button",{onClick:T,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),h.trim())try{const e=localStorage.getItem("username"),t=await((e,t)=>{const n=new FormData;return n.append("authorId",t.authorId),n.append("content",t.content),t.image&&n.append("image",t.image),ir.post("/help/comments/".concat(e,"/replies"),n)})(j.replyingTo,{authorId:e,content:h,image:v});console.log("\u56de\u590d\u54cd\u5e94:",t.data),t.data&&200===t.data.code&&(await M(),m(""),T())}catch(r){var t,n;console.error("\u56de\u590d\u9519\u8bef:",r),d("\u56de\u590d\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:[(0,bd.jsx)("textarea",{value:h,onChange:e=>m(e.target.value),placeholder:"\u56de\u590d @".concat(j.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>g(e.target.files[0])})})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:T,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u5e16\u5b50\u4e0d\u5b58\u5728"})},_d=()=>{const e=te(),t=Z(),[n,o]=(0,r.useState)([]),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)("0"),[c,u]=(0,r.useState)(!1),[d,f]=(0,r.useState)(null);(0,r.useEffect)((()=>{(async()=>{try{u(!0);const[e,t]=await Promise.all([xd(),Ed()]);i(e),o(t)}catch(e){f(e.message)}finally{u(!1)}})()}),[]);const p=()=>{var n;e("/personal",{state:{fromSubpage:!0,dashboardTab:null===(n=t.state)||void 0===n?void 0:n.dashboardTab},replace:!0})};return c?(0,bd.jsx)("div",{className:"subpage-container",children:"\u52a0\u8f7d\u4e2d..."}):d?(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:p,children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsxs)("div",{className:"error",children:["\u9519\u8bef: ",d]})]}):(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:p,children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u5151\u6362\u533a"}),(0,bd.jsxs)("div",{className:"exchange-section",children:[(0,bd.jsxs)("h3",{children:["\u5f53\u524d\u9b54\u529b\u503c: ",(null===a||void 0===a?void 0:a.magicPoints)||0]}),(0,bd.jsxs)("div",{className:"exchange-card",children:[(0,bd.jsx)("h4",{children:"\u5151\u6362\u9080\u8bf7\u7801"}),(0,bd.jsx)("p",{children:"\u6d88\u801710\u9b54\u529b\u503c\u5151\u6362\u4e00\u4e2a\u9080\u8bf7\u7801"}),(0,bd.jsx)("button",{className:"exchange-btn",onClick:async()=>{try{u(!0);const e=await(async()=>{try{const e=await ir.post("/invitecode/generate");if(200===e.data.code)return e.data.data.inviteCode;throw new Error(e.data.message||"\u751f\u6210\u9080\u8bf7\u7801\u5931\u8d25")}catch(d){throw console.error("\u751f\u6210\u9080\u8bf7\u7801\u5931\u8d25:",d),d}})();o([...n,e]);const t=await xd();i(t)}catch(e){f(e.message)}finally{u(!1)}},disabled:!a||a.magicPoints<10,children:"\u5151\u6362\u9080\u8bf7\u7801"})]}),(0,bd.jsxs)("div",{className:"exchange-card",children:[(0,bd.jsx)("h4",{children:"\u5151\u6362\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("p",{children:"1\u9b54\u529b\u503c = 1GB\u4e0a\u4f20\u91cf"}),(0,bd.jsxs)("div",{className:"exchange-input-group",children:[(0,bd.jsx)("input",{type:"number",value:s,onChange:e=>{const t=e.target.value;""!==t&&isNaN(t)||l(t)},min:"1",max:(null===a||void 0===a?void 0:a.magicPoints)||0,placeholder:"\u8f93\u5165\u8981\u5151\u6362\u7684\u9b54\u529b\u503c"}),(0,bd.jsx)("button",{className:"exchange-btn",onClick:async()=>{const e=Number(s);if(!e||e<=0)f("\u8bf7\u8f93\u5165\u6709\u6548\u7684\u9b54\u529b\u503c");else try{u(!0),await(async e=>{try{const t=await ir.post("/user/exchangeUpload",{magicPoint:e});if(200===t.data.code)return t.data;throw new Error(t.data.message||"\u5151\u6362\u4e0a\u4f20\u91cf\u5931\u8d25")}catch(d){throw console.error("\u5151\u6362\u4e0a\u4f20\u91cf\u5931\u8d25:",d),d}})(e);const t=await xd();i(t),l("0"),f(null)}catch(t){f(t.message)}finally{u(!1)}},disabled:!s||Number(s)<=0||!a||Number(s)>a.magicPoints,children:"\u5151\u6362\u4e0a\u4f20\u91cf"})]})]}),n.length>0&&(0,bd.jsxs)("div",{className:"invite-code-list",children:[(0,bd.jsx)("h4",{children:"\u6211\u7684\u9080\u8bf7\u7801"}),(0,bd.jsx)("ul",{children:n.map(((e,t)=>(0,bd.jsxs)("li",{children:[(0,bd.jsx)("span",{className:"code",children:e.code}),(0,bd.jsx)("span",{className:"status ".concat(e.isUsed?"used":"available"),children:e.isUsed?"\u5df2\u4f7f\u7528":"\u53ef\u7528"})]},t)))})]})]})]})},Od=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a,i]=(0,r.useState)([]),[s,l]=(0,r.useState)(!0),[c,u]=(0,r.useState)(null),[d,f]=(0,r.useState)({page:1,size:5,total:0}),p=async()=>{try{l(!0);const{records:e,total:t}=await async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;try{const n=await ir.get("/torrent/get/torrentMyself",{params:{page:e,size:t}});if(200===n.data.code)return{records:n.data.data.records.map((e=>_e(_e({},e.torrent),{},{downloadCount:e.downloadCount,formattedSize:e.formattedSize}))),total:n.data.data.total};throw new Error(n.data.message||"\u83b7\u53d6\u4e0a\u4f20\u8bb0\u5f55\u5931\u8d25")}catch(c){throw console.error("\u83b7\u53d6\u4e0a\u4f20\u8bb0\u5f55\u5931\u8d25:",c),c}}(d.page,d.size);i(e),f((e=>_e(_e({},e),{},{total:t})))}catch(e){u(e.message)}finally{l(!1)}},h=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u79cd\u5b50\u5417\uff1f\u6b64\u64cd\u4f5c\u4e0d\u53ef\u64a4\u9500\uff01"))try{await(async e=>{try{const t=await ir.delete("/torrent/deleteTorrent/".concat(e));if(200===t.data.code)return t.data;throw new Error(t.data.message||"\u5220\u9664\u79cd\u5b50\u5931\u8d25")}catch(c){throw console.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25:",c),c}})(e),p()}catch(t){alert("\u5220\u9664\u5931\u8d25: "+t.message)}},m=Math.ceil(d.total/d.size),v=()=>{const e=[];let t=Math.max(1,d.page-Math.floor(2.5)),n=Math.min(m,t+5-1);n-t+1<5&&(t=Math.max(1,n-5+1));for(let r=t;r<=n;r++)e.push(r);return e},g=e=>{e>=1&&e<=m&&e!==d.page&&f((t=>_e(_e({},t),{},{page:e})))};(0,r.useEffect)((()=>{p()}),[d.page]);return s?(0,bd.jsx)("div",{className:"subpage-container",children:"\u52a0\u8f7d\u4e2d..."}):c?(0,bd.jsxs)("div",{className:"subpage-container",children:["\u9519\u8bef: ",c]}):(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u4e0a\u4f20\u8bb0\u5f55"}),(0,bd.jsxs)("table",{className:"uploads-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u8d44\u6e90\u540d\u79f0"}),(0,bd.jsx)("th",{children:"\u5927\u5c0f"}),(0,bd.jsx)("th",{children:"\u4e0a\u4f20\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u4e0b\u8f7d\u6b21\u6570"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:a.map((e=>{return(0,bd.jsxs)("tr",{className:"list-item",children:[(0,bd.jsx)("td",{children:e.torrentName}),(0,bd.jsx)("td",{children:e.formattedSize}),(0,bd.jsx)("td",{children:(t=e.createTime,new Date(t).toLocaleString())}),(0,bd.jsx)("td",{children:e.downloadCount||0}),(0,bd.jsx)("td",{children:(0,bd.jsx)("button",{className:"action-btn delete-btn",onClick:()=>h(e.id),children:"\u5220\u9664"})})]},e.id);var t}))})]}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{disabled:d.page<=1,onClick:()=>g(1),className:"page-nav",children:"\u9996\u9875"}),(0,bd.jsx)("button",{disabled:d.page<=1,onClick:()=>g(d.page-1),className:"page-nav",children:"\u4e0a\u4e00\u9875"}),v().map((e=>(0,bd.jsx)("button",{onClick:()=>g(e),className:"page-number ".concat(d.page===e?"active":""),children:e},e))),m>v()[v().length-1]&&(0,bd.jsx)("span",{className:"ellipsis",children:"..."}),(0,bd.jsx)("button",{disabled:d.page>=m,onClick:()=>g(d.page+1),className:"page-nav",children:"\u4e0b\u4e00\u9875"}),(0,bd.jsx)("button",{disabled:d.page>=m,onClick:()=>g(m),className:"page-nav",children:"\u672b\u9875"}),(0,bd.jsxs)("div",{className:"page-info",children:[(0,bd.jsxs)("span",{children:["\u5171 ",m," \u9875"]}),(0,bd.jsx)("span",{children:"\u8df3\u81f3"}),(0,bd.jsx)("input",{type:"number",min:"1",max:m,onKeyDown:e=>{if("Enter"===e.key){const t=parseInt(e.target.value);isNaN(t)||(g(Math.max(1,Math.min(t,m))),e.target.value="")}}}),(0,bd.jsx)("span",{children:"\u9875"})]})]})]})},Md=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a]=r.useState([{id:1,title:"\u79ef\u5206\u5956\u52b1\u5230\u8d26",content:"\u60a8\u4e0a\u4f20\u7684\u8d44\u6e90\u300a\u76d7\u68a6\u7a7a\u95f4\u300b\u83b7\u5f97100\u79ef\u5206\u5956\u52b1",date:"2023-10-20",read:!1},{id:2,title:"\u7cfb\u7edf\u901a\u77e5",content:"\u670d\u52a1\u5668\u5c06\u4e8e\u4eca\u665a2:00-4:00\u8fdb\u884c\u7ef4\u62a4",date:"2023-10-18",read:!0}]);return(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u6d88\u606f\u901a\u77e5"}),(0,bd.jsx)("div",{className:"notice-list",children:a.map((e=>(0,bd.jsxs)("div",{className:"list-item ".concat(e.read?"":"unread"),children:[(0,bd.jsxs)("div",{className:"notice-header",children:[(0,bd.jsx)("h3",{children:e.title}),(0,bd.jsx)("span",{className:"notice-date",children:e.date})]}),(0,bd.jsx)("p",{className:"notice-content",children:e.content})]},e.id)))})]})},Rd=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(!1),[c,u]=(0,r.useState)(null),[d,f]=(0,r.useState)(null),[p,h]=(0,r.useState)({oldPassword:"",newPassword:"",confirmPassword:""});(0,r.useEffect)((()=>{(async()=>{try{const e=await xd();i(e)}catch(e){console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e)}})()}),[]);const m=e=>{const{name:t,value:n}=e.target;h((e=>_e(_e({},e),{},{[t]:n})))};return(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u4e2a\u4eba\u8bbe\u7f6e"}),(0,bd.jsxs)("div",{className:"setting-section",children:[(0,bd.jsxs)("div",{className:"user-info-card",children:[(0,bd.jsx)("h3",{children:"\u8d26\u6237\u4fe1\u606f"}),(0,bd.jsxs)("div",{className:"info-item",children:[(0,bd.jsx)("label",{children:"\u7528\u6237\u540d:"}),(0,bd.jsx)("span",{children:(null===a||void 0===a?void 0:a.username)||"\u52a0\u8f7d\u4e2d..."})]}),(0,bd.jsx)("p",{className:"info-note",children:"\u7528\u6237\u540d\u4e0d\u53ef\u66f4\u6539"})]}),(0,bd.jsxs)("div",{className:"password-form-card",children:[(0,bd.jsx)("h3",{children:"\u4fee\u6539\u5bc6\u7801"}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),u(null),f(null),p.oldPassword&&p.newPassword&&p.confirmPassword)if(p.newPassword===p.confirmPassword)if(p.newPassword.length<6)u("\u65b0\u5bc6\u7801\u957f\u5ea6\u81f3\u5c11\u4e3a6\u4f4d");else try{l(!0),await(async(e,t)=>{try{const n=await ir.put("/user/password",{oldPassword:e,newPassword:t});if(200===n.data.code)return n.data;throw new Error(n.data.message||"\u4fee\u6539\u5bc6\u7801\u5931\u8d25")}catch(c){throw console.error("\u4fee\u6539\u5bc6\u7801\u5931\u8d25:",c),c}})(p.oldPassword,p.newPassword),f("\u5bc6\u7801\u4fee\u6539\u6210\u529f"),h({oldPassword:"",newPassword:"",confirmPassword:""})}catch(t){u(t.message||"\u4fee\u6539\u5bc6\u7801\u5931\u8d25")}finally{l(!1)}else u("\u65b0\u5bc6\u7801\u4e0e\u786e\u8ba4\u5bc6\u7801\u4e0d\u4e00\u81f4");else u("\u8bf7\u586b\u5199\u6240\u6709\u5bc6\u7801\u5b57\u6bb5")},children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"oldPassword",children:"\u539f\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"oldPassword",name:"oldPassword",value:p.oldPassword,onChange:m,required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"newPassword",children:"\u65b0\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"newPassword",name:"newPassword",value:p.newPassword,onChange:m,required:!0,minLength:"6"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"confirmPassword",children:"\u786e\u8ba4\u65b0\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"confirmPassword",name:"confirmPassword",value:p.confirmPassword,onChange:m,required:!0,minLength:"6"})]}),c&&(0,bd.jsx)("div",{className:"error-message",children:c}),d&&(0,bd.jsx)("div",{className:"success-message",children:d}),(0,bd.jsx)("button",{type:"submit",className:"submit-button",disabled:s,children:s?"\u5904\u7406\u4e2d...":"\u4fee\u6539\u5bc6\u7801"})]})]})]})]})};function Ad(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(n=Ad(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function Ld(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=Ad(e))&&(r&&(r+=" "),r+=t);return r}Math.pow(10,8);const Id=6048e5,Fd=6e4,zd=36e5,Bd=Symbol.for("constructDateFrom");function Hd(e,t){return"function"===typeof e?e(t):e&&"object"===typeof e&&Bd in e?e[Bd](t):e instanceof Date?new e.constructor(t):new Date(t)}function Ud(e,t){return Hd(t||e,e)}function Yd(e,t){var n;const r=()=>Hd(null===t||void 0===t?void 0:t.in,NaN),o=null!==(n=null===t||void 0===t?void 0:t.additionalDigits)&&void 0!==n?n:2,a=function(e){const t={},n=e.split(Wd.dateTimeDelimiter);let r;if(n.length>2)return t;/:/.test(n[0])?r=n[0]:(t.date=n[0],r=n[1],Wd.timeZoneDelimiter.test(t.date)&&(t.date=e.split(Wd.timeZoneDelimiter)[0],r=e.substr(t.date.length,e.length)));if(r){const e=Wd.timezone.exec(r);e?(t.time=r.replace(e[1],""),t.timezone=e[1]):t.time=r}return t}(e);let i;if(a.date){const e=function(e,t){const n=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),r=e.match(n);if(!r)return{year:NaN,restDateString:""};const o=r[1]?parseInt(r[1]):null,a=r[2]?parseInt(r[2]):null;return{year:null===a?o:100*a,restDateString:e.slice((r[1]||r[2]).length)}}(a.date,o);i=function(e,t){if(null===t)return new Date(NaN);const n=e.match(qd);if(!n)return new Date(NaN);const r=!!n[4],o=Kd(n[1]),a=Kd(n[2])-1,i=Kd(n[3]),s=Kd(n[4]),l=Kd(n[5])-1;if(r)return function(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}(0,s,l)?function(e,t,n){const r=new Date(0);r.setUTCFullYear(e,0,4);const o=r.getUTCDay()||7,a=7*(t-1)+n+1-o;return r.setUTCDate(r.getUTCDate()+a),r}(t,s,l):new Date(NaN);{const e=new Date(0);return function(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(Gd[t]||(Xd(e)?29:28))}(t,a,i)&&function(e,t){return t>=1&&t<=(Xd(e)?366:365)}(t,o)?(e.setUTCFullYear(t,a,Math.max(o,i)),e):new Date(NaN)}}(e.restDateString,e.year)}if(!i||isNaN(+i))return r();const s=+i;let l,c=0;if(a.time&&(c=function(e){const t=e.match(Vd);if(!t)return NaN;const n=$d(t[1]),r=$d(t[2]),o=$d(t[3]);if(!function(e,t,n){if(24===e)return 0===t&&0===n;return n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}(n,r,o))return NaN;return n*zd+r*Fd+1e3*o}(a.time),isNaN(c)))return r();if(!a.timezone){const e=new Date(s+c),n=Ud(0,null===t||void 0===t?void 0:t.in);return n.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),n.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),n}return l=function(e){if("Z"===e)return 0;const t=e.match(Qd);if(!t)return 0;const n="+"===t[1]?-1:1,r=parseInt(t[2]),o=t[3]&&parseInt(t[3])||0;if(!function(e,t){return t>=0&&t<=59}(0,o))return NaN;return n*(r*zd+o*Fd)}(a.timezone),isNaN(l)?r():Ud(s+c+l,null===t||void 0===t?void 0:t.in)}const Wd={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},qd=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,Vd=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Qd=/^([+-])(\d{2})(?::?(\d{2}))?$/;function Kd(e){return e?parseInt(e):1}function $d(e){return e&&parseFloat(e.replace(",","."))||0}const Gd=[31,null,31,30,31,30,31,31,30,31,30,31];function Xd(e){return e%400===0||e%4===0&&e%100!==0}const Jd={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function Zd(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const ef={date:Zd({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:Zd({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:Zd({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},tf={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function nf(e){return(t,n)=>{let r;if("formatting"===(null!==n&&void 0!==n&&n.context?String(n.context):"standalone")&&e.formattingValues){const t=e.defaultFormattingWidth||e.defaultWidth,o=null!==n&&void 0!==n&&n.width?String(n.width):t;r=e.formattingValues[o]||e.formattingValues[t]}else{const t=e.defaultWidth,o=null!==n&&void 0!==n&&n.width?String(n.width):e.defaultWidth;r=e.values[o]||e.values[t]}return r[e.argumentCallback?e.argumentCallback(t):t]}}const rf={ordinalNumber:(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:nf({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:nf({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:e=>e-1}),month:nf({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:nf({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:nf({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})};function of(e){return function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],a=t.match(o);if(!a)return null;const i=a[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?function(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n;return}(s,(e=>e.test(i))):function(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n;return}(s,(e=>e.test(i)));let c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;return{value:c,rest:t.slice(i.length)}}}const af={ordinalNumber:(sf={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)},function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=e.match(sf.matchPattern);if(!n)return null;const r=n[0],o=e.match(sf.parsePattern);if(!o)return null;let a=sf.valueCallback?sf.valueCallback(o[0]):o[0];return a=t.valueCallback?t.valueCallback(a):a,{value:a,rest:e.slice(r.length)}}),era:of({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:of({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:e=>e+1}),month:of({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:of({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:of({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})};var sf;const lf={code:"en-US",formatDistance:(e,t,n)=>{let r;const o=Jd[e];return r="string"===typeof o?o:1===t?o.one:o.other.replace("{{count}}",t.toString()),null!==n&&void 0!==n&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r},formatLong:ef,formatRelative:(e,t,n,r)=>tf[e],localize:rf,match:af,options:{weekStartsOn:0,firstWeekContainsDate:1}},cf=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},uf=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},df={p:uf,P:(e,t)=>{const n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return cf(e,t);let a;switch(r){case"P":a=t.dateTime({width:"short"});break;case"PP":a=t.dateTime({width:"medium"});break;case"PPP":a=t.dateTime({width:"long"});break;default:a=t.dateTime({width:"full"})}return a.replace("{{date}}",cf(r,t)).replace("{{time}}",uf(o,t))}},ff=/^D+$/,pf=/^Y+$/,hf=["D","DD","YY","YYYY"];function mf(e){return ff.test(e)}function vf(e){return pf.test(e)}function gf(e,t,n){const r=function(e,t,n){const r="Y"===e[0]?"years":"days of the month";return"Use `".concat(e.toLowerCase(),"` instead of `").concat(e,"` (in `").concat(t,"`) for formatting ").concat(r," to the input `").concat(n,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")}(e,t,n);if(console.warn(r),hf.includes(e))throw new RangeError(r)}let yf={};function bf(){return yf}function wf(){return Object.assign({},bf())}function xf(e,t){const n=function(e){var t;return"function"===typeof e&&(null===(t=e.prototype)||void 0===t?void 0:t.constructor)===e}(t)?new t(0):Hd(t,0);return n.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),n.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()),n}class kf{constructor(){Pe(this,"subPriority",0)}validate(e,t){return!0}}class Sf extends kf{constructor(e,t,n,r,o){super(),this.value=e,this.validateValue=t,this.setValue=n,this.priority=r,o&&(this.subPriority=o)}validate(e,t){return this.validateValue(e,this.value,t)}set(e,t,n){return this.setValue(e,t,this.value,n)}}class Ef extends kf{constructor(e,t){super(),Pe(this,"priority",10),Pe(this,"subPriority",-1),this.context=e||(e=>Hd(t,e))}set(e,t){return t.timestampIsSet?e:Hd(e,xf(e,this.context))}}class Cf{run(e,t,n,r){const o=this.parse(e,t,n,r);return o?{setter:new Sf(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(e,t,n){return!0}}const Nf=/^(1[0-2]|0?\d)/,jf=/^(3[0-1]|[0-2]?\d)/,Df=/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,Pf=/^(5[0-3]|[0-4]?\d)/,Tf=/^(2[0-3]|[0-1]?\d)/,_f=/^(2[0-4]|[0-1]?\d)/,Of=/^(1[0-1]|0?\d)/,Mf=/^(1[0-2]|0?\d)/,Rf=/^[0-5]?\d/,Af=/^[0-5]?\d/,Lf=/^\d/,If=/^\d{1,2}/,Ff=/^\d{1,3}/,zf=/^\d{1,4}/,Bf=/^-?\d+/,Hf=/^-?\d/,Uf=/^-?\d{1,2}/,Yf=/^-?\d{1,3}/,Wf=/^-?\d{1,4}/,qf=/^([+-])(\d{2})(\d{2})?|Z/,Vf=/^([+-])(\d{2})(\d{2})|Z/,Qf=/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,Kf=/^([+-])(\d{2}):(\d{2})|Z/,$f=/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/;function Gf(e,t){return e?{value:t(e.value),rest:e.rest}:e}function Xf(e,t){const n=t.match(e);return n?{value:parseInt(n[0],10),rest:t.slice(n[0].length)}:null}function Jf(e,t){const n=t.match(e);if(!n)return null;if("Z"===n[0])return{value:0,rest:t.slice(1)};const r="+"===n[1]?1:-1,o=n[2]?parseInt(n[2],10):0,a=n[3]?parseInt(n[3],10):0,i=n[5]?parseInt(n[5],10):0;return{value:r*(o*zd+a*Fd+1e3*i),rest:t.slice(n[0].length)}}function Zf(e){return Xf(Bf,e)}function ep(e,t){switch(e){case 1:return Xf(Lf,t);case 2:return Xf(If,t);case 3:return Xf(Ff,t);case 4:return Xf(zf,t);default:return Xf(new RegExp("^\\d{1,"+e+"}"),t)}}function tp(e,t){switch(e){case 1:return Xf(Hf,t);case 2:return Xf(Uf,t);case 3:return Xf(Yf,t);case 4:return Xf(Wf,t);default:return Xf(new RegExp("^-?\\d{1,"+e+"}"),t)}}function np(e){switch(e){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;default:return 0}}function rp(e,t){const n=t>0,r=n?t:1-t;let o;if(r<=50)o=e||100;else{const t=r+50;o=e+100*Math.trunc(t/100)-(e>=t%100?100:0)}return n?o:1-o}function op(e){return e%400===0||e%4===0&&e%100!==0}function ap(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.weekStartsOn)&&void 0!==o?o:l.weekStartsOn)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==n?n:0,u=Ud(e,null===t||void 0===t?void 0:t.in),d=u.getDay(),f=(d<c?7:0)+d-c;return u.setDate(u.getDate()-f),u.setHours(0,0,0,0),u}function ip(e,t){var n,r,o,a,i,s;const l=Ud(e,null===t||void 0===t?void 0:t.in),c=l.getFullYear(),u=bf(),d=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.firstWeekContainsDate)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.firstWeekContainsDate)&&void 0!==o?o:u.firstWeekContainsDate)&&void 0!==r?r:null===(s=u.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.firstWeekContainsDate)&&void 0!==n?n:1,f=Hd((null===t||void 0===t?void 0:t.in)||e,0);f.setFullYear(c+1,0,d),f.setHours(0,0,0,0);const p=ap(f,t),h=Hd((null===t||void 0===t?void 0:t.in)||e,0);h.setFullYear(c,0,d),h.setHours(0,0,0,0);const m=ap(h,t);return+l>=+p?c+1:+l>=+m?c:c-1}function sp(e,t){return ap(e,_e(_e({},t),{},{weekStartsOn:1}))}function lp(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.firstWeekContainsDate)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.firstWeekContainsDate)&&void 0!==o?o:l.firstWeekContainsDate)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.firstWeekContainsDate)&&void 0!==n?n:1,u=ip(e,t),d=Hd((null===t||void 0===t?void 0:t.in)||e,0);d.setFullYear(u,0,c),d.setHours(0,0,0,0);return ap(d,t)}function cp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=+ap(n,t)-+lp(n,t);return Math.round(r/Id)+1}function up(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=cp(r,n)-t;return r.setDate(r.getDate()-7*o),Ud(r,null===n||void 0===n?void 0:n.in)}function dp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear(),o=Hd(n,0);o.setFullYear(r+1,0,4),o.setHours(0,0,0,0);const a=sp(o),i=Hd(n,0);i.setFullYear(r,0,4),i.setHours(0,0,0,0);const s=sp(i);return n.getTime()>=a.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function fp(e,t){const n=dp(e,t),r=Hd((null===t||void 0===t?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),sp(r)}function pp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=+sp(n)-+fp(n);return Math.round(r/Id)+1}function hp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=pp(r,n)-t;return r.setDate(r.getDate()-7*o),r}const mp=[31,28,31,30,31,30,31,31,30,31,30,31],vp=[31,29,31,30,31,30,31,31,30,31,30,31];function gp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return isNaN(t)?Hd((null===n||void 0===n?void 0:n.in)||e,NaN):t?(r.setDate(r.getDate()+t),r):r}function yp(e,t,n){var r,o,a,i,s,l;const c=bf(),u=null!==(r=null!==(o=null!==(a=null!==(i=null===n||void 0===n?void 0:n.weekStartsOn)&&void 0!==i?i:null===n||void 0===n||null===(s=n.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==a?a:c.weekStartsOn)&&void 0!==o?o:null===(l=c.locale)||void 0===l||null===(l=l.options)||void 0===l?void 0:l.weekStartsOn)&&void 0!==r?r:0,d=Ud(e,null===n||void 0===n?void 0:n.in),f=d.getDay(),p=7-u;return gp(d,t<0||t>6?t-(f+p)%7:((t%7+7)%7+p)%7-(f+p)%7,n)}function bp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in).getDay();return 0===n?7:n}function wp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return gp(r,t-bp(r,n),n)}function xp(e){const t=Ud(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}const kp={G:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",140),Pe(this,"incompatibleTokens",["R","u","t","T"])}parse(e,t,n){switch(t){case"G":case"GG":case"GGG":return n.era(e,{width:"abbreviated"})||n.era(e,{width:"narrow"});case"GGGGG":return n.era(e,{width:"narrow"});default:return n.era(e,{width:"wide"})||n.era(e,{width:"abbreviated"})||n.era(e,{width:"narrow"})}}set(e,t,n){return t.era=n,e.setFullYear(n,0,1),e.setHours(0,0,0,0),e}},y:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(e,t,n){const r=e=>({year:e,isTwoDigitYear:"yy"===t});switch(t){case"y":return Gf(ep(4,e),r);case"yo":return Gf(n.ordinalNumber(e,{unit:"year"}),r);default:return Gf(ep(t.length,e),r)}}validate(e,t){return t.isTwoDigitYear||t.year>0}set(e,t,n){const r=e.getFullYear();if(n.isTwoDigitYear){const t=rp(n.year,r);return e.setFullYear(t,0,1),e.setHours(0,0,0,0),e}const o="era"in t&&1!==t.era?1-n.year:n.year;return e.setFullYear(o,0,1),e.setHours(0,0,0,0),e}},Y:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(e,t,n){const r=e=>({year:e,isTwoDigitYear:"YY"===t});switch(t){case"Y":return Gf(ep(4,e),r);case"Yo":return Gf(n.ordinalNumber(e,{unit:"year"}),r);default:return Gf(ep(t.length,e),r)}}validate(e,t){return t.isTwoDigitYear||t.year>0}set(e,t,n,r){const o=ip(e,r);if(n.isTwoDigitYear){const t=rp(n.year,o);return e.setFullYear(t,0,r.firstWeekContainsDate),e.setHours(0,0,0,0),ap(e,r)}const a="era"in t&&1!==t.era?1-n.year:n.year;return e.setFullYear(a,0,r.firstWeekContainsDate),e.setHours(0,0,0,0),ap(e,r)}},R:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(e,t){return tp("R"===t?4:t.length,e)}set(e,t,n){const r=Hd(e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),sp(r)}},u:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(e,t){return tp("u"===t?4:t.length,e)}set(e,t,n){return e.setFullYear(n,0,1),e.setHours(0,0,0,0),e}},Q:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",120),Pe(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"Q":case"QQ":return ep(t.length,e);case"Qo":return n.ordinalNumber(e,{unit:"quarter"});case"QQQ":return n.quarter(e,{width:"abbreviated",context:"formatting"})||n.quarter(e,{width:"narrow",context:"formatting"});case"QQQQQ":return n.quarter(e,{width:"narrow",context:"formatting"});default:return n.quarter(e,{width:"wide",context:"formatting"})||n.quarter(e,{width:"abbreviated",context:"formatting"})||n.quarter(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=1&&t<=4}set(e,t,n){return e.setMonth(3*(n-1),1),e.setHours(0,0,0,0),e}},q:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",120),Pe(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"q":case"qq":return ep(t.length,e);case"qo":return n.ordinalNumber(e,{unit:"quarter"});case"qqq":return n.quarter(e,{width:"abbreviated",context:"standalone"})||n.quarter(e,{width:"narrow",context:"standalone"});case"qqqqq":return n.quarter(e,{width:"narrow",context:"standalone"});default:return n.quarter(e,{width:"wide",context:"standalone"})||n.quarter(e,{width:"abbreviated",context:"standalone"})||n.quarter(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=1&&t<=4}set(e,t,n){return e.setMonth(3*(n-1),1),e.setHours(0,0,0,0),e}},M:new class extends Cf{constructor(){super(...arguments),Pe(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]),Pe(this,"priority",110)}parse(e,t,n){const r=e=>e-1;switch(t){case"M":return Gf(Xf(Nf,e),r);case"MM":return Gf(ep(2,e),r);case"Mo":return Gf(n.ordinalNumber(e,{unit:"month"}),r);case"MMM":return n.month(e,{width:"abbreviated",context:"formatting"})||n.month(e,{width:"narrow",context:"formatting"});case"MMMMM":return n.month(e,{width:"narrow",context:"formatting"});default:return n.month(e,{width:"wide",context:"formatting"})||n.month(e,{width:"abbreviated",context:"formatting"})||n.month(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.setMonth(n,1),e.setHours(0,0,0,0),e}},L:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",110),Pe(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(e,t,n){const r=e=>e-1;switch(t){case"L":return Gf(Xf(Nf,e),r);case"LL":return Gf(ep(2,e),r);case"Lo":return Gf(n.ordinalNumber(e,{unit:"month"}),r);case"LLL":return n.month(e,{width:"abbreviated",context:"standalone"})||n.month(e,{width:"narrow",context:"standalone"});case"LLLLL":return n.month(e,{width:"narrow",context:"standalone"});default:return n.month(e,{width:"wide",context:"standalone"})||n.month(e,{width:"abbreviated",context:"standalone"})||n.month(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.setMonth(n,1),e.setHours(0,0,0,0),e}},w:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",100),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(e,t,n){switch(t){case"w":return Xf(Pf,e);case"wo":return n.ordinalNumber(e,{unit:"week"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=53}set(e,t,n,r){return ap(up(e,n,r),r)}},I:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",100),Pe(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(e,t,n){switch(t){case"I":return Xf(Pf,e);case"Io":return n.ordinalNumber(e,{unit:"week"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=53}set(e,t,n){return sp(hp(e,n))}},d:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"subPriority",1),Pe(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"d":return Xf(jf,e);case"do":return n.ordinalNumber(e,{unit:"date"});default:return ep(t.length,e)}}validate(e,t){const n=op(e.getFullYear()),r=e.getMonth();return n?t>=1&&t<=vp[r]:t>=1&&t<=mp[r]}set(e,t,n){return e.setDate(n),e.setHours(0,0,0,0),e}},D:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"subpriority",1),Pe(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(e,t,n){switch(t){case"D":case"DD":return Xf(Df,e);case"Do":return n.ordinalNumber(e,{unit:"date"});default:return ep(t.length,e)}}validate(e,t){return op(e.getFullYear())?t>=1&&t<=366:t>=1&&t<=365}set(e,t,n){return e.setMonth(0,n),e.setHours(0,0,0,0),e}},E:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"E":case"EE":case"EEE":return n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});case"EEEEE":return n.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});default:return n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},e:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(e,t,n,r){const o=e=>{const t=7*Math.floor((e-1)/7);return(e+r.weekStartsOn+6)%7+t};switch(t){case"e":case"ee":return Gf(ep(t.length,e),o);case"eo":return Gf(n.ordinalNumber(e,{unit:"day"}),o);case"eee":return n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});case"eeeee":return n.day(e,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});default:return n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},c:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(e,t,n,r){const o=e=>{const t=7*Math.floor((e-1)/7);return(e+r.weekStartsOn+6)%7+t};switch(t){case"c":case"cc":return Gf(ep(t.length,e),o);case"co":return Gf(n.ordinalNumber(e,{unit:"day"}),o);case"ccc":return n.day(e,{width:"abbreviated",context:"standalone"})||n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"});case"ccccc":return n.day(e,{width:"narrow",context:"standalone"});case"cccccc":return n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"});default:return n.day(e,{width:"wide",context:"standalone"})||n.day(e,{width:"abbreviated",context:"standalone"})||n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},i:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(e,t,n){const r=e=>0===e?7:e;switch(t){case"i":case"ii":return ep(t.length,e);case"io":return n.ordinalNumber(e,{unit:"day"});case"iii":return Gf(n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r);case"iiiii":return Gf(n.day(e,{width:"narrow",context:"formatting"}),r);case"iiiiii":return Gf(n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r);default:return Gf(n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r)}}validate(e,t){return t>=1&&t<=7}set(e,t,n){return(e=wp(e,n)).setHours(0,0,0,0),e}},a:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(e,t,n){switch(t){case"a":case"aa":case"aaa":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"aaaaa":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},b:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(e,t,n){switch(t){case"b":case"bb":case"bbb":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"bbbbb":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},B:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["a","b","t","T"])}parse(e,t,n){switch(t){case"B":case"BB":case"BBB":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"BBBBB":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},h:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["H","K","k","t","T"])}parse(e,t,n){switch(t){case"h":return Xf(Mf,e);case"ho":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=12}set(e,t,n){const r=e.getHours()>=12;return r&&n<12?e.setHours(n+12,0,0,0):r||12!==n?e.setHours(n,0,0,0):e.setHours(0,0,0,0),e}},H:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(e,t,n){switch(t){case"H":return Xf(Tf,e);case"Ho":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=23}set(e,t,n){return e.setHours(n,0,0,0),e}},K:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["h","H","k","t","T"])}parse(e,t,n){switch(t){case"K":return Xf(Of,e);case"Ko":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.getHours()>=12&&n<12?e.setHours(n+12,0,0,0):e.setHours(n,0,0,0),e}},k:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(e,t,n){switch(t){case"k":return Xf(_f,e);case"ko":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=24}set(e,t,n){const r=n<=24?n%24:n;return e.setHours(r,0,0,0),e}},m:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",60),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t,n){switch(t){case"m":return Xf(Rf,e);case"mo":return n.ordinalNumber(e,{unit:"minute"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=59}set(e,t,n){return e.setMinutes(n,0,0),e}},s:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",50),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t,n){switch(t){case"s":return Xf(Af,e);case"so":return n.ordinalNumber(e,{unit:"second"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=59}set(e,t,n){return e.setSeconds(n,0),e}},S:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",30),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t){return Gf(ep(t.length,e),(e=>Math.trunc(e*Math.pow(10,3-t.length))))}set(e,t,n){return e.setMilliseconds(n),e}},X:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",10),Pe(this,"incompatibleTokens",["t","T","x"])}parse(e,t){switch(t){case"X":return Jf(qf,e);case"XX":return Jf(Vf,e);case"XXXX":return Jf(Qf,e);case"XXXXX":return Jf($f,e);default:return Jf(Kf,e)}}set(e,t,n){return t.timestampIsSet?e:Hd(e,e.getTime()-xp(e)-n)}},x:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",10),Pe(this,"incompatibleTokens",["t","T","X"])}parse(e,t){switch(t){case"x":return Jf(qf,e);case"xx":return Jf(Vf,e);case"xxxx":return Jf(Qf,e);case"xxxxx":return Jf($f,e);default:return Jf(Kf,e)}}set(e,t,n){return t.timestampIsSet?e:Hd(e,e.getTime()-xp(e)-n)}},t:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",40),Pe(this,"incompatibleTokens","*")}parse(e){return Zf(e)}set(e,t,n){return[Hd(e,1e3*n),{timestampIsSet:!0}]}},T:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",20),Pe(this,"incompatibleTokens","*")}parse(e){return Zf(e)}set(e,t,n){return[Hd(e,n),{timestampIsSet:!0}]}}},Sp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Ep=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Cp=/^'([^]*?)'?$/,Np=/''/g,jp=/\S/,Dp=/[a-zA-Z]/;function Pp(e,t,n,r){var o,a,i,s,l,c,u,d,f,p,h,m,v,g;const y=()=>Hd((null===r||void 0===r?void 0:r.in)||n,NaN),b=wf(),w=null!==(o=null!==(a=null===r||void 0===r?void 0:r.locale)&&void 0!==a?a:b.locale)&&void 0!==o?o:lf,x=null!==(i=null!==(s=null!==(l=null!==(c=null===r||void 0===r?void 0:r.firstWeekContainsDate)&&void 0!==c?c:null===r||void 0===r||null===(u=r.locale)||void 0===u||null===(u=u.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==l?l:b.firstWeekContainsDate)&&void 0!==s?s:null===(d=b.locale)||void 0===d||null===(d=d.options)||void 0===d?void 0:d.firstWeekContainsDate)&&void 0!==i?i:1,k=null!==(f=null!==(p=null!==(h=null!==(m=null===r||void 0===r?void 0:r.weekStartsOn)&&void 0!==m?m:null===r||void 0===r||null===(v=r.locale)||void 0===v||null===(v=v.options)||void 0===v?void 0:v.weekStartsOn)&&void 0!==h?h:b.weekStartsOn)&&void 0!==p?p:null===(g=b.locale)||void 0===g||null===(g=g.options)||void 0===g?void 0:g.weekStartsOn)&&void 0!==f?f:0;if(!t)return e?y():Ud(n,null===r||void 0===r?void 0:r.in);const S={firstWeekContainsDate:x,weekStartsOn:k,locale:w},E=[new Ef(null===r||void 0===r?void 0:r.in,n)],C=t.match(Ep).map((e=>{const t=e[0];if(t in df){return(0,df[t])(e,w.formatLong)}return e})).join("").match(Sp),N=[];for(let T of C){null!==r&&void 0!==r&&r.useAdditionalWeekYearTokens||!vf(T)||gf(T,t,e),null!==r&&void 0!==r&&r.useAdditionalDayOfYearTokens||!mf(T)||gf(T,t,e);const n=T[0],o=kp[n];if(o){const{incompatibleTokens:t}=o;if(Array.isArray(t)){const e=N.find((e=>t.includes(e.token)||e.token===n));if(e)throw new RangeError("The format string mustn't contain `".concat(e.fullToken,"` and `").concat(T,"` at the same time"))}else if("*"===o.incompatibleTokens&&N.length>0)throw new RangeError("The format string mustn't contain `".concat(T,"` and any other token at the same time"));N.push({token:n,fullToken:T});const r=o.run(e,T,w.match,S);if(!r)return y();E.push(r.setter),e=r.rest}else{if(n.match(Dp))throw new RangeError("Format string contains an unescaped latin alphabet character `"+n+"`");if("''"===T?T="'":"'"===n&&(T=T.match(Cp)[1].replace(Np,"'")),0!==e.indexOf(T))return y();e=e.slice(T.length)}}if(e.length>0&&jp.test(e))return y();const j=E.map((e=>e.priority)).sort(((e,t)=>t-e)).filter(((e,t,n)=>n.indexOf(e)===t)).map((e=>E.filter((t=>t.priority===e)).sort(((e,t)=>t.subPriority-e.subPriority)))).map((e=>e[0]));let D=Ud(n,null===r||void 0===r?void 0:r.in);if(isNaN(+D))return y();const P={};for(const T of j){if(!T.validate(D,S))return y();const e=T.set(D,P,S);Array.isArray(e)?(D=e[0],Object.assign(P,e[1])):D=e}return D}function Tp(e){return e instanceof Date||"object"===typeof e&&"[object Date]"===Object.prototype.toString.call(e)}function _p(e){return!(!Tp(e)&&"number"!==typeof e||isNaN(+Ud(e)))}function Op(e,t){return+Ud(e)<+Ud(t)}function Mp(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=Hd.bind(null,e||n.find((e=>"object"===typeof e)));return n.map(o)}function Rp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setHours(0,0,0,0),n}function Ap(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t),a=Rp(r),i=Rp(o),s=+a-xp(a),l=+i-xp(i);return Math.round((s-l)/864e5)}function Lp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function Ip(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return Ap(n,Lp(n))+1}function Fp(e,t){return(e<0?"-":"")+Math.abs(e).toString().padStart(t,"0")}const zp={y(e,t){const n=e.getFullYear(),r=n>0?n:1-n;return Fp("yy"===t?r%100:r,t.length)},M(e,t){const n=e.getMonth();return"M"===t?String(n+1):Fp(n+1,2)},d:(e,t)=>Fp(e.getDate(),t.length),a(e,t){const n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];default:return"am"===n?"a.m.":"p.m."}},h:(e,t)=>Fp(e.getHours()%12||12,t.length),H:(e,t)=>Fp(e.getHours(),t.length),m:(e,t)=>Fp(e.getMinutes(),t.length),s:(e,t)=>Fp(e.getSeconds(),t.length),S(e,t){const n=t.length,r=e.getMilliseconds();return Fp(Math.trunc(r*Math.pow(10,n-3)),t.length)}},Bp="midnight",Hp="noon",Up="morning",Yp="afternoon",Wp="evening",qp="night",Vp={G:function(e,t,n){const r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){const t=e.getFullYear(),r=t>0?t:1-t;return n.ordinalNumber(r,{unit:"year"})}return zp.y(e,t)},Y:function(e,t,n,r){const o=ip(e,r),a=o>0?o:1-o;if("YY"===t){return Fp(a%100,2)}return"Yo"===t?n.ordinalNumber(a,{unit:"year"}):Fp(a,t.length)},R:function(e,t){return Fp(dp(e),t.length)},u:function(e,t){return Fp(e.getFullYear(),t.length)},Q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return Fp(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return Fp(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){const r=e.getMonth();switch(t){case"M":case"MM":return zp.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){const r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return Fp(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){const o=cp(e,r);return"wo"===t?n.ordinalNumber(o,{unit:"week"}):Fp(o,t.length)},I:function(e,t,n){const r=pp(e);return"Io"===t?n.ordinalNumber(r,{unit:"week"}):Fp(r,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getDate(),{unit:"date"}):zp.d(e,t)},D:function(e,t,n){const r=Ip(e);return"Do"===t?n.ordinalNumber(r,{unit:"dayOfYear"}):Fp(r,t.length)},E:function(e,t,n){const r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){const o=e.getDay(),a=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(a);case"ee":return Fp(a,2);case"eo":return n.ordinalNumber(a,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){const o=e.getDay(),a=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(a);case"cc":return Fp(a,t.length);case"co":return n.ordinalNumber(a,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){const r=e.getDay(),o=0===r?7:r;switch(t){case"i":return String(o);case"ii":return Fp(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){const r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){const r=e.getHours();let o;switch(o=12===r?Hp:0===r?Bp:r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){const r=e.getHours();let o;switch(o=r>=17?Wp:r>=12?Yp:r>=4?Up:qp,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){let t=e.getHours()%12;return 0===t&&(t=12),n.ordinalNumber(t,{unit:"hour"})}return zp.h(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getHours(),{unit:"hour"}):zp.H(e,t)},K:function(e,t,n){const r=e.getHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):Fp(r,t.length)},k:function(e,t,n){let r=e.getHours();return 0===r&&(r=24),"ko"===t?n.ordinalNumber(r,{unit:"hour"}):Fp(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):zp.m(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getSeconds(),{unit:"second"}):zp.s(e,t)},S:function(e,t){return zp.S(e,t)},X:function(e,t,n){const r=e.getTimezoneOffset();if(0===r)return"Z";switch(t){case"X":return Kp(r);case"XXXX":case"XX":return $p(r);default:return $p(r,":")}},x:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"x":return Kp(r);case"xxxx":case"xx":return $p(r);default:return $p(r,":")}},O:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+Qp(r,":");default:return"GMT"+$p(r,":")}},z:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+Qp(r,":");default:return"GMT"+$p(r,":")}},t:function(e,t,n){return Fp(Math.trunc(+e/1e3),t.length)},T:function(e,t,n){return Fp(+e,t.length)}};function Qp(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),a=r%60;return 0===a?n+String(o):n+String(o)+t+Fp(a,2)}function Kp(e,t){if(e%60===0){return(e>0?"-":"+")+Fp(Math.abs(e)/60,2)}return $p(e,t)}function $p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=e>0?"-":"+",r=Math.abs(e);return n+Fp(Math.trunc(r/60),2)+t+Fp(r%60,2)}const Gp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Xp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Jp=/^'([^]*?)'?$/,Zp=/''/g,eh=/[a-zA-Z]/;function th(e,t,n){var r,o,a,i,s,l,c,u,d,f,p,h,m,v;const g=bf(),y=null!==(r=null!==(o=null===n||void 0===n?void 0:n.locale)&&void 0!==o?o:g.locale)&&void 0!==r?r:lf,b=null!==(a=null!==(i=null!==(s=null!==(l=null===n||void 0===n?void 0:n.firstWeekContainsDate)&&void 0!==l?l:null===n||void 0===n||null===(c=n.locale)||void 0===c||null===(c=c.options)||void 0===c?void 0:c.firstWeekContainsDate)&&void 0!==s?s:g.firstWeekContainsDate)&&void 0!==i?i:null===(u=g.locale)||void 0===u||null===(u=u.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==a?a:1,w=null!==(d=null!==(f=null!==(p=null!==(h=null===n||void 0===n?void 0:n.weekStartsOn)&&void 0!==h?h:null===n||void 0===n||null===(m=n.locale)||void 0===m||null===(m=m.options)||void 0===m?void 0:m.weekStartsOn)&&void 0!==p?p:g.weekStartsOn)&&void 0!==f?f:null===(v=g.locale)||void 0===v||null===(v=v.options)||void 0===v?void 0:v.weekStartsOn)&&void 0!==d?d:0,x=Ud(e,null===n||void 0===n?void 0:n.in);if(!_p(x))throw new RangeError("Invalid time value");let k=t.match(Xp).map((e=>{const t=e[0];if("p"===t||"P"===t){return(0,df[t])(e,y.formatLong)}return e})).join("").match(Gp).map((e=>{if("''"===e)return{isToken:!1,value:"'"};const t=e[0];if("'"===t)return{isToken:!1,value:nh(e)};if(Vp[t])return{isToken:!0,value:e};if(t.match(eh))throw new RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return{isToken:!1,value:e}}));y.localize.preprocessor&&(k=y.localize.preprocessor(x,k));const S={firstWeekContainsDate:b,weekStartsOn:w,locale:y};return k.map((r=>{if(!r.isToken)return r.value;const o=r.value;(null!==n&&void 0!==n&&n.useAdditionalWeekYearTokens||!vf(o))&&(null!==n&&void 0!==n&&n.useAdditionalDayOfYearTokens||!mf(o))||gf(o,t,String(e));return(0,Vp[o[0]])(x,o,y.localize,S)})).join("")}function nh(e){const t=e.match(Jp);return t?t[1].replace(Zp,"'"):e}function rh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setHours(t),r}function oh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setMinutes(t),r}function ah(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setSeconds(t),r}function ih(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setDate(1),n.setHours(0,0,0,0),n}function sh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getMonth(),o=r-r%3;return n.setMonth(o,1),n.setHours(0,0,0,0),n}function lh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setHours(23,59,59,999),n}function ch(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.weekStartsOn)&&void 0!==o?o:l.weekStartsOn)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==n?n:0,u=Ud(e,null===t||void 0===t?void 0:t.in),d=u.getDay(),f=6+(d<c?-7:0)-(d-c);return u.setDate(u.getDate()+f),u.setHours(23,59,59,999),u}function uh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function dh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()===o.getFullYear()}function fh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()===o.getFullYear()&&r.getMonth()===o.getMonth()}function ph(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return+sh(r)===+sh(o)}function hh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return+Rp(r)===+Rp(o)}function mh(e,t){return+Ud(e)===+Ud(t)}function vh(e,t,n){const r=+Ud(e,null===n||void 0===n?void 0:n.in),[o,a]=[+Ud(t.start,null===n||void 0===n?void 0:n.in),+Ud(t.end,null===n||void 0===n?void 0:n.in)].sort(((e,t)=>e-t));return r>=o&&r<=a}function gh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear(),o=n.getMonth(),a=Hd(n,0);return a.setFullYear(r,o+1,0),a.setHours(0,0,0,0),a.getDate()}function yh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=r.getFullYear(),a=r.getDate(),i=Hd((null===n||void 0===n?void 0:n.in)||e,0);i.setFullYear(o,t,15),i.setHours(0,0,0,0);const s=gh(i);return r.setMonth(t,Math.min(a,s)),r}function bh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=t-(Math.trunc(r.getMonth()/3)+1);return yh(r,r.getMonth()+3*o)}function wh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getFullYear()}function xh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getMonth()}function kh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear();return n.setFullYear(r+1,0,0),n.setHours(23,59,59,999),n}function Sh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return Math.trunc(n.getMonth()/3)+1}function Eh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getHours()}function Ch(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getMinutes()}function Nh(e){return Ud(e).getSeconds()}function jh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);if(isNaN(t))return Hd((null===n||void 0===n?void 0:n.in)||e,NaN);if(!t)return r;const o=r.getDate(),a=Hd((null===n||void 0===n?void 0:n.in)||e,r.getTime());a.setMonth(r.getMonth()+t+1,0);return o>=a.getDate()?a:(r.setFullYear(a.getFullYear(),a.getMonth(),o),r)}function Dh(e,t,n){return jh(e,-t,n)}function Ph(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return 12*(r.getFullYear()-o.getFullYear())+(r.getMonth()-o.getMonth())}function Th(e,t,n){return jh(e,3*t,n)}function _h(e,t,n){return Th(e,-t,n)}function Oh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return 4*(r.getFullYear()-o.getFullYear())+(Sh(r)-Sh(o))}function Mh(e,t,n){return jh(e,12*t,n)}function Rh(e,t,n){return Mh(e,-t,n)}function Ah(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()-o.getFullYear()}function Lh(e,t){let n,r=null===t||void 0===t?void 0:t.in;return e.forEach((e=>{r||"object"!==typeof e||(r=Hd.bind(null,e));const t=Ud(e,r);(!n||n>t||isNaN(+t))&&(n=t)})),Hd(r,n||NaN)}function Ih(e,t){let n,r=null===t||void 0===t?void 0:t.in;return e.forEach((e=>{r||"object"!==typeof e||(r=Hd.bind(null,e));const t=Ud(e,r);(!n||n<t||isNaN(+t))&&(n=t)})),Hd(r,n||NaN)}function Fh(e,t,n){return Hd((null===n||void 0===n?void 0:n.in)||e,+Ud(e)+t)}function zh(e,t,n){return Fh(e,t*zd,n)}function Bh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setTime(r.getTime()+t*Fd),r}function Hh(e,t,n){return Fh(e,1e3*t,n)}function Uh(e,t){return+Ud(e)>+Ud(t)}function Yh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getDay()}function Wh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getDate()}function qh(e,t,n){return gp(e,7*t,n)}function Vh(e){return+Ud(e)}function Qh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return isNaN(+r)?Hd((null===n||void 0===n?void 0:n.in)||e,NaN):(r.setFullYear(t),r)}function Kh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t),a=$h(r,o),i=Math.abs(Ap(r,o));r.setDate(r.getDate()-a*i);const s=a*(i-Number($h(r,o)===-a));return 0===s?0:s}function $h(e,t){const n=e.getFullYear()-t.getFullYear()||e.getMonth()-t.getMonth()||e.getDate()-t.getDate()||e.getHours()-t.getHours()||e.getMinutes()-t.getMinutes()||e.getSeconds()-t.getSeconds()||e.getMilliseconds()-t.getMilliseconds();return n<0?-1:n>0?1:n}function Gh(e,t,n){return qh(e,-t,n)}function Xh(e,t,n){return gp(e,-t,n)}var Jh="undefined"!==typeof document?r.useLayoutEffect:r.useEffect;const Zh=_e({},o).useInsertionEffect||(e=>e());function em(){return"undefined"!==typeof window}function tm(e){return om(e)?(e.nodeName||"").toLowerCase():"#document"}function nm(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function rm(e){var t;return null==(t=(om(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function om(e){return!!em()&&(e instanceof Node||e instanceof nm(e).Node)}function am(e){return!!em()&&(e instanceof Element||e instanceof nm(e).Element)}function im(e){return!!em()&&(e instanceof HTMLElement||e instanceof nm(e).HTMLElement)}function sm(e){return!(!em()||"undefined"===typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof nm(e).ShadowRoot)}function lm(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=hm(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function cm(e){return["table","td","th"].includes(tm(e))}function um(e){return[":popover-open",":modal"].some((t=>{try{return e.matches(t)}catch(Dy){return!1}}))}function dm(e){const t=fm(),n=am(e)?hm(e):e;return["transform","translate","scale","rotate","perspective"].some((e=>!!n[e]&&"none"!==n[e]))||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","translate","scale","rotate","perspective","filter"].some((e=>(n.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(n.contain||"").includes(e)))}function fm(){return!("undefined"===typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function pm(e){return["html","body","#document"].includes(tm(e))}function hm(e){return nm(e).getComputedStyle(e)}function mm(e){return am(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function vm(e){if("html"===tm(e))return e;const t=e.assignedSlot||e.parentNode||sm(e)&&e.host||rm(e);return sm(t)?t.host:t}function gm(e){const t=vm(e);return pm(t)?e.ownerDocument?e.ownerDocument.body:e.body:im(t)&&lm(t)?t:gm(t)}function ym(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);const o=gm(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=nm(o);if(a){const e=bm(i);return t.concat(i,i.visualViewport||[],lm(o)?o:[],e&&n?ym(e):[])}return t.concat(o,ym(o,[],n))}function bm(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}const wm=Math.min,xm=Math.max,km=Math.round,Sm=Math.floor,Em=e=>({x:e,y:e}),Cm={left:"right",right:"left",bottom:"top",top:"bottom"},Nm={start:"end",end:"start"};function jm(e,t){return"function"===typeof e?e(t):e}function Dm(e){return e.split("-")[0]}function Pm(e){return e.split("-")[1]}function Tm(e){return"y"===e?"height":"width"}function _m(e){return["top","bottom"].includes(Dm(e))?"y":"x"}function Om(e){return"x"===_m(e)?"y":"x"}function Mm(e){return e.replace(/start|end/g,(e=>Nm[e]))}function Rm(e){return e.replace(/left|right|bottom|top/g,(e=>Cm[e]))}function Am(e){return"number"!==typeof e?function(e){return _e({top:0,right:0,bottom:0,left:0},e)}(e):{top:e,right:e,bottom:e,left:e}}function Lm(e){const{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}const Im=["mainAxis","crossAxis","fallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment"];function Fm(e,t,n){let{reference:r,floating:o}=e;const a=_m(t),i=Om(t),s=Tm(i),l=Dm(t),c="y"===a,u=r.x+r.width/2-o.width/2,d=r.y+r.height/2-o.height/2,f=r[s]/2-o[s]/2;let p;switch(l){case"top":p={x:u,y:r.y-o.height};break;case"bottom":p={x:u,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:d};break;case"left":p={x:r.x-o.width,y:d};break;default:p={x:r.x,y:r.y}}switch(Pm(t)){case"start":p[i]-=f*(n&&c?-1:1);break;case"end":p[i]+=f*(n&&c?-1:1)}return p}async function zm(e,t){var n;void 0===t&&(t={});const{x:r,y:o,platform:a,rects:i,elements:s,strategy:l}=e,{boundary:c="clippingAncestors",rootBoundary:u="viewport",elementContext:d="floating",altBoundary:f=!1,padding:p=0}=jm(t,e),h=Am(p),m=s[f?"floating"===d?"reference":"floating":d],v=Lm(await a.getClippingRect({element:null==(n=await(null==a.isElement?void 0:a.isElement(m)))||n?m:m.contextElement||await(null==a.getDocumentElement?void 0:a.getDocumentElement(s.floating)),boundary:c,rootBoundary:u,strategy:l})),g="floating"===d?{x:r,y:o,width:i.floating.width,height:i.floating.height}:i.reference,y=await(null==a.getOffsetParent?void 0:a.getOffsetParent(s.floating)),b=await(null==a.isElement?void 0:a.isElement(y))&&await(null==a.getScale?void 0:a.getScale(y))||{x:1,y:1},w=Lm(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:g,offsetParent:y,strategy:l}):g);return{top:(v.top-w.top+h.top)/b.y,bottom:(w.bottom-v.bottom+h.bottom)/b.y,left:(v.left-w.left+h.left)/b.x,right:(w.right-v.right+h.right)/b.x}}function Bm(e){const t=hm(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=im(e),a=o?e.offsetWidth:n,i=o?e.offsetHeight:r,s=km(n)!==a||km(r)!==i;return s&&(n=a,r=i),{width:n,height:r,$:s}}function Hm(e){return am(e)?e:e.contextElement}function Um(e){const t=Hm(e);if(!im(t))return Em(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:a}=Bm(t);let i=(a?km(n.width):n.width)/r,s=(a?km(n.height):n.height)/o;return i&&Number.isFinite(i)||(i=1),s&&Number.isFinite(s)||(s=1),{x:i,y:s}}const Ym=Em(0);function Wm(e){const t=nm(e);return fm()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:Ym}function qm(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const o=e.getBoundingClientRect(),a=Hm(e);let i=Em(1);t&&(r?am(r)&&(i=Um(r)):i=Um(e));const s=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==nm(e))&&t}(a,n,r)?Wm(a):Em(0);let l=(o.left+s.x)/i.x,c=(o.top+s.y)/i.y,u=o.width/i.x,d=o.height/i.y;if(a){const e=nm(a),t=r&&am(r)?nm(r):r;let n=e,o=bm(n);for(;o&&r&&t!==n;){const e=Um(o),t=o.getBoundingClientRect(),r=hm(o),a=t.left+(o.clientLeft+parseFloat(r.paddingLeft))*e.x,i=t.top+(o.clientTop+parseFloat(r.paddingTop))*e.y;l*=e.x,c*=e.y,u*=e.x,d*=e.y,l+=a,c+=i,n=nm(o),o=bm(n)}}return Lm({width:u,height:d,x:l,y:c})}function Vm(e,t){const n=mm(e).scrollLeft;return t?t.left+n:qm(rm(e)).left+n}function Qm(e,t,n){void 0===n&&(n=!1);const r=e.getBoundingClientRect();return{x:r.left+t.scrollLeft-(n?0:Vm(e,r)),y:r.top+t.scrollTop}}function Km(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=nm(e),r=rm(e),o=n.visualViewport;let a=r.clientWidth,i=r.clientHeight,s=0,l=0;if(o){a=o.width,i=o.height;const e=fm();(!e||e&&"fixed"===t)&&(s=o.offsetLeft,l=o.offsetTop)}return{width:a,height:i,x:s,y:l}}(e,n);else if("document"===t)r=function(e){const t=rm(e),n=mm(e),r=e.ownerDocument.body,o=xm(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=xm(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+Vm(e);const s=-n.scrollTop;return"rtl"===hm(r).direction&&(i+=xm(t.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:s}}(rm(e));else if(am(t))r=function(e,t){const n=qm(e,!0,"fixed"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,a=im(e)?Um(e):Em(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:o*a.x,y:r*a.y}}(t,n);else{const n=Wm(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return Lm(r)}function $m(e,t){const n=vm(e);return!(n===t||!am(n)||pm(n))&&("fixed"===hm(n).position||$m(n,t))}function Gm(e,t,n){const r=im(t),o=rm(t),a="fixed"===n,i=qm(e,!0,a,t);let s={scrollLeft:0,scrollTop:0};const l=Em(0);function c(){l.x=Vm(o)}if(r||!r&&!a)if(("body"!==tm(t)||lm(o))&&(s=mm(t)),r){const e=qm(t,!0,a,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else o&&c();a&&!r&&o&&c();const u=!o||r||a?Em(0):Qm(o,s);return{x:i.left+s.scrollLeft-l.x-u.x,y:i.top+s.scrollTop-l.y-u.y,width:i.width,height:i.height}}function Xm(e){return"static"===hm(e).position}function Jm(e,t){if(!im(e)||"fixed"===hm(e).position)return null;if(t)return t(e);let n=e.offsetParent;return rm(e)===n&&(n=n.ownerDocument.body),n}function Zm(e,t){const n=nm(e);if(um(e))return n;if(!im(e)){let t=vm(e);for(;t&&!pm(t);){if(am(t)&&!Xm(t))return t;t=vm(t)}return n}let r=Jm(e,t);for(;r&&cm(r)&&Xm(r);)r=Jm(r,t);return r&&pm(r)&&Xm(r)&&!dm(r)?n:r||function(e){let t=vm(e);for(;im(t)&&!pm(t);){if(dm(t))return t;if(um(t))return null;t=vm(t)}return null}(e)||n}const ev={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e;const a="fixed"===o,i=rm(r),s=!!t&&um(t.floating);if(r===i||s&&a)return n;let l={scrollLeft:0,scrollTop:0},c=Em(1);const u=Em(0),d=im(r);if((d||!d&&!a)&&(("body"!==tm(r)||lm(i))&&(l=mm(r)),im(r))){const e=qm(r);c=Um(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}const f=!i||d||a?Em(0):Qm(i,l,!0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-l.scrollLeft*c.x+u.x+f.x,y:n.y*c.y-l.scrollTop*c.y+u.y+f.y}},getDocumentElement:rm,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const a="clippingAncestors"===n?um(t)?[]:function(e,t){const n=t.get(e);if(n)return n;let r=ym(e,[],!1).filter((e=>am(e)&&"body"!==tm(e))),o=null;const a="fixed"===hm(e).position;let i=a?vm(e):e;for(;am(i)&&!pm(i);){const t=hm(i),n=dm(i);n||"fixed"!==t.position||(o=null),(a?!n&&!o:!n&&"static"===t.position&&o&&["absolute","fixed"].includes(o.position)||lm(i)&&!n&&$m(e,i))?r=r.filter((e=>e!==i)):o=t,i=vm(i)}return t.set(e,r),r}(t,this._c):[].concat(n),i=[...a,r],s=i[0],l=i.reduce(((e,n)=>{const r=Km(t,n,o);return e.top=xm(r.top,e.top),e.right=wm(r.right,e.right),e.bottom=wm(r.bottom,e.bottom),e.left=xm(r.left,e.left),e}),Km(t,s,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:Zm,getElementRects:async function(e){const t=this.getOffsetParent||Zm,n=this.getDimensions,r=await n(e.floating);return{reference:Gm(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:n}=Bm(e);return{width:t,height:n}},getScale:Um,isElement:am,isRTL:function(e){return"rtl"===hm(e).direction}};function tv(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function nv(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:o=!0,ancestorResize:a=!0,elementResize:i="function"===typeof ResizeObserver,layoutShift:s="function"===typeof IntersectionObserver,animationFrame:l=!1}=r,c=Hm(e),u=o||a?[...c?ym(c):[],...ym(t)]:[];u.forEach((e=>{o&&e.addEventListener("scroll",n,{passive:!0}),a&&e.addEventListener("resize",n)}));const d=c&&s?function(e,t){let n,r=null;const o=rm(e);function a(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return function i(s,l){void 0===s&&(s=!1),void 0===l&&(l=1),a();const c=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=c;if(s||t(),!f||!p)return;const h={rootMargin:-Sm(d)+"px "+-Sm(o.clientWidth-(u+f))+"px "+-Sm(o.clientHeight-(d+p))+"px "+-Sm(u)+"px",threshold:xm(0,wm(1,l))||1};let m=!0;function v(t){const r=t[0].intersectionRatio;if(r!==l){if(!m)return i();r?i(!1,r):n=setTimeout((()=>{i(!1,1e-7)}),1e3)}1!==r||tv(c,e.getBoundingClientRect())||i(),m=!1}try{r=new IntersectionObserver(v,_e(_e({},h),{},{root:o.ownerDocument}))}catch(g){r=new IntersectionObserver(v,h)}r.observe(e)}(!0),a}(c,n):null;let f,p=-1,h=null;i&&(h=new ResizeObserver((e=>{let[r]=e;r&&r.target===c&&h&&(h.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame((()=>{var e;null==(e=h)||e.observe(t)}))),n()})),c&&!l&&h.observe(c),h.observe(t));let m=l?qm(e):null;return l&&function t(){const r=qm(e);m&&!tv(m,r)&&n();m=r,f=requestAnimationFrame(t)}(),n(),()=>{var e;u.forEach((e=>{o&&e.removeEventListener("scroll",n),a&&e.removeEventListener("resize",n)})),null==d||d(),null==(e=h)||e.disconnect(),h=null,l&&cancelAnimationFrame(f)}}const rv=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:o,y:a,placement:i,middlewareData:s}=t,l=await async function(e,t){const{placement:n,platform:r,elements:o}=e,a=await(null==r.isRTL?void 0:r.isRTL(o.floating)),i=Dm(n),s=Pm(n),l="y"===_m(n),c=["left","top"].includes(i)?-1:1,u=a&&l?-1:1,d=jm(t,e);let{mainAxis:f,crossAxis:p,alignmentAxis:h}="number"===typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&"number"===typeof h&&(p="end"===s?-1*h:h),l?{x:p*u,y:f*c}:{x:f*c,y:p*u}}(t,e);return i===(null==(n=s.offset)?void 0:n.placement)&&null!=(r=s.arrow)&&r.alignmentOffset?{}:{x:o+l.x,y:a+l.y,data:_e(_e({},l),{},{placement:i})}}}},ov=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:o,middlewareData:a,rects:i,initialPlacement:s,platform:l,elements:c}=t,u=jm(e,t),{mainAxis:d=!0,crossAxis:f=!0,fallbackPlacements:p,fallbackStrategy:h="bestFit",fallbackAxisSideDirection:m="none",flipAlignment:v=!0}=u,g=Ps(u,Im);if(null!=(n=a.arrow)&&n.alignmentOffset)return{};const y=Dm(o),b=_m(s),w=Dm(s)===s,x=await(null==l.isRTL?void 0:l.isRTL(c.floating)),k=p||(w||!v?[Rm(s)]:function(e){const t=Rm(e);return[Mm(e),t,Mm(t)]}(s)),S="none"!==m;!p&&S&&k.push(...function(e,t,n,r){const o=Pm(e);let a=function(e,t,n){const r=["left","right"],o=["right","left"],a=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?a:i;default:return[]}}(Dm(e),"start"===n,r);return o&&(a=a.map((e=>e+"-"+o)),t&&(a=a.concat(a.map(Mm)))),a}(s,v,m,x));const E=[s,...k],C=await zm(t,g),N=[];let j=(null==(r=a.flip)?void 0:r.overflows)||[];if(d&&N.push(C[y]),f){const e=function(e,t,n){void 0===n&&(n=!1);const r=Pm(e),o=Om(e),a=Tm(o);let i="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=Rm(i)),[i,Rm(i)]}(o,i,x);N.push(C[e[0]],C[e[1]])}if(j=[...j,{placement:o,overflows:N}],!N.every((e=>e<=0))){var D,P;const e=((null==(D=a.flip)?void 0:D.index)||0)+1,t=E[e];if(t){var T;const n="alignment"===f&&b!==_m(t),r=(null==(T=j[0])?void 0:T.overflows[0])>0;if(!n||r)return{data:{index:e,overflows:j},reset:{placement:t}}}let n=null==(P=j.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:P.placement;if(!n)switch(h){case"bestFit":{var _;const e=null==(_=j.filter((e=>{if(S){const t=_m(e.placement);return t===b||"y"===t}return!0})).map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:_[0];e&&(n=e);break}case"initialPlacement":n=s}if(o!==n)return{reset:{placement:n}}}return{}}}},av=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:a,platform:i,elements:s,middlewareData:l}=t,{element:c,padding:u=0}=jm(e,t)||{};if(null==c)return{};const d=Am(u),f={x:n,y:r},p=Om(o),h=Tm(p),m=await i.getDimensions(c),v="y"===p,g=v?"top":"left",y=v?"bottom":"right",b=v?"clientHeight":"clientWidth",w=a.reference[h]+a.reference[p]-f[p]-a.floating[h],x=f[p]-a.reference[p],k=await(null==i.getOffsetParent?void 0:i.getOffsetParent(c));let S=k?k[b]:0;S&&await(null==i.isElement?void 0:i.isElement(k))||(S=s.floating[b]||a.floating[h]);const E=w/2-x/2,C=S/2-m[h]/2-1,N=wm(d[g],C),j=wm(d[y],C),D=N,P=S-m[h]-j,T=S/2-m[h]/2+E,_=xm(D,wm(T,P));const O=!l.arrow&&null!=Pm(o)&&T!==_&&a.reference[h]/2-(T<D?N:j)-m[h]/2<0,M=O?T<D?T-D:T-P:0;return{[p]:f[p]+M,data:_e({[p]:_,centerOffset:T-_-M},O&&{alignmentOffset:M}),reset:O}}}),iv=(e,t,n)=>{const r=new Map,o=_e({platform:ev},n),a=_e(_e({},o.platform),{},{_c:r});return(async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:a=[],platform:i}=n,s=a.filter(Boolean),l=await(null==i.isRTL?void 0:i.isRTL(t));let c=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=Fm(c,r,l),f=r,p={},h=0;for(let m=0;m<s.length;m++){const{name:n,fn:a}=s[m],{x:v,y:g,data:y,reset:b}=await a({x:u,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:c,platform:i,elements:{reference:e,floating:t}});u=null!=v?v:u,d=null!=g?g:d,p=_e(_e({},p),{},{[n]:_e(_e({},p[n]),y)}),b&&h<=50&&(h++,"object"===typeof b&&(b.placement&&(f=b.placement),b.rects&&(c=!0===b.rects?await i.getElementRects({reference:e,floating:t,strategy:o}):b.rects),({x:u,y:d}=Fm(c,f,l))),m=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:p}})(e,t,_e(_e({},o),{},{platform:a}))};var sv="undefined"!==typeof document?r.useLayoutEffect:r.useEffect;function lv(e,t){if(e===t)return!0;if(typeof e!==typeof t)return!1;if("function"===typeof e&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&"object"===typeof e){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;0!==r--;)if(!lv(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;0!==r--;)if(!{}.hasOwnProperty.call(t,o[r]))return!1;for(r=n;0!==r--;){const n=o[r];if(("_owner"!==n||!e.$$typeof)&&!lv(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function cv(e){if("undefined"===typeof window)return 1;return(e.ownerDocument.defaultView||window).devicePixelRatio||1}function uv(e,t){const n=cv(e);return Math.round(t*n)/n}function dv(e){const t=r.useRef(e);return sv((()=>{t.current=e})),t}const fv=(e,t)=>_e(_e({},rv(e)),{},{options:[e,t]}),pv=(e,t)=>_e(_e({},(e=>({name:"arrow",options:e,fn(t){const{element:n,padding:r}="function"===typeof e?e(t):e;return n&&(o=n,{}.hasOwnProperty.call(o,"current"))?null!=n.current?av({element:n.current,padding:r}).fn(t):{}:n?av({element:n,padding:r}).fn(t):{};var o}}))(e)),{},{options:[e,t]}),hv=["transform"],mv=["context","width","height","tipRadius","strokeWidth","staticOffset","stroke","d","style"];const vv="ArrowLeft",gv="ArrowRight",yv="ArrowUp",bv="ArrowDown";const wv=[vv,gv],xv=[yv,bv],kv=_e({},o);let Sv=!1,Ev=0;const Cv=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Ev++;const Nv=kv.useId||function(){const[e,t]=r.useState((()=>Sv?Cv():void 0));return Jh((()=>{null==e&&t(Cv())}),[]),r.useEffect((()=>{Sv=!0}),[]),e};const jv=r.forwardRef((function(e,t){const{context:{placement:n,elements:{floating:o},middlewareData:{arrow:a,shift:i}},width:s=14,height:l=7,tipRadius:c=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h}={}}=e,m=Ps(e.style,hv),v=Ps(e,mv);const g=Nv(),[y,b]=r.useState(!1);if(Jh((()=>{if(!o)return;"rtl"===hm(o).direction&&b(!0)}),[o]),!o)return null;const[w,x]=n.split("-"),k="top"===w||"bottom"===w;let S=d;(k&&null!=i&&i.x||!k&&null!=i&&i.y)&&(S=null);const E=2*u,C=E/2,N=s/2*(c/-8+1),j=l/2*c/4,D=!!p,P=S&&"end"===x?"bottom":"top";let T=S&&"end"===x?"right":"left";S&&y&&(T="end"===x?"left":"right");const _=null!=(null==a?void 0:a.x)?S||a.x:"",O=null!=(null==a?void 0:a.y)?S||a.y:"",M=p||"M0,0 H"+s+" L"+(s-N)+","+(l-j)+" Q"+s/2+","+l+" "+N+","+(l-j)+" Z",R={top:D?"rotate(180deg)":"",left:D?"rotate(90deg)":"rotate(-90deg)",bottom:D?"":"rotate(180deg)",right:D?"rotate(-90deg)":"rotate(90deg)"}[w];return(0,bd.jsxs)("svg",_e(_e({},v),{},{"aria-hidden":!0,ref:t,width:D?s:s+E,height:s,viewBox:"0 0 "+s+" "+(l>s?l:s),style:_e({position:"absolute",pointerEvents:"none",[T]:_,[P]:O,[w]:k||D?"100%":"calc(100% - "+E/2+"px)",transform:[R,h].filter((e=>!!e)).join(" ")},m),children:[E>0&&(0,bd.jsx)("path",{clipPath:"url(#"+g+")",fill:"none",stroke:f,strokeWidth:E+(p?0:1),d:M}),(0,bd.jsx)("path",{stroke:E&&!p?v.fill:"none",d:M}),(0,bd.jsx)("clipPath",{id:g,children:(0,bd.jsx)("rect",{x:-C,y:C*(D?-1:1),width:s+E,height:s})})]}))}));function Dv(){const e=new Map;return{emit(t,n){var r;null==(r=e.get(t))||r.forEach((e=>e(n)))},on(t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)},off(t,n){var r;null==(r=e.get(t))||r.delete(n)}}}const Pv=r.createContext(null),Tv=r.createContext(null),_v=()=>{var e;return(null==(e=r.useContext(Pv))?void 0:e.id)||null},Ov=()=>r.useContext(Tv);function Mv(e){const{open:t=!1,onOpenChange:n,elements:o}=e,a=Nv(),i=r.useRef({}),[s]=r.useState((()=>Dv())),l=null!=_v();const[c,u]=r.useState(o.reference),d=function(e){const t=r.useRef((()=>{}));return Zh((()=>{t.current=e})),r.useCallback((function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return null==t.current?void 0:t.current(...n)}),[])}(((e,t,r)=>{i.current.openEvent=e?t:void 0,s.emit("openchange",{open:e,event:t,reason:r,nested:l}),null==n||n(e,t,r)})),f=r.useMemo((()=>({setPositionReference:u})),[]),p=r.useMemo((()=>({reference:c||o.reference||null,floating:o.floating||null,domReference:o.reference})),[c,o.reference,o.floating]);return r.useMemo((()=>({dataRef:i,open:t,onOpenChange:d,elements:p,events:s,floatingId:a,refs:f})),[t,d,p,s,a,f])}function Rv(e){void 0===e&&(e={});const{nodeId:t}=e,n=Mv(_e(_e({},e),{},{elements:_e({reference:null,floating:null},e.elements)})),o=e.rootContext||n,a=o.elements,[s,l]=r.useState(null),[c,u]=r.useState(null),d=(null==a?void 0:a.domReference)||s,f=r.useRef(null),p=Ov();Jh((()=>{d&&(f.current=d)}),[d]);const h=function(e){void 0===e&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:a,elements:{reference:s,floating:l}={},transform:c=!0,whileElementsMounted:u,open:d}=e,[f,p]=r.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[h,m]=r.useState(o);lv(h,o)||m(o);const[v,g]=r.useState(null),[y,b]=r.useState(null),w=r.useCallback((e=>{e!==E.current&&(E.current=e,g(e))}),[]),x=r.useCallback((e=>{e!==C.current&&(C.current=e,b(e))}),[]),k=s||v,S=l||y,E=r.useRef(null),C=r.useRef(null),N=r.useRef(f),j=null!=u,D=dv(u),P=dv(a),T=dv(d),_=r.useCallback((()=>{if(!E.current||!C.current)return;const e={placement:t,strategy:n,middleware:h};P.current&&(e.platform=P.current),iv(E.current,C.current,e).then((e=>{const t=_e(_e({},e),{},{isPositioned:!1!==T.current});O.current&&!lv(N.current,t)&&(N.current=t,i.flushSync((()=>{p(t)})))}))}),[h,t,n,P,T]);sv((()=>{!1===d&&N.current.isPositioned&&(N.current.isPositioned=!1,p((e=>_e(_e({},e),{},{isPositioned:!1}))))}),[d]);const O=r.useRef(!1);sv((()=>(O.current=!0,()=>{O.current=!1})),[]),sv((()=>{if(k&&(E.current=k),S&&(C.current=S),k&&S){if(D.current)return D.current(k,S,_);_()}}),[k,S,_,D,j]);const M=r.useMemo((()=>({reference:E,floating:C,setReference:w,setFloating:x})),[w,x]),R=r.useMemo((()=>({reference:k,floating:S})),[k,S]),A=r.useMemo((()=>{const e={position:n,left:0,top:0};if(!R.floating)return e;const t=uv(R.floating,f.x),r=uv(R.floating,f.y);return c?_e(_e({},e),{},{transform:"translate("+t+"px, "+r+"px)"},cv(R.floating)>=1.5&&{willChange:"transform"}):{position:n,left:t,top:r}}),[n,c,R.floating,f.x,f.y]);return r.useMemo((()=>_e(_e({},f),{},{update:_,refs:M,elements:R,floatingStyles:A})),[f,_,M,R,A])}(_e(_e({},e),{},{elements:_e(_e({},a),c&&{reference:c})})),m=r.useCallback((e=>{const t=am(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;u(t),h.refs.setReference(t)}),[h.refs]),v=r.useCallback((e=>{(am(e)||null===e)&&(f.current=e,l(e)),(am(h.refs.reference.current)||null===h.refs.reference.current||null!==e&&!am(e))&&h.refs.setReference(e)}),[h.refs]),g=r.useMemo((()=>_e(_e({},h.refs),{},{setReference:v,setPositionReference:m,domReference:f})),[h.refs,v,m]),y=r.useMemo((()=>_e(_e({},h.elements),{},{domReference:d})),[h.elements,d]),b=r.useMemo((()=>_e(_e(_e({},h),o),{},{refs:g,elements:y,nodeId:t})),[h,g,y,t,o]);return Jh((()=>{o.dataRef.current.floatingContext=b;const e=null==p?void 0:p.nodesRef.current.find((e=>e.id===t));e&&(e.context=b)})),r.useMemo((()=>_e(_e({},h),{},{context:b,refs:g,elements:y})),[h,g,y,b])}var Av=function(e,t){return Av=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},Av(e,t)};function Lv(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}Av(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var Iv=function(){return Iv=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},Iv.apply(this,arguments)};function Fv(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}"function"===typeof SuppressedError&&SuppressedError;var zv,Bv=function(e){var t=e.showTimeSelectOnly,n=void 0!==t&&t,o=e.showTime,a=void 0!==o&&o,i=e.className,s=e.children,l=n?"Choose Time":"Choose Date".concat(a?" and Time":"");return r.createElement("div",{className:i,role:"dialog","aria-label":l,"aria-modal":"true"},s)},Hv=function(e){var t=e.children,n=e.onClickOutside,o=e.className,a=e.containerRef,i=e.style,s=function(e,t){var n=(0,r.useRef)(null),o=(0,r.useRef)(e);o.current=e;var a=(0,r.useCallback)((function(e){var r,a=e.composed&&e.composedPath&&e.composedPath().find((function(e){return e instanceof Node}))||e.target;n.current&&!n.current.contains(a)&&(t&&a instanceof HTMLElement&&a.classList.contains(t)||null===(r=o.current)||void 0===r||r.call(o,e))}),[t]);return(0,r.useEffect)((function(){return document.addEventListener("mousedown",a),function(){document.removeEventListener("mousedown",a)}}),[a]),n}(n,e.ignoreClass);return r.createElement("div",{className:o,style:i,ref:function(e){s.current=e,a&&(a.current=e)}},t)};function Uv(){return"undefined"!==typeof window?window:globalThis}!function(e){e.ArrowUp="ArrowUp",e.ArrowDown="ArrowDown",e.ArrowLeft="ArrowLeft",e.ArrowRight="ArrowRight",e.PageUp="PageUp",e.PageDown="PageDown",e.Home="Home",e.End="End",e.Enter="Enter",e.Space=" ",e.Tab="Tab",e.Escape="Escape",e.Backspace="Backspace",e.X="x"}(zv||(zv={}));function Yv(e){if(null==e)return new Date;var t="string"===typeof e?Yd(e):Ud(e);return qv(t)?t:new Date}function Wv(e,t,n,r,o){void 0===o&&(o=Yv());for(var a=ug(n)||ug(cg()),i=0,s=Array.isArray(t)?t:[t];i<s.length;i++){var l=s[i],c=Pp(e,l,o,{locale:a,useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0});if(qv(c)&&(!r||e===Vv(c,l,n)))return c}return null}function qv(e,t){return _p(e)&&!Op(e,new Date("1/1/1800"))}function Vv(e,t,n){if("en"===n)return th(e,t,{useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0});var r=n?ug(n):void 0;return n&&!r&&console.warn('A locale object was not found for the provided string ["'.concat(n,'"].')),th(e,t,{locale:r=r||ug(cg()),useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0})}function Qv(e,t){var n=t.dateFormat,r=t.locale,o=Array.isArray(n)&&n.length>0?n[0]:n;return e&&Vv(e,o,r)||""}function Kv(e,t){var n=t.hour,r=void 0===n?0:n,o=t.minute,a=void 0===o?0:o,i=t.second;return rh(oh(ah(e,void 0===i?0:i),a),r)}function $v(e){return Rp(e)}function Gv(e,t,n){return ap(e,{locale:ug(t||cg()),weekStartsOn:n})}function Xv(e){return ih(e)}function Jv(e){return Lp(e)}function Zv(e){return sh(e)}function eg(){return Rp(Yv())}function tg(e){return lh(e)}function ng(e){return uh(e)}function rg(e,t){return e&&t?dh(e,t):!e&&!t}function og(e,t){return e&&t?fh(e,t):!e&&!t}function ag(e,t){return e&&t?ph(e,t):!e&&!t}function ig(e,t){return e&&t?hh(e,t):!e&&!t}function sg(e,t){return e&&t?mh(e,t):!e&&!t}function lg(e,t,n){var r,o=Rp(t),a=lh(n);try{r=vh(e,{start:o,end:a})}catch(i){r=!1}return r}function cg(){return Uv().__localeId__}function ug(e){if("string"===typeof e){var t=Uv();return t.__localeData__?t.__localeData__[e]:void 0}return e}function dg(e,t){return Vv(yh(Yv(),e),"LLLL",t)}function fg(e,t){return Vv(yh(Yv(),e),"LLL",t)}function pg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.excludeDateIntervals,s=n.includeDates,l=n.includeDateIntervals,c=n.filterDate;return kg(e,{minDate:r,maxDate:o})||a&&a.some((function(t){return t instanceof Date?ig(e,t):ig(e,t.date)}))||i&&i.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})}))||s&&!s.some((function(t){return ig(e,t)}))||l&&!l.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})}))||c&&!c(Yv(e))||!1}function hg(e,t){var n=void 0===t?{}:t,r=n.excludeDates,o=n.excludeDateIntervals;return o&&o.length>0?o.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})})):r&&r.some((function(t){var n;return t instanceof Date?ig(e,t):ig(e,null!==(n=t.date)&&void 0!==n?n:new Date)}))||!1}function mg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate;return kg(e,{minDate:r?ih(r):void 0,maxDate:o?uh(o):void 0})||(null===a||void 0===a?void 0:a.some((function(t){return og(e,t instanceof Date?t:t.date)})))||i&&!i.some((function(t){return og(e,t)}))||s&&!s(Yv(e))||!1}function vg(e,t,n,r){var o=wh(e),a=xh(e),i=wh(t),s=xh(t),l=wh(r);return o===i&&o===l?a<=n&&n<=s:o<i&&(l===o&&a<=n||l===i&&s>=n||l<i&&l>o)}function gg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates;return kg(e,{minDate:r,maxDate:o})||a&&a.some((function(t){return og(t instanceof Date?t:t.date,e)}))||i&&!i.some((function(t){return og(t,e)}))||!1}function yg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate;return kg(e,{minDate:r,maxDate:o})||(null===a||void 0===a?void 0:a.some((function(t){return ag(e,t instanceof Date?t:t.date)})))||i&&!i.some((function(t){return ag(e,t)}))||s&&!s(Yv(e))||!1}function bg(e,t,n){if(!t||!n)return!1;if(!_p(t)||!_p(n))return!1;var r=wh(t),o=wh(n);return r<=e&&o>=e}function wg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate,l=new Date(e,0,1);return kg(l,{minDate:r?Lp(r):void 0,maxDate:o?kh(o):void 0})||(null===a||void 0===a?void 0:a.some((function(e){return rg(l,e instanceof Date?e:e.date)})))||i&&!i.some((function(e){return rg(l,e)}))||s&&!s(Yv(l))||!1}function xg(e,t,n,r){var o=wh(e),a=Sh(e),i=wh(t),s=Sh(t),l=wh(r);return o===i&&o===l?a<=n&&n<=s:o<i&&(l===o&&a<=n||l===i&&s>=n||l<i&&l>o)}function kg(e,t){var n,r=void 0===t?{}:t,o=r.minDate,a=r.maxDate;return null!==(n=o&&Ap(e,o)<0||a&&Ap(e,a)>0)&&void 0!==n&&n}function Sg(e,t){return t.some((function(t){return Eh(t)===Eh(e)&&Ch(t)===Ch(e)&&Nh(t)===Nh(e)}))}function Eg(e,t){var n=void 0===t?{}:t,r=n.excludeTimes,o=n.includeTimes,a=n.filterTime;return r&&Sg(e,r)||o&&!Sg(e,o)||a&&!a(e)||!1}function Cg(e,t){var n=t.minTime,r=t.maxTime;if(!n||!r)throw new Error("Both minTime and maxTime props required");var o=Yv();o=ah(o=oh(o=rh(o,Eh(e)),Ch(e)),Nh(e));var a=Yv();a=ah(a=oh(a=rh(a,Eh(n)),Ch(n)),Nh(n));var i,s=Yv();s=ah(s=oh(s=rh(s,Eh(r)),Ch(r)),Nh(r));try{i=!vh(o,{start:a,end:s})}catch(l){i=!1}return i}function Ng(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=Dh(e,1);return r&&Ph(r,a)>0||o&&o.every((function(e){return Ph(e,a)>0}))||!1}function jg(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=jh(e,1);return r&&Ph(a,r)>0||o&&o.every((function(e){return Ph(a,e)>0}))||!1}function Dg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=Rh(e,1);return r&&Ah(r,a)>0||o&&o.every((function(e){return Ah(e,a)>0}))||!1}function Pg(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=Mh(e,1);return r&&Ah(a,r)>0||o&&o.every((function(e){return Ah(a,e)>0}))||!1}function Tg(e){var t=e.minDate,n=e.includeDates;return n&&t?Lh(n.filter((function(e){return Ap(e,t)>=0}))):n?Lh(n):t}function _g(e){var t=e.maxDate,n=e.includeDates;return n&&t?Ih(n.filter((function(e){return Ap(e,t)<=0}))):n?Ih(n):t}function Og(e,t){var n;void 0===e&&(e=[]),void 0===t&&(t="react-datepicker__day--highlighted");for(var r=new Map,o=0,a=e.length;o<a;o++){var i=e[o];if(Tp(i)){var s=Vv(i,"MM.dd.yyyy");(p=r.get(s)||[]).includes(t)||(p.push(t),r.set(s,p))}else if("object"===typeof i){var l=null!==(n=Object.keys(i)[0])&&void 0!==n?n:"",c=i[l];if("string"===typeof l&&Array.isArray(c))for(var u=0,d=c.length;u<d;u++){var f=c[u];if(f){var p;s=Vv(f,"MM.dd.yyyy");(p=r.get(s)||[]).includes(l)||(p.push(l),r.set(s,p))}}}}return r}function Mg(e,t){void 0===e&&(e=[]),void 0===t&&(t="react-datepicker__day--holidays");var n=new Map;return e.forEach((function(e){var r=e.date,o=e.holidayName;if(Tp(r)){var a=Vv(r,"MM.dd.yyyy"),i=n.get(a)||{className:"",holidayNames:[]};if(!("className"in i)||i.className!==t||(s=i.holidayNames,l=[o],s.length!==l.length||!s.every((function(e,t){return e===l[t]})))){var s,l;i.className=t;var c=i.holidayNames;i.holidayNames=c?Fv(Fv([],c,!0),[o],!1):[o],n.set(a,i)}}})),n}function Rg(e,t,n,r,o){for(var a=o.length,i=[],s=0;s<a;s++){var l=e,c=o[s];c&&(l=Hh(l=Bh(l=zh(l,Eh(c)),Ch(c)),Nh(c)));var u=Bh(e,(n+1)*r);Uh(l,t)&&Op(l,u)&&void 0!=c&&i.push(c)}return i}function Ag(e){return e<10?"0".concat(e):"".concat(e)}function Lg(e,t){void 0===t&&(t=12);var n=Math.ceil(wh(e)/t)*t;return{startPeriod:n-(t-1),endPeriod:n}}function Ig(e){var t=e.getSeconds(),n=e.getMilliseconds();return Ud(e.getTime()-1e3*t-n)}function Fg(e){if(!Tp(e))throw new Error("Invalid date");var t=new Date(e);return t.setHours(0,0,0,0),t}function zg(e,t){if(!Tp(e)||!Tp(t))throw new Error("Invalid date received");return Op(Fg(e),Fg(t))}function Bg(e){return e.key===zv.Space}var Hg,Ug=function(e){function t(t){var n=e.call(this,t)||this;return n.inputRef=r.createRef(),n.onTimeChange=function(e){var t,r;n.setState({time:e});var o=n.props.date,a=o instanceof Date&&!isNaN(+o)?o:new Date;if(null===e||void 0===e?void 0:e.includes(":")){var i=e.split(":"),s=i[0],l=i[1];a.setHours(Number(s)),a.setMinutes(Number(l))}null===(r=(t=n.props).onChange)||void 0===r||r.call(t,a)},n.renderTimeInput=function(){var e=n.state.time,t=n.props,o=t.date,a=t.timeString,i=t.customTimeInput;return i?(0,r.cloneElement)(i,{date:o,value:e,onChange:n.onTimeChange}):r.createElement("input",{type:"time",className:"react-datepicker-time__input",placeholder:"Time",name:"time-input",ref:n.inputRef,onClick:function(){var e;null===(e=n.inputRef.current)||void 0===e||e.focus()},required:!0,value:e,onChange:function(e){n.onTimeChange(e.target.value||a)}})},n.state={time:n.props.timeString},n}return Lv(t,e),t.getDerivedStateFromProps=function(e,t){return e.timeString!==t.time?{time:e.timeString}:null},t.prototype.render=function(){return r.createElement("div",{className:"react-datepicker__input-time-container"},r.createElement("div",{className:"react-datepicker-time__caption"},this.props.timeInputLabel),r.createElement("div",{className:"react-datepicker-time__input-container"},r.createElement("div",{className:"react-datepicker-time__input"},this.renderTimeInput())))},t}(r.Component),Yg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.dayEl=(0,r.createRef)(),t.handleClick=function(e){!t.isDisabled()&&t.props.onClick&&t.props.onClick(e)},t.handleMouseEnter=function(e){!t.isDisabled()&&t.props.onMouseEnter&&t.props.onMouseEnter(e)},t.handleOnKeyDown=function(e){var n,r;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),null===(r=(n=t.props).handleOnKeyDown)||void 0===r||r.call(n,e)},t.isSameDay=function(e){return ig(t.props.day,e)},t.isKeyboardSelected=function(){var e;if(t.props.disabledKeyboardNavigation)return!1;var n=t.props.selectsMultiple?null===(e=t.props.selectedDates)||void 0===e?void 0:e.some((function(e){return t.isSameDayOrWeek(e)})):t.isSameDayOrWeek(t.props.selected),r=t.props.preSelection&&t.isDisabled(t.props.preSelection);return!n&&t.isSameDayOrWeek(t.props.preSelection)&&!r},t.isDisabled=function(e){return void 0===e&&(e=t.props.day),pg(e,{minDate:t.props.minDate,maxDate:t.props.maxDate,excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals,includeDateIntervals:t.props.includeDateIntervals,includeDates:t.props.includeDates,filterDate:t.props.filterDate})},t.isExcluded=function(){return hg(t.props.day,{excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals})},t.isStartOfWeek=function(){return ig(t.props.day,Gv(t.props.day,t.props.locale,t.props.calendarStartDay))},t.isSameWeek=function(e){return t.props.showWeekPicker&&ig(e,Gv(t.props.day,t.props.locale,t.props.calendarStartDay))},t.isSameDayOrWeek=function(e){return t.isSameDay(e)||t.isSameWeek(e)},t.getHighLightedClass=function(){var e=t.props,n=e.day,r=e.highlightDates;if(!r)return!1;var o=Vv(n,"MM.dd.yyyy");return r.get(o)},t.getHolidaysClass=function(){var e,n=t.props,r=n.day,o=n.holidays;if(!o)return[void 0];var a=Vv(r,"MM.dd.yyyy");return o.has(a)?[null===(e=o.get(a))||void 0===e?void 0:e.className]:[void 0]},t.isInRange=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&lg(n,r,o)},t.isInSelectingRange=function(){var e,n=t.props,r=n.day,o=n.selectsStart,a=n.selectsEnd,i=n.selectsRange,s=n.selectsDisabledDaysInRange,l=n.startDate,c=n.endDate,u=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return!(!(o||a||i)||!u||!s&&t.isDisabled())&&(o&&c&&(Op(u,c)||sg(u,c))?lg(r,u,c):(a&&l&&!c&&(Uh(u,l)||sg(u,l))||!(!i||!l||c||!Uh(u,l)&&!sg(u,l)))&&lg(r,l,u))},t.isSelectingRangeStart=function(){var e;if(!t.isInSelectingRange())return!1;var n=t.props,r=n.day,o=n.startDate,a=n.selectsStart,i=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return ig(r,a?i:o)},t.isSelectingRangeEnd=function(){var e;if(!t.isInSelectingRange())return!1;var n=t.props,r=n.day,o=n.endDate,a=n.selectsEnd,i=n.selectsRange,s=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return ig(r,a||i?s:o)},t.isRangeStart=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&ig(r,n)},t.isRangeEnd=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&ig(o,n)},t.isWeekend=function(){var e=Yh(t.props.day);return 0===e||6===e},t.isAfterMonth=function(){return void 0!==t.props.month&&(t.props.month+1)%12===xh(t.props.day)},t.isBeforeMonth=function(){return void 0!==t.props.month&&(xh(t.props.day)+1)%12===t.props.month},t.isCurrentDay=function(){return t.isSameDay(Yv())},t.isSelected=function(){var e;return t.props.selectsMultiple?null===(e=t.props.selectedDates)||void 0===e?void 0:e.some((function(e){return t.isSameDayOrWeek(e)})):t.isSameDayOrWeek(t.props.selected)},t.getClassNames=function(e){return Ld("react-datepicker__day",t.props.dayClassName?t.props.dayClassName(e):void 0,"react-datepicker__day--"+function(e,t){return Vv(e,"ddd",t)}(t.props.day),{"react-datepicker__day--disabled":t.isDisabled(),"react-datepicker__day--excluded":t.isExcluded(),"react-datepicker__day--selected":t.isSelected(),"react-datepicker__day--keyboard-selected":t.isKeyboardSelected(),"react-datepicker__day--range-start":t.isRangeStart(),"react-datepicker__day--range-end":t.isRangeEnd(),"react-datepicker__day--in-range":t.isInRange(),"react-datepicker__day--in-selecting-range":t.isInSelectingRange(),"react-datepicker__day--selecting-range-start":t.isSelectingRangeStart(),"react-datepicker__day--selecting-range-end":t.isSelectingRangeEnd(),"react-datepicker__day--today":t.isCurrentDay(),"react-datepicker__day--weekend":t.isWeekend(),"react-datepicker__day--outside-month":t.isAfterMonth()||t.isBeforeMonth()},t.getHighLightedClass(),t.getHolidaysClass())},t.getAriaLabel=function(){var e=t.props,n=e.day,r=e.ariaLabelPrefixWhenEnabled,o=void 0===r?"Choose":r,a=e.ariaLabelPrefixWhenDisabled,i=void 0===a?"Not available":a,s=t.isDisabled()||t.isExcluded()?i:o;return"".concat(s," ").concat(Vv(n,"PPPP",t.props.locale))},t.getTitle=function(){var e=t.props,n=e.day,r=e.holidays,o=void 0===r?new Map:r,a=e.excludeDates,i=Vv(n,"MM.dd.yyyy"),s=[];return o.has(i)&&s.push.apply(s,o.get(i).holidayNames),t.isExcluded()&&s.push(null===a||void 0===a?void 0:a.filter((function(e){return e instanceof Date?ig(e,n):ig(null===e||void 0===e?void 0:e.date,n)})).map((function(e){if(!(e instanceof Date))return null===e||void 0===e?void 0:e.message}))),s.join(", ")},t.getTabIndex=function(){var e=t.props.selected,n=t.props.preSelection;return(!t.props.showWeekPicker||!t.props.showWeekNumber&&t.isStartOfWeek())&&(t.isKeyboardSelected()||t.isSameDay(e)&&ig(n,e))?0:-1},t.handleFocusDay=function(){var e;t.shouldFocusDay()&&(null===(e=t.dayEl.current)||void 0===e||e.focus({preventScroll:!0}))},t.renderDayContents=function(){return t.props.monthShowsDuplicateDaysEnd&&t.isAfterMonth()||t.props.monthShowsDuplicateDaysStart&&t.isBeforeMonth()?null:t.props.renderDayContents?t.props.renderDayContents(Wh(t.props.day),t.props.day):Wh(t.props.day)},t.render=function(){return r.createElement("div",{ref:t.dayEl,className:t.getClassNames(t.props.day),onKeyDown:t.handleOnKeyDown,onClick:t.handleClick,onMouseEnter:t.props.usePointerEvent?void 0:t.handleMouseEnter,onPointerEnter:t.props.usePointerEvent?t.handleMouseEnter:void 0,tabIndex:t.getTabIndex(),"aria-label":t.getAriaLabel(),role:"option",title:t.getTitle(),"aria-disabled":t.isDisabled(),"aria-current":t.isCurrentDay()?"date":void 0,"aria-selected":t.isSelected()||t.isInRange()},t.renderDayContents(),""!==t.getTitle()&&r.createElement("span",{className:"overlay"},t.getTitle()))},t}return Lv(t,e),t.prototype.componentDidMount=function(){this.handleFocusDay()},t.prototype.componentDidUpdate=function(){this.handleFocusDay()},t.prototype.shouldFocusDay=function(){var e=!1;return 0===this.getTabIndex()&&this.isSameDay(this.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(e=!0),this.props.inline&&!this.props.shouldFocusDayInline&&(e=!1),this.isDayActiveElement()&&(e=!0),this.isDuplicateDay()&&(e=!1)),e},t.prototype.isDayActiveElement=function(){var e,t,n;return(null===(t=null===(e=this.props.containerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.contains(document.activeElement))&&(null===(n=document.activeElement)||void 0===n?void 0:n.classList.contains("react-datepicker__day"))},t.prototype.isDuplicateDay=function(){return this.props.monthShowsDuplicateDaysEnd&&this.isAfterMonth()||this.props.monthShowsDuplicateDaysStart&&this.isBeforeMonth()},t}(r.Component),Wg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.weekNumberEl=(0,r.createRef)(),t.handleClick=function(e){t.props.onClick&&t.props.onClick(e)},t.handleOnKeyDown=function(e){var n,r;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),null===(r=(n=t.props).handleOnKeyDown)||void 0===r||r.call(n,e)},t.isKeyboardSelected=function(){return!t.props.disabledKeyboardNavigation&&!ig(t.props.date,t.props.selected)&&ig(t.props.date,t.props.preSelection)},t.getTabIndex=function(){return t.props.showWeekPicker&&t.props.showWeekNumber&&(t.isKeyboardSelected()||ig(t.props.date,t.props.selected)&&ig(t.props.preSelection,t.props.selected))?0:-1},t.handleFocusWeekNumber=function(e){var n=!1;0===t.getTabIndex()&&!(null===e||void 0===e?void 0:e.isInputFocused)&&ig(t.props.date,t.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(n=!0),t.props.inline&&!t.props.shouldFocusDayInline&&(n=!1),t.props.containerRef&&t.props.containerRef.current&&t.props.containerRef.current.contains(document.activeElement)&&document.activeElement&&document.activeElement.classList.contains("react-datepicker__week-number")&&(n=!0)),n&&t.weekNumberEl.current&&t.weekNumberEl.current.focus({preventScroll:!0})},t}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{ariaLabelPrefix:"week "}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){this.handleFocusWeekNumber()},t.prototype.componentDidUpdate=function(e){this.handleFocusWeekNumber(e)},t.prototype.render=function(){var e=this.props,n=e.weekNumber,o=e.isWeekDisabled,a=e.ariaLabelPrefix,i=void 0===a?t.defaultProps.ariaLabelPrefix:a,s=e.onClick,l={"react-datepicker__week-number":!0,"react-datepicker__week-number--clickable":!!s&&!o,"react-datepicker__week-number--selected":!!s&&ig(this.props.date,this.props.selected)};return r.createElement("div",{ref:this.weekNumberEl,className:Ld(l),"aria-label":"".concat(i," ").concat(this.props.weekNumber),onClick:this.handleClick,onKeyDown:this.handleOnKeyDown,tabIndex:this.getTabIndex()},n)},t}(r.Component),qg=function(e){function t(){var n=null!==e&&e.apply(this,arguments)||this;return n.isDisabled=function(e){return pg(e,{minDate:n.props.minDate,maxDate:n.props.maxDate,excludeDates:n.props.excludeDates,excludeDateIntervals:n.props.excludeDateIntervals,includeDateIntervals:n.props.includeDateIntervals,includeDates:n.props.includeDates,filterDate:n.props.filterDate})},n.handleDayClick=function(e,t){n.props.onDayClick&&n.props.onDayClick(e,t)},n.handleDayMouseEnter=function(e){n.props.onDayMouseEnter&&n.props.onDayMouseEnter(e)},n.handleWeekClick=function(e,r,o){for(var a,i,s,l=new Date(e),c=0;c<7;c++){var u=new Date(e);if(u.setDate(u.getDate()+c),!n.isDisabled(u)){l=u;break}}"function"===typeof n.props.onWeekSelect&&n.props.onWeekSelect(l,r,o),n.props.showWeekPicker&&n.handleDayClick(l,o),(null!==(a=n.props.shouldCloseOnSelect)&&void 0!==a?a:t.defaultProps.shouldCloseOnSelect)&&(null===(s=(i=n.props).setOpen)||void 0===s||s.call(i,!1))},n.formatWeekNumber=function(e){return n.props.formatWeekNumber?n.props.formatWeekNumber(e):function(e){return pp(e)}(e)},n.isWeekDisabled=function(){for(var e=n.startOfWeek(),t=gp(e,6),r=new Date(e);r<=t;){if(!n.isDisabled(r))return!1;r=gp(r,1)}return!0},n.renderDays=function(){var e=n.startOfWeek(),o=[],a=n.formatWeekNumber(e);if(n.props.showWeekNumber){var i=n.props.onWeekSelect||n.props.showWeekPicker?n.handleWeekClick.bind(n,e,a):void 0;o.push(r.createElement(Wg,Iv({key:"W"},t.defaultProps,n.props,{weekNumber:a,isWeekDisabled:n.isWeekDisabled(),date:e,onClick:i})))}return o.concat([0,1,2,3,4,5,6].map((function(o){var a=gp(e,o);return r.createElement(Yg,Iv({},t.defaultProps,n.props,{ariaLabelPrefixWhenEnabled:n.props.chooseDayAriaLabelPrefix,ariaLabelPrefixWhenDisabled:n.props.disabledDayAriaLabelPrefix,key:a.valueOf(),day:a,onClick:n.handleDayClick.bind(n,a),onMouseEnter:n.handleDayMouseEnter.bind(n,a)}))})))},n.startOfWeek=function(){return Gv(n.props.day,n.props.locale,n.props.calendarStartDay)},n.isKeyboardSelected=function(){return!n.props.disabledKeyboardNavigation&&!ig(n.startOfWeek(),n.props.selected)&&ig(n.startOfWeek(),n.props.preSelection)},n}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{shouldCloseOnSelect:!0}},enumerable:!1,configurable:!0}),t.prototype.render=function(){var e={"react-datepicker__week":!0,"react-datepicker__week--selected":ig(this.startOfWeek(),this.props.selected),"react-datepicker__week--keyboard-selected":this.isKeyboardSelected()};return r.createElement("div",{className:Ld(e)},this.renderDays())},t}(r.Component),Vg="two_columns",Qg="three_columns",Kg="four_columns",$g=((Hg={})[Vg]={grid:[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11]],verticalNavigationOffset:2},Hg[Qg]={grid:[[0,1,2],[3,4,5],[6,7,8],[9,10,11]],verticalNavigationOffset:3},Hg[Kg]={grid:[[0,1,2,3],[4,5,6,7],[8,9,10,11]],verticalNavigationOffset:4},Hg);function Gg(e,t){return e?Kg:t?Vg:Qg}var Xg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.MONTH_REFS=Fv([],Array(12),!0).map((function(){return(0,r.createRef)()})),t.QUARTER_REFS=Fv([],Array(4),!0).map((function(){return(0,r.createRef)()})),t.isDisabled=function(e){return pg(e,{minDate:t.props.minDate,maxDate:t.props.maxDate,excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals,includeDateIntervals:t.props.includeDateIntervals,includeDates:t.props.includeDates,filterDate:t.props.filterDate})},t.isExcluded=function(e){return hg(e,{excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals})},t.handleDayClick=function(e,n){var r,o;null===(o=(r=t.props).onDayClick)||void 0===o||o.call(r,e,n,t.props.orderInDisplay)},t.handleDayMouseEnter=function(e){var n,r;null===(r=(n=t.props).onDayMouseEnter)||void 0===r||r.call(n,e)},t.handleMouseLeave=function(){var e,n;null===(n=(e=t.props).onMouseLeave)||void 0===n||n.call(e)},t.isRangeStartMonth=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&og(yh(r,e),o)},t.isRangeStartQuarter=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&ag(bh(r,e),o)},t.isRangeEndMonth=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&og(yh(r,e),a)},t.isRangeEndQuarter=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&ag(bh(r,e),a)},t.isInSelectingRangeMonth=function(e){var n,r=t.props,o=r.day,a=r.selectsStart,i=r.selectsEnd,s=r.selectsRange,l=r.startDate,c=r.endDate,u=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return!(!(a||i||s)||!u)&&(a&&c?vg(u,c,e,o):(i&&l||!(!s||!l||c))&&vg(l,u,e,o))},t.isSelectingMonthRangeStart=function(e){var n;if(!t.isInSelectingRangeMonth(e))return!1;var r=t.props,o=r.day,a=r.startDate,i=r.selectsStart,s=yh(o,e),l=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return og(s,i?l:a)},t.isSelectingMonthRangeEnd=function(e){var n;if(!t.isInSelectingRangeMonth(e))return!1;var r=t.props,o=r.day,a=r.endDate,i=r.selectsEnd,s=r.selectsRange,l=yh(o,e),c=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return og(l,i||s?c:a)},t.isInSelectingRangeQuarter=function(e){var n,r=t.props,o=r.day,a=r.selectsStart,i=r.selectsEnd,s=r.selectsRange,l=r.startDate,c=r.endDate,u=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return!(!(a||i||s)||!u)&&(a&&c?xg(u,c,e,o):(i&&l||!(!s||!l||c))&&xg(l,u,e,o))},t.isWeekInMonth=function(e){var n=t.props.day,r=gp(e,6);return og(e,n)||og(r,n)},t.isCurrentMonth=function(e,t){return wh(e)===wh(Yv())&&t===xh(Yv())},t.isCurrentQuarter=function(e,t){return wh(e)===wh(Yv())&&t===Sh(Yv())},t.isSelectedMonth=function(e,t,n){return xh(n)===t&&wh(e)===wh(n)},t.isSelectMonthInList=function(e,n,r){return r.some((function(r){return t.isSelectedMonth(e,n,r)}))},t.isSelectedQuarter=function(e,t,n){return Sh(e)===t&&wh(e)===wh(n)},t.renderWeeks=function(){for(var e=[],n=t.props.fixedHeight,o=0,a=!1,i=Gv(Xv(t.props.day),t.props.locale,t.props.calendarStartDay),s=t.props.selected?function(e){return t.props.showWeekPicker?Gv(e,t.props.locale,t.props.calendarStartDay):t.props.selected}(t.props.selected):void 0,l=t.props.preSelection?function(e){return t.props.showWeekPicker?Gv(e,t.props.locale,t.props.calendarStartDay):t.props.preSelection}(t.props.preSelection):void 0;e.push(r.createElement(qg,Iv({},t.props,{ariaLabelPrefix:t.props.weekAriaLabelPrefix,key:o,day:i,month:xh(t.props.day),onDayClick:t.handleDayClick,onDayMouseEnter:t.handleDayMouseEnter,selected:s,preSelection:l,showWeekNumber:t.props.showWeekNumbers}))),!a;){o++,i=qh(i,1);var c=n&&o>=6,u=!n&&!t.isWeekInMonth(i);if(c||u){if(!t.props.peekNextMonth)break;a=!0}}return e},t.onMonthClick=function(e,n){var r=t.isMonthDisabledForLabelDate(n),o=r.isDisabled,a=r.labelDate;o||t.handleDayClick(Xv(a),e)},t.onMonthMouseEnter=function(e){var n=t.isMonthDisabledForLabelDate(e),r=n.isDisabled,o=n.labelDate;r||t.handleDayMouseEnter(Xv(o))},t.handleMonthNavigation=function(e,n){var r,o,a,i;null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,n),null===(i=null===(a=t.MONTH_REFS[e])||void 0===a?void 0:a.current)||void 0===i||i.focus()},t.handleKeyboardNavigation=function(e,n,r){var o,a=t.props,i=a.selected,s=a.preSelection,l=a.setPreSelection,c=a.minDate,u=a.maxDate,d=a.showFourColumnMonthYearPicker,f=a.showTwoColumnMonthYearPicker;if(s){var p=Gg(d,f),h=t.getVerticalOffset(p),m=null===(o=$g[p])||void 0===o?void 0:o.grid,v=function(e,t,n){var r,o,a=t,i=n;switch(e){case zv.ArrowRight:a=jh(t,1),i=11===n?0:n+1;break;case zv.ArrowLeft:a=Dh(t,1),i=0===n?11:n-1;break;case zv.ArrowUp:a=Dh(t,h),i=(null===(r=null===m||void 0===m?void 0:m[0])||void 0===r?void 0:r.includes(n))?n+12-h:n-h;break;case zv.ArrowDown:a=jh(t,h),i=(null===(o=null===m||void 0===m?void 0:m[m.length-1])||void 0===o?void 0:o.includes(n))?n-12+h:n+h}return{newCalculatedDate:a,newCalculatedMonth:i}};if(n!==zv.Enter){var g=function(e,n,r){for(var o=e,a=!1,i=0,s=v(o,n,r),l=s.newCalculatedDate,d=s.newCalculatedMonth;!a;){if(i>=40){l=n,d=r;break}var f;if(c&&l<c)o=zv.ArrowRight,l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;if(u&&l>u)o=zv.ArrowLeft,l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;if(gg(l,t.props))l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;else a=!0;i++}return{newCalculatedDate:l,newCalculatedMonth:d}}(n,s,r),y=g.newCalculatedDate,b=g.newCalculatedMonth;switch(n){case zv.ArrowRight:case zv.ArrowLeft:case zv.ArrowUp:case zv.ArrowDown:t.handleMonthNavigation(b,y)}}else t.isMonthDisabled(r)||(t.onMonthClick(e,r),null===l||void 0===l||l(i))}},t.getVerticalOffset=function(e){var t,n;return null!==(n=null===(t=$g[e])||void 0===t?void 0:t.verticalNavigationOffset)&&void 0!==n?n:0},t.onMonthKeyDown=function(e,n){var r=t.props,o=r.disabledKeyboardNavigation,a=r.handleOnMonthKeyDown,i=e.key;i!==zv.Tab&&e.preventDefault(),o||t.handleKeyboardNavigation(e,i,n),a&&a(e)},t.onQuarterClick=function(e,n){var r=bh(t.props.day,n);yg(r,t.props)||t.handleDayClick(Zv(r),e)},t.onQuarterMouseEnter=function(e){var n=bh(t.props.day,e);yg(n,t.props)||t.handleDayMouseEnter(Zv(n))},t.handleQuarterNavigation=function(e,n){var r,o,a,i;t.isDisabled(n)||t.isExcluded(n)||(null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,n),null===(i=null===(a=t.QUARTER_REFS[e-1])||void 0===a?void 0:a.current)||void 0===i||i.focus())},t.onQuarterKeyDown=function(e,n){var r,o,a=e.key;if(!t.props.disabledKeyboardNavigation)switch(a){case zv.Enter:t.onQuarterClick(e,n),null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,t.props.selected);break;case zv.ArrowRight:if(!t.props.preSelection)break;t.handleQuarterNavigation(4===n?1:n+1,Th(t.props.preSelection,1));break;case zv.ArrowLeft:if(!t.props.preSelection)break;t.handleQuarterNavigation(1===n?4:n-1,_h(t.props.preSelection,1))}},t.isMonthDisabledForLabelDate=function(e){var n,r=t.props,o=r.day,a=r.minDate,i=r.maxDate,s=r.excludeDates,l=r.includeDates,c=yh(o,e);return{isDisabled:null!==(n=(a||i||s||l)&&mg(c,t.props))&&void 0!==n&&n,labelDate:c}},t.isMonthDisabled=function(e){return t.isMonthDisabledForLabelDate(e).isDisabled},t.getMonthClassNames=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate,i=n.preSelection,s=n.monthClassName,l=s?s(yh(r,e)):void 0,c=t.getSelection();return Ld("react-datepicker__month-text","react-datepicker__month-".concat(e),l,{"react-datepicker__month-text--disabled":t.isMonthDisabled(e),"react-datepicker__month-text--selected":c?t.isSelectMonthInList(r,e,c):void 0,"react-datepicker__month-text--keyboard-selected":!t.props.disabledKeyboardNavigation&&i&&t.isSelectedMonth(r,e,i)&&!t.isMonthDisabled(e),"react-datepicker__month-text--in-selecting-range":t.isInSelectingRangeMonth(e),"react-datepicker__month-text--in-range":o&&a?vg(o,a,e,r):void 0,"react-datepicker__month-text--range-start":t.isRangeStartMonth(e),"react-datepicker__month-text--range-end":t.isRangeEndMonth(e),"react-datepicker__month-text--selecting-range-start":t.isSelectingMonthRangeStart(e),"react-datepicker__month-text--selecting-range-end":t.isSelectingMonthRangeEnd(e),"react-datepicker__month-text--today":t.isCurrentMonth(r,e)})},t.getTabIndex=function(e){if(null==t.props.preSelection)return"-1";var n=xh(t.props.preSelection),r=t.isMonthDisabledForLabelDate(n).isDisabled;return e!==n||r||t.props.disabledKeyboardNavigation?"-1":"0"},t.getQuarterTabIndex=function(e){if(null==t.props.preSelection)return"-1";var n=Sh(t.props.preSelection),r=yg(t.props.day,t.props);return e!==n||r||t.props.disabledKeyboardNavigation?"-1":"0"},t.getAriaLabel=function(e){var n=t.props,r=n.chooseDayAriaLabelPrefix,o=void 0===r?"Choose":r,a=n.disabledDayAriaLabelPrefix,i=void 0===a?"Not available":a,s=n.day,l=n.locale,c=yh(s,e),u=t.isDisabled(c)||t.isExcluded(c)?i:o;return"".concat(u," ").concat(Vv(c,"MMMM yyyy",l))},t.getQuarterClassNames=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate,i=n.selected,s=n.minDate,l=n.maxDate,c=n.excludeDates,u=n.includeDates,d=n.filterDate,f=n.preSelection,p=n.disabledKeyboardNavigation,h=(s||l||c||u||d)&&yg(bh(r,e),t.props);return Ld("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter-text--disabled":h,"react-datepicker__quarter-text--selected":i?t.isSelectedQuarter(r,e,i):void 0,"react-datepicker__quarter-text--keyboard-selected":!p&&f&&t.isSelectedQuarter(r,e,f)&&!h,"react-datepicker__quarter-text--in-selecting-range":t.isInSelectingRangeQuarter(e),"react-datepicker__quarter-text--in-range":o&&a?xg(o,a,e,r):void 0,"react-datepicker__quarter-text--range-start":t.isRangeStartQuarter(e),"react-datepicker__quarter-text--range-end":t.isRangeEndQuarter(e),"react-datepicker__quarter-text--today":t.isCurrentQuarter(r,e)})},t.getMonthContent=function(e){var n=t.props,r=n.showFullMonthYearPicker,o=n.renderMonthContent,a=n.locale,i=n.day,s=fg(e,a),l=dg(e,a);return o?o(e,s,l,i):r?l:s},t.getQuarterContent=function(e){var n,r=t.props,o=r.renderQuarterContent,a=function(e,t){return Vv(bh(Yv(),e),"QQQ",t)}(e,r.locale);return null!==(n=null===o||void 0===o?void 0:o(e,a))&&void 0!==n?n:a},t.renderMonths=function(){var e,n=t.props,o=n.showTwoColumnMonthYearPicker,a=n.showFourColumnMonthYearPicker,i=n.day,s=n.selected,l=null===(e=$g[Gg(a,o)])||void 0===e?void 0:e.grid;return null===l||void 0===l?void 0:l.map((function(e,n){return r.createElement("div",{className:"react-datepicker__month-wrapper",key:n},e.map((function(e,n){return r.createElement("div",{ref:t.MONTH_REFS[e],key:n,onClick:function(n){t.onMonthClick(n,e)},onKeyDown:function(n){Bg(n)&&(n.preventDefault(),n.key=zv.Enter),t.onMonthKeyDown(n,e)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onMonthMouseEnter(e)},onPointerEnter:t.props.usePointerEvent?function(){return t.onMonthMouseEnter(e)}:void 0,tabIndex:Number(t.getTabIndex(e)),className:t.getMonthClassNames(e),"aria-disabled":t.isMonthDisabled(e),role:"option","aria-label":t.getAriaLabel(e),"aria-current":t.isCurrentMonth(i,e)?"date":void 0,"aria-selected":s?t.isSelectedMonth(i,e,s):void 0},t.getMonthContent(e))})))}))},t.renderQuarters=function(){var e=t.props,n=e.day,o=e.selected;return r.createElement("div",{className:"react-datepicker__quarter-wrapper"},[1,2,3,4].map((function(e,a){return r.createElement("div",{key:a,ref:t.QUARTER_REFS[a],role:"option",onClick:function(n){t.onQuarterClick(n,e)},onKeyDown:function(n){t.onQuarterKeyDown(n,e)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onQuarterMouseEnter(e)},onPointerEnter:t.props.usePointerEvent?function(){return t.onQuarterMouseEnter(e)}:void 0,className:t.getQuarterClassNames(e),"aria-selected":o?t.isSelectedQuarter(n,e,o):void 0,tabIndex:Number(t.getQuarterTabIndex(e)),"aria-current":t.isCurrentQuarter(n,e)?"date":void 0},t.getQuarterContent(e))})))},t.getClassNames=function(){var e=t.props,n=e.selectingDate,r=e.selectsStart,o=e.selectsEnd;return Ld("react-datepicker__month",{"react-datepicker__month--selecting-range":n&&(r||o)},{"react-datepicker__monthPicker":e.showMonthYearPicker},{"react-datepicker__quarterPicker":e.showQuarterYearPicker},{"react-datepicker__weekPicker":e.showWeekPicker})},t}return Lv(t,e),t.prototype.getSelection=function(){var e=this.props,t=e.selected,n=e.selectedDates;return e.selectsMultiple?n:t?[t]:void 0},t.prototype.render=function(){var e=this.props,t=e.showMonthYearPicker,n=e.showQuarterYearPicker,o=e.day,a=e.ariaLabelPrefix,i=void 0===a?"Month ":a,s=i?i.trim()+" ":"";return r.createElement("div",{className:this.getClassNames(),onMouseLeave:this.props.usePointerEvent?void 0:this.handleMouseLeave,onPointerLeave:this.props.usePointerEvent?this.handleMouseLeave:void 0,"aria-label":"".concat(s).concat(Vv(o,"MMMM, yyyy",this.props.locale)),role:"listbox"},t?this.renderMonths():n?this.renderQuarters():this.renderWeeks())},t}(r.Component),Jg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.isSelectedMonth=function(e){return t.props.month===e},t.renderOptions=function(){return t.props.monthNames.map((function(e,n){return r.createElement("div",{className:t.isSelectedMonth(n)?"react-datepicker__month-option react-datepicker__month-option--selected_month":"react-datepicker__month-option",key:e,onClick:t.onChange.bind(t,n),"aria-selected":t.isSelectedMonth(n)?"true":void 0},t.isSelectedMonth(n)?r.createElement("span",{className:"react-datepicker__month-option--selected"},"\u2713"):"",e)}))},t.onChange=function(e){return t.props.onChange(e)},t.handleClickOutside=function(){return t.props.onCancel()},t}return Lv(t,e),t.prototype.render=function(){return r.createElement(Hv,{className:"react-datepicker__month-dropdown",onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),Zg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(e){return e.map((function(e,t){return r.createElement("option",{key:e,value:t},e)}))},t.renderSelectMode=function(e){return r.createElement("select",{value:t.props.month,className:"react-datepicker__month-select",onChange:function(e){return t.onChange(parseInt(e.target.value))}},t.renderSelectOptions(e))},t.renderReadView=function(e,n){return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:t.toggleDropdown},r.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},n[t.props.month]))},t.renderDropdown=function(e){return r.createElement(Jg,Iv({key:"dropdown"},t.props,{monthNames:e,onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(e){var n=t.state.dropdownVisible,r=[t.renderReadView(!n,e)];return n&&r.unshift(t.renderDropdown(e)),r},t.onChange=function(e){t.toggleDropdown(),e!==t.props.month&&t.props.onChange(e)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return Lv(t,e),t.prototype.render=function(){var e,t=this,n=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(e){return fg(e,t.props.locale)}:function(e){return dg(e,t.props.locale)});switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode(n);break;case"select":e=this.renderSelectMode(n)}return r.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component);function ey(e,t){for(var n=[],r=Xv(e),o=Xv(t);!Uh(r,o);)n.push(Yv(r)),r=jh(r,1);return n}var ty=function(e){function t(t){var n=e.call(this,t)||this;return n.renderOptions=function(){return n.state.monthYearsList.map((function(e){var t=Vh(e),o=rg(n.props.date,e)&&og(n.props.date,e);return r.createElement("div",{className:o?"react-datepicker__month-year-option--selected_month-year":"react-datepicker__month-year-option",key:t,onClick:n.onChange.bind(n,t),"aria-selected":o?"true":void 0},o?r.createElement("span",{className:"react-datepicker__month-year-option--selected"},"\u2713"):"",Vv(e,n.props.dateFormat,n.props.locale))}))},n.onChange=function(e){return n.props.onChange(e)},n.handleClickOutside=function(){n.props.onCancel()},n.state={monthYearsList:ey(n.props.minDate,n.props.maxDate)},n}return Lv(t,e),t.prototype.render=function(){var e=Ld({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return r.createElement(Hv,{className:e,onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),ny=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=Xv(t.props.minDate),n=Xv(t.props.maxDate),o=[];!Uh(e,n);){var a=Vh(e);o.push(r.createElement("option",{key:a,value:a},Vv(e,t.props.dateFormat,t.props.locale))),e=jh(e,1)}return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return r.createElement("select",{value:Vh(Xv(t.props.date)),className:"react-datepicker__month-year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){var n=Vv(t.props.date,t.props.dateFormat,t.props.locale);return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:t.toggleDropdown},r.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},n))},t.renderDropdown=function(){return r.createElement(ty,Iv({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,n=[t.renderReadView(!e)];return e&&n.unshift(t.renderDropdown()),n},t.onChange=function(e){t.toggleDropdown();var n=Yv(e);rg(t.props.date,n)&&og(t.props.date,n)||t.props.onChange(n)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return Lv(t,e),t.prototype.render=function(){var e;switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode();break;case"select":e=this.renderSelectMode()}return r.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component),ry=function(e){function t(){var n=null!==e&&e.apply(this,arguments)||this;return n.state={height:null},n.scrollToTheSelectedTime=function(){requestAnimationFrame((function(){var e,r,o;n.list&&(n.list.scrollTop=null!==(o=n.centerLi&&t.calcCenterPosition(n.props.monthRef?n.props.monthRef.clientHeight-(null!==(r=null===(e=n.header)||void 0===e?void 0:e.clientHeight)&&void 0!==r?r:0):n.list.clientHeight,n.centerLi))&&void 0!==o?o:0)}))},n.handleClick=function(e){var t,r;(n.props.minTime||n.props.maxTime)&&Cg(e,n.props)||(n.props.excludeTimes||n.props.includeTimes||n.props.filterTime)&&Eg(e,n.props)||null===(r=(t=n.props).onChange)||void 0===r||r.call(t,e)},n.isSelectedTime=function(e){return n.props.selected&&(t=n.props.selected,r=e,Ig(t).getTime()===Ig(r).getTime());var t,r},n.isDisabledTime=function(e){return(n.props.minTime||n.props.maxTime)&&Cg(e,n.props)||(n.props.excludeTimes||n.props.includeTimes||n.props.filterTime)&&Eg(e,n.props)},n.liClasses=function(e){var r,o=["react-datepicker__time-list-item",n.props.timeClassName?n.props.timeClassName(e):void 0];return n.isSelectedTime(e)&&o.push("react-datepicker__time-list-item--selected"),n.isDisabledTime(e)&&o.push("react-datepicker__time-list-item--disabled"),n.props.injectTimes&&(3600*Eh(e)+60*Ch(e)+Nh(e))%(60*(null!==(r=n.props.intervals)&&void 0!==r?r:t.defaultProps.intervals))!==0&&o.push("react-datepicker__time-list-item--injected"),o.join(" ")},n.handleOnKeyDown=function(e,t){var r,o;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),(e.key===zv.ArrowUp||e.key===zv.ArrowLeft)&&e.target instanceof HTMLElement&&e.target.previousSibling&&(e.preventDefault(),e.target.previousSibling instanceof HTMLElement&&e.target.previousSibling.focus()),(e.key===zv.ArrowDown||e.key===zv.ArrowRight)&&e.target instanceof HTMLElement&&e.target.nextSibling&&(e.preventDefault(),e.target.nextSibling instanceof HTMLElement&&e.target.nextSibling.focus()),e.key===zv.Enter&&n.handleClick(t),null===(o=(r=n.props).handleOnKeyDown)||void 0===o||o.call(r,e)},n.renderTimes=function(){for(var e,o=[],a="string"===typeof n.props.format?n.props.format:"p",i=null!==(e=n.props.intervals)&&void 0!==e?e:t.defaultProps.intervals,s=n.props.selected||n.props.openToDate||Yv(),l=$v(s),c=n.props.injectTimes&&n.props.injectTimes.sort((function(e,t){return e.getTime()-t.getTime()})),u=60*function(e){var t=new Date(e.getFullYear(),e.getMonth(),e.getDate()),n=new Date(e.getFullYear(),e.getMonth(),e.getDate(),24);return Math.round((+n-+t)/36e5)}(s),d=u/i,f=0;f<d;f++){var p=Bh(l,f*i);if(o.push(p),c){var h=Rg(l,p,f,i,c);o=o.concat(h)}}var m=o.reduce((function(e,t){return t.getTime()<=s.getTime()?t:e}),o[0]);return o.map((function(e){return r.createElement("li",{key:e.valueOf(),onClick:n.handleClick.bind(n,e),className:n.liClasses(e),ref:function(t){e===m&&(n.centerLi=t)},onKeyDown:function(t){n.handleOnKeyDown(t,e)},tabIndex:e===m?0:-1,role:"option","aria-selected":n.isSelectedTime(e)?"true":void 0,"aria-disabled":n.isDisabledTime(e)?"true":void 0},Vv(e,a,n.props.locale))}))},n.renderTimeCaption=function(){return!1===n.props.showTimeCaption?r.createElement(r.Fragment,null):r.createElement("div",{className:"react-datepicker__header react-datepicker__header--time ".concat(n.props.showTimeSelectOnly?"react-datepicker__header--time--only":""),ref:function(e){n.header=e}},r.createElement("div",{className:"react-datepicker-time__header"},n.props.timeCaption))},n}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{intervals:30,todayButton:null,timeCaption:"Time",showTimeCaption:!0}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){this.scrollToTheSelectedTime(),this.observeDatePickerHeightChanges()},t.prototype.componentWillUnmount=function(){var e;null===(e=this.resizeObserver)||void 0===e||e.disconnect()},t.prototype.observeDatePickerHeightChanges=function(){var e=this,t=this.props.monthRef;this.updateContainerHeight(),t&&(this.resizeObserver=new ResizeObserver((function(){e.updateContainerHeight()})),this.resizeObserver.observe(t))},t.prototype.updateContainerHeight=function(){this.props.monthRef&&this.header&&this.setState({height:this.props.monthRef.clientHeight-this.header.clientHeight})},t.prototype.render=function(){var e,n=this,o=this.state.height;return r.createElement("div",{className:"react-datepicker__time-container ".concat((null!==(e=this.props.todayButton)&&void 0!==e?e:t.defaultProps.todayButton)?"react-datepicker__time-container--with-today-button":"")},this.renderTimeCaption(),r.createElement("div",{className:"react-datepicker__time"},r.createElement("div",{className:"react-datepicker__time-box"},r.createElement("ul",{className:"react-datepicker__time-list",ref:function(e){n.list=e},style:o?{height:o}:{},role:"listbox","aria-label":this.props.timeCaption},this.renderTimes()))))},t.calcCenterPosition=function(e,t){return t.offsetTop-(e/2-t.clientHeight/2)},t}(r.Component),oy=function(e){function t(t){var n=e.call(this,t)||this;return n.YEAR_REFS=Fv([],Array(n.props.yearItemNumber),!0).map((function(){return(0,r.createRef)()})),n.isDisabled=function(e){return pg(e,{minDate:n.props.minDate,maxDate:n.props.maxDate,excludeDates:n.props.excludeDates,includeDates:n.props.includeDates,filterDate:n.props.filterDate})},n.isExcluded=function(e){return hg(e,{excludeDates:n.props.excludeDates})},n.selectingDate=function(){var e;return null!==(e=n.props.selectingDate)&&void 0!==e?e:n.props.preSelection},n.updateFocusOnPaginate=function(e){window.requestAnimationFrame((function(){var t,r;null===(r=null===(t=n.YEAR_REFS[e])||void 0===t?void 0:t.current)||void 0===r||r.focus()}))},n.handleYearClick=function(e,t){n.props.onDayClick&&n.props.onDayClick(e,t)},n.handleYearNavigation=function(e,t){var r,o,a,i,s=n.props,l=s.date,c=s.yearItemNumber;if(void 0!==l&&void 0!==c){var u=Lg(l,c).startPeriod;n.isDisabled(t)||n.isExcluded(t)||(null===(o=(r=n.props).setPreSelection)||void 0===o||o.call(r,t),e-u<0?n.updateFocusOnPaginate(c-(u-e)):e-u>=c?n.updateFocusOnPaginate(Math.abs(c-(e-u))):null===(i=null===(a=n.YEAR_REFS[e-u])||void 0===a?void 0:a.current)||void 0===i||i.focus())}},n.isSameDay=function(e,t){return ig(e,t)},n.isCurrentYear=function(e){return e===wh(Yv())},n.isRangeStart=function(e){return n.props.startDate&&n.props.endDate&&rg(Qh(Yv(),e),n.props.startDate)},n.isRangeEnd=function(e){return n.props.startDate&&n.props.endDate&&rg(Qh(Yv(),e),n.props.endDate)},n.isInRange=function(e){return bg(e,n.props.startDate,n.props.endDate)},n.isInSelectingRange=function(e){var t=n.props,r=t.selectsStart,o=t.selectsEnd,a=t.selectsRange,i=t.startDate,s=t.endDate;return!(!(r||o||a)||!n.selectingDate())&&(r&&s?bg(e,n.selectingDate(),s):(o&&i||!(!a||!i||s))&&bg(e,i,n.selectingDate()))},n.isSelectingRangeStart=function(e){var t;if(!n.isInSelectingRange(e))return!1;var r=n.props,o=r.startDate,a=r.selectsStart,i=Qh(Yv(),e);return rg(i,a?null!==(t=n.selectingDate())&&void 0!==t?t:null:null!==o&&void 0!==o?o:null)},n.isSelectingRangeEnd=function(e){var t;if(!n.isInSelectingRange(e))return!1;var r=n.props,o=r.endDate,a=r.selectsEnd,i=r.selectsRange,s=Qh(Yv(),e);return rg(s,a||i?null!==(t=n.selectingDate())&&void 0!==t?t:null:null!==o&&void 0!==o?o:null)},n.isKeyboardSelected=function(e){if(void 0!==n.props.date&&null!=n.props.selected&&null!=n.props.preSelection){var t=n.props,r=t.minDate,o=t.maxDate,a=t.excludeDates,i=t.includeDates,s=t.filterDate,l=Jv(Qh(n.props.date,e)),c=(r||o||a||i||s)&&wg(e,n.props);return!n.props.disabledKeyboardNavigation&&!n.props.inline&&!ig(l,Jv(n.props.selected))&&ig(l,Jv(n.props.preSelection))&&!c}},n.isSelectedYear=function(e){var t=n.props,r=t.selectsMultiple,o=t.selected,a=t.selectedDates;return r?null===a||void 0===a?void 0:a.some((function(t){return e===wh(t)})):!o||e===wh(o)},n.onYearClick=function(e,t){var r=n.props.date;void 0!==r&&n.handleYearClick(Jv(Qh(r,t)),e)},n.onYearKeyDown=function(e,t){var r,o,a=e.key,i=n.props,s=i.date,l=i.yearItemNumber,c=i.handleOnKeyDown;if(a!==zv.Tab&&e.preventDefault(),!n.props.disabledKeyboardNavigation)switch(a){case zv.Enter:if(null==n.props.selected)break;n.onYearClick(e,t),null===(o=(r=n.props).setPreSelection)||void 0===o||o.call(r,n.props.selected);break;case zv.ArrowRight:if(null==n.props.preSelection)break;n.handleYearNavigation(t+1,Mh(n.props.preSelection,1));break;case zv.ArrowLeft:if(null==n.props.preSelection)break;n.handleYearNavigation(t-1,Rh(n.props.preSelection,1));break;case zv.ArrowUp:if(void 0===s||void 0===l||null==n.props.preSelection)break;var u=Lg(s,l).startPeriod;if((p=t-(f=3))<u){var d=l%f;t>=u&&t<u+d?f=d:f+=d,p=t-f}n.handleYearNavigation(p,Rh(n.props.preSelection,f));break;case zv.ArrowDown:if(void 0===s||void 0===l||null==n.props.preSelection)break;var f,p,h=Lg(s,l).endPeriod;if((p=t+(f=3))>h){d=l%f;t<=h&&t>h-d?f=d:f+=d,p=t+f}n.handleYearNavigation(p,Mh(n.props.preSelection,f))}c&&c(e)},n.getYearClassNames=function(e){var t=n.props,r=t.date,o=t.minDate,a=t.maxDate,i=t.excludeDates,s=t.includeDates,l=t.filterDate,c=t.yearClassName;return Ld("react-datepicker__year-text","react-datepicker__year-".concat(e),r?null===c||void 0===c?void 0:c(Qh(r,e)):void 0,{"react-datepicker__year-text--selected":n.isSelectedYear(e),"react-datepicker__year-text--disabled":(o||a||i||s||l)&&wg(e,n.props),"react-datepicker__year-text--keyboard-selected":n.isKeyboardSelected(e),"react-datepicker__year-text--range-start":n.isRangeStart(e),"react-datepicker__year-text--range-end":n.isRangeEnd(e),"react-datepicker__year-text--in-range":n.isInRange(e),"react-datepicker__year-text--in-selecting-range":n.isInSelectingRange(e),"react-datepicker__year-text--selecting-range-start":n.isSelectingRangeStart(e),"react-datepicker__year-text--selecting-range-end":n.isSelectingRangeEnd(e),"react-datepicker__year-text--today":n.isCurrentYear(e)})},n.getYearTabIndex=function(e){if(n.props.disabledKeyboardNavigation||null==n.props.preSelection)return"-1";var t=wh(n.props.preSelection),r=wg(e,n.props);return e!==t||r?"-1":"0"},n.getYearContent=function(e){return n.props.renderYearContent?n.props.renderYearContent(e):e},n}return Lv(t,e),t.prototype.render=function(){var e=this,t=[],n=this.props,o=n.date,a=n.yearItemNumber,i=n.onYearMouseEnter,s=n.onYearMouseLeave;if(void 0===o)return null;for(var l=Lg(o,a),c=l.startPeriod,u=l.endPeriod,d=function(n){t.push(r.createElement("div",{ref:f.YEAR_REFS[n-c],onClick:function(t){e.onYearClick(t,n)},onKeyDown:function(t){Bg(t)&&(t.preventDefault(),t.key=zv.Enter),e.onYearKeyDown(t,n)},tabIndex:Number(f.getYearTabIndex(n)),className:f.getYearClassNames(n),onMouseEnter:f.props.usePointerEvent?void 0:function(e){return i(e,n)},onPointerEnter:f.props.usePointerEvent?function(e){return i(e,n)}:void 0,onMouseLeave:f.props.usePointerEvent?void 0:function(e){return s(e,n)},onPointerLeave:f.props.usePointerEvent?function(e){return s(e,n)}:void 0,key:n,"aria-current":f.isCurrentYear(n)?"date":void 0},f.getYearContent(n)))},f=this,p=c;p<=u;p++)d(p);return r.createElement("div",{className:"react-datepicker__year"},r.createElement("div",{className:"react-datepicker__year-wrapper",onMouseLeave:this.props.usePointerEvent?void 0:this.props.clearSelectingDate,onPointerLeave:this.props.usePointerEvent?this.props.clearSelectingDate:void 0},t))},t}(r.Component);function ay(e,t,n,r){for(var o=[],a=0;a<2*t+1;a++){var i=e+t-a,s=!0;n&&(s=wh(n)<=i),r&&s&&(s=wh(r)>=i),s&&o.push(i)}return o}var iy=function(e){function t(t){var n=e.call(this,t)||this;n.renderOptions=function(){var e=n.props.year,t=n.state.yearsList.map((function(t){return r.createElement("div",{className:e===t?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:t,onClick:n.onChange.bind(n,t),"aria-selected":e===t?"true":void 0},e===t?r.createElement("span",{className:"react-datepicker__year-option--selected"},"\u2713"):"",t)})),o=n.props.minDate?wh(n.props.minDate):null,a=n.props.maxDate?wh(n.props.maxDate):null;return a&&n.state.yearsList.find((function(e){return e===a}))||t.unshift(r.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:n.incrementYears},r.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),o&&n.state.yearsList.find((function(e){return e===o}))||t.push(r.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:n.decrementYears},r.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),t},n.onChange=function(e){n.props.onChange(e)},n.handleClickOutside=function(){n.props.onCancel()},n.shiftYears=function(e){var t=n.state.yearsList.map((function(t){return t+e}));n.setState({yearsList:t})},n.incrementYears=function(){return n.shiftYears(1)},n.decrementYears=function(){return n.shiftYears(-1)};var o=t.yearDropdownItemNumber,a=t.scrollableYearDropdown,i=o||(a?10:5);return n.state={yearsList:ay(n.props.year,i,n.props.minDate,n.props.maxDate)},n.dropdownRef=(0,r.createRef)(),n}return Lv(t,e),t.prototype.componentDidMount=function(){var e=this.dropdownRef.current;if(e){var t=e.children?Array.from(e.children):null,n=t?t.find((function(e){return e.ariaSelected})):null;e.scrollTop=n&&n instanceof HTMLElement?n.offsetTop+(n.clientHeight-e.clientHeight)/2:(e.scrollHeight-e.clientHeight)/2}},t.prototype.render=function(){var e=Ld({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return r.createElement(Hv,{className:e,containerRef:this.dropdownRef,onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),sy=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=t.props.minDate?wh(t.props.minDate):1900,n=t.props.maxDate?wh(t.props.maxDate):2100,o=[],a=e;a<=n;a++)o.push(r.createElement("option",{key:a,value:a},a));return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return r.createElement("select",{value:t.props.year,className:"react-datepicker__year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function(e){return t.toggleDropdown(e)}},r.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},t.props.year))},t.renderDropdown=function(){return r.createElement(iy,Iv({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,n=[t.renderReadView(!e)];return e&&n.unshift(t.renderDropdown()),n},t.onChange=function(e){t.toggleDropdown(),e!==t.props.year&&t.props.onChange(e)},t.toggleDropdown=function(e){t.setState({dropdownVisible:!t.state.dropdownVisible},(function(){t.props.adjustDateOnChange&&t.handleYearChange(t.props.date,e)}))},t.handleYearChange=function(e,n){var r;null===(r=t.onSelect)||void 0===r||r.call(t,e,n),t.setOpen()},t.onSelect=function(e,n){var r,o;null===(o=(r=t.props).onSelect)||void 0===o||o.call(r,e,n)},t.setOpen=function(){var e,n;null===(n=(e=t.props).setOpen)||void 0===n||n.call(e,!0)},t}return Lv(t,e),t.prototype.render=function(){var e;switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode();break;case"select":e=this.renderSelectMode()}return r.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component),ly=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],cy=function(e){function t(n){var o=e.call(this,n)||this;return o.monthContainer=void 0,o.handleClickOutside=function(e){o.props.onClickOutside(e)},o.setClickOutsideRef=function(){return o.containerRef.current},o.handleDropdownFocus=function(e){var t,n;(function(e){var t=(e.className||"").split(/\s+/);return ly.some((function(e){return t.indexOf(e)>=0}))})(e.target)&&(null===(n=(t=o.props).onDropdownFocus)||void 0===n||n.call(t,e))},o.getDateInView=function(){var e=o.props,t=e.preSelection,n=e.selected,r=e.openToDate,a=Tg(o.props),i=_g(o.props),s=Yv(),l=r||n||t;return l||(a&&Op(s,a)?a:i&&Uh(s,i)?i:s)},o.increaseMonth=function(){o.setState((function(e){return{date:jh(e.date,1)}}),(function(){return o.handleMonthChange(o.state.date)}))},o.decreaseMonth=function(){o.setState((function(e){return{date:Dh(e.date,1)}}),(function(){return o.handleMonthChange(o.state.date)}))},o.handleDayClick=function(e,t,n){o.props.onSelect(e,t,n),o.props.setPreSelection&&o.props.setPreSelection(e)},o.handleDayMouseEnter=function(e){o.setState({selectingDate:e}),o.props.onDayMouseEnter&&o.props.onDayMouseEnter(e)},o.handleMonthMouseLeave=function(){o.setState({selectingDate:void 0}),o.props.onMonthMouseLeave&&o.props.onMonthMouseLeave()},o.handleYearMouseEnter=function(e,t){o.setState({selectingDate:Qh(Yv(),t)}),o.props.onYearMouseEnter&&o.props.onYearMouseEnter(e,t)},o.handleYearMouseLeave=function(e,t){o.props.onYearMouseLeave&&o.props.onYearMouseLeave(e,t)},o.handleYearChange=function(e){var t,n,r,a;null===(n=(t=o.props).onYearChange)||void 0===n||n.call(t,e),o.setState({isRenderAriaLiveMessage:!0}),o.props.adjustDateOnChange&&(o.props.onSelect(e),null===(a=(r=o.props).setOpen)||void 0===a||a.call(r,!0)),o.props.setPreSelection&&o.props.setPreSelection(e)},o.getEnabledPreSelectionDateForMonth=function(e){if(!pg(e,o.props))return e;for(var t=Xv(e),n=Kh(ng(e),t),r=null,a=0;a<=n;a++){var i=gp(t,a);if(!pg(i,o.props)){r=i;break}}return r},o.handleMonthChange=function(e){var t,n,r,a=null!==(t=o.getEnabledPreSelectionDateForMonth(e))&&void 0!==t?t:e;o.handleCustomMonthChange(a),o.props.adjustDateOnChange&&(o.props.onSelect(a),null===(r=(n=o.props).setOpen)||void 0===r||r.call(n,!0)),o.props.setPreSelection&&o.props.setPreSelection(a)},o.handleCustomMonthChange=function(e){var t,n;null===(n=(t=o.props).onMonthChange)||void 0===n||n.call(t,e),o.setState({isRenderAriaLiveMessage:!0})},o.handleMonthYearChange=function(e){o.handleYearChange(e),o.handleMonthChange(e)},o.changeYear=function(e){o.setState((function(t){return{date:Qh(t.date,Number(e))}}),(function(){return o.handleYearChange(o.state.date)}))},o.changeMonth=function(e){o.setState((function(t){return{date:yh(t.date,Number(e))}}),(function(){return o.handleMonthChange(o.state.date)}))},o.changeMonthYear=function(e){o.setState((function(t){return{date:Qh(yh(t.date,xh(e)),wh(e))}}),(function(){return o.handleMonthYearChange(o.state.date)}))},o.header=function(e){void 0===e&&(e=o.state.date);var t=Gv(e,o.props.locale,o.props.calendarStartDay),n=[];return o.props.showWeekNumbers&&n.push(r.createElement("div",{key:"W",className:"react-datepicker__day-name"},o.props.weekLabel||"#")),n.concat([0,1,2,3,4,5,6].map((function(e){var n=gp(t,e),a=o.formatWeekday(n,o.props.locale),i=o.props.weekDayClassName?o.props.weekDayClassName(n):void 0;return r.createElement("div",{key:e,"aria-label":Vv(n,"EEEE",o.props.locale),className:Ld("react-datepicker__day-name",i)},a)})))},o.formatWeekday=function(e,t){return o.props.formatWeekDay?function(e,t,n){return t(Vv(e,"EEEE",n))}(e,o.props.formatWeekDay,t):o.props.useWeekdaysShort?function(e,t){return Vv(e,"EEE",t)}(e,t):function(e,t){return Vv(e,"EEEEEE",t)}(e,t)},o.decreaseYear=function(){o.setState((function(e){var n;return{date:Rh(e.date,o.props.showYearPicker?null!==(n=o.props.yearItemNumber)&&void 0!==n?n:t.defaultProps.yearItemNumber:1)}}),(function(){return o.handleYearChange(o.state.date)}))},o.clearSelectingDate=function(){o.setState({selectingDate:void 0})},o.renderPreviousButton=function(){var e,n,a;if(!o.props.renderCustomHeader){var i,s=null!==(e=o.props.monthsShown)&&void 0!==e?e:t.defaultProps.monthsShown,l=o.props.showPreviousMonths?s-1:0,c=null!==(n=o.props.monthSelectedIn)&&void 0!==n?n:l,u=Dh(o.state.date,c);switch(!0){case o.props.showMonthYearPicker:i=Dg(o.state.date,o.props);break;case o.props.showYearPicker:i=function(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.yearItemNumber,a=void 0===o?12:o,i=Lg(Jv(Rh(e,a)),a).endPeriod,s=r&&wh(r);return s&&s>i||!1}(o.state.date,o.props);break;case o.props.showQuarterYearPicker:i=function(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=_h(Lp(e),1);return r&&Oh(r,a)>0||o&&o.every((function(e){return Oh(e,a)>0}))||!1}(o.state.date,o.props);break;default:i=Ng(u,o.props)}if(((null!==(a=o.props.forceShowMonthNavigation)&&void 0!==a?a:t.defaultProps.forceShowMonthNavigation)||o.props.showDisabledMonthNavigation||!i)&&!o.props.showTimeSelectOnly){var d=["react-datepicker__navigation","react-datepicker__navigation--previous"],f=o.decreaseMonth;(o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker)&&(f=o.decreaseYear),i&&o.props.showDisabledMonthNavigation&&(d.push("react-datepicker__navigation--previous--disabled"),f=void 0);var p=o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker,h=o.props,m=h.previousMonthButtonLabel,v=void 0===m?t.defaultProps.previousMonthButtonLabel:m,g=h.previousYearButtonLabel,y=void 0===g?t.defaultProps.previousYearButtonLabel:g,b=o.props,w=b.previousMonthAriaLabel,x=void 0===w?"string"===typeof v?v:"Previous Month":w,k=b.previousYearAriaLabel,S=void 0===k?"string"===typeof y?y:"Previous Year":k;return r.createElement("button",{type:"button",className:d.join(" "),onClick:f,onKeyDown:o.props.handleOnKeyDown,"aria-label":p?S:x},r.createElement("span",{className:["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"].join(" ")},p?y:v))}}},o.increaseYear=function(){o.setState((function(e){var n;return{date:Mh(e.date,o.props.showYearPicker?null!==(n=o.props.yearItemNumber)&&void 0!==n?n:t.defaultProps.yearItemNumber:1)}}),(function(){return o.handleYearChange(o.state.date)}))},o.renderNextButton=function(){var e;if(!o.props.renderCustomHeader){var n;switch(!0){case o.props.showMonthYearPicker:n=Pg(o.state.date,o.props);break;case o.props.showYearPicker:n=function(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.yearItemNumber,a=void 0===o?12:o,i=Lg(Mh(e,a),a).startPeriod,s=r&&wh(r);return s&&s<i||!1}(o.state.date,o.props);break;case o.props.showQuarterYearPicker:n=function(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=Th(kh(e),1);return r&&Oh(a,r)>0||o&&o.every((function(e){return Oh(a,e)>0}))||!1}(o.state.date,o.props);break;default:n=jg(o.state.date,o.props)}if(((null!==(e=o.props.forceShowMonthNavigation)&&void 0!==e?e:t.defaultProps.forceShowMonthNavigation)||o.props.showDisabledMonthNavigation||!n)&&!o.props.showTimeSelectOnly){var a=["react-datepicker__navigation","react-datepicker__navigation--next"];o.props.showTimeSelect&&a.push("react-datepicker__navigation--next--with-time"),o.props.todayButton&&a.push("react-datepicker__navigation--next--with-today-button");var i=o.increaseMonth;(o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker)&&(i=o.increaseYear),n&&o.props.showDisabledMonthNavigation&&(a.push("react-datepicker__navigation--next--disabled"),i=void 0);var s=o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker,l=o.props,c=l.nextMonthButtonLabel,u=void 0===c?t.defaultProps.nextMonthButtonLabel:c,d=l.nextYearButtonLabel,f=void 0===d?t.defaultProps.nextYearButtonLabel:d,p=o.props,h=p.nextMonthAriaLabel,m=void 0===h?"string"===typeof u?u:"Next Month":h,v=p.nextYearAriaLabel,g=void 0===v?"string"===typeof f?f:"Next Year":v;return r.createElement("button",{type:"button",className:a.join(" "),onClick:i,onKeyDown:o.props.handleOnKeyDown,"aria-label":s?g:m},r.createElement("span",{className:["react-datepicker__navigation-icon","react-datepicker__navigation-icon--next"].join(" ")},s?f:u))}}},o.renderCurrentMonth=function(e){void 0===e&&(e=o.state.date);var t=["react-datepicker__current-month"];return o.props.showYearDropdown&&t.push("react-datepicker__current-month--hasYearDropdown"),o.props.showMonthDropdown&&t.push("react-datepicker__current-month--hasMonthDropdown"),o.props.showMonthYearDropdown&&t.push("react-datepicker__current-month--hasMonthYearDropdown"),r.createElement("h2",{className:t.join(" ")},Vv(e,o.props.dateFormat,o.props.locale))},o.renderYearDropdown=function(e){if(void 0===e&&(e=!1),o.props.showYearDropdown&&!e)return r.createElement(sy,Iv({},t.defaultProps,o.props,{date:o.state.date,onChange:o.changeYear,year:wh(o.state.date)}))},o.renderMonthDropdown=function(e){if(void 0===e&&(e=!1),o.props.showMonthDropdown&&!e)return r.createElement(Zg,Iv({},t.defaultProps,o.props,{month:xh(o.state.date),onChange:o.changeMonth}))},o.renderMonthYearDropdown=function(e){if(void 0===e&&(e=!1),o.props.showMonthYearDropdown&&!e)return r.createElement(ny,Iv({},t.defaultProps,o.props,{date:o.state.date,onChange:o.changeMonthYear}))},o.handleTodayButtonClick=function(e){o.props.onSelect(eg(),e),o.props.setPreSelection&&o.props.setPreSelection(eg())},o.renderTodayButton=function(){if(o.props.todayButton&&!o.props.showTimeSelectOnly)return r.createElement("div",{className:"react-datepicker__today-button",onClick:o.handleTodayButtonClick},o.props.todayButton)},o.renderDefaultHeader=function(e){var t=e.monthDate,n=e.i;return r.createElement("div",{className:"react-datepicker__header ".concat(o.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},o.renderCurrentMonth(t),r.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(o.props.dropdownMode),onFocus:o.handleDropdownFocus},o.renderMonthDropdown(0!==n),o.renderMonthYearDropdown(0!==n),o.renderYearDropdown(0!==n)),r.createElement("div",{className:"react-datepicker__day-names"},o.header(t)))},o.renderCustomHeader=function(e){var t,n,a=e.monthDate,i=e.i;if(o.props.showTimeSelect&&!o.state.monthContainer||o.props.showTimeSelectOnly)return null;var s=Ng(o.state.date,o.props),l=jg(o.state.date,o.props),c=Dg(o.state.date,o.props),u=Pg(o.state.date,o.props),d=!o.props.showMonthYearPicker&&!o.props.showQuarterYearPicker&&!o.props.showYearPicker;return r.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:o.props.onDropdownFocus},null===(n=(t=o.props).renderCustomHeader)||void 0===n?void 0:n.call(t,Iv(Iv({},o.state),{customHeaderCount:i,monthDate:a,changeMonth:o.changeMonth,changeYear:o.changeYear,decreaseMonth:o.decreaseMonth,increaseMonth:o.increaseMonth,decreaseYear:o.decreaseYear,increaseYear:o.increaseYear,prevMonthButtonDisabled:s,nextMonthButtonDisabled:l,prevYearButtonDisabled:c,nextYearButtonDisabled:u})),d&&r.createElement("div",{className:"react-datepicker__day-names"},o.header(a)))},o.renderYearHeader=function(e){var n=e.monthDate,a=o.props,i=a.showYearPicker,s=a.yearItemNumber,l=Lg(n,void 0===s?t.defaultProps.yearItemNumber:s),c=l.startPeriod,u=l.endPeriod;return r.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},i?"".concat(c," - ").concat(u):wh(n))},o.renderHeader=function(e){var t=e.monthDate,n=e.i,r={monthDate:t,i:void 0===n?0:n};switch(!0){case void 0!==o.props.renderCustomHeader:return o.renderCustomHeader(r);case o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker:return o.renderYearHeader(r);default:return o.renderDefaultHeader(r)}},o.renderMonths=function(){var e,n;if(!o.props.showTimeSelectOnly&&!o.props.showYearPicker){for(var a=[],i=null!==(e=o.props.monthsShown)&&void 0!==e?e:t.defaultProps.monthsShown,s=o.props.showPreviousMonths?i-1:0,l=o.props.showMonthYearPicker||o.props.showQuarterYearPicker?Mh(o.state.date,s):Dh(o.state.date,s),c=null!==(n=o.props.monthSelectedIn)&&void 0!==n?n:s,u=0;u<i;++u){var d=u-c+s,f=o.props.showMonthYearPicker||o.props.showQuarterYearPicker?Mh(l,d):jh(l,d),p="month-".concat(u),h=u<i-1,m=u>0;a.push(r.createElement("div",{key:p,ref:function(e){o.monthContainer=null!==e&&void 0!==e?e:void 0},className:"react-datepicker__month-container"},o.renderHeader({monthDate:f,i:u}),r.createElement(Xg,Iv({},t.defaultProps,o.props,{containerRef:o.containerRef,ariaLabelPrefix:o.props.monthAriaLabelPrefix,day:f,onDayClick:o.handleDayClick,handleOnKeyDown:o.props.handleOnDayKeyDown,handleOnMonthKeyDown:o.props.handleOnKeyDown,onDayMouseEnter:o.handleDayMouseEnter,onMouseLeave:o.handleMonthMouseLeave,orderInDisplay:u,selectingDate:o.state.selectingDate,monthShowsDuplicateDaysEnd:h,monthShowsDuplicateDaysStart:m}))))}return a}},o.renderYears=function(){if(!o.props.showTimeSelectOnly)return o.props.showYearPicker?r.createElement("div",{className:"react-datepicker__year--container"},o.renderHeader({monthDate:o.state.date}),r.createElement(oy,Iv({},t.defaultProps,o.props,{selectingDate:o.state.selectingDate,date:o.state.date,onDayClick:o.handleDayClick,clearSelectingDate:o.clearSelectingDate,onYearMouseEnter:o.handleYearMouseEnter,onYearMouseLeave:o.handleYearMouseLeave}))):void 0},o.renderTimeSection=function(){if(o.props.showTimeSelect&&(o.state.monthContainer||o.props.showTimeSelectOnly))return r.createElement(ry,Iv({},t.defaultProps,o.props,{onChange:o.props.onTimeChange,format:o.props.timeFormat,intervals:o.props.timeIntervals,monthRef:o.state.monthContainer}))},o.renderInputTimeSection=function(){var e=o.props.selected?new Date(o.props.selected):void 0,n=e&&qv(e)&&Boolean(o.props.selected)?"".concat(Ag(e.getHours()),":").concat(Ag(e.getMinutes())):"";if(o.props.showTimeInput)return r.createElement(Ug,Iv({},t.defaultProps,o.props,{date:e,timeString:n,onChange:o.props.onTimeChange}))},o.renderAriaLiveRegion=function(){var e,n,a=Lg(o.state.date,null!==(e=o.props.yearItemNumber)&&void 0!==e?e:t.defaultProps.yearItemNumber),i=a.startPeriod,s=a.endPeriod;return n=o.props.showYearPicker?"".concat(i," - ").concat(s):o.props.showMonthYearPicker||o.props.showQuarterYearPicker?wh(o.state.date):"".concat(dg(xh(o.state.date),o.props.locale)," ").concat(wh(o.state.date)),r.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},o.state.isRenderAriaLiveMessage&&n)},o.renderChildren=function(){if(o.props.children)return r.createElement("div",{className:"react-datepicker__children-container"},o.props.children)},o.containerRef=(0,r.createRef)(),o.state={date:o.getDateInView(),selectingDate:void 0,monthContainer:void 0,isRenderAriaLiveMessage:!1},o}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",yearItemNumber:12}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){var e=this;this.props.showTimeSelect&&(this.assignMonthContainer=void e.setState({monthContainer:e.monthContainer}))},t.prototype.componentDidUpdate=function(e){var t=this;if(!this.props.preSelection||ig(this.props.preSelection,e.preSelection)&&this.props.monthSelectedIn===e.monthSelectedIn)this.props.openToDate&&!ig(this.props.openToDate,e.openToDate)&&this.setState({date:this.props.openToDate});else{var n=!og(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},(function(){return n&&t.handleCustomMonthChange(t.state.date)}))}},t.prototype.render=function(){var e=this.props.container||Bv;return r.createElement(Hv,{onClickOutside:this.handleClickOutside,style:{display:"contents"},ignoreClass:this.props.outsideClickIgnoreClass},r.createElement("div",{style:{display:"contents"},ref:this.containerRef},r.createElement(e,{className:Ld("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showTime:this.props.showTimeSelect||this.props.showTimeInput,showTimeSelectOnly:this.props.showTimeSelectOnly},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren())))},t}(r.Component),uy=function(e){var t=e.icon,n=e.className,o=void 0===n?"":n,a=e.onClick,i="react-datepicker__calendar-icon";if("string"===typeof t)return r.createElement("i",{className:"".concat(i," ").concat(t," ").concat(o),"aria-hidden":"true",onClick:a});if(r.isValidElement(t)){var s=t;return r.cloneElement(s,{className:"".concat(s.props.className||""," ").concat(i," ").concat(o),onClick:function(e){"function"===typeof s.props.onClick&&s.props.onClick(e),"function"===typeof a&&a(e)}})}return r.createElement("svg",{className:"".concat(i," ").concat(o),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:a},r.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},dy=function(e){function t(t){var n=e.call(this,t)||this;return n.portalRoot=null,n.el=document.createElement("div"),n}return Lv(t,e),t.prototype.componentDidMount=function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)},t.prototype.componentWillUnmount=function(){this.portalRoot&&this.portalRoot.removeChild(this.el)},t.prototype.render=function(){return i.createPortal(this.props.children,this.el)},t}(r.Component),fy=function(e){return(e instanceof HTMLAnchorElement||!e.disabled)&&-1!==e.tabIndex},py=function(e){function t(t){var n=e.call(this,t)||this;return n.getTabChildren=function(){var e;return Array.prototype.slice.call(null===(e=n.tabLoopRef.current)||void 0===e?void 0:e.querySelectorAll("[tabindex], a, button, input, select, textarea"),1,-1).filter(fy)},n.handleFocusStart=function(){var e=n.getTabChildren();e&&e.length>1&&e[e.length-1].focus()},n.handleFocusEnd=function(){var e=n.getTabChildren();e&&e.length>1&&e[0].focus()},n.tabLoopRef=(0,r.createRef)(),n}return Lv(t,e),t.prototype.render=function(){var e;return(null!==(e=this.props.enableTabLoop)&&void 0!==e?e:t.defaultProps.enableTabLoop)?r.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},r.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:0,onFocus:this.handleFocusStart}),this.props.children,r.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:0,onFocus:this.handleFocusEnd})):this.props.children},t.defaultProps={enableTabLoop:!0},t}(r.Component);var hy,my=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{hidePopper:!0}},enumerable:!1,configurable:!0}),t.prototype.render=function(){var e=this.props,n=e.className,o=e.wrapperClassName,a=e.hidePopper,i=void 0===a?t.defaultProps.hidePopper:a,s=e.popperComponent,l=e.targetComponent,c=e.enableTabLoop,u=e.popperOnKeyDown,d=e.portalId,f=e.portalHost,p=e.popperProps,h=e.showArrow,m=void 0;if(!i){var v=Ld("react-datepicker-popper",n);m=r.createElement(py,{enableTabLoop:c},r.createElement("div",{ref:p.refs.setFloating,style:p.floatingStyles,className:v,"data-placement":p.placement,onKeyDown:u},s,h&&r.createElement(jv,{ref:p.arrowRef,context:p.context,fill:"currentColor",strokeWidth:1,height:8,width:16,style:{transform:"translateY(-1px)"},className:"react-datepicker__triangle"})))}this.props.popperContainer&&(m=(0,r.createElement)(this.props.popperContainer,{},m)),d&&!i&&(m=r.createElement(dy,{portalId:d,portalHost:f},m));var g=Ld("react-datepicker-wrapper",o);return r.createElement(r.Fragment,null,r.createElement("div",{ref:p.refs.setReference,className:g},l),m)},t}(r.Component),vy=(hy=my,function(e){var t,n,o,a="boolean"!==typeof e.hidePopper||e.hidePopper,i=(0,r.useRef)(null),s=Rv(Iv({open:!a,whileElementsMounted:nv,placement:e.popperPlacement,middleware:Fv([(n={padding:15},_e(_e({},ov(n)),{},{options:[n,o]})),fv(10),pv({element:i})],null!==(t=e.popperModifiers)&&void 0!==t?t:[],!0)},e.popperProps)),l=Iv(Iv({},e),{hidePopper:a,popperProps:Iv(Iv({},s),{arrowRef:i})});return r.createElement(hy,Iv({},l))}),gy="react-datepicker-ignore-onclickoutside";var yy="Date input not valid.",by=function(e){function t(n){var o=e.call(this,n)||this;return o.calendar=null,o.input=null,o.getPreSelection=function(){return o.props.openToDate?o.props.openToDate:o.props.selectsEnd&&o.props.startDate?o.props.startDate:o.props.selectsStart&&o.props.endDate?o.props.endDate:Yv()},o.modifyHolidays=function(){var e;return null===(e=o.props.holidays)||void 0===e?void 0:e.reduce((function(e,t){var n=new Date(t.date);return qv(n)?Fv(Fv([],e,!0),[Iv(Iv({},t),{date:n})],!1):e}),[])},o.calcInitialState=function(){var e,t=o.getPreSelection(),n=Tg(o.props),r=_g(o.props),a=n&&Op(t,$v(n))?n:r&&Uh(t,tg(r))?r:t;return{open:o.props.startOpen||!1,preventFocus:!1,inputValue:null,preSelection:null!==(e=o.props.selectsRange?o.props.startDate:o.props.selected)&&void 0!==e?e:a,highlightDates:Og(o.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1,wasHidden:!1}},o.resetHiddenStatus=function(){o.setState(Iv(Iv({},o.state),{wasHidden:!1}))},o.setHiddenStatus=function(){o.setState(Iv(Iv({},o.state),{wasHidden:!0}))},o.setHiddenStateOnVisibilityHidden=function(){"hidden"===document.visibilityState&&o.setHiddenStatus()},o.clearPreventFocusTimeout=function(){o.preventFocusTimeout&&clearTimeout(o.preventFocusTimeout)},o.setFocus=function(){var e,t;null===(t=null===(e=o.input)||void 0===e?void 0:e.focus)||void 0===t||t.call(e,{preventScroll:!0})},o.setBlur=function(){var e,t;null===(t=null===(e=o.input)||void 0===e?void 0:e.blur)||void 0===t||t.call(e),o.cancelFocusInput()},o.deferBlur=function(){requestAnimationFrame((function(){o.setBlur()}))},o.setOpen=function(e,t){void 0===t&&(t=!1),o.setState({open:e,preSelection:e&&o.state.open?o.state.preSelection:o.calcInitialState().preSelection,lastPreSelectChange:xy},(function(){e||o.setState((function(e){return{focused:!!t&&e.focused}}),(function(){!t&&o.deferBlur(),o.setState({inputValue:null})}))}))},o.inputOk=function(){return Tp(o.state.preSelection)},o.isCalendarOpen=function(){return void 0===o.props.open?o.state.open&&!o.props.disabled&&!o.props.readOnly:o.props.open},o.handleFocus=function(e){var t,n,r=o.state.wasHidden,a=!r||o.state.open;r&&o.resetHiddenStatus(),o.state.preventFocus||(null===(n=(t=o.props).onFocus)||void 0===n||n.call(t,e),!a||o.props.preventOpenOnFocus||o.props.readOnly||o.setOpen(!0)),o.setState({focused:!0})},o.sendFocusBackToInput=function(){o.preventFocusTimeout&&o.clearPreventFocusTimeout(),o.setState({preventFocus:!0},(function(){o.preventFocusTimeout=setTimeout((function(){o.setFocus(),o.setState({preventFocus:!1})}))}))},o.cancelFocusInput=function(){clearTimeout(o.inputFocusTimeout),o.inputFocusTimeout=void 0},o.deferFocusInput=function(){o.cancelFocusInput(),o.inputFocusTimeout=setTimeout((function(){return o.setFocus()}),1)},o.handleDropdownFocus=function(){o.cancelFocusInput()},o.handleBlur=function(e){var t,n;(!o.state.open||o.props.withPortal||o.props.showTimeInput)&&(null===(n=(t=o.props).onBlur)||void 0===n||n.call(t,e)),o.state.open&&!1===o.props.open&&o.setOpen(!1),o.setState({focused:!1})},o.handleCalendarClickOutside=function(e){var t,n;o.props.inline||o.setOpen(!1),null===(n=(t=o.props).onClickOutside)||void 0===n||n.call(t,e),o.props.withPortal&&e.preventDefault()},o.handleChange=function(){for(var e,n,r,a,i,s=[],l=0;l<arguments.length;l++)s[l]=arguments[l];var c=s[0];if(!o.props.onChangeRaw||(o.props.onChangeRaw.apply(o,s),c&&"function"===typeof c.isDefaultPrevented&&!c.isDefaultPrevented())){o.setState({inputValue:(null===c||void 0===c?void 0:c.target)instanceof HTMLInputElement?c.target.value:null,lastPreSelectChange:wy});var u=o.props,d=u.selectsRange,f=u.startDate,p=u.endDate,h=null!==(e=o.props.dateFormat)&&void 0!==e?e:t.defaultProps.dateFormat,m=null!==(n=o.props.strictParsing)&&void 0!==n?n:t.defaultProps.strictParsing,v=(null===c||void 0===c?void 0:c.target)instanceof HTMLInputElement?c.target.value:"";if(d){var g=v.split("-",2).map((function(e){return e.trim()})),y=g[0],b=g[1],w=Wv(null!==y&&void 0!==y?y:"",h,o.props.locale,m),x=Wv(null!==b&&void 0!==b?b:"",h,o.props.locale,m),k=(null===f||void 0===f?void 0:f.getTime())!==(null===w||void 0===w?void 0:w.getTime()),S=(null===p||void 0===p?void 0:p.getTime())!==(null===x||void 0===x?void 0:x.getTime());if(!k&&!S)return;if(w&&pg(w,o.props))return;if(x&&pg(x,o.props))return;null===(a=(r=o.props).onChange)||void 0===a||a.call(r,[w,x],c)}else{var E=Wv(v,h,o.props.locale,m,null!==(i=o.props.selected)&&void 0!==i?i:void 0);!E&&v||o.setSelected(E,c,!0)}}},o.handleSelect=function(e,t,n){if(o.props.shouldCloseOnSelect&&!o.props.showTimeSelect&&o.sendFocusBackToInput(),o.props.onChangeRaw&&o.props.onChangeRaw(t),o.setSelected(e,t,!1,n),o.props.showDateSelect&&o.setState({isRenderAriaLiveMessage:!0}),!o.props.shouldCloseOnSelect||o.props.showTimeSelect)o.setPreSelection(e);else if(!o.props.inline){o.props.selectsRange||o.setOpen(!1);var r=o.props,a=r.startDate,i=r.endDate;!a||i||!o.props.swapRange&&zg(e,a)||o.setOpen(!1)}},o.setSelected=function(e,t,n,r){var a,i,s=e;if(o.props.showYearPicker){if(null!==s&&wg(wh(s),o.props))return}else if(o.props.showMonthYearPicker){if(null!==s&&mg(s,o.props))return}else if(null!==s&&pg(s,o.props))return;var l=o.props,c=l.onChange,u=l.selectsRange,d=l.startDate,f=l.endDate,p=l.selectsMultiple,h=l.selectedDates,m=l.minTime,v=l.swapRange;if(!sg(o.props.selected,s)||o.props.allowSameDay||u||p)if(null!==s&&(!o.props.selected||n&&(o.props.showTimeSelect||o.props.showTimeSelectOnly||o.props.showTimeInput)||(s=Kv(s,{hour:Eh(o.props.selected),minute:Ch(o.props.selected),second:Nh(o.props.selected)})),n||!o.props.showTimeSelect&&!o.props.showTimeSelectOnly||m&&(s=Kv(s,{hour:m.getHours(),minute:m.getMinutes(),second:m.getSeconds()})),o.props.inline||o.setState({preSelection:s}),o.props.focusSelectedMonth||o.setState({monthSelectedIn:r})),u){var g=d&&!f,y=d&&f;!d&&!f?null===c||void 0===c||c([s,null],t):g&&(null===s?null===c||void 0===c||c([null,null],t):zg(s,d)?v?null===c||void 0===c||c([s,d],t):null===c||void 0===c||c([s,null],t):null===c||void 0===c||c([d,s],t)),y&&(null===c||void 0===c||c([s,null],t))}else if(p){if(null!==s)if(null===h||void 0===h?void 0:h.length)if(h.some((function(e){return ig(e,s)}))){var b=h.filter((function(e){return!ig(e,s)}));null===c||void 0===c||c(b,t)}else null===c||void 0===c||c(Fv(Fv([],h,!0),[s],!1),t);else null===c||void 0===c||c([s],t)}else null===c||void 0===c||c(s,t);n||(null===(i=(a=o.props).onSelect)||void 0===i||i.call(a,s,t),o.setState({inputValue:null}))},o.setPreSelection=function(e){var t=Tp(o.props.minDate),n=Tp(o.props.maxDate),r=!0;if(e){var a=$v(e);if(t&&n)r=lg(e,o.props.minDate,o.props.maxDate);else if(t){var i=$v(o.props.minDate);r=Uh(e,i)||sg(a,i)}else if(n){var s=tg(o.props.maxDate);r=Op(e,s)||sg(a,s)}}r&&o.setState({preSelection:e})},o.toggleCalendar=function(){o.setOpen(!o.state.open)},o.handleTimeChange=function(e){var t,n;if(!o.props.selectsRange&&!o.props.selectsMultiple){var r=o.props.selected?o.props.selected:o.getPreSelection(),a=o.props.selected?e:Kv(r,{hour:Eh(e),minute:Ch(e)});o.setState({preSelection:a}),null===(n=(t=o.props).onChange)||void 0===n||n.call(t,a),o.props.shouldCloseOnSelect&&!o.props.showTimeInput&&(o.sendFocusBackToInput(),o.setOpen(!1)),o.props.showTimeInput&&o.setOpen(!0),(o.props.showTimeSelectOnly||o.props.showTimeSelect)&&o.setState({isRenderAriaLiveMessage:!0}),o.setState({inputValue:null})}},o.onInputClick=function(){var e,t;o.props.disabled||o.props.readOnly||o.setOpen(!0),null===(t=(e=o.props).onInputClick)||void 0===t||t.call(e)},o.onInputKeyDown=function(e){var t,n,r,a,i,s;null===(n=(t=o.props).onKeyDown)||void 0===n||n.call(t,e);var l=e.key;if(o.state.open||o.props.inline||o.props.preventOpenOnFocus){if(o.state.open){if(l===zv.ArrowDown||l===zv.ArrowUp){e.preventDefault();var c=o.props.showTimeSelectOnly?".react-datepicker__time-list-item[tabindex='0']":o.props.showWeekPicker&&o.props.showWeekNumbers?'.react-datepicker__week-number[tabindex="0"]':o.props.showFullMonthYearPicker||o.props.showMonthYearPicker?'.react-datepicker__month-text[tabindex="0"]':'.react-datepicker__day[tabindex="0"]',u=(null===(a=o.calendar)||void 0===a?void 0:a.containerRef.current)instanceof Element&&o.calendar.containerRef.current.querySelector(c);return void(u instanceof HTMLElement&&u.focus({preventScroll:!0}))}var d=Yv(o.state.preSelection);l===zv.Enter?(e.preventDefault(),e.target.blur(),o.inputOk()&&o.state.lastPreSelectChange===xy?(o.handleSelect(d,e),!o.props.shouldCloseOnSelect&&o.setPreSelection(d)):o.setOpen(!1)):l===zv.Escape?(e.preventDefault(),e.target.blur(),o.sendFocusBackToInput(),o.setOpen(!1)):l===zv.Tab&&o.setOpen(!1),o.inputOk()||null===(s=(i=o.props).onInputError)||void 0===s||s.call(i,{code:1,msg:yy})}}else l!==zv.ArrowDown&&l!==zv.ArrowUp&&l!==zv.Enter||null===(r=o.onInputClick)||void 0===r||r.call(o)},o.onPortalKeyDown=function(e){e.key===zv.Escape&&(e.preventDefault(),o.setState({preventFocus:!0},(function(){o.setOpen(!1),setTimeout((function(){o.setFocus(),o.setState({preventFocus:!1})}))})))},o.onDayKeyDown=function(e){var t,n,r,a,i,s,l=o.props,c=l.minDate,u=l.maxDate,d=l.disabledKeyboardNavigation,f=l.showWeekPicker,p=l.shouldCloseOnSelect,h=l.locale,m=l.calendarStartDay,v=l.adjustDateOnChange,g=l.inline;if(null===(n=(t=o.props).onKeyDown)||void 0===n||n.call(t,e),!d){var y=e.key,b=e.shiftKey,w=Yv(o.state.preSelection),x=function(e,t){var n=t;switch(e){case zv.ArrowRight:n=f?qh(t,1):gp(t,1);break;case zv.ArrowLeft:n=f?Gh(t,1):Xh(t,1);break;case zv.ArrowUp:n=Gh(t,1);break;case zv.ArrowDown:n=qh(t,1);break;case zv.PageUp:n=b?Rh(t,1):Dh(t,1);break;case zv.PageDown:n=b?Mh(t,1):jh(t,1);break;case zv.Home:n=Gv(t,h,m);break;case zv.End:n=function(e){return ch(e)}(t)}return n};if(y===zv.Enter)return e.preventDefault(),o.handleSelect(w,e),void(!p&&o.setPreSelection(w));if(y===zv.Escape)return e.preventDefault(),o.setOpen(!1),void(o.inputOk()||null===(a=(r=o.props).onInputError)||void 0===a||a.call(r,{code:1,msg:yy}));var k=null;switch(y){case zv.ArrowLeft:case zv.ArrowRight:case zv.ArrowUp:case zv.ArrowDown:case zv.PageUp:case zv.PageDown:case zv.Home:case zv.End:k=function(e,t){for(var n=e,r=!1,a=0,i=x(e,t);!r;){if(a>=40){i=t;break}c&&i<c&&(n=zv.ArrowRight,i=pg(c,o.props)?x(n,i):c),u&&i>u&&(n=zv.ArrowLeft,i=pg(u,o.props)?x(n,i):u),pg(i,o.props)?(n!==zv.PageUp&&n!==zv.Home||(n=zv.ArrowRight),n!==zv.PageDown&&n!==zv.End||(n=zv.ArrowLeft),i=x(n,i)):r=!0,a++}return i}(y,w)}if(k){if(e.preventDefault(),o.setState({lastPreSelectChange:xy}),v&&o.setSelected(k),o.setPreSelection(k),g){var S=xh(w),E=xh(k),C=wh(w),N=wh(k);S!==E||C!==N?o.setState({shouldFocusDayInline:!0}):o.setState({shouldFocusDayInline:!1})}}else null===(s=(i=o.props).onInputError)||void 0===s||s.call(i,{code:1,msg:yy})}},o.onPopperKeyDown=function(e){e.key===zv.Escape&&(e.preventDefault(),o.sendFocusBackToInput())},o.onClearClick=function(e){e&&e.preventDefault&&e.preventDefault(),o.sendFocusBackToInput();var t=o.props,n=t.selectsRange,r=t.onChange;n?null===r||void 0===r||r([null,null],e):null===r||void 0===r||r(null,e),o.setState({inputValue:null})},o.clear=function(){o.onClearClick()},o.onScroll=function(e){"boolean"===typeof o.props.closeOnScroll&&o.props.closeOnScroll?e.target!==document&&e.target!==document.documentElement&&e.target!==document.body||o.setOpen(!1):"function"===typeof o.props.closeOnScroll&&o.props.closeOnScroll(e)&&o.setOpen(!1)},o.renderCalendar=function(){var e,n;return o.props.inline||o.isCalendarOpen()?r.createElement(cy,Iv({showMonthYearDropdown:void 0,ref:function(e){o.calendar=e}},o.props,o.state,{setOpen:o.setOpen,dateFormat:null!==(e=o.props.dateFormatCalendar)&&void 0!==e?e:t.defaultProps.dateFormatCalendar,onSelect:o.handleSelect,onClickOutside:o.handleCalendarClickOutside,holidays:Mg(o.modifyHolidays()),outsideClickIgnoreClass:gy,onDropdownFocus:o.handleDropdownFocus,onTimeChange:o.handleTimeChange,className:o.props.calendarClassName,container:o.props.calendarContainer,handleOnKeyDown:o.props.onKeyDown,handleOnDayKeyDown:o.onDayKeyDown,setPreSelection:o.setPreSelection,dropdownMode:null!==(n=o.props.dropdownMode)&&void 0!==n?n:t.defaultProps.dropdownMode}),o.props.children):null},o.renderAriaLiveRegion=function(){var e,n=o.props,a=n.dateFormat,i=void 0===a?t.defaultProps.dateFormat:a,s=n.locale,l=o.props.showTimeInput||o.props.showTimeSelect?"PPPPp":"PPPP";return e=o.props.selectsRange?"Selected start date: ".concat(Qv(o.props.startDate,{dateFormat:l,locale:s}),". ").concat(o.props.endDate?"End date: "+Qv(o.props.endDate,{dateFormat:l,locale:s}):""):o.props.showTimeSelectOnly?"Selected time: ".concat(Qv(o.props.selected,{dateFormat:i,locale:s})):o.props.showYearPicker?"Selected year: ".concat(Qv(o.props.selected,{dateFormat:"yyyy",locale:s})):o.props.showMonthYearPicker?"Selected month: ".concat(Qv(o.props.selected,{dateFormat:"MMMM yyyy",locale:s})):o.props.showQuarterYearPicker?"Selected quarter: ".concat(Qv(o.props.selected,{dateFormat:"yyyy, QQQ",locale:s})):"Selected date: ".concat(Qv(o.props.selected,{dateFormat:l,locale:s})),r.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e)},o.renderDateInput=function(){var e,n,a,i=Ld(o.props.className,((e={})[gy]=o.state.open,e)),s=o.props.customInput||r.createElement("input",{type:"text"}),l=o.props.customInputRef||"ref",c=o.props,u=c.dateFormat,d=void 0===u?t.defaultProps.dateFormat:u,f=c.locale,p="string"===typeof o.props.value?o.props.value:"string"===typeof o.state.inputValue?o.state.inputValue:o.props.selectsRange?function(e,t,n){if(!e)return"";var r=Qv(e,n),o=t?Qv(t,n):"";return"".concat(r," - ").concat(o)}(o.props.startDate,o.props.endDate,{dateFormat:d,locale:f}):o.props.selectsMultiple?function(e,t){if(!(null===e||void 0===e?void 0:e.length))return"";var n=e[0]?Qv(e[0],t):"";if(1===e.length)return n;if(2===e.length&&e[1]){var r=Qv(e[1],t);return"".concat(n,", ").concat(r)}var o=e.length-1;return"".concat(n," (+").concat(o,")")}(null!==(a=o.props.selectedDates)&&void 0!==a?a:[],{dateFormat:d,locale:f}):Qv(o.props.selected,{dateFormat:d,locale:f});return(0,r.cloneElement)(s,((n={})[l]=function(e){o.input=e},n.value=p,n.onBlur=o.handleBlur,n.onChange=o.handleChange,n.onClick=o.onInputClick,n.onFocus=o.handleFocus,n.onKeyDown=o.onInputKeyDown,n.id=o.props.id,n.name=o.props.name,n.form=o.props.form,n.autoFocus=o.props.autoFocus,n.placeholder=o.props.placeholderText,n.disabled=o.props.disabled,n.autoComplete=o.props.autoComplete,n.className=Ld(s.props.className,i),n.title=o.props.title,n.readOnly=o.props.readOnly,n.required=o.props.required,n.tabIndex=o.props.tabIndex,n["aria-describedby"]=o.props.ariaDescribedBy,n["aria-invalid"]=o.props.ariaInvalid,n["aria-labelledby"]=o.props.ariaLabelledBy,n["aria-required"]=o.props.ariaRequired,n))},o.renderClearButton=function(){var e=o.props,t=e.isClearable,n=e.disabled,a=e.selected,i=e.startDate,s=e.endDate,l=e.clearButtonTitle,c=e.clearButtonClassName,u=void 0===c?"":c,d=e.ariaLabelClose,f=void 0===d?"Close":d,p=e.selectedDates;return t&&(null!=a||null!=i||null!=s||(null===p||void 0===p?void 0:p.length))?r.createElement("button",{type:"button",className:Ld("react-datepicker__close-icon",u,{"react-datepicker__close-icon--disabled":n}),disabled:n,"aria-label":f,onClick:o.onClearClick,title:l,tabIndex:-1}):null},o.state=o.calcInitialState(),o.preventFocusTimeout=void 0,o}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",preventOpenOnFocus:!1,monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,swapRange:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:12,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1,usePointerEvent:!1}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){window.addEventListener("scroll",this.onScroll,!0),document.addEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},t.prototype.componentDidUpdate=function(e,t){var n,r,o,a,i,s;e.inline&&(i=e.selected,s=this.props.selected,i&&s?xh(i)!==xh(s)||wh(i)!==wh(s):i!==s)&&this.setPreSelection(this.props.selected),void 0!==this.state.monthSelectedIn&&e.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),e.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:Og(this.props.highlightDates)}),t.focused||sg(e.selected,this.props.selected)||this.setState({inputValue:null}),t.open!==this.state.open&&(!1===t.open&&!0===this.state.open&&(null===(r=(n=this.props).onCalendarOpen)||void 0===r||r.call(n)),!0===t.open&&!1===this.state.open&&(null===(a=(o=this.props).onCalendarClose)||void 0===a||a.call(o)))},t.prototype.componentWillUnmount=function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0),document.removeEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},t.prototype.renderInputContainer=function(){var e=this.props,t=e.showIcon,n=e.icon,o=e.calendarIconClassname,a=e.calendarIconClassName,i=e.toggleCalendarOnIconClick,s=this.state.open;return o&&console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."),r.createElement("div",{className:"react-datepicker__input-container".concat(t?" react-datepicker__view-calendar-icon":"")},t&&r.createElement(uy,Iv({icon:n,className:Ld(a,!a&&o,s&&"react-datepicker-ignore-onclickoutside")},i?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())},t.prototype.render=function(){var e=this.renderCalendar();if(this.props.inline)return e;if(this.props.withPortal){var t=this.state.open?r.createElement(py,{enableTabLoop:this.props.enableTabLoop},r.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},e)):null;return this.state.open&&this.props.portalId&&(t=r.createElement(dy,Iv({portalId:this.props.portalId},this.props),t)),r.createElement("div",null,this.renderInputContainer(),t)}return r.createElement(vy,Iv({},this.props,{className:this.props.popperClassName,hidePopper:!this.isCalendarOpen(),targetComponent:this.renderInputContainer(),popperComponent:e,popperOnKeyDown:this.onPopperKeyDown,showArrow:this.props.showPopperArrow}))},t}(r.Component),wy="input",xy="navigate";const ky=()=>{te();const[e,t]=(0,r.useState)([]),[n,o]=(0,r.useState)([]),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(""),[c,u]=(0,r.useState)(!1),[d,f]=(0,r.useState)(null),[p,h]=(0,r.useState)([]),[m,v]=(0,r.useState)({title:"",content:""}),[g,y]=(0,r.useState)({name:"",discountType:"FREE"}),[b,w]=(0,r.useState)(new Date),[x,k]=(0,r.useState)(new Date),[S,E]=(0,r.useState)("users"),C=async()=>{u(!0),f(null);try{const e=await(async()=>{try{const t=await ar.get("".concat(gd,"/user/allUser"),{headers:{Authorization:localStorage.getItem("token")}});if(console.log("API Response:",t.data),t.data&&200===t.data.code){const e=t.data.data.data;return Array.isArray(e)?e:[e]}var e;throw new Error((null===(e=t.data)||void 0===e?void 0:e.message)||"\u672a\u77e5\u9519\u8bef")}catch(d){throw console.error("\u83b7\u53d6\u7528\u6237\u5217\u8868\u5931\u8d25:",d),d}})();console.log("API Data:",e);const n=e.map((e=>({username:e.username||"\u672a\u77e5\u7528\u6237",authority:e.authority||"USER",registTime:e.registTime||null,lastLogin:e.lastLogin||null,upload:Number(e.upload)||0,download:Number(e.download)||0,magicPoints:Number(e.magicPoints)||0,shareRate:Number(e.shareRate)||0})));console.log("Formatted Users:",n),t(n)}catch(e){console.error("Error details:",e),f("\u83b7\u53d6\u7528\u6237\u5217\u8868\u5931\u8d25: ".concat(e.message))}finally{u(!1)}},N=async(n,r)=>{try{await(async(e,t)=>{try{return(await ar.put("".concat(gd,"/user/changeAuthority"),{changeUsername:e,authority:t},{headers:{Authorization:localStorage.getItem("token")}})).data}catch(d){throw console.error("\u4fee\u6539\u7528\u6237\u6743\u9650\u5931\u8d25:",d),d}})(n,r),t(e.map((e=>e.username===n?_e(_e({},e),{},{authority:r}):e)))}catch(o){f("\u4fee\u6539\u6743\u9650\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"),console.error(o)}},j=async()=>{u(!0),f(null);try{const e=await yd();o(e)}catch(e){f("\u83b7\u53d6\u6298\u6263\u5217\u8868\u5931\u8d25: "+e.message),console.error(e)}finally{u(!1)}},D=async()=>{try{const e=await(async()=>{try{var e;const r=await ar.get("".concat(gd,"/discount/current"),{headers:{Authorization:localStorage.getItem("token")}});var t,n;if(r.data&&200===r.data.code)return(null===(t=r.data.data)||void 0===t?void 0:t.data)||r.data.data||null;if("\u76ee\u524d\u6ca1\u6709\u8fdb\u884c\u4e2d\u7684\u6298\u6263"===(null===(e=r.data)||void 0===e?void 0:e.message))return null;throw new Error((null===(n=r.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25:",d),d}})();i(e)}catch(e){console.error("\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25:",e)}},P=async()=>{if(g.name&&b&&x)try{if(b>=x)return void f("\u7ed3\u675f\u65f6\u95f4\u5fc5\u987b\u665a\u4e8e\u5f00\u59cb\u65f6\u95f4");const e={name:g.name,startTime:T(b),endTime:T(x,!0),discountType:g.discountType};console.log("\u63d0\u4ea4\u6570\u636e:",e),await(async e=>{try{const n=await ar.post("".concat(gd,"/discount/add"),e,{headers:{Authorization:localStorage.getItem("token")}});if(n.data&&200===n.data.code)return n.data.data.data||n.data.data;var t;throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u6dfb\u52a0\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u6dfb\u52a0\u6298\u6263\u5931\u8d25:",d),d}})(e),y({name:"",discountType:"FREE"}),w(new Date),k(new Date),j(),f(null)}catch(e){f("\u6dfb\u52a0\u6298\u6263\u5931\u8d25: "+e.message),console.error(e)}else f("\u8bf7\u586b\u5199\u6240\u6709\u5fc5\u586b\u5b57\u6bb5")},T=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return"";const n=e=>e.toString().padStart(2,"0"),r=e.getFullYear(),o=n(e.getMonth()+1),a=n(e.getDate()),i=n(e.getHours()),s=n(e.getMinutes());return t?"".concat(r,"-").concat(o,"-").concat(a,"T").concat(i,":").concat(s,":59"):"".concat(r,"-").concat(o,"-").concat(a,"T").concat(i,":").concat(s,":00")},_=async e=>{try{await(async e=>{try{const n=await ar.delete("".concat(gd,"/discount/delete/").concat(e),{headers:{Authorization:localStorage.getItem("token")}});if(n.data&&200===n.data.code)return!0;var t;throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u5220\u9664\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u5220\u9664\u6298\u6263\u5931\u8d25:",d),d}})(e),j()}catch(t){f("\u5220\u9664\u6298\u6263\u5931\u8d25: "+t.message),console.error(t)}},O=e=>e?new Date(e).toLocaleDateString():"-",M=e=>e?new Date(e).toLocaleString():"-",R=e=>{switch(e){case"FREE":return"\u5168\u90e8\u514d\u8d39";case"HALF":return"\u534a\u4ef7\u4e0b\u8f7d";case"DOUBLE":return"\u53cc\u500d\u4e0a\u4f20";default:return e}},A=async()=>{u(!0),f(null);try{const e=await ir.get("/announcement/list");h(Array.isArray(e)?e:[])}catch(e){f("\u83b7\u53d6\u516c\u544a\u5217\u8868\u5931\u8d25: "+e.message),console.error(e)}finally{u(!1)}};return(0,r.useEffect)((()=>{"users"===S?C():"discounts"===S?(j(),D()):"announcements"===S&&A()}),[S]),(0,bd.jsxs)("div",{className:"administer-container",children:[(0,bd.jsx)("h1",{children:"\u7cfb\u7edf\u7ba1\u7406"}),(0,bd.jsxs)("div",{className:"tab-container",children:[(0,bd.jsx)("button",{className:"tab-button ".concat("users"===S?"active":""),onClick:()=>E("users"),children:"\u7528\u6237\u7ba1\u7406"}),(0,bd.jsx)("button",{className:"tab-button ".concat("discounts"===S?"active":""),onClick:()=>E("discounts"),children:"\u6298\u6263\u7ba1\u7406"}),(0,bd.jsx)("button",{className:"tab-button ".concat("announcements"===S?"active":""),onClick:()=>E("announcements"),children:"\u516c\u544a\u7ba1\u7406"})]}),"users"===S?(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"search-container",children:[(0,bd.jsx)("input",{type:"text",value:s,onChange:e=>l(e.target.value),placeholder:"\u8f93\u5165\u7528\u6237\u540d\u641c\u7d22",className:"search-input"}),(0,bd.jsx)("button",{onClick:async()=>{if(s.trim()){u(!0),f(null);try{const e=await(async e=>{try{var t;const r=await ar.get("".concat(gd,"/user/searchUser"),{params:{key:e},headers:{Authorization:localStorage.getItem("token")}});if(200===(null===(t=r.data)||void 0===t?void 0:t.code)){const e=r.data.data.data;return Array.isArray(e)?e:[e]}var n;throw new Error((null===(n=r.data)||void 0===n?void 0:n.message)||"\u641c\u7d22\u5931\u8d25")}catch(d){throw console.error("\u641c\u7d22\u7528\u6237\u5931\u8d25:",d),d}})(s);console.log("Search Results:",e);const n=e.map((e=>({username:e.username||"\u672a\u77e5\u7528\u6237",authority:e.authority||"USER",registTime:e.registTime||null,lastLogin:e.lastLogin||null,upload:Number(e.upload)||0,download:Number(e.download)||0,magicPoints:Number(e.magicPoints)||0,shareRate:Number(e.shareRate)||0})));t(n)}catch(e){f("\u641c\u7d22\u7528\u6237\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"),console.error(e)}finally{u(!1)}}else C()},className:"search-button",children:"\u641c\u7d22"}),(0,bd.jsx)("button",{onClick:()=>{l(""),C()},className:"reset-button",children:"\u91cd\u7f6e"})]}),d&&(0,bd.jsx)("div",{className:"error-message",children:d}),c&&(0,bd.jsx)("div",{className:"loading-message",children:"\u52a0\u8f7d\u4e2d..."}),(0,bd.jsx)("div",{className:"user-list-container",children:(0,bd.jsxs)("table",{className:"user-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u7528\u6237\u540d"}),(0,bd.jsx)("th",{children:"\u6ce8\u518c\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u6700\u540e\u767b\u5f55"}),(0,bd.jsx)("th",{children:"\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("th",{children:"\u4e0b\u8f7d\u91cf"}),(0,bd.jsx)("th",{children:"\u5206\u4eab\u7387"}),(0,bd.jsx)("th",{children:"\u9b54\u529b\u503c"}),(0,bd.jsx)("th",{children:"\u6743\u9650"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:Array.isArray(e)&&e.map((e=>{return(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.username}),(0,bd.jsx)("td",{children:O(e.registTime)}),(0,bd.jsx)("td",{children:O(e.lastLogin)}),(0,bd.jsx)("td",{children:e.upload}),(0,bd.jsx)("td",{children:e.download}),(0,bd.jsx)("td",{children:(t=e.shareRate,(100*t).toFixed(2)+"%")}),(0,bd.jsx)("td",{children:e.magicPoints}),(0,bd.jsx)("td",{children:e.authority}),(0,bd.jsx)("td",{children:(0,bd.jsxs)("select",{value:e.authority,onChange:t=>N(e.username,t.target.value),className:"authority-select",children:[(0,bd.jsx)("option",{value:"USER",children:"\u666e\u901a\u7528\u6237"}),(0,bd.jsx)("option",{value:"ADMIN",children:"\u7ba1\u7406\u5458"}),(0,bd.jsx)("option",{value:"LIMIT",children:"\u53d7\u9650\u7528\u6237"}),(0,bd.jsx)("option",{value:"BAN",children:"\u5c01\u7981\u7528\u6237"})]})})]},e.username);var t}))})]})})]}):"discounts"===S?(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"current-discount-section",children:[(0,bd.jsx)("h3",{children:"\u5f53\u524d\u6d3b\u52a8\u6298\u6263"}),a?(0,bd.jsxs)("div",{className:"current-discount-card",children:[(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u540d\u79f0:"})," ",a.name]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u7c7b\u578b:"})," ",R(a.discountType)]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u65f6\u95f4:"})," ",M(a.startTime)," \u81f3 ",M(a.endTime)]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u72b6\u6001:"})," ",a.status]})]}):(0,bd.jsx)("p",{children:"\u5f53\u524d\u6ca1\u6709\u8fdb\u884c\u4e2d\u7684\u6298\u6263"})]}),(0,bd.jsxs)("div",{className:"add-discount-form",children:[(0,bd.jsx)("h3",{children:"\u6dfb\u52a0\u65b0\u6298\u6263"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u6298\u6263\u540d\u79f0:"}),(0,bd.jsx)("input",{type:"text",value:g.name,onChange:e=>y(_e(_e({},g),{},{name:e.target.value}))})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5f00\u59cb\u65f6\u95f4:"}),(0,bd.jsx)(by,{selected:b,onChange:e=>w(e),showTimeSelect:!0,timeFormat:"HH:mm",timeIntervals:1,dateFormat:"yyyy-MM-dd HH:mm",minDate:new Date,placeholderText:"\u9009\u62e9\u5f00\u59cb\u65e5\u671f\u548c\u65f6\u95f4"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u7ed3\u675f\u65f6\u95f4:"}),(0,bd.jsx)(by,{selected:x,onChange:e=>k(e),showTimeSelect:!0,timeFormat:"HH:mm",timeIntervals:1,dateFormat:"yyyy-MM-dd HH:mm",minDate:b,placeholderText:"\u9009\u62e9\u7ed3\u675f\u65e5\u671f\u548c\u65f6\u95f4"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u6298\u6263\u7c7b\u578b:"}),(0,bd.jsxs)("select",{value:g.discountType,onChange:e=>y(_e(_e({},g),{},{discountType:e.target.value})),children:[(0,bd.jsx)("option",{value:"FREE",children:"\u5168\u90e8\u514d\u8d39"}),(0,bd.jsx)("option",{value:"HALF",children:"\u534a\u4ef7\u4e0b\u8f7d"}),(0,bd.jsx)("option",{value:"DOUBLE",children:"\u53cc\u500d\u4e0a\u4f20"})]})]}),(0,bd.jsx)("button",{onClick:e=>{e.preventDefault(),P()},children:"\u6dfb\u52a0\u6298\u6263"})]}),(0,bd.jsxs)("div",{className:"discount-list-container",children:[(0,bd.jsx)("h3",{children:"\u6240\u6709\u6298\u6263\u8ba1\u5212"}),(0,bd.jsxs)("table",{className:"discount-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"ID"}),(0,bd.jsx)("th",{children:"\u540d\u79f0"}),(0,bd.jsx)("th",{children:"\u5f00\u59cb\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u7ed3\u675f\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u7c7b\u578b"}),(0,bd.jsx)("th",{children:"\u521b\u5efa\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u72b6\u6001"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:n.map((e=>(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.id}),(0,bd.jsx)("td",{children:e.name}),(0,bd.jsx)("td",{children:M(e.startTime)}),(0,bd.jsx)("td",{children:M(e.endTime)}),(0,bd.jsx)("td",{children:R(e.discountType)}),(0,bd.jsx)("td",{children:M(e.createTime)}),(0,bd.jsx)("td",{children:e.status||"\u672a\u77e5"}),(0,bd.jsx)("td",{children:(0,bd.jsx)("button",{onClick:()=>_(e.id),className:"delete-button",children:"\u5220\u9664"})})]},e.id)))})]})]})]}):(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"announcement-form",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u65b0\u516c\u544a"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u516c\u544a\u6807\u9898:"}),(0,bd.jsx)("input",{type:"text",value:m.title,onChange:e=>v(_e(_e({},m),{},{title:e.target.value})),placeholder:"\u8f93\u5165\u516c\u544a\u6807\u9898"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u516c\u544a\u5185\u5bb9:"}),(0,bd.jsx)("textarea",{value:m.content,onChange:e=>v(_e(_e({},m),{},{content:e.target.value})),rows:"5",placeholder:"\u8f93\u5165\u516c\u544a\u5185\u5bb9"})]}),(0,bd.jsx)("button",{onClick:async()=>{if(m.title&&m.content)try{await(e=>{const t=new FormData;return t.append("title",e.title),t.append("content",e.content),ir.post("/announcement/create",t)})(m),v({title:"",content:""}),A(),f(null)}catch(e){f("\u53d1\u5e03\u516c\u544a\u5931\u8d25: "+e.message),console.error(e)}else f("\u8bf7\u586b\u5199\u516c\u544a\u6807\u9898\u548c\u5185\u5bb9")},children:"\u53d1\u5e03\u516c\u544a"})]}),(0,bd.jsxs)("div",{className:"announcement-list-container",children:[(0,bd.jsx)("h3",{children:"\u6240\u6709\u516c\u544a"}),(0,bd.jsxs)("table",{className:"announcement-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u6807\u9898"}),(0,bd.jsx)("th",{children:"\u5185\u5bb9"}),(0,bd.jsx)("th",{children:"\u53d1\u5e03\u65f6\u95f4"})]})}),(0,bd.jsx)("tbody",{children:p.map((e=>(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.title}),(0,bd.jsx)("td",{children:e.content}),(0,bd.jsx)("td",{children:M(e.createTime)})]},e.id)))})]})]})]})]})};const Sy=function(){r.useEffect((()=>{localStorage.removeItem("token"),console.log("Token cleared on app startup"),localStorage.removeItem("username")}),[]);const[e,t]=r.useState(!1),n=()=>{localStorage.removeItem("token"),t(!1)};return(0,bd.jsx)(Ee,{children:(0,bd.jsxs)(xe,{children:[(0,bd.jsx)(be,{path:"/",element:(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/login",element:e?(0,bd.jsx)(ge,{to:"/dashboard",replace:!0}):(0,bd.jsx)(Nd,{onLoginSuccess:e=>{t(!0)}})}),(0,bd.jsx)(be,{path:"/dashboard/:tab?",element:e?(0,bd.jsx)(wd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/announcement/:id",element:e?(0,bd.jsx)(jd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal",element:e?(0,bd.jsx)(Cd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/exchange",element:e?(0,bd.jsx)(_d,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/upload",element:e?(0,bd.jsx)(Od,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/notice",element:e?(0,bd.jsx)(Md,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/setting",element:e?(0,bd.jsx)(Rd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"*",element:e?(0,bd.jsx)(ge,{to:"/dashboard",replace:!0}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/administer",element:e?(0,bd.jsx)(ky,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/request/:id",element:e?(0,bd.jsx)(Pd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/help/:id",element:e?(0,bd.jsx)(Td,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/torrent/:id",element:e?(0,bd.jsx)(Dd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})})]})})},Ey=e=>{e&&e instanceof Function&&n.e(845).then(n.bind(n,845)).then((t=>{let{getCLS:n,getFID:r,getFCP:o,getLCP:a,getTTFB:i}=t;n(e),r(e),o(e),a(e),i(e)}))};var Cy=n(365),Ny=n.n(Cy),jy=n(478);"undefined"===typeof window.process&&(window.process=Ny()),"undefined"===typeof window.Buffer&&(window.Buffer=jy.hp);a.createRoot(document.getElementById("root")).render((0,bd.jsx)(r.StrictMode,{children:(0,bd.jsx)(Sy,{})})),Ey()})()})();
//# sourceMappingURL=main.dd76cdc0.js.map