diff --git a/build/asset-manifest.json b/build/asset-manifest.json
new file mode 100644
index 0000000..826fab1
--- /dev/null
+++ b/build/asset-manifest.json
@@ -0,0 +1,15 @@
+{
+  "files": {
+    "main.css": "/static/css/main.aef1c2f9.css",
+    "main.js": "/static/js/main.dd76cdc0.js",
+    "static/js/845.116b9008.chunk.js": "/static/js/845.116b9008.chunk.js",
+    "index.html": "/index.html",
+    "main.aef1c2f9.css.map": "/static/css/main.aef1c2f9.css.map",
+    "main.dd76cdc0.js.map": "/static/js/main.dd76cdc0.js.map",
+    "845.116b9008.chunk.js.map": "/static/js/845.116b9008.chunk.js.map"
+  },
+  "entrypoints": [
+    "static/css/main.aef1c2f9.css",
+    "static/js/main.dd76cdc0.js"
+  ]
+}
\ No newline at end of file
diff --git a/build/favicon.ico b/build/favicon.ico
new file mode 100644
index 0000000..a11777c
--- /dev/null
+++ b/build/favicon.ico
Binary files differ
diff --git a/build/index.html b/build/index.html
new file mode 100644
index 0000000..a148054
--- /dev/null
+++ b/build/index.html
@@ -0,0 +1 @@
+<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.dd76cdc0.js"></script><link href="/static/css/main.aef1c2f9.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
\ No newline at end of file
diff --git a/build/logo192.png b/build/logo192.png
new file mode 100644
index 0000000..fc44b0a
--- /dev/null
+++ b/build/logo192.png
Binary files differ
diff --git a/build/logo512.png b/build/logo512.png
new file mode 100644
index 0000000..a4e47a6
--- /dev/null
+++ b/build/logo512.png
Binary files differ
diff --git a/build/manifest.json b/build/manifest.json
new file mode 100644
index 0000000..080d6c7
--- /dev/null
+++ b/build/manifest.json
@@ -0,0 +1,25 @@
+{
+  "short_name": "React App",
+  "name": "Create React App Sample",
+  "icons": [
+    {
+      "src": "favicon.ico",
+      "sizes": "64x64 32x32 24x24 16x16",
+      "type": "image/x-icon"
+    },
+    {
+      "src": "logo192.png",
+      "type": "image/png",
+      "sizes": "192x192"
+    },
+    {
+      "src": "logo512.png",
+      "type": "image/png",
+      "sizes": "512x512"
+    }
+  ],
+  "start_url": ".",
+  "display": "standalone",
+  "theme_color": "#000000",
+  "background_color": "#ffffff"
+}
diff --git a/build/robots.txt b/build/robots.txt
new file mode 100644
index 0000000..e9e57dc
--- /dev/null
+++ b/build/robots.txt
@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:
diff --git a/build/static/css/main.aef1c2f9.css b/build/static/css/main.aef1c2f9.css
new file mode 100644
index 0000000..0c82900
--- /dev/null
+++ b/build/static/css/main.aef1c2f9.css
@@ -0,0 +1,2 @@
+@charset "UTF-8";body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.dashboard-container{background-color:#f5f5f5;display:flex;flex-direction:column;height:100vh}.top-bar{align-items:center;background-color:#fff;box-shadow:0 2px 4px #0000001a;display:flex;justify-content:space-between;padding:10px 20px;position:-webkit-sticky;position:sticky;top:0;z-index:100}.search-container{flex-grow:1;margin:0 auto;max-width:600px}.search-input{border:1px solid #ddd;border-radius:20px 0 0 20px;outline:none}.search-button,.search-input{font-size:16px;padding:8px 15px}.search-button{background-color:#007bff;border:none;border-radius:0 20px 20px 0;color:#fff;cursor:pointer}.search-button:hover{background-color:#0056b3}.user-info{align-items:center;display:flex;gap:10px}.user-avatar{border-radius:50%;height:40px;object-fit:cover;width:40px}.username{font-weight:700}.logout-button{background-color:#f8f9fa;border:1px solid #ddd;border-radius:4px;cursor:pointer;margin-left:10px;padding:5px 10px}.logout-button:hover{background-color:#e9ecef}.nav-tabs{background-color:#fff;border-bottom:1px solid #ddd;display:flex;padding:0 20px}.tab-button{color:#666;padding:12px 20px}.tab-button:hover{color:#007bff}.tab-button.active{border-bottom-color:#007bff;color:#007bff;font-weight:700}.content-area{background-color:#fff;border-radius:4px;box-shadow:0 1px 3px #0000001a;flex-grow:1;margin:20px;padding:20px}.error,.loading{font-size:18px;padding:20px;text-align:center}.error{color:#dc3545}.carousel-container{border-radius:4px;height:200px;margin-bottom:20px;overflow:hidden;position:relative;width:100%}.carousel-slide{height:100%;opacity:0;position:absolute;transition:opacity 1s ease-in-out;width:100%}.carousel-slide.active{opacity:1}.carousel-image{font-size:24px;font-weight:700;height:100%;width:100%}.gray-bg{background-color:#666}.carousel-dots{bottom:15px;display:flex;gap:10px;justify-content:center;left:0;position:absolute;right:0}.dot{background-color:#ffffff80;border-radius:50%;cursor:pointer;height:12px;width:12px}.dot.active{background-color:#fff}.announcement-grid{grid-gap:20px;display:grid;gap:20px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.announcement-card{background-color:#fff;border-radius:4px;box-shadow:0 1px 3px #0000001a;padding:15px;transition:transform .2s,box-shadow .2s}.announcement-card:hover{box-shadow:0 4px 8px #0000001a;transform:translateY(-2px)}.announcement-card h3{border-bottom:1px solid #eee;color:#007bff;margin-top:0;padding-bottom:8px}.announcement-card p{color:#666;line-height:1.5;margin-bottom:0}.upload-header{display:flex;justify-content:flex-start;margin-bottom:20px}.upload-btn{background:#1890ff;font-size:16px;transition:all .3s}.upload-btn:hover{background:#40a9ff}.upload-modal{background:#fff;border-radius:8px;max-width:90%;padding:25px;position:relative;width:500px}.close-btn{background:none;border:none;cursor:pointer;font-size:20px;position:absolute;right:15px;top:15px}.form-group input[type=text],.form-group select,.form-group textarea{border:1px solid #d9d9d9;border-radius:4px;padding:8px;width:100%}.form-group textarea{min-height:80px}.form-actions{margin-top:20px}.cancel-btn{padding:8px 15px}.cancel-btn:hover{background:#e6e6e6}.filter-section{background:#f9f9f9;border-radius:8px;margin-bottom:20px}.filter-group{margin-bottom:15px}.filter-group h4{color:#666;font-size:15px;margin:0 0 8px}.filter-btn{background:#fff;border:1px solid #ddd;border-radius:4px;cursor:pointer;margin-bottom:8px;margin-right:8px;padding:6px 12px;transition:all .2s}.filter-btn:hover{border-color:#1890ff;color:#1890ff}.filter-btn.active{background:#1890ff;border-color:#1890ff;color:#fff}.confirm-btn{background:#1890ff;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:8px 20px;transition:opacity .3s}.confirm-btn:hover{background:#007bff}.confirm-btn:disabled{cursor:not-allowed;opacity:.5}.resource-list{display:flex;flex-direction:column;gap:15px}.resource-item{align-items:center;background-color:#fff;border-radius:4px;box-shadow:0 1px 3px #0000001a;display:flex;padding:15px;transition:transform .2s,box-shadow .2s}.resource-item:hover{box-shadow:0 4px 8px #0000001a;transform:translateY(-2px)}.resource-poster{margin-right:15px}.poster-image{align-items:center;background-color:#666;border-radius:4px;color:#fff;display:flex;font-size:24px;font-weight:700;height:80px;justify-content:center;width:60px}.resource-info{flex-grow:1}.resource-title{font-size:16px;font-weight:700;margin:0 0 5px}.resource-meta{color:#666;font-size:14px;margin:0}.resource-stats{align-items:flex-end;display:flex;flex-direction:column;margin-right:20px;min-width:150px}.stat{color:#666;font-size:13px;margin-bottom:5px}.download-btn{background-color:#28a745;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:8px 15px;transition:background-color .2s}.download-btn:hover{background-color:#218838}.post-header{margin-bottom:20px;text-align:right}.create-post-btn{background-color:#1890ff;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:8px 16px;transition:background-color .3s}.create-post-btn:hover{background-color:#40a9ff}.post-modal-overlay{align-items:center;background-color:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.post-modal{background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;max-width:90%;padding:24px;position:relative;width:500px}.post-modal h3{color:#333;font-size:18px;margin-bottom:20px;margin-top:0}.modal-close-btn{background:none;border:none;color:#999;cursor:pointer;font-size:20px;position:absolute;right:16px;top:16px}.modal-close-btn:hover{color:#666}.form-group{margin-bottom:16px}.form-group label{color:#333;font-weight:500;margin-bottom:8px}.form-group input[type=text],.form-group textarea{border:1px solid #d9d9d9;border-radius:4px;font-size:14px;padding:8px 12px;width:100%}.form-group textarea{min-height:120px;resize:vertical}.upload-image-btn{align-items:center;display:flex}.upload-image-btn label{background-color:#f5f5f5;border:1px dashed #d9d9d9;border-radius:4px;cursor:pointer;margin-right:10px;padding:8px 16px;transition:all .3s}.upload-image-btn label:hover{border-color:#1890ff;color:#1890ff}.image-name{color:#666;font-size:14px}.form-actions{justify-content:flex-end;margin-top:24px}.cancel-btn{background-color:#f5f5f5;border:none;border-radius:4px;color:#333;cursor:pointer;margin-right:10px;padding:8px 16px;transition:background-color .3s}.cancel-btn:hover{background-color:#e6e6e6}.submit-btn{background-color:#1890ff;border-radius:4px;cursor:pointer;padding:8px 16px;transition:background-color .3s}.submit-btn:hover{background-color:#40a9ff}.pagination{gap:5px;margin:20px 0}.pagination button{background:#fff;border:1px solid #ddd;padding:5px 10px}.pagination button.active{background:#1890ff;border-color:#1890ff;color:#fff}.pagination button:disabled{opacity:.5}.filter-section{background:#fff;box-shadow:0 2px 5px #0000001a;padding:15px;position:-webkit-sticky;position:sticky;top:0;z-index:100}.admin-center-btn{background-color:#ff5722;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;margin-right:10px;padding:5px 10px}.admin-center-btn:hover{background-color:#e64a19}.section-search-container{display:flex;gap:10px}.section-search-input{border-radius:4px;flex:1 1;font-size:1rem;padding:10px 15px}.section-search-button{background-color:#007bff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:10px 20px;transition:background-color .3s}.section-search-button:hover{background-color:#0056b3}.share-top-actions{align-items:center;display:flex;gap:20px;justify-content:space-between;margin-bottom:20px}.upload-btn{background-color:#28a745;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:10px 20px;transition:background-color .3s;white-space:nowrap}.upload-btn:hover{background-color:#218838}.modal-overlay{align-items:center;background:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.download-modal{background:#fff;border-radius:8px;max-width:90%;padding:20px;position:relative;width:500px}.download-modal .close-btn{background:none;border:none;cursor:pointer;font-size:20px;position:absolute;right:10px;top:10px}.download-modal .form-group{margin-bottom:15px}.download-modal .form-group label{display:block;margin-bottom:5px}.download-modal .form-group input{border:1px solid #ddd;border-radius:4px;padding:8px;width:100%}.progress-container{background:#f0f0f0;border-radius:4px;height:20px;margin:15px 0;overflow:hidden}.progress-bar{background:#1890ff;color:#fff;font-size:12px;height:100%;line-height:20px;text-align:center;transition:width .3s}.modal-actions{margin-top:20px}.modal-actions button:first-child{background:#f5f5f5;border:1px solid #d9d9d9}.modal-actions button:last-child{background:#1890ff;border:none;color:#fff}.modal-actions button:disabled{background:#d9d9d9;cursor:not-allowed;opacity:.7}.resource-actions{display:flex;gap:10px;margin-left:auto}.delete-btn{border:none;border-radius:4px;cursor:pointer;padding:8px 15px;transition:background-color .3s}.delete-btn:disabled{background-color:#d9d9d9;cursor:not-allowed}.carousel-image{align-items:center;background:linear-gradient(90deg,#f7b733,#fc4a1a);border-radius:10px;color:#fff;display:flex;flex-direction:column;font-size:18px;height:180px;justify-content:center;padding:1rem;transition:all .5s ease-in-out}.carousel-image h3{font-size:22px;margin:0}.carousel-image p{margin:4px 0}.platform-name{align-items:center;display:flex;flex:1 1;padding-left:20px}.platform-name h2{color:#333;font-size:24px;font-weight:700;margin:0}.section-search-container{margin-bottom:20px;padding:10px 20px}.section-search-input{border:1px solid #ddd;border-radius:20px;font-size:14px;outline:none;padding:8px 15px;width:100%}.section-search-input:focus{border-color:#1890ff}.no-results{color:#888;font-size:16px;padding:20px;text-align:center}.reset-button{background-color:#f0f0f0;border:1px solid #ddd;border-radius:4px;cursor:pointer;padding:8px 15px;transition:background-color .3s}.reset-button:hover{background-color:#e0e0e0}.personal-container{margin:0 auto;max-width:800px;padding:20px}.profile-card{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:20px;padding:20px}.profile-header{align-items:center;display:flex;margin-bottom:20px}.profile-avatar{border-radius:50%;height:80px;margin-right:20px;object-fit:cover;width:80px}.profile-info{flex-grow:1}.username{font-size:24px;margin:0 0 5px}.user-meta{color:#666;display:flex;font-size:14px;gap:15px}.stats-grid{grid-gap:15px;display:grid;gap:15px;grid-template-columns:repeat(4,1fr)}.stat-item{background:#f5f5f5;border-radius:6px;padding:15px;text-align:center}.stat-label{color:#666;font-size:14px;margin-bottom:5px}.stat-value{font-size:18px;font-weight:700}.quota-card{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:20px;padding:20px}.quota-card h3{margin-bottom:15px;margin-top:0}.quota-info{display:flex;justify-content:space-between;margin-bottom:10px}.quota-used{color:#1890ff}.quota-remaining{color:#52c41a}.progress-bar{height:10px;margin-bottom:10px}.progress-bar,.progress-fill{border-radius:5px}.quota-total{color:#666;font-size:14px;text-align:right}.action-cards{grid-gap:15px;display:grid;gap:15px;grid-template-columns:repeat(2,1fr)}.action-card{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;cursor:pointer;padding:20px;transition:transform .2s ease}.action-card:hover{box-shadow:0 4px 8px #0000001a;transform:translateY(-3px)}.action-card h3{color:#1890ff;margin-top:0}.action-card p{color:#666;margin-bottom:0}.subpage-container{border-top:1px solid #f0f0f0;margin-top:20px;padding-top:20px}.progress-card{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;margin-bottom:20px;padding:20px}.download-task{margin-bottom:15px}.task-info{display:flex;justify-content:space-between;margin-bottom:5px}.task-id{color:#666;font-size:14px}.task-progress{color:#1890ff;font-size:14px;font-weight:700}.progress-bar{background:#f0f0f0;border-radius:4px;height:8px;overflow:hidden}.progress-fill{background:#1890ff;border-radius:4px;height:100%;transition:width .3s ease}.user-meta span{color:#666;margin-right:15px}.user-meta span:last-child{color:#ff9800;font-weight:700}.auth-container{align-items:center;background-color:#f5f5f5;display:flex;flex-direction:column;justify-content:center;min-height:100vh;padding:20px}.auth-title{color:#333;font-size:2.5rem;margin-bottom:2rem;text-align:center}.auth-form-wrapper{background:#fff;border-radius:8px;box-shadow:0 4px 6px #0000001a;max-width:400px;padding:2rem;width:100%}.auth-form{display:flex;flex-direction:column;gap:1rem}.auth-form h2{color:#333;margin-bottom:1.5rem;text-align:center}.form-group{display:flex;flex-direction:column;gap:.5rem}.form-group input{font-size:1rem;height:42px;padding:.8rem}.form-group input:focus{border-color:#007bff;outline:none}.auth-button{background-color:#007bff;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:1rem;height:42px;padding:.8rem;transition:background-color .3s}.auth-button:hover{background-color:#0056b3}.auth-button:disabled{background-color:#ccc;cursor:not-allowed}.auth-switch{align-items:center;color:#666;display:flex;font-size:.9rem;gap:.5rem;justify-content:center;margin-top:1rem}.switch-button{background:none;border:none;color:#007bff;cursor:pointer;font-size:.9rem;padding:0;text-decoration:underline}.switch-button:hover{color:#0056b3}.error-message{background-color:#f8d7da;border-radius:4px;color:#dc3545;margin-bottom:1rem;padding:.5rem}.announcement-container{margin:0 auto;max-width:800px;padding:20px}.announcement-detail{background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a;padding:25px}.announcement-header{border-bottom:1px solid #f0f0f0;margin-bottom:20px;padding-bottom:15px}.announcement-header h1{font-size:24px;margin:0 0 10px}.announcement-meta{align-items:center;color:#666;display:flex;font-size:14px;gap:15px}.category-badge{background:#e6f7ff;border-radius:4px;color:#1890ff;font-size:12px;padding:2px 8px}.announcement-content{font-size:15px;line-height:1.8}.announcement-content p{margin:0 0 16px}.error-message{color:#ff4d4f;font-size:16px;padding:50px;text-align:center}.torrent-detail-container{color:#333;margin:0 auto;max-width:1000px;padding:20px}.back-button{color:#3498db;padding:5px 10px}.back-button:hover{text-decoration:underline}.torrent-main{display:flex;gap:30px;margin-bottom:40px}.torrent-cover{flex:0 0 300px}.cover-placeholder{align-items:center;background-color:#eee;border-radius:5px;color:#999;display:flex;font-size:72px;height:450px;justify-content:center;width:100%}.torrent-info{flex:1 1}.torrent-title{color:#222;font-size:28px;margin-bottom:20px}.uploader-info{align-items:center;display:flex;gap:15px;margin-bottom:20px}.uploader-avatar{align-items:center;background-color:#3498db;border-radius:50%;color:#fff;display:flex;font-weight:700;height:40px;justify-content:center;width:40px}.uploader-details{flex:1 1}.uploader-name{font-weight:700}.upload-time{color:#777;font-size:14px}.torrent-meta{margin-bottom:20px}.torrent-meta p{margin:5px 0}.torrent-description{line-height:1.6;margin-bottom:30px}.interaction-buttons{display:flex;gap:15px}.interaction-buttons button{border:none;border-radius:4px;cursor:pointer;font-size:14px;padding:8px 15px;transition:background-color .2s}.like-button{background-color:#f0f0f0}.like-button:hover{background-color:#e0e0e0}.download-button{background-color:#3498db;color:#fff}.download-button:hover{background-color:#2980b9}.comments-section{margin-top:40px}.comments-section h2{border-bottom:1px solid #eee;font-size:22px;margin-bottom:20px;padding-bottom:10px}.comment-form{margin-bottom:30px}.comment-form button{background-color:#3498db;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:8px 15px}.comment-form button:hover{background-color:#2980b9}.comment-container{margin-bottom:15px}.comment-item{border:1px solid #eaeaea;gap:15px;padding:12px}.comment-container.is-reply{margin-left:40px;position:relative}.comment-container.is-reply:before{background:#ddd;content:"";height:1px;left:-20px;position:absolute;top:20px;width:15px}.comment-avatar{align-items:center;background-color:#e74c3c;color:#fff;display:flex;flex:0 0 40px;font-weight:700;justify-content:center}.comment-user{font-weight:700;margin-right:10px}.reply-to{color:#666;font-size:14px;margin:0 5px}.comment-time{color:#777;font-size:14px}.comment-actions{gap:15px}.comment-actions button{background:none;border:none;color:#3498db;cursor:pointer;font-size:14px;padding:0}.comment-actions button:hover{text-decoration:underline}.replies-container{margin-top:15px}.comment-container.is-reply .comment-item{background:#f9f9f9}.reply-form{margin-top:15px}.reply-form textarea{margin-bottom:10px}.reply-actions{display:flex;gap:10px;justify-content:flex-end}.reply-actions button{border:none;border-radius:3px;cursor:pointer;font-size:13px;padding:5px 10px}.reply-actions button[type=button]{background-color:#f0f0f0}.reply-actions button[type=submit]{background-color:#3498db;color:#fff}.error,.loading{font-size:18px;padding:50px;text-align:center}.error{color:#e74c3c}.reply-form{background:#f5f5f5;border-radius:4px;padding:10px}.reply-form-buttons{margin-top:8px}.reply-form-buttons button{border:none;padding:5px 10px}.comment-list{border-top:1px solid #eee;padding-top:20px}.reply-form{background:#f9f9f9;border:1px solid #eee;border-radius:6px;margin-bottom:15px;margin-left:50px;padding:12px}.reply-form.nested-reply{margin-left:80px}.reply-form textarea{font-family:inherit;font-size:14px;padding:10px}.reply-form-buttons{display:flex;gap:10px;margin-top:10px}.reply-form-buttons button{border-radius:4px;cursor:pointer;font-size:13px;padding:6px 12px;transition:all .2s}.reply-form-buttons button[type=submit]{background-color:#1890ff;border:none;color:#fff}.reply-form-buttons button[type=submit]:hover{background-color:#40a9ff}.reply-form-buttons .cancel-reply{background-color:#f5f5f5;border:1px solid #d9d9d9;color:#666}.reply-form-buttons .cancel-reply:hover{background-color:#e8e8e8}.reply-modal-overlay{background-color:#00000080}.reply-modal{box-shadow:0 2px 10px #0000001a;max-width:500px;width:90%}.modal-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:15px}.modal-header h3{font-size:18px;margin:0}.close-modal{background:none;border:none;color:#666;cursor:pointer;font-size:24px}.reply-modal textarea{font-size:14px;min-height:120px;padding:12px}.modal-actions button{border-radius:4px;cursor:pointer;font-size:14px;padding:8px 16px}.cancel-btn{background:#f5f5f5;border:1px solid #d9d9d9;color:#666}.cancel-btn:hover{background:#e8e8e8}.submit-btn{background:#1890ff;border:none;color:#fff}.submit-btn:hover{background:#40a9ff}.request-detail-container{margin:0 auto;max-width:800px;padding:20px}.request-post{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:20px;padding:20px}.favorite-button,.like-button{background:#f5f5f5;border:1px solid #ddd;border-radius:4px;cursor:pointer;padding:5px 15px}.form-actions{display:flex;gap:10px}.submit-comment,.submit-torrent{border:none;border-radius:4px;cursor:pointer;padding:8px 16px}.submit-comment{background:#1890ff;color:#fff}.submit-torrent{background:#52c41a;color:#fff}.torrent-comment{align-items:center;background:#f0f8ff;border-radius:4px;display:flex;margin-bottom:8px;padding:8px}.torrent-title{color:#1890ff;flex-grow:1}.torrent-size{color:#666;font-size:14px;margin:0 15px}.download-torrent{background:#1890ff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:5px 10px}.comment-like{background:none;border:none;color:#666;cursor:pointer;font-size:14px;padding:0}.help-detail-container{margin:0 auto;max-width:800px;padding:20px}.back-button{background:none;border:none;color:#1890ff;cursor:pointer;font-size:16px;margin-bottom:20px;padding:5px 0}.help-post{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:20px;padding:20px}.help-post.solved{border-left:4px solid #52c41a}.post-header{align-items:center;display:flex;margin-bottom:15px;position:relative}.post-avatar{border-radius:50%;height:40px;margin-right:10px;width:40px}.post-meta{display:flex;flex-direction:column}.post-author{font-weight:700}.post-date{color:#888;font-size:14px}.solved-badge{background:#52c41a;border-radius:4px;color:#fff;font-size:12px;padding:2px 8px;position:absolute;right:0;top:0}.post-title{font-size:20px;margin:0 0 15px}.post-content{line-height:1.6;margin-bottom:15px}.post-actions{display:flex;gap:15px}.favorite-button,.like-button,.solve-button{background:#f5f5f5;border:1px solid #ddd;border-radius:4px;cursor:pointer;padding:5px 15px}.like-button.liked{background:#e6f7ff;border-color:#91d5ff;color:#1890ff}.favorite-button.favorited{background:#fff7e6;border-color:#ffd591;color:#fa8c16}.solve-button.solved{background:#f6ffed;border-color:#b7eb8f;color:#52c41a}.comments-section{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;padding:20px}.comment-form{margin-bottom:20px}.comment-form textarea{border:1px solid #ddd;border-radius:4px;margin-bottom:10px;min-height:80px;padding:10px;resize:vertical;width:100%}.image-upload,.upload-button{margin-bottom:10px}.upload-button{background:#f5f5f5;border:1px dashed #d9d9d9;border-radius:4px;cursor:pointer;padding:8px 16px}.image-preview{display:flex;flex-wrap:wrap;gap:10px}.preview-item{height:100px;position:relative;width:100px}.preview-item img{border-radius:4px;height:100%;object-fit:cover;width:100%}.remove-image{align-items:center;background:#ff4d4f;border:none;border-radius:50%;color:#fff;cursor:pointer;display:flex;font-size:12px;height:20px;justify-content:center;position:absolute;right:-8px;top:-8px;width:20px}.comment-list{margin-top:20px}.comment-item{border-bottom:1px solid #f0f0f0;padding:15px 0}.comment-item:last-child{border-bottom:none}.comment-avatar{flex-shrink:0}.comment-content{flex-grow:1}.comment-header{justify-content:space-between}.comment-date{color:#888;font-size:14px}.comment-text{line-height:1.6;margin-bottom:8px}.comment-images{display:flex;gap:10px;margin-bottom:10px}.comment-image{max-height:150px;max-width:200px}.reply-form{display:flex;gap:10px}.reply-form textarea{flex-grow:1;min-height:40px}.submit-reply{align-self:flex-end;background:#f5f5f5;border:1px solid #d9d9d9;margin-bottom:5px;padding:0 15px}.reply-list{border-left:2px solid #f0f0f0}.reply-item,.reply-list{margin-top:10px}.reply-avatar{height:30px;width:30px}.reply-content{flex-grow:1}.reply-header{gap:10px}.reply-date{color:#888}.reply-text{line-height:1.5}.comment-item{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;display:flex;margin-bottom:20px;padding:15px}.comment-avatar{border-radius:50%;height:40px;margin-right:15px;object-fit:cover;width:40px}.comment-content{flex:1 1}.comment-header{align-items:center;display:flex;margin-bottom:8px}.comment-author{color:#333;font-weight:700;margin-right:10px}.comment-date{color:#999;font-size:12px}.comment-text{color:#333;line-height:1.5;margin-bottom:10px}.comment-actions{margin-top:10px}.comment-actions,.like-button{align-items:center;display:flex}.like-button{background:none;border:none;color:#666;cursor:pointer;font-size:14px;padding:4px 8px}.like-button.liked{color:#1877f2}.like-button:hover{text-decoration:underline}.reply-controls{margin:10px 0}.toggle-replies-btn{background:none;border:none;color:#666;cursor:pointer;font-size:14px;padding:4px 8px}.toggle-replies-btn:hover{color:#333;text-decoration:underline}.toggle-replies-btn:disabled{color:#ccc;cursor:not-allowed}.reply-form{margin-top:10px;width:100%}.reply-form textarea{border:1px solid #ddd;border-radius:4px;margin-bottom:8px;min-height:60px;padding:8px;resize:vertical;width:100%}.submit-reply{background-color:#f0f2f5;border:none;border-radius:4px;color:#333;cursor:pointer;padding:6px 12px}.submit-reply:hover{background-color:#e4e6eb}.reply-list{border-left:2px solid #eee;margin-left:55px;margin-top:15px;padding-left:15px}.reply-item{background:#f9f9f9;border-radius:6px;display:flex;margin-bottom:15px;padding:12px}.reply-avatar{border-radius:50%;height:32px;margin-right:10px;object-fit:cover;width:32px}.reply-content{flex:1 1}.reply-header{align-items:center;display:flex;margin-bottom:5px}.reply-author{color:#333;font-size:14px;font-weight:700;margin-right:8px}.reply-date{color:#999;font-size:12px}.reply-text{color:#333;font-size:14px;line-height:1.4;margin-bottom:5px}.reply-actions{margin-top:5px}.reply-modal-overlay{align-items:center;background:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.reply-modal{background:#fff;border-radius:8px;max-width:90%;padding:20px;width:500px}.reply-modal h3{margin-bottom:15px;margin-top:0}.reply-modal textarea{border:1px solid #ddd;border-radius:4px;margin-bottom:15px;min-height:100px;padding:10px;resize:vertical;width:100%}.modal-actions{display:flex;gap:10px;justify-content:flex-end}.cancel-button{background:#f5f5f5;border:1px solid #d9d9d9;border-radius:4px;cursor:pointer;padding:8px 16px}.submit-button{background:#1890ff;padding:8px 16px}.post-image-container{margin:10px 0;max-width:500px;width:100%}.post-image{border-radius:4px;height:auto;max-height:400px;object-fit:contain;width:100%}.comment-image-container{margin:10px 0;max-width:500px;width:100%}.comment-image{border-radius:4px;height:auto;max-height:400px;object-fit:contain;width:100%}.uploads-table{border-collapse:collapse;margin-top:20px;width:100%}.uploads-table td,.uploads-table th{border-bottom:1px solid #e0e0e0;padding:12px 15px;text-align:left}.uploads-table th{background-color:#f5f5f5;font-weight:600}.list-item:hover{background-color:#f9f9f9}.action-btn{border:none;border-radius:4px;cursor:pointer;font-size:14px;padding:6px 12px;transition:background-color .2s}.delete-btn{background-color:#ff4d4f;color:#fff}.delete-btn:hover{background-color:#ff7875}.pagination{gap:15px}.pagination button{background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;cursor:pointer;padding:6px 12px}.pagination button:disabled{color:#d9d9d9;cursor:not-allowed}.pagination button:not(:disabled):hover{border-color:#1890ff;color:#1890ff}.pagination{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:20px}.page-nav,.page-number{background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;cursor:pointer;min-width:32px;padding:6px 12px;text-align:center}.page-nav:disabled,.page-number:disabled{color:#d9d9d9;cursor:not-allowed}.page-nav:not(:disabled):hover,.page-number:not(:disabled):hover{border-color:#1890ff;color:#1890ff}.page-number.active{background-color:#1890ff;border-color:#1890ff;color:#fff}.ellipsis{padding:0 8px}.page-info{align-items:center;display:flex;gap:8px;margin-left:15px}.page-info input{border:1px solid #d9d9d9;border-radius:4px;padding:4px;text-align:center;width:50px}.page-info input:focus{border-color:#1890ff;outline:none}.uploads-table td:first-child,.uploads-table th:first-child{width:30%}.uploads-table td:nth-child(2),.uploads-table th:nth-child(2){width:15%}.uploads-table td:nth-child(3),.uploads-table th:nth-child(3){width:20%}.uploads-table td:nth-child(4),.uploads-table th:nth-child(4){text-align:center;width:15%}.uploads-table td:nth-child(5),.uploads-table th:nth-child(5){text-align:center;width:20%}.exchange-section{background-color:#f9f9f9;border-radius:8px;margin-top:20px;padding:20px}.exchange-card{background-color:#fff;border-radius:6px;box-shadow:0 2px 4px #0000001a;margin-bottom:20px;padding:15px}.exchange-card h4{color:#333;margin-top:0}.exchange-card p{color:#666;margin-bottom:15px}.exchange-btn{background-color:#1890ff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:8px 16px;transition:background-color .3s}.exchange-btn:hover{background-color:#40a9ff}.exchange-btn:disabled{background-color:#d9d9d9;cursor:not-allowed}.exchange-input-group{display:flex;gap:10px;margin-top:10px}.exchange-input-group input{border:1px solid #d9d9d9;border-radius:4px;flex:1 1;padding:8px}.invite-code-list{margin-top:20px}.invite-code-list ul{list-style:none;padding:0}.invite-code-list li{border-bottom:1px solid #eee;display:flex;justify-content:space-between;padding:10px}.invite-code-list .code{font-family:monospace}.invite-code-list .status{border-radius:3px;font-size:12px;padding:2px 6px}.invite-code-list .status.available{background-color:#f6ffed;border:1px solid #b7eb8f;color:#52c41a}.invite-code-list .status.used{background-color:#fff2f0;border:1px solid #ffccc7;color:#ff4d4f}.setting-section{margin:0 auto;max-width:600px;padding:20px}.password-form-card,.user-info-card{background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a;margin-bottom:20px;padding:20px}.info-item{display:flex;margin-bottom:10px}.info-item label{font-weight:700;width:100px}.info-item span{flex:1 1}.info-note{color:#666;font-size:.9em;margin-top:10px}.form-group label{display:block;font-weight:700;margin-bottom:5px}.form-group input{border:1px solid #ddd;border-radius:4px;box-sizing:border-box;padding:8px;width:100%}.submit-button{background-color:#4caf50;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:16px;padding:10px 15px}.submit-button:hover{background-color:#45a049}.submit-button:disabled{background-color:#ccc;cursor:not-allowed}.success-message{color:#4caf50;margin-bottom:15px}.administer-container{margin:0 auto;max-width:1200px;padding:20px}.search-container{display:flex;gap:10px;margin-bottom:20px}.search-input{border:1px solid #ccc;border-radius:4px;flex-grow:1;max-width:300px;padding:8px}.reset-button,.search-button{background-color:#4caf50;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:8px 16px}.reset-button{background-color:#f44336}.error-message{color:#f44336;margin-bottom:15px}.loading-message{color:#2196f3;margin-bottom:15px}.user-list-container{overflow-x:auto}.user-table{border-collapse:collapse;width:100%}.user-table td,.user-table th{border:1px solid #ddd;padding:8px;text-align:left}.user-table th{background-color:#f2f2f2}.user-table tr:nth-child(2n){background-color:#f9f9f9}.user-table tr:hover{background-color:#f1f1f1}.authority-select{border:1px solid #ccc;border-radius:4px;padding:5px}.tab-container{border-bottom:1px solid #ddd;display:flex;margin-bottom:20px}.tab-button{background:none;border:none;border-bottom:3px solid #0000;cursor:pointer;font-size:16px;padding:10px 20px}.tab-button.active{border-bottom:3px solid #1890ff;color:#1890ff}.current-discount-card{background-color:#f5f5f5;border-radius:5px;margin-bottom:20px;padding:15px}.add-discount-form{background-color:#f9f9f9;border-radius:5px;margin-bottom:20px;padding:20px}.form-group{margin-bottom:15px}.form-group label{display:inline-block;margin-right:10px;width:100px}.discount-table{border-collapse:collapse;width:100%}.discount-table td,.discount-table th{border:1px solid #ddd;padding:10px;text-align:left}.discount-table th{background-color:#f2f2f2}.delete-button{background-color:#ff4d4f;border:none;border-radius:3px;color:#fff;cursor:pointer;padding:5px 10px}.delete-button:hover{background-color:#ff7875}.react-datepicker{font-size:14px}.react-datepicker__time-container{width:120px}.react-datepicker-time__header{font-size:13px}.time-preview{background:#f5f5f5;border-radius:4px;margin:10px 0;padding:10px}.announcement-form{background:#f5f5f5;border-radius:8px;margin-bottom:20px;padding:20px}.announcement-form .form-group{margin-bottom:15px}.announcement-form label{display:block;font-weight:700;margin-bottom:5px}.announcement-form input[type=text],.announcement-form textarea{border:1px solid #ddd;border-radius:4px;padding:8px;width:100%}.announcement-form textarea{min-height:100px}.announcement-list-container{margin-top:20px}.announcement-table{border-collapse:collapse;width:100%}.announcement-table td,.announcement-table th{border-bottom:1px solid #ddd;padding:12px;text-align:left}.announcement-table th{background-color:#f2f2f2;font-weight:700}.announcement-table tr:hover{background-color:#f9f9f9}.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:"";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker-wrapper{border:0;display:inline-block;padding:0}.react-datepicker{background-color:#fff;border:1px solid #aeaeae;border-radius:.3rem;color:#000;display:inline-block;font-family:Helvetica Neue,helvetica,arial,sans-serif;font-size:.8rem;line-height:normal;position:relative}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker-popper{line-height:0;z-index:1}.react-datepicker-popper .react-datepicker__triangle{stroke:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle{fill:#fff;color:#fff}.react-datepicker__header{background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:.3rem;padding:8px 0;position:relative;text-align:center}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select){border-top-right-radius:.3rem}.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__year-dropdown-container--select{display:inline-block;margin:0 15px}.react-datepicker-time__header,.react-datepicker-year-header,.react-datepicker__current-month{color:#000;font-size:.944rem;font-weight:700;margin-top:0}h2.react-datepicker__current-month{margin:0;padding:0}.react-datepicker-time__header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.react-datepicker__navigation{align-items:center;background:none;border:none;cursor:pointer;display:flex;height:32px;justify-content:center;overflow:hidden;padding:0;position:absolute;text-align:center;text-indent:-999em;top:2px;width:32px;z-index:1}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{display:block;margin-left:auto;margin-right:auto;position:relative;top:0}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover :before{border-color:#a6a6a6}.react-datepicker__navigation-icon{font-size:20px;position:relative;top:-1px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next:before{left:-7px;transform:rotate(45deg)}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous:before{right:-7px;transform:rotate(225deg)}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:.4rem;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;margin:2px;width:4rem}.react-datepicker__month{margin:.4rem;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;margin:2px;width:4rem}.react-datepicker__input-time-container{clear:both;float:left;margin:5px 0 10px 15px;text-align:left;width:100%}.react-datepicker__input-time-container .react-datepicker-time__caption,.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{display:inline-block;margin-left:5px}.react-datepicker__time-container{border-left:1px solid #aeaeae;float:right;width:85px}.react-datepicker__time-container--with-today-button{border:1px solid #aeaeae;border-radius:.3rem;display:inline;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{background:#fff;border-bottom-right-radius:.3rem;position:relative}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{border-bottom-right-radius:.3rem;margin:0 auto;overflow-x:hidden;text-align:center;width:85px}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{box-sizing:initial;height:calc(195px + .85rem);list-style:none;margin:0;overflow-y:scroll;padding-left:0;padding-right:0;width:100%}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{background-color:#f0f0f0;cursor:pointer}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:#fff;font-weight:700}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{background-color:initial;cursor:default}.react-datepicker__week-number{color:#ccc;display:inline-block;line-height:1.7rem;margin:.166rem;text-align:center;width:1.7rem}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover{background-color:#f0f0f0;border-radius:.3rem}.react-datepicker__week-number--selected{background-color:#216ba5;border-radius:.3rem;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__day-names{margin-bottom:-8px;white-space:nowrap}.react-datepicker__week{white-space:nowrap}.react-datepicker__day,.react-datepicker__day-name,.react-datepicker__time-name{color:#000;display:inline-block;line-height:1.7rem;margin:.166rem;text-align:center;width:1.7rem}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:not([aria-disabled=true]):hover,.react-datepicker__month-text:not([aria-disabled=true]):hover,.react-datepicker__quarter-text:not([aria-disabled=true]):hover,.react-datepicker__year-text:not([aria-disabled=true]):hover{background-color:#f0f0f0;border-radius:.3rem}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:700}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{background-color:#3dcc4a;border-radius:.3rem;color:#fff}.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:#f0f}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{background-color:#ff6803;border-radius:.3rem;color:#fff;position:relative}.react-datepicker__day--holidays .overlay,.react-datepicker__month-text--holidays .overlay,.react-datepicker__quarter-text--holidays .overlay,.react-datepicker__year-text--holidays .overlay{background-color:#333;border-radius:4px;bottom:100%;color:#fff;left:50%;opacity:0;padding:4px;position:absolute;transform:translateX(-50%);transition:visibility 0s,opacity .3s ease-in-out;visibility:hidden;white-space:nowrap}.react-datepicker__day--holidays:not([aria-disabled=true]):hover,.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .overlay,.react-datepicker__month-text--holidays:hover .overlay,.react-datepicker__quarter-text--holidays:hover .overlay,.react-datepicker__year-text--holidays:hover .overlay{opacity:1;visibility:visible}.react-datepicker__day--in-range,.react-datepicker__day--in-selecting-range,.react-datepicker__day--selected,.react-datepicker__month-text--in-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--selected,.react-datepicker__quarter-text--in-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--selected,.react-datepicker__year-text--in-range,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--selected{background-color:#216ba5;border-radius:.3rem;color:#fff}.react-datepicker__day--in-range:not([aria-disabled=true]):hover,.react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__day--selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--selected:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{background-color:#bad9f1;border-radius:.3rem;color:#000}.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:#216ba580}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{color:#ccc;cursor:default}.react-datepicker__day--disabled .overlay,.react-datepicker__month-text--disabled .overlay,.react-datepicker__quarter-text--disabled .overlay,.react-datepicker__year-text--disabled .overlay{background-color:#333;border-radius:4px;bottom:70%;color:#fff;left:50%;opacity:0;padding:4px;position:absolute;transform:translateX(-50%);transition:visibility 0s,opacity .3s ease-in-out;visibility:hidden;white-space:nowrap}.react-datepicker__input-container{display:inline-block;position:relative;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{box-sizing:initial;padding:.5rem;position:absolute}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__month-read-view,.react-datepicker__month-year-read-view,.react-datepicker__year-read-view{border:1px solid #0000;border-radius:.3rem;position:relative}.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover,.react-datepicker__year-read-view:hover{cursor:pointer}.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__year-read-view--down-arrow{right:-16px;top:0;transform:rotate(135deg)}.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown,.react-datepicker__year-dropdown{background-color:#f0f0f0;border:1px solid #aeaeae;border-radius:.3rem;left:25%;position:absolute;text-align:center;top:30px;width:50%;z-index:1}.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover,.react-datepicker__year-dropdown:hover{cursor:pointer}.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable,.react-datepicker__year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__month-option,.react-datepicker__month-year-option,.react-datepicker__year-option{display:block;line-height:20px;margin-left:auto;margin-right:auto;width:100%}.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type,.react-datepicker__year-option:first-of-type{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type,.react-datepicker__year-option:last-of-type{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem;-webkit-user-select:none;user-select:none}.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover,.react-datepicker__year-option:hover{background-color:#ccc}.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected,.react-datepicker__year-option--selected{left:15px;position:absolute}.react-datepicker__close-icon{background-color:initial;border:0;cursor:pointer;display:table-cell;height:100%;outline:0;padding:0 6px 0 0;position:absolute;right:0;top:0;vertical-align:middle}.react-datepicker__close-icon:after{background-color:#216ba5;border-radius:50%;color:#fff;content:"×";cursor:pointer;display:table-cell;font-size:12px;height:16px;line-height:1;padding:2px;text-align:center;vertical-align:middle;width:16px}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled:after{background-color:#ccc;cursor:default}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;clear:left;cursor:pointer;font-weight:700;padding:5px 0;text-align:center}.react-datepicker__portal{align-items:center;background-color:#000c;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:2147483647}.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__time-name{line-height:3rem;width:3rem}@media (max-height:550px),(max-width:400px){.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__time-name{line-height:2rem;width:2rem}}.react-datepicker__portal .react-datepicker-time__header,.react-datepicker__portal .react-datepicker__current-month{font-size:1.44rem}.react-datepicker__children-container{height:auto;margin:.4rem;padding-left:.2rem;padding-right:.2rem;width:13.8rem}.react-datepicker__aria-live{border:0;-webkit-clip-path:circle(0);clip-path:circle(0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.react-datepicker__calendar-icon{height:1em;vertical-align:-.125em;width:1em}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{animation:App-logo-spin 20s linear infinite}}.App-header{align-items:center;background-color:#282c34;color:#fff;display:flex;flex-direction:column;font-size:calc(10px + 2vmin);justify-content:center;min-height:10%}.App-link{color:#61dafb}@keyframes App-logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}
+/*# sourceMappingURL=main.aef1c2f9.css.map*/
\ No newline at end of file
diff --git a/build/static/css/main.aef1c2f9.css.map b/build/static/css/main.aef1c2f9.css.map
new file mode 100644
index 0000000..e302d98
--- /dev/null
+++ b/build/static/css/main.aef1c2f9.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/css/main.aef1c2f9.css","mappings":"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","sources":["../node_modules/react-datepicker/dist/react-datepicker.css","index.css","components/Dashboard.css","components/Personal/Personal.css","components/AuthForm.css","components/AnnouncementDetail.css","components/TorrentDetail.css","components/RequestDetail.css","components/HelpDetail.css","components/Personal/personalSubpage.css","components/Administer.css","App.css"],"sourcesContent":["@charset \"UTF-8\";\n.react-datepicker__navigation-icon::before, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n  border-color: #ccc;\n  border-style: solid;\n  border-width: 3px 3px 0 0;\n  content: \"\";\n  display: block;\n  height: 9px;\n  position: absolute;\n  top: 6px;\n  width: 9px;\n}\n.react-datepicker-wrapper {\n  display: inline-block;\n  padding: 0;\n  border: 0;\n}\n\n.react-datepicker {\n  font-family: \"Helvetica Neue\", helvetica, arial, sans-serif;\n  font-size: 0.8rem;\n  background-color: #fff;\n  color: #000;\n  border: 1px solid #aeaeae;\n  border-radius: 0.3rem;\n  display: inline-block;\n  position: relative;\n  line-height: initial;\n}\n\n.react-datepicker--time-only .react-datepicker__time-container {\n  border-left: 0;\n}\n.react-datepicker--time-only .react-datepicker__time,\n.react-datepicker--time-only .react-datepicker__time-box {\n  border-bottom-left-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.react-datepicker-popper {\n  z-index: 1;\n  line-height: 0;\n}\n.react-datepicker-popper .react-datepicker__triangle {\n  stroke: #aeaeae;\n}\n.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle {\n  fill: #f0f0f0;\n  color: #f0f0f0;\n}\n.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle {\n  fill: #fff;\n  color: #fff;\n}\n\n.react-datepicker__header {\n  text-align: center;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid #aeaeae;\n  border-top-left-radius: 0.3rem;\n  padding: 8px 0;\n  position: relative;\n}\n.react-datepicker__header--time {\n  padding-bottom: 8px;\n  padding-left: 5px;\n  padding-right: 5px;\n}\n.react-datepicker__header--time:not(.react-datepicker__header--time--only) {\n  border-top-left-radius: 0;\n}\n.react-datepicker__header:not(.react-datepicker__header--has-time-select) {\n  border-top-right-radius: 0.3rem;\n}\n\n.react-datepicker__year-dropdown-container--select,\n.react-datepicker__month-dropdown-container--select,\n.react-datepicker__month-year-dropdown-container--select,\n.react-datepicker__year-dropdown-container--scroll,\n.react-datepicker__month-dropdown-container--scroll,\n.react-datepicker__month-year-dropdown-container--scroll {\n  display: inline-block;\n  margin: 0 15px;\n}\n\n.react-datepicker__current-month,\n.react-datepicker-time__header,\n.react-datepicker-year-header {\n  margin-top: 0;\n  color: #000;\n  font-weight: bold;\n  font-size: 0.944rem;\n}\n\nh2.react-datepicker__current-month {\n  padding: 0;\n  margin: 0;\n}\n\n.react-datepicker-time__header {\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  overflow: hidden;\n}\n\n.react-datepicker__navigation {\n  align-items: center;\n  background: none;\n  display: flex;\n  justify-content: center;\n  text-align: center;\n  cursor: pointer;\n  position: absolute;\n  top: 2px;\n  padding: 0;\n  border: none;\n  z-index: 1;\n  height: 32px;\n  width: 32px;\n  text-indent: -999em;\n  overflow: hidden;\n}\n.react-datepicker__navigation--previous {\n  left: 2px;\n}\n.react-datepicker__navigation--next {\n  right: 2px;\n}\n.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button) {\n  right: 85px;\n}\n.react-datepicker__navigation--years {\n  position: relative;\n  top: 0;\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n.react-datepicker__navigation--years-previous {\n  top: 4px;\n}\n.react-datepicker__navigation--years-upcoming {\n  top: -4px;\n}\n.react-datepicker__navigation:hover *::before {\n  border-color: rgb(165.75, 165.75, 165.75);\n}\n\n.react-datepicker__navigation-icon {\n  position: relative;\n  top: -1px;\n  font-size: 20px;\n  width: 0;\n}\n.react-datepicker__navigation-icon--next {\n  left: -2px;\n}\n.react-datepicker__navigation-icon--next::before {\n  transform: rotate(45deg);\n  left: -7px;\n}\n.react-datepicker__navigation-icon--previous {\n  right: -2px;\n}\n.react-datepicker__navigation-icon--previous::before {\n  transform: rotate(225deg);\n  right: -7px;\n}\n\n.react-datepicker__month-container {\n  float: left;\n}\n\n.react-datepicker__year {\n  margin: 0.4rem;\n  text-align: center;\n}\n.react-datepicker__year-wrapper {\n  display: flex;\n  flex-wrap: wrap;\n  max-width: 180px;\n}\n.react-datepicker__year .react-datepicker__year-text {\n  display: inline-block;\n  width: 4rem;\n  margin: 2px;\n}\n\n.react-datepicker__month {\n  margin: 0.4rem;\n  text-align: center;\n}\n.react-datepicker__month .react-datepicker__month-text,\n.react-datepicker__month .react-datepicker__quarter-text {\n  display: inline-block;\n  width: 4rem;\n  margin: 2px;\n}\n\n.react-datepicker__input-time-container {\n  clear: both;\n  width: 100%;\n  float: left;\n  margin: 5px 0 10px 15px;\n  text-align: left;\n}\n.react-datepicker__input-time-container .react-datepicker-time__caption {\n  display: inline-block;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container {\n  display: inline-block;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input {\n  display: inline-block;\n  margin-left: 10px;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input {\n  width: auto;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time] {\n  -moz-appearance: textfield;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter {\n  margin-left: 5px;\n  display: inline-block;\n}\n\n.react-datepicker__time-container {\n  float: right;\n  border-left: 1px solid #aeaeae;\n  width: 85px;\n}\n.react-datepicker__time-container--with-today-button {\n  display: inline;\n  border: 1px solid #aeaeae;\n  border-radius: 0.3rem;\n  position: absolute;\n  right: -87px;\n  top: 0;\n}\n.react-datepicker__time-container .react-datepicker__time {\n  position: relative;\n  background: white;\n  border-bottom-right-radius: 0.3rem;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box {\n  width: 85px;\n  overflow-x: hidden;\n  margin: 0 auto;\n  text-align: center;\n  border-bottom-right-radius: 0.3rem;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list {\n  list-style: none;\n  margin: 0;\n  height: calc(195px + 1.7rem / 2);\n  overflow-y: scroll;\n  padding-right: 0;\n  padding-left: 0;\n  width: 100%;\n  box-sizing: content-box;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item {\n  height: 30px;\n  padding: 5px 10px;\n  white-space: nowrap;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover {\n  cursor: pointer;\n  background-color: #f0f0f0;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected {\n  background-color: #216ba5;\n  color: white;\n  font-weight: bold;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover {\n  background-color: #216ba5;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled {\n  color: #ccc;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover {\n  cursor: default;\n  background-color: transparent;\n}\n\n.react-datepicker__week-number {\n  color: #ccc;\n  display: inline-block;\n  width: 1.7rem;\n  line-height: 1.7rem;\n  text-align: center;\n  margin: 0.166rem;\n}\n.react-datepicker__week-number.react-datepicker__week-number--clickable {\n  cursor: pointer;\n}\n.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover {\n  border-radius: 0.3rem;\n  background-color: #f0f0f0;\n}\n.react-datepicker__week-number--selected {\n  border-radius: 0.3rem;\n  background-color: #216ba5;\n  color: #fff;\n}\n.react-datepicker__week-number--selected:hover {\n  background-color: rgb(28.75, 93.2196969697, 143.75);\n}\n\n.react-datepicker__day-names {\n  white-space: nowrap;\n  margin-bottom: -8px;\n}\n\n.react-datepicker__week {\n  white-space: nowrap;\n}\n\n.react-datepicker__day-name,\n.react-datepicker__day,\n.react-datepicker__time-name {\n  color: #000;\n  display: inline-block;\n  width: 1.7rem;\n  line-height: 1.7rem;\n  text-align: center;\n  margin: 0.166rem;\n}\n\n.react-datepicker__day,\n.react-datepicker__month-text,\n.react-datepicker__quarter-text,\n.react-datepicker__year-text {\n  cursor: pointer;\n}\n.react-datepicker__day:not([aria-disabled=true]):hover,\n.react-datepicker__month-text:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text:not([aria-disabled=true]):hover,\n.react-datepicker__year-text:not([aria-disabled=true]):hover {\n  border-radius: 0.3rem;\n  background-color: #f0f0f0;\n}\n.react-datepicker__day--today,\n.react-datepicker__month-text--today,\n.react-datepicker__quarter-text--today,\n.react-datepicker__year-text--today {\n  font-weight: bold;\n}\n.react-datepicker__day--highlighted,\n.react-datepicker__month-text--highlighted,\n.react-datepicker__quarter-text--highlighted,\n.react-datepicker__year-text--highlighted {\n  border-radius: 0.3rem;\n  background-color: #3dcc4a;\n  color: #fff;\n}\n.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover {\n  background-color: rgb(49.8551020408, 189.6448979592, 62.5632653061);\n}\n.react-datepicker__day--highlighted-custom-1,\n.react-datepicker__month-text--highlighted-custom-1,\n.react-datepicker__quarter-text--highlighted-custom-1,\n.react-datepicker__year-text--highlighted-custom-1 {\n  color: magenta;\n}\n.react-datepicker__day--highlighted-custom-2,\n.react-datepicker__month-text--highlighted-custom-2,\n.react-datepicker__quarter-text--highlighted-custom-2,\n.react-datepicker__year-text--highlighted-custom-2 {\n  color: green;\n}\n.react-datepicker__day--holidays,\n.react-datepicker__month-text--holidays,\n.react-datepicker__quarter-text--holidays,\n.react-datepicker__year-text--holidays {\n  position: relative;\n  border-radius: 0.3rem;\n  background-color: #ff6803;\n  color: #fff;\n}\n.react-datepicker__day--holidays .overlay,\n.react-datepicker__month-text--holidays .overlay,\n.react-datepicker__quarter-text--holidays .overlay,\n.react-datepicker__year-text--holidays .overlay {\n  position: absolute;\n  bottom: 100%;\n  left: 50%;\n  transform: translateX(-50%);\n  background-color: #333;\n  color: #fff;\n  padding: 4px;\n  border-radius: 4px;\n  white-space: nowrap;\n  visibility: hidden;\n  opacity: 0;\n  transition: visibility 0s, opacity 0.3s ease-in-out;\n}\n.react-datepicker__day--holidays:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover {\n  background-color: rgb(207, 82.9642857143, 0);\n}\n.react-datepicker__day--holidays:hover .overlay,\n.react-datepicker__month-text--holidays:hover .overlay,\n.react-datepicker__quarter-text--holidays:hover .overlay,\n.react-datepicker__year-text--holidays:hover .overlay {\n  visibility: visible;\n  opacity: 1;\n}\n.react-datepicker__day--selected, .react-datepicker__day--in-selecting-range, .react-datepicker__day--in-range,\n.react-datepicker__month-text--selected,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--selected,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--selected,\n.react-datepicker__year-text--in-selecting-range,\n.react-datepicker__year-text--in-range {\n  border-radius: 0.3rem;\n  background-color: #216ba5;\n  color: #fff;\n}\n.react-datepicker__day--selected:not([aria-disabled=true]):hover, .react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover, .react-datepicker__day--in-range:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--selected:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover {\n  background-color: rgb(28.75, 93.2196969697, 143.75);\n}\n.react-datepicker__day--keyboard-selected,\n.react-datepicker__month-text--keyboard-selected,\n.react-datepicker__quarter-text--keyboard-selected,\n.react-datepicker__year-text--keyboard-selected {\n  border-radius: 0.3rem;\n  background-color: rgb(186.25, 217.0833333333, 241.25);\n  color: rgb(0, 0, 0);\n}\n.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover {\n  background-color: rgb(28.75, 93.2196969697, 143.75);\n}\n.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--in-range),\n.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--in-range),\n.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--in-range),\n.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--in-range) {\n  background-color: rgba(33, 107, 165, 0.5);\n}\n.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range), .react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range) {\n  background-color: #f0f0f0;\n  color: #000;\n}\n.react-datepicker__day--disabled,\n.react-datepicker__month-text--disabled,\n.react-datepicker__quarter-text--disabled,\n.react-datepicker__year-text--disabled {\n  cursor: default;\n  color: #ccc;\n}\n.react-datepicker__day--disabled .overlay,\n.react-datepicker__month-text--disabled .overlay,\n.react-datepicker__quarter-text--disabled .overlay,\n.react-datepicker__year-text--disabled .overlay {\n  position: absolute;\n  bottom: 70%;\n  left: 50%;\n  transform: translateX(-50%);\n  background-color: #333;\n  color: #fff;\n  padding: 4px;\n  border-radius: 4px;\n  white-space: nowrap;\n  visibility: hidden;\n  opacity: 0;\n  transition: visibility 0s, opacity 0.3s ease-in-out;\n}\n\n.react-datepicker__input-container {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n}\n.react-datepicker__input-container .react-datepicker__calendar-icon {\n  position: absolute;\n  padding: 0.5rem;\n  box-sizing: content-box;\n}\n\n.react-datepicker__view-calendar-icon input {\n  padding: 6px 10px 5px 25px;\n}\n\n.react-datepicker__year-read-view,\n.react-datepicker__month-read-view,\n.react-datepicker__month-year-read-view {\n  border: 1px solid transparent;\n  border-radius: 0.3rem;\n  position: relative;\n}\n.react-datepicker__year-read-view:hover,\n.react-datepicker__month-read-view:hover,\n.react-datepicker__month-year-read-view:hover {\n  cursor: pointer;\n}\n.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow {\n  border-top-color: rgb(178.5, 178.5, 178.5);\n}\n.react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n  transform: rotate(135deg);\n  right: -16px;\n  top: 0;\n}\n\n.react-datepicker__year-dropdown,\n.react-datepicker__month-dropdown,\n.react-datepicker__month-year-dropdown {\n  background-color: #f0f0f0;\n  position: absolute;\n  width: 50%;\n  left: 25%;\n  top: 30px;\n  z-index: 1;\n  text-align: center;\n  border-radius: 0.3rem;\n  border: 1px solid #aeaeae;\n}\n.react-datepicker__year-dropdown:hover,\n.react-datepicker__month-dropdown:hover,\n.react-datepicker__month-year-dropdown:hover {\n  cursor: pointer;\n}\n.react-datepicker__year-dropdown--scrollable,\n.react-datepicker__month-dropdown--scrollable,\n.react-datepicker__month-year-dropdown--scrollable {\n  height: 150px;\n  overflow-y: scroll;\n}\n\n.react-datepicker__year-option,\n.react-datepicker__month-option,\n.react-datepicker__month-year-option {\n  line-height: 20px;\n  width: 100%;\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n.react-datepicker__year-option:first-of-type,\n.react-datepicker__month-option:first-of-type,\n.react-datepicker__month-year-option:first-of-type {\n  border-top-left-radius: 0.3rem;\n  border-top-right-radius: 0.3rem;\n}\n.react-datepicker__year-option:last-of-type,\n.react-datepicker__month-option:last-of-type,\n.react-datepicker__month-year-option:last-of-type {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  border-bottom-left-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n.react-datepicker__year-option:hover,\n.react-datepicker__month-option:hover,\n.react-datepicker__month-year-option:hover {\n  background-color: #ccc;\n}\n.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,\n.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,\n.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming {\n  border-bottom-color: rgb(178.5, 178.5, 178.5);\n}\n.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,\n.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,\n.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous {\n  border-top-color: rgb(178.5, 178.5, 178.5);\n}\n.react-datepicker__year-option--selected,\n.react-datepicker__month-option--selected,\n.react-datepicker__month-year-option--selected {\n  position: absolute;\n  left: 15px;\n}\n\n.react-datepicker__close-icon {\n  cursor: pointer;\n  background-color: transparent;\n  border: 0;\n  outline: 0;\n  padding: 0 6px 0 0;\n  position: absolute;\n  top: 0;\n  right: 0;\n  height: 100%;\n  display: table-cell;\n  vertical-align: middle;\n}\n.react-datepicker__close-icon::after {\n  cursor: pointer;\n  background-color: #216ba5;\n  color: #fff;\n  border-radius: 50%;\n  height: 16px;\n  width: 16px;\n  padding: 2px;\n  font-size: 12px;\n  line-height: 1;\n  text-align: center;\n  display: table-cell;\n  vertical-align: middle;\n  content: \"×\";\n}\n.react-datepicker__close-icon--disabled {\n  cursor: default;\n}\n.react-datepicker__close-icon--disabled::after {\n  cursor: default;\n  background-color: #ccc;\n}\n\n.react-datepicker__today-button {\n  background: #f0f0f0;\n  border-top: 1px solid #aeaeae;\n  cursor: pointer;\n  text-align: center;\n  font-weight: bold;\n  padding: 5px 0;\n  clear: left;\n}\n\n.react-datepicker__portal {\n  position: fixed;\n  width: 100vw;\n  height: 100vh;\n  background-color: rgba(0, 0, 0, 0.8);\n  left: 0;\n  top: 0;\n  justify-content: center;\n  align-items: center;\n  display: flex;\n  z-index: 2147483647;\n}\n.react-datepicker__portal .react-datepicker__day-name,\n.react-datepicker__portal .react-datepicker__day,\n.react-datepicker__portal .react-datepicker__time-name {\n  width: 3rem;\n  line-height: 3rem;\n}\n@media (max-width: 400px), (max-height: 550px) {\n  .react-datepicker__portal .react-datepicker__day-name,\n  .react-datepicker__portal .react-datepicker__day,\n  .react-datepicker__portal .react-datepicker__time-name {\n    width: 2rem;\n    line-height: 2rem;\n  }\n}\n.react-datepicker__portal .react-datepicker__current-month,\n.react-datepicker__portal .react-datepicker-time__header {\n  font-size: 1.44rem;\n}\n\n.react-datepicker__children-container {\n  width: 13.8rem;\n  margin: 0.4rem;\n  padding-right: 0.2rem;\n  padding-left: 0.2rem;\n  height: auto;\n}\n\n.react-datepicker__aria-live {\n  position: absolute;\n  clip-path: circle(0);\n  border: 0;\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  width: 1px;\n  white-space: nowrap;\n}\n\n.react-datepicker__calendar-icon {\n  width: 1em;\n  height: 1em;\n  vertical-align: -0.125em;\n}\n","body {\r\n  margin: 0;\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\r\n    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\r\n    sans-serif;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\ncode {\r\n  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\r\n    monospace;\r\n}\r\n","/* src/components/Dashboard.css */\r\n.dashboard-container {\r\n    display: flex;\r\n    flex-direction: column;\r\n    height: 100vh;\r\n    background-color: #f5f5f5;\r\n  }\r\n  \r\n  .top-bar {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 10px 20px;\r\n    background-color: #fff;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    position: sticky;\r\n    top: 0;\r\n    z-index: 100;\r\n  }\r\n  \r\n  .search-container {\r\n    display: flex;\r\n    flex-grow: 1;\r\n    max-width: 600px;\r\n    margin: 0 auto;\r\n  }\r\n  \r\n  .search-input {\r\n    flex-grow: 1;\r\n    padding: 8px 15px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 20px 0 0 20px;\r\n    font-size: 16px;\r\n    outline: none;\r\n  }\r\n  \r\n  .search-button {\r\n    padding: 8px 15px;\r\n    background-color: #007bff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 0 20px 20px 0;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n  }\r\n  \r\n  .search-button:hover {\r\n    background-color: #0056b3;\r\n  }\r\n  \r\n  .user-info {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .user-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    object-fit: cover;\r\n  }\r\n  \r\n  .username {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .logout-button {\r\n    padding: 5px 10px;\r\n    background-color: #f8f9fa;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n    margin-left: 10px;\r\n  }\r\n  \r\n  .logout-button:hover {\r\n    background-color: #e9ecef;\r\n  }\r\n  \r\n  .nav-tabs {\r\n    display: flex;\r\n    background-color: #fff;\r\n    border-bottom: 1px solid #ddd;\r\n    padding: 0 20px;\r\n  }\r\n  \r\n  .tab-button {\r\n    padding: 12px 20px;\r\n    background: none;\r\n    border: none;\r\n    border-bottom: 3px solid transparent;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    color: #666;\r\n  }\r\n  \r\n  .tab-button:hover {\r\n    color: #007bff;\r\n  }\r\n  \r\n  .tab-button.active {\r\n    color: #007bff;\r\n    border-bottom-color: #007bff;\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .content-area {\r\n    flex-grow: 1;\r\n    padding: 20px;\r\n    background-color: #fff;\r\n    margin: 20px;\r\n    border-radius: 4px;\r\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n  }\r\n  \r\n  .loading, .error {\r\n    padding: 20px;\r\n    text-align: center;\r\n    font-size: 18px;\r\n  }\r\n  \r\n  .error {\r\n    color: #dc3545;\r\n  }\r\n\r\n/* 公告区样式 */\r\n  /* 轮播图样式 */\r\n.carousel-container {\r\n    position: relative;\r\n    width: 100%;\r\n    height: 200px;\r\n    overflow: hidden;\r\n    margin-bottom: 20px;\r\n    border-radius: 4px;\r\n  }\r\n  \r\n  .carousel-slide {\r\n    position: absolute;\r\n    width: 100%;\r\n    height: 100%;\r\n    opacity: 0;\r\n    transition: opacity 1s ease-in-out;\r\n  }\r\n  \r\n  .carousel-slide.active {\r\n    opacity: 1;\r\n  }\r\n  \r\n  .carousel-image {\r\n    width: 100%;\r\n    height: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-size: 24px;\r\n    font-weight: bold;\r\n    color: white;\r\n  }\r\n  \r\n  .gray-bg {\r\n    background-color: #666;\r\n  }\r\n  \r\n  .carousel-dots {\r\n    position: absolute;\r\n    bottom: 15px;\r\n    left: 0;\r\n    right: 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .dot {\r\n    width: 12px;\r\n    height: 12px;\r\n    border-radius: 50%;\r\n    background-color: rgba(255, 255, 255, 0.5);\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .dot.active {\r\n    background-color: white;\r\n  }\r\n  \r\n  /* 公告网格样式 */\r\n  .announcement-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\r\n    gap: 20px;\r\n  }\r\n  \r\n  .announcement-card {\r\n    background-color: white;\r\n    padding: 15px;\r\n    border-radius: 4px;\r\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n    transition: transform 0.2s, box-shadow 0.2s;\r\n  }\r\n  \r\n  .announcement-card:hover {\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n  }\r\n  \r\n  .announcement-card h3 {\r\n    margin-top: 0;\r\n    color: #007bff;\r\n    border-bottom: 1px solid #eee;\r\n    padding-bottom: 8px;\r\n  }\r\n  \r\n  .announcement-card p {\r\n    margin-bottom: 0;\r\n    color: #666;\r\n    line-height: 1.5;\r\n  }\r\n/* 分享区样式   */\r\n /* 上传头部样式 */\r\n.upload-header {\r\n  margin-bottom: 20px;\r\n  display: flex;\r\n  justify-content: flex-start;\r\n}\r\n\r\n.upload-btn {\r\n  padding: 10px 20px;\r\n  background: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  font-size: 16px;\r\n  cursor: pointer;\r\n  transition: all 0.3s;\r\n}\r\n\r\n.upload-btn:hover {\r\n  background: #40a9ff;\r\n}\r\n\r\n/* 弹窗样式 */\r\n.modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0,0,0,0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 1000;\r\n}\r\n\r\n.upload-modal {\r\n  background: white;\r\n  padding: 25px;\r\n  border-radius: 8px;\r\n  width: 500px;\r\n  max-width: 90%;\r\n  position: relative;\r\n}\r\n\r\n.close-btn {\r\n  position: absolute;\r\n  top: 15px;\r\n  right: 15px;\r\n  background: none;\r\n  border: none;\r\n  font-size: 20px;\r\n  cursor: pointer;\r\n}\r\n\r\n/* 表单样式 */\r\n.form-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.form-group label {\r\n  display: block;\r\n  margin-bottom: 5px;\r\n  font-weight: 500;\r\n}\r\n\r\n.form-group input[type=\"text\"],\r\n.form-group select,\r\n.form-group textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n}\r\n\r\n.form-group textarea {\r\n  min-height: 80px;\r\n}\r\n\r\n.form-actions {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: 10px;\r\n  margin-top: 20px;\r\n}\r\n\r\n.cancel-btn {\r\n  padding: 8px 15px;\r\n  background: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.cancel-btn:hover {\r\n  background: #e6e6e6;\r\n}\r\n  /* 筛选区域 */\r\n.filter-section {\r\n  background: #f9f9f9;\r\n  padding: 15px;\r\n  border-radius: 8px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.filter-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.filter-group h4 {\r\n  margin: 0 0 8px 0;\r\n  font-size: 15px;\r\n  color: #666;\r\n}\r\n\r\n/* 筛选按钮 */\r\n.filter-btn {\r\n  padding: 6px 12px;\r\n  margin-right: 8px;\r\n  margin-bottom: 8px;\r\n  border: 1px solid #ddd;\r\n  background: white;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: all 0.2s;\r\n}\r\n\r\n.filter-btn:hover {\r\n  border-color: #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n.filter-btn.active {\r\n  background: #1890ff;\r\n  color: white;\r\n  border-color: #1890ff;\r\n}\r\n\r\n/* 确定按钮 */\r\n.confirm-btn {\r\n  padding: 8px 20px;\r\n  background: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: opacity 0.3s;\r\n}\r\n\r\n.confirm-btn:hover {\r\n  background: #007bff;\r\n}\r\n\r\n.confirm-btn:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n}\r\n\r\n\r\n/* 资源列表 */\r\n.resource-list {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 15px;\r\n}\r\n\r\n.resource-item {\r\n  display: flex;\r\n  align-items: center;\r\n  padding: 15px;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n  transition: transform 0.2s, box-shadow 0.2s;\r\n}\r\n\r\n.resource-item:hover {\r\n  transform: translateY(-2px);\r\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.resource-poster {\r\n  margin-right: 15px;\r\n}\r\n\r\n.poster-image {\r\n  width: 60px;\r\n  height: 80px;\r\n  background-color: #666;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  color: white;\r\n  font-size: 24px;\r\n  font-weight: bold;\r\n  border-radius: 4px;\r\n}\r\n\r\n.resource-info {\r\n  flex-grow: 1;\r\n}\r\n\r\n.resource-title {\r\n  margin: 0 0 5px 0;\r\n  font-size: 16px;\r\n  font-weight: bold;\r\n}\r\n\r\n.resource-meta {\r\n  margin: 0;\r\n  font-size: 14px;\r\n  color: #666;\r\n}\r\n\r\n.resource-stats {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: flex-end;\r\n  margin-right: 20px;\r\n  min-width: 150px;\r\n}\r\n\r\n.stat {\r\n  font-size: 13px;\r\n  color: #666;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.download-btn {\r\n  padding: 8px 15px;\r\n  background-color: #28a745;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: background-color 0.2s;\r\n}\r\n\r\n.download-btn:hover {\r\n  background-color: #218838;\r\n}\r\n/* 发帖按钮样式 */\r\n.post-header {\r\n  margin-bottom: 20px;\r\n  text-align: right;\r\n}\r\n\r\n.create-post-btn {\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.create-post-btn:hover {\r\n  background-color: #40a9ff;\r\n}\r\n\r\n/* 弹窗样式 */\r\n.post-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 1000;\r\n}\r\n\r\n.post-modal {\r\n  background-color: white;\r\n  padding: 24px;\r\n  border-radius: 8px;\r\n  width: 500px;\r\n  max-width: 90%;\r\n  position: relative;\r\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n}\r\n\r\n.post-modal h3 {\r\n  margin-top: 0;\r\n  margin-bottom: 20px;\r\n  font-size: 18px;\r\n  color: #333;\r\n}\r\n\r\n.modal-close-btn {\r\n  position: absolute;\r\n  top: 16px;\r\n  right: 16px;\r\n  background: none;\r\n  border: none;\r\n  font-size: 20px;\r\n  cursor: pointer;\r\n  color: #999;\r\n}\r\n\r\n.modal-close-btn:hover {\r\n  color: #666;\r\n}\r\n\r\n/* 表单样式 */\r\n.form-group {\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.form-group label {\r\n  display: block;\r\n  margin-bottom: 8px;\r\n  font-weight: 500;\r\n  color: #333;\r\n}\r\n\r\n.form-group input[type=\"text\"],\r\n.form-group textarea {\r\n  width: 100%;\r\n  padding: 8px 12px;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n  font-size: 14px;\r\n}\r\n\r\n.form-group textarea {\r\n  min-height: 120px;\r\n  resize: vertical;\r\n}\r\n\r\n.upload-image-btn {\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.upload-image-btn label {\r\n  background-color: #f5f5f5;\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  border: 1px dashed #d9d9d9;\r\n  margin-right: 10px;\r\n  transition: all 0.3s;\r\n}\r\n\r\n.upload-image-btn label:hover {\r\n  border-color: #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n.image-name {\r\n  font-size: 14px;\r\n  color: #666;\r\n}\r\n\r\n/* 按钮样式 */\r\n.form-actions {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  margin-top: 24px;\r\n}\r\n\r\n.cancel-btn {\r\n  background-color: #f5f5f5;\r\n  color: #333;\r\n  border: none;\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  margin-right: 10px;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.cancel-btn:hover {\r\n  background-color: #e6e6e6;\r\n}\r\n\r\n.submit-btn {\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.submit-btn:hover {\r\n  background-color: #40a9ff;\r\n}\r\n\r\n.pagination {\r\n  display: flex;\r\n  justify-content: center;\r\n  margin: 20px 0;\r\n  gap: 5px;\r\n}\r\n\r\n.pagination button {\r\n  padding: 5px 10px;\r\n  border: 1px solid #ddd;\r\n  background: white;\r\n  cursor: pointer;\r\n}\r\n\r\n.pagination button.active {\r\n  background: #1890ff;\r\n  color: white;\r\n  border-color: #1890ff;\r\n}\r\n\r\n.pagination button:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.filter-section {\r\n  position: sticky;\r\n  top: 0;\r\n  background: white;\r\n  z-index: 100;\r\n  padding: 15px;\r\n  box-shadow: 0 2px 5px rgba(0,0,0,0.1);\r\n}\r\n\r\n.admin-center-btn {\r\n  padding: 5px 10px;\r\n  margin-right: 10px;\r\n  background-color: #ff5722;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n}\r\n\r\n.admin-center-btn:hover {\r\n  background-color: #e64a19;\r\n}\r\n\r\n/* 区域搜索容器样式 */\r\n.section-search-container {\r\n  display: flex;\r\n  margin-bottom: 20px;\r\n  gap: 10px;\r\n}\r\n\r\n.section-search-input {\r\n  flex: 1;\r\n  padding: 10px 15px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  font-size: 1rem;\r\n}\r\n\r\n.section-search-button {\r\n  padding: 10px 20px;\r\n  background-color: #007bff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.section-search-button:hover {\r\n  background-color: #0056b3;\r\n}\r\n\r\n/* 分享区顶部操作栏 */\r\n.share-top-actions {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  margin-bottom: 20px;\r\n  gap: 20px;\r\n}\r\n\r\n/* 上传按钮样式 */\r\n.upload-btn {\r\n  padding: 10px 20px;\r\n  background-color: #28a745;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n  white-space: nowrap;\r\n}\r\n\r\n.upload-btn:hover {\r\n  background-color: #218838;\r\n}\r\n\r\n/* 下载模态框样式 */\r\n.modal-overlay {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    right: 0;\r\n    bottom: 0;\r\n    background: rgba(0, 0, 0, 0.5);\r\n    z-index: 1000;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.download-modal {\r\n    background: white;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    width: 500px;\r\n    max-width: 90%;\r\n    position: relative;\r\n}\r\n\r\n.download-modal .close-btn {\r\n    position: absolute;\r\n    top: 10px;\r\n    right: 10px;\r\n    background: none;\r\n    border: none;\r\n    font-size: 20px;\r\n    cursor: pointer;\r\n}\r\n\r\n.download-modal .form-group {\r\n    margin-bottom: 15px;\r\n}\r\n\r\n.download-modal .form-group label {\r\n    display: block;\r\n    margin-bottom: 5px;\r\n}\r\n\r\n.download-modal .form-group input {\r\n    width: 100%;\r\n    padding: 8px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n}\r\n\r\n.progress-container {\r\n    margin: 15px 0;\r\n    background: #f0f0f0;\r\n    border-radius: 4px;\r\n    height: 20px;\r\n    overflow: hidden;\r\n}\r\n\r\n.progress-bar {\r\n    height: 100%;\r\n    background: #1890ff;\r\n    transition: width 0.3s;\r\n    color: white;\r\n    text-align: center;\r\n    font-size: 12px;\r\n    line-height: 20px;\r\n}\r\n\r\n.modal-actions {\r\n    display: flex;\r\n    justify-content: flex-end;\r\n    gap: 10px;\r\n    margin-top: 20px;\r\n}\r\n\r\n.modal-actions button {\r\n    padding: 8px 16px;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n}\r\n\r\n.modal-actions button:first-child {\r\n    background: #f5f5f5;\r\n    border: 1px solid #d9d9d9;\r\n}\r\n\r\n.modal-actions button:last-child {\r\n    background: #1890ff;\r\n    color: white;\r\n    border: none;\r\n}\r\n\r\n.modal-actions button:disabled {\r\n    background: #d9d9d9;\r\n    cursor: not-allowed;\r\n    opacity: 0.7;\r\n}\r\n\r\n/* 在Dashboard.css中添加以下样式 */\r\n\r\n.resource-actions {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-left: auto;\r\n}\r\n\r\n.delete-btn {\r\n  padding: 8px 15px;\r\n  background-color: #ff4d4f;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.delete-btn:hover {\r\n  background-color: #ff7875;\r\n}\r\n\r\n.delete-btn:disabled {\r\n  background-color: #d9d9d9;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.carousel-image {\r\n  padding: 1rem;\r\n  background: linear-gradient(to right, #f7b733, #fc4a1a);\r\n  color: white;\r\n  border-radius: 10px;\r\n  height: 180px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  align-items: center;\r\n  font-size: 18px;\r\n  transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.carousel-image h3 {\r\n  font-size: 22px;\r\n  margin: 0;\r\n}\r\n\r\n.carousel-image p {\r\n  margin: 4px 0;\r\n}\r\n\r\n\r\n/* 平台名称样式 */\r\n.platform-name {\r\n  flex: 1;\r\n  display: flex;\r\n  align-items: center;\r\n  padding-left: 20px;\r\n}\r\n\r\n.platform-name h2 {\r\n  margin: 0;\r\n  color: #333;\r\n  font-size: 24px;\r\n  font-weight: bold;\r\n}\r\n\r\n/* 分区搜索框样式 */\r\n.section-search-container {\r\n  padding: 10px 20px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.section-search-input {\r\n  width: 100%;\r\n  padding: 8px 15px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 20px;\r\n  font-size: 14px;\r\n  outline: none;\r\n}\r\n\r\n.section-search-input:focus {\r\n  border-color: #1890ff;\r\n}\r\n\r\n.no-results {\r\n  text-align: center;\r\n  padding: 20px;\r\n  color: #888;\r\n  font-size: 16px;\r\n}\r\n\r\n.reset-button {\r\n  padding: 8px 15px;\r\n  background-color: #f0f0f0;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.reset-button:hover {\r\n  background-color: #e0e0e0;\r\n}","/* Personal.css */\r\n.personal-container {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n  }\r\n  \r\n  .back-button {\r\n    background: none;\r\n    border: none;\r\n    color: #1890ff;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    margin-bottom: 20px;\r\n    padding: 5px 0;\r\n  }\r\n  \r\n  .profile-card {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .profile-header {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .profile-avatar {\r\n    width: 80px;\r\n    height: 80px;\r\n    border-radius: 50%;\r\n    margin-right: 20px;\r\n    object-fit: cover;\r\n  }\r\n  \r\n  .profile-info {\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .username {\r\n    font-size: 24px;\r\n    margin: 0 0 5px;\r\n  }\r\n  \r\n  .user-meta {\r\n    display: flex;\r\n    gap: 15px;\r\n    color: #666;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .stats-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(4, 1fr);\r\n    gap: 15px;\r\n  }\r\n  \r\n  .stat-item {\r\n    background: #f5f5f5;\r\n    border-radius: 6px;\r\n    padding: 15px;\r\n    text-align: center;\r\n  }\r\n  \r\n  .stat-label {\r\n    font-size: 14px;\r\n    color: #666;\r\n    margin-bottom: 5px;\r\n  }\r\n  \r\n  .stat-value {\r\n    font-size: 18px;\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .quota-card {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .quota-card h3 {\r\n    margin-top: 0;\r\n    margin-bottom: 15px;\r\n  }\r\n  \r\n  .quota-info {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .quota-used {\r\n    color: #1890ff;\r\n  }\r\n  \r\n  .quota-remaining {\r\n    color: #52c41a;\r\n  }\r\n  \r\n  .progress-bar {\r\n    height: 10px;\r\n    background: #f0f0f0;\r\n    border-radius: 5px;\r\n    margin-bottom: 10px;\r\n    overflow: hidden;\r\n  }\r\n  \r\n  .progress-fill {\r\n    height: 100%;\r\n    background: #1890ff;\r\n    border-radius: 5px;\r\n    transition: width 0.3s ease;\r\n  }\r\n  \r\n  .quota-total {\r\n    text-align: right;\r\n    color: #666;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .action-cards {\r\n    display: grid;\r\n    grid-template-columns: repeat(2, 1fr);\r\n    gap: 15px;\r\n  }\r\n  \r\n  .action-card {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n    cursor: pointer;\r\n    transition: transform 0.2s ease;\r\n  }\r\n  \r\n  .action-card:hover {\r\n    transform: translateY(-3px);\r\n    box-shadow: 0 4px 8px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .action-card h3 {\r\n    margin-top: 0;\r\n    color: #1890ff;\r\n  }\r\n  \r\n  .action-card p {\r\n    color: #666;\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .subpage-container {\r\n    margin-top: 20px;\r\n    border-top: 1px solid #f0f0f0;\r\n    padding-top: 20px;\r\n  }\r\n\r\n\r\n  /* Personal.css */\r\n/* ... 其他已有样式 ... */\r\n\r\n/* 下载进度卡片样式 */\r\n.progress-card {\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  padding: 20px;\r\n  margin-bottom: 20px;\r\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.download-task {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.task-info {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.task-id {\r\n  font-size: 14px;\r\n  color: #666;\r\n}\r\n\r\n.task-progress {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  color: #1890ff;\r\n}\r\n\r\n.progress-bar {\r\n  height: 8px;\r\n  background: #f0f0f0;\r\n  border-radius: 4px;\r\n  overflow: hidden;\r\n}\r\n\r\n.progress-fill {\r\n  height: 100%;\r\n  background: #1890ff;\r\n  border-radius: 4px;\r\n  transition: width 0.3s ease;\r\n}\r\n\r\n\r\n.user-meta span {\r\n  margin-right: 15px;\r\n  color: #666;\r\n}\r\n\r\n.user-meta span:last-child {\r\n  color: #ff9800;\r\n  font-weight: bold;\r\n}\r\n","/* src/components/AuthForm.css */\r\n.auth-container {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 100vh;\r\n    background-color: #f5f5f5;\r\n    padding: 20px;\r\n}\r\n\r\n.auth-title {\r\n    color: #333;\r\n    font-size: 2.5rem;\r\n    margin-bottom: 2rem;\r\n    text-align: center;\r\n}\r\n\r\n.auth-form-wrapper {\r\n    width: 100%;\r\n    max-width: 400px;\r\n    background: white;\r\n    padding: 2rem;\r\n    border-radius: 8px;\r\n    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.auth-form {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 1rem;\r\n}\r\n\r\n.auth-form h2 {\r\n    color: #333;\r\n    text-align: center;\r\n    margin-bottom: 1.5rem;\r\n}\r\n\r\n.form-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.5rem;\r\n}\r\n\r\n.form-group input {\r\n    padding: 0.8rem;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    font-size: 1rem;\r\n    width: 100%;\r\n    box-sizing: border-box; /* 确保padding不会影响宽度 */\r\n    height: 42px; /* 固定高度 */\r\n}\r\n\r\n.form-group input:focus {\r\n    outline: none;\r\n    border-color: #007bff;\r\n}\r\n\r\n.auth-button {\r\n    padding: 0.8rem;\r\n    background-color: #007bff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    font-size: 1rem;\r\n    cursor: pointer;\r\n    transition: background-color 0.3s;\r\n    height: 42px; /* 与输入框高度一致 */\r\n}\r\n\r\n.auth-button:hover {\r\n    background-color: #0056b3;\r\n}\r\n\r\n.auth-button:disabled {\r\n    background-color: #cccccc;\r\n    cursor: not-allowed;\r\n}\r\n\r\n.auth-switch {\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    gap: 0.5rem;\r\n    margin-top: 1rem;\r\n    font-size: 0.9rem;\r\n    color: #666;\r\n}\r\n\r\n.switch-button {\r\n    background: none;\r\n    border: none;\r\n    color: #007bff;\r\n    cursor: pointer;\r\n    text-decoration: underline;\r\n    font-size: 0.9rem;\r\n    padding: 0;\r\n}\r\n\r\n.switch-button:hover {\r\n    color: #0056b3;\r\n}\r\n\r\n.error-message {\r\n    color: #dc3545;\r\n    background-color: #f8d7da;\r\n    padding: 0.5rem;\r\n    border-radius: 4px;\r\n    text-align: center;\r\n    margin-bottom: 1rem;\r\n}",".announcement-container {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n  }\r\n  \r\n  .back-button {\r\n    background: none;\r\n    border: none;\r\n    color: #1890ff;\r\n    font-size: 16px;\r\n    cursor: pointer;\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .announcement-detail {\r\n    background: white;\r\n    padding: 25px;\r\n    border-radius: 8px;\r\n    box-shadow: 0 2px 10px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .announcement-header {\r\n    border-bottom: 1px solid #f0f0f0;\r\n    padding-bottom: 15px;\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .announcement-header h1 {\r\n    margin: 0 0 10px 0;\r\n    font-size: 24px;\r\n  }\r\n  \r\n  .announcement-meta {\r\n    display: flex;\r\n    gap: 15px;\r\n    color: #666;\r\n    font-size: 14px;\r\n    align-items: center;\r\n  }\r\n  \r\n  .category-badge {\r\n    background: #e6f7ff;\r\n    color: #1890ff;\r\n    padding: 2px 8px;\r\n    border-radius: 4px;\r\n    font-size: 12px;\r\n  }\r\n  \r\n  .announcement-content {\r\n    line-height: 1.8;\r\n    font-size: 15px;\r\n  }\r\n  \r\n  .announcement-content p {\r\n    margin: 0 0 16px 0;\r\n  }\r\n  \r\n  .error-message {\r\n    text-align: center;\r\n    padding: 50px;\r\n    color: #ff4d4f;\r\n    font-size: 16px;\r\n  }","/* 基础布局样式 */\r\n.torrent-detail-container {\r\n  max-width: 1000px;\r\n  margin: 0 auto;\r\n  padding: 20px;\r\n  color: #333;\r\n}\r\n\r\n.back-button {\r\n  background: none;\r\n  border: none;\r\n  color: #3498db;\r\n  font-size: 16px;\r\n  cursor: pointer;\r\n  margin-bottom: 20px;\r\n  padding: 5px 10px;\r\n}\r\n\r\n.back-button:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n/* 种子信息区域 */\r\n.torrent-main {\r\n  display: flex;\r\n  gap: 30px;\r\n  margin-bottom: 40px;\r\n}\r\n\r\n.torrent-cover {\r\n  flex: 0 0 300px;\r\n}\r\n\r\n.cover-placeholder {\r\n  width: 100%;\r\n  height: 450px;\r\n  background-color: #eee;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 72px;\r\n  color: #999;\r\n  border-radius: 5px;\r\n}\r\n\r\n.torrent-info {\r\n  flex: 1;\r\n}\r\n\r\n.torrent-title {\r\n  font-size: 28px;\r\n  margin-bottom: 20px;\r\n  color: #222;\r\n}\r\n\r\n.uploader-info {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 15px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.uploader-avatar {\r\n  width: 40px;\r\n  height: 40px;\r\n  border-radius: 50%;\r\n  background-color: #3498db;\r\n  color: white;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-weight: bold;\r\n}\r\n\r\n.uploader-details {\r\n  flex: 1;\r\n}\r\n\r\n.uploader-name {\r\n  font-weight: bold;\r\n}\r\n\r\n.upload-time {\r\n  font-size: 14px;\r\n  color: #777;\r\n}\r\n\r\n.torrent-meta {\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.torrent-meta p {\r\n  margin: 5px 0;\r\n}\r\n\r\n.torrent-description {\r\n  margin-bottom: 30px;\r\n  line-height: 1.6;\r\n}\r\n\r\n.interaction-buttons {\r\n  display: flex;\r\n  gap: 15px;\r\n}\r\n\r\n.interaction-buttons button {\r\n  padding: 8px 15px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: background-color 0.2s;\r\n}\r\n\r\n.like-button {\r\n  background-color: #f0f0f0;\r\n}\r\n\r\n.like-button:hover {\r\n  background-color: #e0e0e0;\r\n}\r\n\r\n.download-button {\r\n  background-color: #3498db;\r\n  color: white;\r\n}\r\n\r\n.download-button:hover {\r\n  background-color: #2980b9;\r\n}\r\n\r\n/* 评论区域样式 */\r\n.comments-section {\r\n  margin-top: 40px;\r\n}\r\n\r\n.comments-section h2 {\r\n  font-size: 22px;\r\n  margin-bottom: 20px;\r\n  padding-bottom: 10px;\r\n  border-bottom: 1px solid #eee;\r\n}\r\n\r\n.comment-form {\r\n  margin-bottom: 30px;\r\n}\r\n\r\n.comment-form textarea {\r\n  width: 100%;\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  margin-bottom: 10px;\r\n  resize: vertical;\r\n  min-height: 80px;\r\n}\r\n\r\n.comment-form button {\r\n  background-color: #3498db;\r\n  color: white;\r\n  border: none;\r\n  padding: 8px 15px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.comment-form button:hover {\r\n  background-color: #2980b9;\r\n}\r\n\r\n.comment-list {\r\n  margin-top: 20px;\r\n}\r\n\r\n/* 评论项统一样式 */\r\n.comment-container {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.comment-item {\r\n  display: flex;\r\n  gap: 15px;\r\n  padding: 12px;\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  border: 1px solid #eaeaea;\r\n}\r\n\r\n/* 副评论统一缩进 */\r\n.comment-container.is-reply {\r\n  margin-left: 40px;\r\n  position: relative;\r\n}\r\n\r\n/* 副评论连接线 */\r\n.comment-container.is-reply:before {\r\n  content: \"\";\r\n  position: absolute;\r\n  left: -20px;\r\n  top: 20px;\r\n  width: 15px;\r\n  height: 1px;\r\n  background: #ddd;\r\n}\r\n\r\n.comment-avatar {\r\n  flex: 0 0 40px;\r\n  height: 40px;\r\n  border-radius: 50%;\r\n  background-color: #e74c3c;\r\n  color: white;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-weight: bold;\r\n}\r\n\r\n.comment-content {\r\n  flex: 1;\r\n}\r\n\r\n.comment-header {\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.comment-user {\r\n  font-weight: bold;\r\n  margin-right: 10px;\r\n}\r\n\r\n.reply-to {\r\n  color: #666;\r\n  font-size: 14px;\r\n  margin: 0 5px;\r\n}\r\n\r\n.comment-time {\r\n  font-size: 14px;\r\n  color: #777;\r\n}\r\n\r\n.comment-text {\r\n  margin-bottom: 10px;\r\n  line-height: 1.5;\r\n}\r\n\r\n.comment-actions {\r\n  display: flex;\r\n  gap: 15px;\r\n}\r\n\r\n.comment-actions button {\r\n  background: none;\r\n  border: none;\r\n  color: #3498db;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  padding: 0;\r\n}\r\n\r\n.comment-actions button:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n/* 回复列表容器 */\r\n.replies-container {\r\n  margin-top: 15px;\r\n}\r\n\r\n/* 副评论背景色 */\r\n.comment-container.is-reply .comment-item {\r\n  background: #f9f9f9;\r\n}\r\n\r\n/* 回复表单样式 */\r\n.reply-form {\r\n  margin-top: 15px;\r\n}\r\n\r\n.reply-form textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  margin-bottom: 10px;\r\n  resize: vertical;\r\n  min-height: 60px;\r\n}\r\n\r\n.reply-actions {\r\n  display: flex;\r\n  gap: 10px;\r\n  justify-content: flex-end;\r\n}\r\n\r\n.reply-actions button {\r\n  padding: 5px 10px;\r\n  border: none;\r\n  border-radius: 3px;\r\n  cursor: pointer;\r\n  font-size: 13px;\r\n}\r\n\r\n.reply-actions button[type=\"button\"] {\r\n  background-color: #f0f0f0;\r\n}\r\n\r\n.reply-actions button[type=\"submit\"] {\r\n  background-color: #3498db;\r\n  color: white;\r\n}\r\n\r\n/* 加载和错误状态 */\r\n.loading {\r\n  text-align: center;\r\n  padding: 50px;\r\n  font-size: 18px;\r\n}\r\n\r\n.error {\r\n  color: #e74c3c;\r\n  text-align: center;\r\n  padding: 50px;\r\n  font-size: 18px;\r\n}\r\n/* 回复表单样式 */\r\n.reply-form {\r\n  margin-left: 50px;\r\n  margin-top: 10px;\r\n  background: #f5f5f5;\r\n  padding: 10px;\r\n  border-radius: 4px;\r\n}\r\n\r\n.reply-form textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n}\r\n\r\n.reply-form-buttons {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-top: 8px;\r\n}\r\n\r\n.reply-form-buttons button {\r\n  padding: 5px 10px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.reply-form-buttons button[type=\"submit\"] {\r\n  background-color: #1890ff;\r\n  color: white;\r\n}\r\n\r\n.reply-form-buttons .cancel-reply {\r\n  background-color: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n}\r\n\r\n.comment-list {\r\n  margin-top: 20px;\r\n  border-top: 1px solid #eee;\r\n  padding-top: 20px;\r\n}\r\n\r\n.reply-form {\r\n  margin-left: 50px;\r\n  margin-top: 10px;\r\n  margin-bottom: 15px;\r\n  background: #f9f9f9;\r\n  padding: 12px;\r\n  border-radius: 6px;\r\n  border: 1px solid #eee;\r\n}\r\n\r\n.reply-form.nested-reply {\r\n  margin-left: 80px;\r\n}\r\n\r\n.reply-form textarea {\r\n  width: 100%;\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n  min-height: 60px;\r\n  font-family: inherit;\r\n  font-size: 14px;\r\n}\r\n\r\n.reply-form-buttons {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-top: 10px;\r\n}\r\n\r\n.reply-form-buttons button {\r\n  padding: 6px 12px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 13px;\r\n  transition: all 0.2s;\r\n}\r\n\r\n.reply-form-buttons button[type=\"submit\"] {\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border: none;\r\n}\r\n\r\n.reply-form-buttons button[type=\"submit\"]:hover {\r\n  background-color: #40a9ff;\r\n}\r\n\r\n.reply-form-buttons .cancel-reply {\r\n  background-color: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n  color: #666;\r\n}\r\n\r\n.reply-form-buttons .cancel-reply:hover {\r\n  background-color: #e8e8e8;\r\n}\r\n\r\n/* 回复弹窗样式 */\r\n.reply-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 1000;\r\n}\r\n\r\n.reply-modal {\r\n  background: white;\r\n  border-radius: 8px;\r\n  width: 90%;\r\n  max-width: 500px;\r\n  padding: 20px;\r\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.modal-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.modal-header h3 {\r\n  margin: 0;\r\n  font-size: 18px;\r\n}\r\n\r\n.close-modal {\r\n  background: none;\r\n  border: none;\r\n  font-size: 24px;\r\n  cursor: pointer;\r\n  color: #666;\r\n}\r\n\r\n.reply-modal textarea {\r\n  width: 100%;\r\n  padding: 12px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n  min-height: 120px;\r\n  font-size: 14px;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.modal-actions {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: 10px;\r\n}\r\n\r\n.modal-actions button {\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n}\r\n\r\n.cancel-btn {\r\n  background: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n  color: #666;\r\n}\r\n\r\n.cancel-btn:hover {\r\n  background: #e8e8e8;\r\n}\r\n\r\n.submit-btn {\r\n  background: #1890ff;\r\n  color: white;\r\n  border: none;\r\n}\r\n\r\n.submit-btn:hover {\r\n  background: #40a9ff;\r\n}\r\n","/* RequestDetail.css */\r\n.request-detail-container {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n  }\r\n  \r\n  .back-button {\r\n    background: none;\r\n    border: none;\r\n    color: #1890ff;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    margin-bottom: 20px;\r\n    padding: 5px 0;\r\n  }\r\n  \r\n  .request-post {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .post-header {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-bottom: 15px;\r\n  }\r\n  \r\n  .post-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    margin-right: 10px;\r\n  }\r\n  \r\n  .post-meta {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n  \r\n  .post-author {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .post-date {\r\n    color: #888;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .post-title {\r\n    font-size: 20px;\r\n    margin: 0 0 15px;\r\n  }\r\n  \r\n  .post-content {\r\n    line-height: 1.6;\r\n    margin-bottom: 15px;\r\n  }\r\n  \r\n  .post-actions {\r\n    display: flex;\r\n    gap: 15px;\r\n  }\r\n  \r\n  .like-button, .favorite-button {\r\n    padding: 5px 15px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    background: #f5f5f5;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .like-button.liked {\r\n    background: #e6f7ff;\r\n    border-color: #91d5ff;\r\n    color: #1890ff;\r\n  }\r\n  \r\n  .favorite-button.favorited {\r\n    background: #fff7e6;\r\n    border-color: #ffd591;\r\n    color: #fa8c16;\r\n  }\r\n  \r\n  .comments-section {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .comment-form {\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .comment-form textarea {\r\n    width: 100%;\r\n    padding: 10px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    resize: vertical;\r\n    min-height: 80px;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .form-actions {\r\n    display: flex;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .submit-comment, .submit-torrent {\r\n    padding: 8px 16px;\r\n    border-radius: 4px;\r\n    border: none;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .submit-comment {\r\n    background: #1890ff;\r\n    color: white;\r\n  }\r\n  \r\n  .submit-torrent {\r\n    background: #52c41a;\r\n    color: white;\r\n  }\r\n  \r\n  .comment-list {\r\n    margin-top: 20px;\r\n  }\r\n  \r\n  .comment-item {\r\n    display: flex;\r\n    padding: 15px 0;\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n  \r\n  .comment-item:last-child {\r\n    border-bottom: none;\r\n  }\r\n  \r\n  .comment-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    margin-right: 15px;\r\n    flex-shrink: 0;\r\n  }\r\n  \r\n  .comment-content {\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .comment-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    margin-bottom: 8px;\r\n  }\r\n  \r\n  .comment-author {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .comment-date {\r\n    color: #888;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .comment-text {\r\n    line-height: 1.6;\r\n    margin-bottom: 8px;\r\n  }\r\n  \r\n  .torrent-comment {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n    padding: 8px;\r\n    background: #f0f8ff;\r\n    border-radius: 4px;\r\n  }\r\n  \r\n  .torrent-title {\r\n    color: #1890ff;\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .torrent-size {\r\n    color: #666;\r\n    margin: 0 15px;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .download-torrent {\r\n    background: #1890ff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    padding: 5px 10px;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .comment-like {\r\n    background: none;\r\n    border: none;\r\n    color: #666;\r\n    cursor: pointer;\r\n    font-size: 14px;\r\n    padding: 0;\r\n  }","/* HelpDetail.css */\r\n.help-detail-container {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n  }\r\n  \r\n  .back-button {\r\n    background: none;\r\n    border: none;\r\n    color: #1890ff;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    margin-bottom: 20px;\r\n    padding: 5px 0;\r\n  }\r\n  \r\n  .help-post {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .help-post.solved {\r\n    border-left: 4px solid #52c41a;\r\n  }\r\n  \r\n  .post-header {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-bottom: 15px;\r\n    position: relative;\r\n  }\r\n  \r\n  .post-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    margin-right: 10px;\r\n  }\r\n  \r\n  .post-meta {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n  \r\n  .post-author {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .post-date {\r\n    color: #888;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .solved-badge {\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    background: #52c41a;\r\n    color: white;\r\n    padding: 2px 8px;\r\n    border-radius: 4px;\r\n    font-size: 12px;\r\n  }\r\n  \r\n  .post-title {\r\n    font-size: 20px;\r\n    margin: 0 0 15px;\r\n  }\r\n  \r\n  .post-content {\r\n    line-height: 1.6;\r\n    margin-bottom: 15px;\r\n  }\r\n  \r\n  .post-actions {\r\n    display: flex;\r\n    gap: 15px;\r\n  }\r\n  \r\n  .like-button, .favorite-button, .solve-button {\r\n    padding: 5px 15px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    background: #f5f5f5;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .like-button.liked {\r\n    background: #e6f7ff;\r\n    border-color: #91d5ff;\r\n    color: #1890ff;\r\n  }\r\n  \r\n  .favorite-button.favorited {\r\n    background: #fff7e6;\r\n    border-color: #ffd591;\r\n    color: #fa8c16;\r\n  }\r\n  \r\n  .solve-button.solved {\r\n    background: #f6ffed;\r\n    border-color: #b7eb8f;\r\n    color: #52c41a;\r\n  }\r\n  \r\n  .comments-section {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .comment-form {\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .comment-form textarea {\r\n    width: 100%;\r\n    padding: 10px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    resize: vertical;\r\n    min-height: 80px;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .image-upload {\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .upload-button {\r\n    background: #f5f5f5;\r\n    border: 1px dashed #d9d9d9;\r\n    border-radius: 4px;\r\n    padding: 8px 16px;\r\n    cursor: pointer;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .image-preview {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .preview-item {\r\n    position: relative;\r\n    width: 100px;\r\n    height: 100px;\r\n  }\r\n  \r\n  .preview-item img {\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: cover;\r\n    border-radius: 4px;\r\n  }\r\n  \r\n  .remove-image {\r\n    position: absolute;\r\n    top: -8px;\r\n    right: -8px;\r\n    width: 20px;\r\n    height: 20px;\r\n    background: #ff4d4f;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 50%;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-size: 12px;\r\n  }\r\n  \r\n  .submit-button {\r\n    background: #1890ff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    padding: 8px 16px;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .comment-list {\r\n    margin-top: 20px;\r\n  }\r\n  \r\n  .comment-item {\r\n    display: flex;\r\n    padding: 15px 0;\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n  \r\n  .comment-item:last-child {\r\n    border-bottom: none;\r\n  }\r\n  \r\n  .comment-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    margin-right: 15px;\r\n    flex-shrink: 0;\r\n  }\r\n  \r\n  .comment-content {\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .comment-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    margin-bottom: 8px;\r\n  }\r\n  \r\n  .comment-author {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .comment-date {\r\n    color: #888;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .comment-text {\r\n    line-height: 1.6;\r\n    margin-bottom: 8px;\r\n  }\r\n  \r\n  .comment-images {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .comment-image {\r\n    max-width: 200px;\r\n    max-height: 150px;\r\n    border-radius: 4px;\r\n  }\r\n  \r\n  .comment-actions {\r\n    margin-top: 10px;\r\n  }\r\n  \r\n  .reply-form {\r\n    margin-top: 10px;\r\n    display: flex;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .reply-form textarea {\r\n    flex-grow: 1;\r\n    padding: 8px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    resize: vertical;\r\n    min-height: 40px;\r\n  }\r\n  \r\n  .submit-reply {\r\n    background: #f5f5f5;\r\n    border: 1px solid #d9d9d9;\r\n    border-radius: 4px;\r\n    padding: 0 15px;\r\n    cursor: pointer;\r\n    align-self: flex-end;\r\n    margin-bottom: 5px;\r\n  }\r\n  \r\n  .reply-list {\r\n    margin-top: 10px;\r\n    padding-left: 15px;\r\n    border-left: 2px solid #f0f0f0;\r\n  }\r\n  \r\n  .reply-item {\r\n    display: flex;\r\n    margin-top: 10px;\r\n  }\r\n  \r\n  .reply-avatar {\r\n    width: 30px;\r\n    height: 30px;\r\n    border-radius: 50%;\r\n    margin-right: 10px;\r\n  }\r\n  \r\n  .reply-content {\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .reply-header {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 5px;\r\n  }\r\n  \r\n  .reply-author {\r\n    font-weight: bold;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .reply-date {\r\n    color: #888;\r\n    font-size: 12px;\r\n  }\r\n  \r\n  .reply-text {\r\n    font-size: 14px;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  /* 评论项样式 */\r\n.comment-item {\r\n  display: flex;\r\n  margin-bottom: 20px;\r\n  padding: 15px;\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n}\r\n\r\n.comment-avatar {\r\n  width: 40px;\r\n  height: 40px;\r\n  border-radius: 50%;\r\n  margin-right: 15px;\r\n  object-fit: cover;\r\n}\r\n\r\n.comment-content {\r\n  flex: 1;\r\n}\r\n\r\n.comment-header {\r\n  display: flex;\r\n  align-items: center;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.comment-author {\r\n  font-weight: bold;\r\n  margin-right: 10px;\r\n  color: #333;\r\n}\r\n\r\n.comment-date {\r\n  font-size: 12px;\r\n  color: #999;\r\n}\r\n\r\n.comment-text {\r\n  margin-bottom: 10px;\r\n  line-height: 1.5;\r\n  color: #333;\r\n}\r\n\r\n.comment-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  margin-top: 10px;\r\n}\r\n\r\n.like-button {\r\n  background: none;\r\n  border: none;\r\n  cursor: pointer;\r\n  color: #666;\r\n  font-size: 14px;\r\n  padding: 4px 8px;\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.like-button.liked {\r\n  color: #1877f2;\r\n}\r\n\r\n.like-button:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n/* 回复控制按钮 */\r\n.reply-controls {\r\n  margin: 10px 0;\r\n}\r\n\r\n.toggle-replies-btn {\r\n  background: none;\r\n  border: none;\r\n  color: #666;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  padding: 4px 8px;\r\n}\r\n\r\n.toggle-replies-btn:hover {\r\n  color: #333;\r\n  text-decoration: underline;\r\n}\r\n\r\n.toggle-replies-btn:disabled {\r\n  color: #ccc;\r\n  cursor: not-allowed;\r\n}\r\n\r\n/* 回复表单 */\r\n.reply-form {\r\n  margin-top: 10px;\r\n  width: 100%;\r\n}\r\n\r\n.reply-form textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n  min-height: 60px;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.submit-reply {\r\n  background-color: #f0f2f5;\r\n  border: none;\r\n  border-radius: 4px;\r\n  padding: 6px 12px;\r\n  cursor: pointer;\r\n  color: #333;\r\n}\r\n\r\n.submit-reply:hover {\r\n  background-color: #e4e6eb;\r\n}\r\n\r\n/* 回复列表 */\r\n.reply-list {\r\n  margin-left: 55px; /* 头像宽度 + 边距 */\r\n  border-left: 2px solid #eee;\r\n  padding-left: 15px;\r\n  margin-top: 15px;\r\n}\r\n\r\n.reply-item {\r\n  display: flex;\r\n  margin-bottom: 15px;\r\n  padding: 12px;\r\n  background: #f9f9f9;\r\n  border-radius: 6px;\r\n}\r\n\r\n.reply-avatar {\r\n  width: 32px;\r\n  height: 32px;\r\n  border-radius: 50%;\r\n  margin-right: 10px;\r\n  object-fit: cover;\r\n}\r\n\r\n.reply-content {\r\n  flex: 1;\r\n}\r\n\r\n.reply-header {\r\n  display: flex;\r\n  align-items: center;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.reply-author {\r\n  font-weight: bold;\r\n  margin-right: 8px;\r\n  font-size: 14px;\r\n  color: #333;\r\n}\r\n\r\n.reply-date {\r\n  font-size: 12px;\r\n  color: #999;\r\n}\r\n\r\n.reply-text {\r\n  font-size: 14px;\r\n  line-height: 1.4;\r\n  color: #333;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.reply-actions {\r\n  margin-top: 5px;\r\n}\r\n\r\n/* 回复弹窗样式 */\r\n.reply-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 1000;\r\n}\r\n\r\n.reply-modal {\r\n  background: white;\r\n  padding: 20px;\r\n  border-radius: 8px;\r\n  width: 500px;\r\n  max-width: 90%;\r\n}\r\n\r\n.reply-modal h3 {\r\n  margin-top: 0;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.reply-modal textarea {\r\n  width: 100%;\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n  min-height: 100px;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.modal-actions {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: 10px;\r\n}\r\n\r\n.cancel-button {\r\n  background: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n  padding: 8px 16px;\r\n  cursor: pointer;\r\n}\r\n\r\n.submit-button {\r\n  background: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  padding: 8px 16px;\r\n  cursor: pointer;\r\n}\r\n\r\n.post-image-container {\r\n  width: 100%;\r\n  max-width: 500px; /* 最大宽度 */\r\n  margin: 10px 0;\r\n}\r\n\r\n.post-image {\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: 400px; /* 最大高度 */\r\n  object-fit: contain; /* 保持比例完整显示图片 */\r\n  border-radius: 4px;\r\n}\r\n\r\n.comment-image-container {\r\n  width: 100%;\r\n  max-width: 500px; /* 最大宽度 */\r\n  margin: 10px 0;\r\n}\r\n\r\n.comment-image {\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: 400px; /* 最大高度 */\r\n  object-fit: contain; /* 保持比例完整显示图片 */\r\n  border-radius: 4px;\r\n}\r\n\r\n","/* 上传记录表格样式 */\r\n.uploads-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  margin-top: 20px;\r\n}\r\n\r\n.uploads-table th, .uploads-table td {\r\n  padding: 12px 15px;\r\n  text-align: left;\r\n  border-bottom: 1px solid #e0e0e0;\r\n}\r\n\r\n.uploads-table th {\r\n  background-color: #f5f5f5;\r\n  font-weight: 600;\r\n}\r\n\r\n.list-item:hover {\r\n  background-color: #f9f9f9;\r\n}\r\n\r\n/* 操作按钮样式 */\r\n.action-btn {\r\n  padding: 6px 12px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: background-color 0.2s;\r\n}\r\n\r\n.delete-btn {\r\n  background-color: #ff4d4f;\r\n  color: white;\r\n}\r\n\r\n.delete-btn:hover {\r\n  background-color: #ff7875;\r\n}\r\n\r\n/* 分页控件样式 */\r\n.pagination {\r\n  margin-top: 20px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  gap: 15px;\r\n}\r\n\r\n.pagination button {\r\n  padding: 6px 12px;\r\n  border: 1px solid #d9d9d9;\r\n  background-color: #fff;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.pagination button:disabled {\r\n  color: #d9d9d9;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.pagination button:not(:disabled):hover {\r\n  border-color: #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n/* 分页控件样式 */\r\n.pagination {\r\n  margin-top: 20px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  gap: 8px;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.page-nav, .page-number {\r\n  padding: 6px 12px;\r\n  border: 1px solid #d9d9d9;\r\n  background-color: #fff;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  min-width: 32px;\r\n  text-align: center;\r\n}\r\n\r\n.page-nav:disabled, .page-number:disabled {\r\n  color: #d9d9d9;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.page-nav:not(:disabled):hover, \r\n.page-number:not(:disabled):hover {\r\n  border-color: #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n.page-number.active {\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border-color: #1890ff;\r\n}\r\n\r\n.ellipsis {\r\n  padding: 0 8px;\r\n}\r\n\r\n.page-info {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  margin-left: 15px;\r\n}\r\n\r\n.page-info input {\r\n  width: 50px;\r\n  padding: 4px;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n  text-align: center;\r\n}\r\n\r\n.page-info input:focus {\r\n  outline: none;\r\n  border-color: #1890ff;\r\n}\r\n\r\n/* 调整表格列宽 */\r\n.uploads-table th:nth-child(1),\r\n.uploads-table td:nth-child(1) {\r\n  width: 30%;\r\n}\r\n\r\n.uploads-table th:nth-child(2),\r\n.uploads-table td:nth-child(2) {\r\n  width: 15%;\r\n}\r\n\r\n.uploads-table th:nth-child(3),\r\n.uploads-table td:nth-child(3) {\r\n  width: 20%;\r\n}\r\n\r\n.uploads-table th:nth-child(4),\r\n.uploads-table td:nth-child(4) {\r\n  width: 15%;\r\n  text-align: center;\r\n}\r\n\r\n.uploads-table th:nth-child(5),\r\n.uploads-table td:nth-child(5) {\r\n  width: 20%;\r\n  text-align: center;\r\n}\r\n\r\n/* 兑换区样式 */\r\n.exchange-section {\r\n  margin-top: 20px;\r\n  padding: 20px;\r\n  background-color: #f9f9f9;\r\n  border-radius: 8px;\r\n}\r\n\r\n.exchange-card {\r\n  margin-bottom: 20px;\r\n  padding: 15px;\r\n  background-color: white;\r\n  border-radius: 6px;\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.exchange-card h4 {\r\n  margin-top: 0;\r\n  color: #333;\r\n}\r\n\r\n.exchange-card p {\r\n  color: #666;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.exchange-btn {\r\n  padding: 8px 16px;\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.exchange-btn:hover {\r\n  background-color: #40a9ff;\r\n}\r\n\r\n.exchange-btn:disabled {\r\n  background-color: #d9d9d9;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.exchange-input-group {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-top: 10px;\r\n}\r\n\r\n.exchange-input-group input {\r\n  flex: 1;\r\n  padding: 8px;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n}\r\n\r\n.invite-code-list {\r\n  margin-top: 20px;\r\n}\r\n\r\n.invite-code-list ul {\r\n  list-style: none;\r\n  padding: 0;\r\n}\r\n\r\n.invite-code-list li {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  padding: 10px;\r\n  border-bottom: 1px solid #eee;\r\n}\r\n\r\n.invite-code-list .code {\r\n  font-family: monospace;\r\n}\r\n\r\n.invite-code-list .status {\r\n  padding: 2px 6px;\r\n  border-radius: 3px;\r\n  font-size: 12px;\r\n}\r\n\r\n.invite-code-list .status.available {\r\n  background-color: #f6ffed;\r\n  color: #52c41a;\r\n  border: 1px solid #b7eb8f;\r\n}\r\n\r\n.invite-code-list .status.used {\r\n  background-color: #fff2f0;\r\n  color: #ff4d4f;\r\n  border: 1px solid #ffccc7;\r\n}\r\n\r\n\r\n/* personalSubpage.css 中添加以下样式 */\r\n\r\n.setting-section {\r\n  max-width: 600px;\r\n  margin: 0 auto;\r\n  padding: 20px;\r\n}\r\n\r\n.user-info-card, .password-form-card {\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  padding: 20px;\r\n  margin-bottom: 20px;\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.info-item {\r\n  display: flex;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.info-item label {\r\n  font-weight: bold;\r\n  width: 100px;\r\n}\r\n\r\n.info-item span {\r\n  flex: 1;\r\n}\r\n\r\n.info-note {\r\n  color: #666;\r\n  font-size: 0.9em;\r\n  margin-top: 10px;\r\n}\r\n\r\n.form-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.form-group label {\r\n  display: block;\r\n  margin-bottom: 5px;\r\n  font-weight: bold;\r\n}\r\n\r\n.form-group input {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.submit-button {\r\n  background-color: #4CAF50;\r\n  color: white;\r\n  padding: 10px 15px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 16px;\r\n}\r\n\r\n.submit-button:hover {\r\n  background-color: #45a049;\r\n}\r\n\r\n.submit-button:disabled {\r\n  background-color: #cccccc;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.error-message {\r\n  color: #f44336;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.success-message {\r\n  color: #4CAF50;\r\n  margin-bottom: 15px;\r\n}",".administer-container {\r\n  padding: 20px;\r\n  max-width: 1200px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.search-container {\r\n  margin-bottom: 20px;\r\n  display: flex;\r\n  gap: 10px;\r\n}\r\n\r\n.search-input {\r\n  padding: 8px;\r\n  border: 1px solid #ccc;\r\n  border-radius: 4px;\r\n  flex-grow: 1;\r\n  max-width: 300px;\r\n}\r\n\r\n.search-button, .reset-button {\r\n  padding: 8px 16px;\r\n  background-color: #4CAF50;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.reset-button {\r\n  background-color: #f44336;\r\n}\r\n\r\n.error-message {\r\n  color: #f44336;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.loading-message {\r\n  color: #2196F3;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.user-list-container {\r\n  overflow-x: auto;\r\n}\r\n\r\n.user-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n}\r\n\r\n.user-table th, .user-table td {\r\n  border: 1px solid #ddd;\r\n  padding: 8px;\r\n  text-align: left;\r\n}\r\n\r\n.user-table th {\r\n  background-color: #f2f2f2;\r\n}\r\n\r\n.user-table tr:nth-child(even) {\r\n  background-color: #f9f9f9;\r\n}\r\n\r\n.user-table tr:hover {\r\n  background-color: #f1f1f1;\r\n}\r\n\r\n.authority-select {\r\n  padding: 5px;\r\n  border-radius: 4px;\r\n  border: 1px solid #ccc;\r\n}\r\n\r\n/* 选项卡样式 */\r\n.tab-container {\r\n  display: flex;\r\n  margin-bottom: 20px;\r\n  border-bottom: 1px solid #ddd;\r\n}\r\n\r\n.tab-button {\r\n  padding: 10px 20px;\r\n  background: none;\r\n  border: none;\r\n  cursor: pointer;\r\n  font-size: 16px;\r\n  border-bottom: 3px solid transparent;\r\n}\r\n\r\n.tab-button.active {\r\n  border-bottom: 3px solid #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n/* 折扣卡片样式 */\r\n.current-discount-card {\r\n  background-color: #f5f5f5;\r\n  padding: 15px;\r\n  border-radius: 5px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n/* 折扣表单样式 */\r\n.add-discount-form {\r\n  background-color: #f9f9f9;\r\n  padding: 20px;\r\n  border-radius: 5px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.form-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.form-group label {\r\n  display: inline-block;\r\n  width: 100px;\r\n  margin-right: 10px;\r\n}\r\n\r\n/* 折扣表格样式 */\r\n.discount-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n}\r\n\r\n.discount-table th, .discount-table td {\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  text-align: left;\r\n}\r\n\r\n.discount-table th {\r\n  background-color: #f2f2f2;\r\n}\r\n\r\n.delete-button {\r\n  background-color: #ff4d4f;\r\n  color: white;\r\n  border: none;\r\n  padding: 5px 10px;\r\n  border-radius: 3px;\r\n  cursor: pointer;\r\n}\r\n\r\n.delete-button:hover {\r\n  background-color: #ff7875;\r\n}\r\n\r\n.react-datepicker {\r\n  font-size: 14px;\r\n}\r\n\r\n.react-datepicker__time-container {\r\n  width: 120px;\r\n}\r\n\r\n.react-datepicker-time__header {\r\n  font-size: 13px;\r\n}\r\n\r\n.time-preview {\r\n  margin: 10px 0;\r\n  padding: 10px;\r\n  background: #f5f5f5;\r\n  border-radius: 4px;\r\n}\r\n\r\n/* 公告表单样式 */\r\n.announcement-form {\r\n  padding: 20px;\r\n  background: #f5f5f5;\r\n  border-radius: 8px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.announcement-form .form-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.announcement-form label {\r\n  display: block;\r\n  margin-bottom: 5px;\r\n  font-weight: bold;\r\n}\r\n\r\n.announcement-form input[type=\"text\"],\r\n.announcement-form textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n}\r\n\r\n.announcement-form textarea {\r\n  min-height: 100px;\r\n}\r\n\r\n/* 公告列表样式 */\r\n.announcement-list-container {\r\n  margin-top: 20px;\r\n}\r\n\r\n.announcement-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n}\r\n\r\n.announcement-table th,\r\n.announcement-table td {\r\n  padding: 12px;\r\n  text-align: left;\r\n  border-bottom: 1px solid #ddd;\r\n}\r\n\r\n.announcement-table th {\r\n  background-color: #f2f2f2;\r\n  font-weight: bold;\r\n}\r\n\r\n.announcement-table tr:hover {\r\n  background-color: #f9f9f9;\r\n}",".App {\r\n  text-align: center;\r\n}\r\n\r\n.App-logo {\r\n  height: 40vmin;\r\n  pointer-events: none;\r\n}\r\n\r\n@media (prefers-reduced-motion: no-preference) {\r\n  .App-logo {\r\n    animation: App-logo-spin infinite 20s linear;\r\n  }\r\n}\r\n\r\n.App-header {\r\n  background-color: #282c34;\r\n  min-height: 10%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: calc(10px + 2vmin);\r\n  color: white;\r\n}\r\n\r\n.App-link {\r\n  color: #61dafb;\r\n}\r\n\r\n@keyframes App-logo-spin {\r\n  from {\r\n    transform: rotate(0deg);\r\n  }\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/static/js/845.116b9008.chunk.js b/build/static/js/845.116b9008.chunk.js
new file mode 100644
index 0000000..6a7ec66
--- /dev/null
+++ b/build/static/js/845.116b9008.chunk.js
@@ -0,0 +1,2 @@
+"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[845],{845:(e,t,n)=>{n.r(t),n.d(t,{getCLS:()=>y,getFCP:()=>g,getFID:()=>C,getLCP:()=>P,getTTFB:()=>D});var i,r,a,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,d=function(){return"hidden"===document.visibilityState?0:1/0},p=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=d(),p(),s((function(){setTimeout((function(){v=d(),p()}),0)}))),{get firstHiddenTime(){return v}}},g=function(e,t){var n,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=e.startTime,r.entries.push(e),n(!0)))},o=window.performance&&performance.getEntriesByName&&performance.getEntriesByName("first-contentful-paint")[0],f=o?null:c("paint",a);(o||f)&&(n=m(e,r,t),o&&a(o),s((function(i){r=u("FCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,n(!0)}))}))})))},h=!1,T=-1,y=function(e,t){h||(g((function(e){T=e.value})),h=!0);var n,i=function(t){T>-1&&e(t)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},d=c("layout-shift",v);d&&(n=m(i,r,t),f((function(){d.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r<a-w){var e={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+r};o.forEach((function(t){t(e)})),o=[]}},b=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},C=function(e,t){var n,a=l(),v=u("FID"),d=function(e){e.startTime<a.firstHiddenTime&&(v.value=e.processingStart-e.startTime,v.entries.push(e),n(!0))},p=c("first-input",d);n=m(e,v,t),p&&f((function(){p.takeRecords().map(d),p.disconnect()}),!0),p&&s((function(){var a;v=u("FID"),n=m(e,v,t),o=[],r=-1,i=null,F(addEventListener),a=d,o.push(a),S()}))},k={},P=function(e,t){var n,i=l(),r=u("LCP"),a=function(e){var t=e.startTime;t<i.firstHiddenTime&&(r.value=t,r.entries.push(e),n())},o=c("largest-contentful-paint",a);if(o){n=m(e,r,t);var v=function(){k[r.id]||(o.takeRecords().map(a),o.disconnect(),k[r.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),f(v,!0),s((function(i){r=u("LCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,k[r.id]=!0,n(!0)}))}))}))}},D=function(e){var t,n=u("TTFB");t=function(){try{var t=performance.getEntriesByType("navigation")[0]||function(){var e=performance.timing,t={entryType:"navigation",startTime:0};for(var n in e)"navigationStart"!==n&&"toJSON"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]);
+//# sourceMappingURL=845.116b9008.chunk.js.map
\ No newline at end of file
diff --git a/build/static/js/845.116b9008.chunk.js.map b/build/static/js/845.116b9008.chunk.js.map
new file mode 100644
index 0000000..37233f7
--- /dev/null
+++ b/build/static/js/845.116b9008.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/js/845.116b9008.chunk.js","mappings":"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","sources":["../node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,t,n,i,r=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v2-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},a=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},u=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},c=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},f=-1,s=function(){return\"hidden\"===document.visibilityState?0:1/0},m=function(){o((function(e){var t=e.timeStamp;f=t}),!0)},v=function(){return f<0&&(f=s(),m(),u((function(){setTimeout((function(){f=s(),m()}),0)}))),{get firstHiddenTime(){return f}}},d=function(e,t){var n,i=v(),o=r(\"FCP\"),f=function(e){\"first-contentful-paint\"===e.name&&(m&&m.disconnect(),e.startTime<i.firstHiddenTime&&(o.value=e.startTime,o.entries.push(e),n(!0)))},s=window.performance&&performance.getEntriesByName&&performance.getEntriesByName(\"first-contentful-paint\")[0],m=s?null:a(\"paint\",f);(s||m)&&(n=c(e,o,t),s&&f(s),u((function(i){o=r(\"FCP\"),n=c(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-i.timeStamp,n(!0)}))}))})))},p=!1,l=-1,h=function(e,t){p||(d((function(e){l=e.value})),p=!0);var n,i=function(t){l>-1&&e(t)},f=r(\"CLS\",0),s=0,m=[],v=function(e){if(!e.hadRecentInput){var t=m[0],i=m[m.length-1];s&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(s+=e.value,m.push(e)):(s=e.value,m=[e]),s>f.value&&(f.value=s,f.entries=m,n())}},h=a(\"layout-shift\",v);h&&(n=c(i,f,t),o((function(){h.takeRecords().map(v),n(!0)})),u((function(){s=0,l=-1,f=r(\"CLS\",0),n=c(i,f,t)})))},T={passive:!0,capture:!0},y=new Date,g=function(i,r){e||(e=r,t=i,n=new Date,w(removeEventListener),E())},E=function(){if(t>=0&&t<n-y){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+t};i.forEach((function(e){e(r)})),i=[]}},S=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){g(e,t),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",n,T),removeEventListener(\"pointercancel\",i,T)};addEventListener(\"pointerup\",n,T),addEventListener(\"pointercancel\",i,T)}(t,e):g(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,S,T)}))},L=function(n,f){var s,m=v(),d=r(\"FID\"),p=function(e){e.startTime<m.firstHiddenTime&&(d.value=e.processingStart-e.startTime,d.entries.push(e),s(!0))},l=a(\"first-input\",p);s=c(n,d,f),l&&o((function(){l.takeRecords().map(p),l.disconnect()}),!0),l&&u((function(){var a;d=r(\"FID\"),s=c(n,d,f),i=[],t=-1,e=null,w(addEventListener),a=p,i.push(a),E()}))},b={},F=function(e,t){var n,i=v(),f=r(\"LCP\"),s=function(e){var t=e.startTime;t<i.firstHiddenTime&&(f.value=t,f.entries.push(e),n())},m=a(\"largest-contentful-paint\",s);if(m){n=c(e,f,t);var d=function(){b[f.id]||(m.takeRecords().map(s),m.disconnect(),b[f.id]=!0,n(!0))};[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,d,{once:!0,capture:!0})})),o(d,!0),u((function(i){f=r(\"LCP\"),n=c(e,f,t),requestAnimationFrame((function(){requestAnimationFrame((function(){f.value=performance.now()-i.timeStamp,b[f.id]=!0,n(!0)}))}))}))}},P=function(e){var t,n=r(\"TTFB\");t=function(){try{var t=performance.getEntriesByType(\"navigation\")[0]||function(){var e=performance.timing,t={entryType:\"navigation\",startTime:0};for(var n in e)\"navigationStart\"!==n&&\"toJSON\"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},\"complete\"===document.readyState?setTimeout(t,0):addEventListener(\"load\",(function(){return setTimeout(t,0)}))};export{h as getCLS,d as getFCP,L as getFID,F as getLCP,P as getTTFB};\n"],"names":["e","t","n","i","r","name","value","delta","entries","id","concat","Date","now","Math","floor","random","a","PerformanceObserver","supportedEntryTypes","includes","self","getEntries","map","observe","type","buffered","o","document","visibilityState","removeEventListener","addEventListener","u","persisted","c","f","s","m","timeStamp","v","setTimeout","firstHiddenTime","d","disconnect","startTime","push","window","performance","getEntriesByName","requestAnimationFrame","p","l","h","hadRecentInput","length","takeRecords","T","passive","capture","y","g","w","E","entryType","target","cancelable","processingStart","forEach","S","L","b","F","once","P","getEntriesByType","timing","max","navigationStart","responseStart","readyState"],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/static/js/main.dd76cdc0.js b/build/static/js/main.dd76cdc0.js
new file mode 100644
index 0000000..d77b8d8
--- /dev/null
+++ b/build/static/js/main.dd76cdc0.js
@@ -0,0 +1,3 @@
+/*! 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
\ No newline at end of file
diff --git a/build/static/js/main.dd76cdc0.js.LICENSE.txt b/build/static/js/main.dd76cdc0.js.LICENSE.txt
new file mode 100644
index 0000000..a13d5de
--- /dev/null
+++ b/build/static/js/main.dd76cdc0.js.LICENSE.txt
@@ -0,0 +1,116 @@
+/*!
+	Copyright (c) 2018 Jed Watson.
+	Licensed under the MIT License (MIT), see
+	http://jedwatson.github.io/classnames
+*/
+
+/*!
+  react-datepicker v8.3.0
+  https://github.com/Hacker0x01/react-datepicker
+  Released under the MIT License.
+*/
+
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <https://feross.org>
+ * @license  MIT
+ */
+
+/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
+
+/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
+
+/**
+ * @license React
+ * react-dom-client.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-dom.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-jsx-runtime.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * scheduler.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @remix-run/router v1.23.0
+ *
+ * Copyright (c) Remix Software Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */
+
+/**
+ * React Router v6.30.0
+ *
+ * Copyright (c) Remix Software Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */
+
+/**![check-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0xOTMuNSAzMDEuN2wtMjEwLjYgMjkyYTMxLjggMzEuOCAwIDAxLTUxLjcgMEwzMTguNSA0ODQuOWMtMy44LTUuMyAwLTEyLjcgNi41LTEyLjdoNDYuOWMxMC4yIDAgMTkuOSA0LjkgMjUuOSAxMy4zbDcxLjIgOTguOCAxNTcuMi0yMThjNi04LjMgMTUuNi0xMy4zIDI1LjktMTMuM0g2OTljNi41IDAgMTAuMyA3LjQgNi41IDEyLjd6IiAvPjwvc3ZnPg==) */
+
+/**![close-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNTEyIDY0YzI0Ny40IDAgNDQ4IDIwMC42IDQ0OCA0NDhTNzU5LjQgOTYwIDUxMiA5NjAgNjQgNzU5LjQgNjQgNTEyIDI2NC42IDY0IDUxMiA2NHptMTI3Ljk4IDI3NC44MmgtLjA0bC0uMDguMDZMNTEyIDQ2Ni43NSAzODQuMTQgMzM4Ljg4Yy0uMDQtLjA1LS4wNi0uMDYtLjA4LS4wNmEuMTIuMTIgMCAwMC0uMDcgMGMtLjAzIDAtLjA1LjAxLS4wOS4wNWwtNDUuMDIgNDUuMDJhLjIuMiAwIDAwLS4wNS4wOS4xMi4xMiAwIDAwMCAuMDd2LjAyYS4yNy4yNyAwIDAwLjA2LjA2TDQ2Ni43NSA1MTIgMzM4Ljg4IDYzOS44NmMtLjA1LjA0LS4wNi4wNi0uMDYuMDhhLjEyLjEyIDAgMDAwIC4wN2MwIC4wMy4wMS4wNS4wNS4wOWw0NS4wMiA0NS4wMmEuMi4yIDAgMDAuMDkuMDUuMTIuMTIgMCAwMC4wNyAwYy4wMiAwIC4wNC0uMDEuMDgtLjA1TDUxMiA1NTcuMjVsMTI3Ljg2IDEyNy44N2MuMDQuMDQuMDYuMDUuMDguMDVhLjEyLjEyIDAgMDAuMDcgMGMuMDMgMCAuMDUtLjAxLjA5LS4wNWw0NS4wMi00NS4wMmEuMi4yIDAgMDAuMDUtLjA5LjEyLjEyIDAgMDAwLS4wN3YtLjAyYS4yNy4yNyAwIDAwLS4wNS0uMDZMNTU3LjI1IDUxMmwxMjcuODctMTI3Ljg2Yy4wNC0uMDQuMDUtLjA2LjA1LS4wOGEuMTIuMTIgMCAwMDAtLjA3YzAtLjAzLS4wMS0uMDUtLjA1LS4wOWwtNDUuMDItNDUuMDJhLjIuMiAwIDAwLS4wOS0uMDUuMTIuMTIgMCAwMC0uMDcgMHoiIC8+PC9zdmc+) */
+
+/**![close](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNzk5Ljg2IDE2Ni4zMWMuMDIgMCAuMDQuMDIuMDguMDZsNTcuNjkgNTcuN2MuMDQuMDMuMDUuMDUuMDYuMDhhLjEyLjEyIDAgMDEwIC4wNmMwIC4wMy0uMDIuMDUtLjA2LjA5TDU2OS45MyA1MTJsMjg3LjcgMjg3LjdjLjA0LjA0LjA1LjA2LjA2LjA5YS4xMi4xMiAwIDAxMCAuMDdjMCAuMDItLjAyLjA0LS4wNi4wOGwtNTcuNyA1Ny42OWMtLjAzLjA0LS4wNS4wNS0uMDcuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMyAwLS4wNS0uMDItLjA5LS4wNkw1MTIgNTY5LjkzbC0yODcuNyAyODcuN2MtLjA0LjA0LS4wNi4wNS0uMDkuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMiAwLS4wNC0uMDItLjA4LS4wNmwtNTcuNjktNTcuN2MtLjA0LS4wMy0uMDUtLjA1LS4wNi0uMDdhLjEyLjEyIDAgMDEwLS4wN2MwLS4wMy4wMi0uMDUuMDYtLjA5TDQ1NC4wNyA1MTJsLTI4Ny43LTI4Ny43Yy0uMDQtLjA0LS4wNS0uMDYtLjA2LS4wOWEuMTIuMTIgMCAwMTAtLjA3YzAtLjAyLjAyLS4wNC4wNi0uMDhsNTcuNy01Ny42OWMuMDMtLjA0LjA1LS4wNS4wNy0uMDZhLjEyLjEyIDAgMDEuMDcgMGMuMDMgMCAuMDUuMDIuMDkuMDZMNTEyIDQ1NC4wN2wyODcuNy0yODcuN2MuMDQtLjA0LjA2LS4wNS4wOS0uMDZhLjEyLjEyIDAgMDEuMDcgMHoiIC8+PC9zdmc+) */
+
+/**![exclamation-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0tMzIgMjMyYzAtNC40IDMuNi04IDgtOGg0OGM0LjQgMCA4IDMuNiA4IDh2MjcyYzAgNC40LTMuNiA4LTggOGgtNDhjLTQuNCAwLTgtMy42LTgtOFYyOTZ6bTMyIDQ0MGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */
+
+/**![info-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0zMiA2NjRjMCA0LjQtMy42IDgtOCA4aC00OGMtNC40IDAtOC0zLjYtOC04VjQ1NmMwLTQuNCAzLjYtOCA4LThoNDhjNC40IDAgOCAzLjYgOCA4djI3MnptLTMyLTM0NGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */
+
+/**![loading](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk4OCA1NDhjLTE5LjkgMC0zNi0xNi4xLTM2LTM2IDAtNTkuNC0xMS42LTExNy0zNC42LTE3MS4zYTQ0MC40NSA0NDAuNDUgMCAwMC05NC4zLTEzOS45IDQzNy43MSA0MzcuNzEgMCAwMC0xMzkuOS05NC4zQzYyOSA4My42IDU3MS40IDcyIDUxMiA3MmMtMTkuOSAwLTM2LTE2LjEtMzYtMzZzMTYuMS0zNiAzNi0zNmM2OS4xIDAgMTM2LjIgMTMuNSAxOTkuMyA0MC4zQzc3Mi4zIDY2IDgyNyAxMDMgODc0IDE1MGM0NyA0NyA4My45IDEwMS44IDEwOS43IDE2Mi43IDI2LjcgNjMuMSA0MC4yIDEzMC4yIDQwLjIgMTk5LjMuMSAxOS45LTE2IDM2LTM1LjkgMzZ6IiAvPjwvc3ZnPg==) */
diff --git a/build/static/js/main.dd76cdc0.js.map b/build/static/js/main.dd76cdc0.js.map
new file mode 100644
index 0000000..165778f
--- /dev/null
+++ b/build/static/js/main.dd76cdc0.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/js/main.dd76cdc0.js","mappings":"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","sources":["../node_modules/classnames/index.js","../node_modules/rc-util/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/base64-js/index.js","../node_modules/process/browser.js","../node_modules/buffer/index.js","../node_modules/react/index.js","../node_modules/react-dom/cjs/react-dom-client.production.js","../node_modules/scheduler/index.js","../node_modules/react/cjs/react.production.js","../node_modules/scheduler/cjs/scheduler.production.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/jsx-runtime.js","../node_modules/react-dom/client.js","../node_modules/rc-util/node_modules/react-is/index.js","../node_modules/react-dom/cjs/react-dom.production.js","../node_modules/ieee754/index.js","../node_modules/react-dom/index.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/deprecations.ts","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/@babel/runtime/helpers/esm/OverloadYield.js","../node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js","../node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js","../node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js","../node_modules/@babel/runtime/helpers/esm/asyncIterator.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","api/auth.js","api/torrent.js","api/helpPost.js","api/requestPost.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/antd/es/app/context.js","../node_modules/antd/es/config-provider/context.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@emotion/hash/dist/hash.browser.esm.js","../node_modules/rc-util/es/Dom/canUseDom.js","../node_modules/rc-util/es/Dom/dynamicCSS.js","../node_modules/rc-util/es/Dom/contains.js","../node_modules/rc-util/es/hooks/useMemo.js","../node_modules/rc-util/es/warning.js","../node_modules/rc-util/es/isEqual.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@ant-design/cssinjs/es/Cache.js","../node_modules/@ant-design/cssinjs/es/StyleContext.js","../node_modules/@ant-design/cssinjs/es/theme/calc/CSSCalculator.js","../node_modules/@ant-design/cssinjs/es/theme/ThemeCache.js","../node_modules/@ant-design/cssinjs/es/theme/Theme.js","../node_modules/@ant-design/cssinjs/es/theme/createTheme.js","../node_modules/@ant-design/cssinjs/es/util/index.js","../node_modules/@ant-design/cssinjs/es/util/css-variables.js","../node_modules/rc-util/es/hooks/useLayoutEffect.js","../node_modules/@ant-design/cssinjs/es/hooks/useCompatibleInsertionEffect.js","../node_modules/@ant-design/cssinjs/es/hooks/useEffectCleanupRegister.js","../node_modules/@ant-design/cssinjs/es/hooks/useHMR.js","../node_modules/@ant-design/cssinjs/es/hooks/useGlobalCache.js","../node_modules/@ant-design/cssinjs/es/hooks/useCacheToken.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/@ant-design/cssinjs/es/util/cacheMapUtil.js","../node_modules/@ant-design/cssinjs/es/hooks/useStyleRegister.js","../node_modules/@ant-design/cssinjs/es/hooks/useCSSVarRegister.js","../node_modules/@ant-design/cssinjs/es/extractStyle.js","../node_modules/@ant-design/cssinjs/es/Keyframes.js","../node_modules/@ant-design/cssinjs/es/transformers/legacyLogicalProperties.js","../node_modules/@ant-design/icons/es/components/Context.js","../node_modules/rc-util/es/utils/get.js","../node_modules/rc-util/es/utils/set.js","../node_modules/@babel/runtime/helpers/esm/toArray.js","../node_modules/antd/es/_util/warning.js","../node_modules/antd/es/form/validateMessagesContext.js","../node_modules/rc-pagination/es/locale/en_US.js","../node_modules/rc-picker/es/locale/en_US.js","../node_modules/rc-picker/es/locale/common.js","../node_modules/antd/es/time-picker/locale/en_US.js","../node_modules/antd/es/date-picker/locale/en_US.js","../node_modules/antd/es/locale/en_US.js","../node_modules/antd/es/modal/locale.js","../node_modules/antd/es/locale/context.js","../node_modules/antd/es/locale/index.js","../node_modules/@ant-design/fast-color/es/FastColor.js","../node_modules/@ant-design/colors/es/generate.js","../node_modules/@ant-design/colors/es/presets.js","../node_modules/antd/es/theme/themes/seed.js","../node_modules/antd/es/theme/themes/shared/genRadius.js","../node_modules/antd/es/theme/themes/shared/genControlHeight.js","../node_modules/antd/es/theme/themes/shared/genFontMapToken.js","../node_modules/antd/es/theme/themes/shared/genFontSizes.js","../node_modules/antd/es/theme/themes/default/colorAlgorithm.js","../node_modules/antd/es/theme/themes/default/colors.js","../node_modules/antd/es/theme/themes/default/theme.js","../node_modules/antd/es/theme/themes/default/index.js","../node_modules/antd/es/theme/themes/shared/genColorMapToken.js","../node_modules/antd/es/theme/themes/shared/genSizeMapToken.js","../node_modules/antd/es/theme/themes/shared/genCommonMapToken.js","../node_modules/antd/es/theme/context.js","../node_modules/antd/es/config-provider/cssVariables.js","../node_modules/antd/es/config-provider/DisabledContext.js","../node_modules/antd/es/config-provider/SizeContext.js","../node_modules/antd/es/config-provider/hooks/useConfig.js","../node_modules/antd/es/config-provider/hooks/useThemeKey.js","../node_modules/rc-util/es/Dom/findDOMNode.js","../node_modules/rc-util/es/React/isFragment.js","../node_modules/rc-util/es/ref.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/rc-motion/es/context.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/rc-motion/es/DomWrapper.js","../node_modules/rc-util/es/hooks/useEvent.js","../node_modules/rc-util/es/hooks/useState.js","../node_modules/rc-motion/es/interface.js","../node_modules/rc-motion/es/util/motion.js","../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js","../node_modules/rc-util/es/raf.js","../node_modules/rc-motion/es/hooks/useStepQueue.js","../node_modules/rc-motion/es/hooks/useNextFrame.js","../node_modules/rc-motion/es/hooks/useStatus.js","../node_modules/rc-util/es/hooks/useSyncState.js","../node_modules/rc-motion/es/hooks/useDomMotionEvents.js","../node_modules/rc-motion/es/CSSMotion.js","../node_modules/rc-motion/es/util/diff.js","../node_modules/rc-motion/es/CSSMotionList.js","../node_modules/antd/es/theme/util/getAlphaColor.js","../node_modules/antd/es/theme/util/alias.js","../node_modules/antd/es/theme/useToken.js","../node_modules/antd/es/version/version.js","../node_modules/antd/es/config-provider/MotionWrapper.js","../node_modules/antd/es/config-provider/PropWarning.js","../node_modules/antd/es/style/index.js","../node_modules/antd/es/theme/util/useResetIconStyle.js","../node_modules/antd/es/config-provider/index.js","../node_modules/antd/es/config-provider/hooks/useTheme.js","../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/rc-util/es/React/render.js","../node_modules/antd/es/config-provider/UnstableContext.js","../node_modules/@ant-design/icons-svg/es/asn/CheckCircleFilled.js","../node_modules/rc-util/es/Dom/shadow.js","../node_modules/@ant-design/icons/es/utils.js","../node_modules/@ant-design/icons/es/components/IconBase.js","../node_modules/@ant-design/icons/es/components/twoTonePrimaryColor.js","../node_modules/@ant-design/icons/es/components/AntdIcon.js","../node_modules/@ant-design/icons/es/icons/CheckCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/CloseCircleFilled.js","../node_modules/@ant-design/icons/es/icons/CloseCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/ExclamationCircleFilled.js","../node_modules/@ant-design/icons/es/icons/ExclamationCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/InfoCircleFilled.js","../node_modules/@ant-design/icons/es/icons/InfoCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/LoadingOutlined.js","../node_modules/@ant-design/icons/es/icons/LoadingOutlined.js","../node_modules/rc-util/es/KeyCode.js","../node_modules/rc-util/es/pickAttrs.js","../node_modules/rc-notification/es/Notice.js","../node_modules/rc-notification/es/NotificationProvider.js","../node_modules/rc-notification/es/hooks/useStack.js","../node_modules/rc-notification/es/NoticeList.js","../node_modules/rc-notification/es/Notifications.js","../node_modules/rc-notification/es/hooks/useNotification.js","../node_modules/antd/es/config-provider/hooks/useCSSVarCls.js","../node_modules/@ant-design/cssinjs-utils/es/util/calc/calculator.js","../node_modules/@ant-design/cssinjs-utils/es/util/calc/CSSCalculator.js","../node_modules/@ant-design/cssinjs-utils/es/util/calc/NumCalculator.js","../node_modules/@ant-design/cssinjs-utils/es/util/calc/index.js","../node_modules/@ant-design/cssinjs-utils/es/util/getCompVarPrefix.js","../node_modules/@ant-design/cssinjs-utils/es/util/getComponentToken.js","../node_modules/@ant-design/cssinjs-utils/es/util/statistic.js","../node_modules/@ant-design/cssinjs-utils/es/util/getDefaultComponentToken.js","../node_modules/@ant-design/cssinjs-utils/es/util/maxmin.js","../node_modules/@ant-design/cssinjs-utils/es/_util/hooks/useUniqueMemo.js","../node_modules/@ant-design/cssinjs-utils/es/hooks/useCSP.js","../node_modules/@ant-design/cssinjs-utils/es/util/genStyleUtils.js","../node_modules/antd/es/theme/util/genStyleUtils.js","../node_modules/antd/es/message/style/index.js","../node_modules/antd/es/_util/hooks/useZIndex.js","../node_modules/antd/es/message/PurePanel.js","../node_modules/@ant-design/icons-svg/es/asn/CloseOutlined.js","../node_modules/@ant-design/icons/es/icons/CloseOutlined.js","../node_modules/antd/es/message/util.js","../node_modules/antd/es/message/useMessage.js","../node_modules/antd/es/message/index.js","api/administer.js","components/Dashboard.jsx","api/announcement.js","api/personal.js","components/Personal/Personal.jsx","components/AuthForm.jsx","components/AnnouncementDetail.jsx","components/TorrentDetail.jsx","api/torrentComment.js","components/RequestDetail.jsx","api/requestComment.js","components/HelpDetail.jsx","api/helpComment.js","components/Personal/Exchange.jsx","components/Personal/Upload.jsx","components/Personal/Notice.jsx","components/Personal/Setting.jsx","../node_modules/clsx/dist/clsx.mjs","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/parseISO.js","../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../node_modules/date-fns/locale/en-US/_lib/localize.js","../node_modules/date-fns/locale/_lib/buildMatchFn.js","../node_modules/date-fns/locale/en-US/_lib/match.js","../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../node_modules/date-fns/locale/en-US.js","../node_modules/date-fns/_lib/format/longFormatters.js","../node_modules/date-fns/_lib/protectedTokens.js","../node_modules/date-fns/_lib/defaultOptions.js","../node_modules/date-fns/getDefaultOptions.js","../node_modules/date-fns/transpose.js","../node_modules/date-fns/parse/_lib/Setter.js","../node_modules/date-fns/parse/_lib/Parser.js","../node_modules/date-fns/parse/_lib/constants.js","../node_modules/date-fns/parse/_lib/utils.js","../node_modules/date-fns/startOfWeek.js","../node_modules/date-fns/getWeekYear.js","../node_modules/date-fns/startOfISOWeek.js","../node_modules/date-fns/startOfWeekYear.js","../node_modules/date-fns/getWeek.js","../node_modules/date-fns/setWeek.js","../node_modules/date-fns/getISOWeekYear.js","../node_modules/date-fns/startOfISOWeekYear.js","../node_modules/date-fns/getISOWeek.js","../node_modules/date-fns/setISOWeek.js","../node_modules/date-fns/parse/_lib/parsers/DateParser.js","../node_modules/date-fns/addDays.js","../node_modules/date-fns/setDay.js","../node_modules/date-fns/getISODay.js","../node_modules/date-fns/setISODay.js","../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../node_modules/date-fns/parse/_lib/parsers.js","../node_modules/date-fns/parse/_lib/parsers/EraParser.js","../node_modules/date-fns/parse/_lib/parsers/YearParser.js","../node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js","../node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js","../node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js","../node_modules/date-fns/parse/_lib/parsers/QuarterParser.js","../node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js","../node_modules/date-fns/parse/_lib/parsers/MonthParser.js","../node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js","../node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js","../node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js","../node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js","../node_modules/date-fns/parse/_lib/parsers/DayParser.js","../node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js","../node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js","../node_modules/date-fns/parse/_lib/parsers/ISODayParser.js","../node_modules/date-fns/parse/_lib/parsers/AMPMParser.js","../node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js","../node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js","../node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js","../node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js","../node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js","../node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js","../node_modules/date-fns/parse/_lib/parsers/MinuteParser.js","../node_modules/date-fns/parse/_lib/parsers/SecondParser.js","../node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js","../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js","../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js","../node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js","../node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js","../node_modules/date-fns/parse.js","../node_modules/date-fns/isDate.js","../node_modules/date-fns/isValid.js","../node_modules/date-fns/isBefore.js","../node_modules/date-fns/_lib/normalizeDates.js","../node_modules/date-fns/startOfDay.js","../node_modules/date-fns/differenceInCalendarDays.js","../node_modules/date-fns/startOfYear.js","../node_modules/date-fns/getDayOfYear.js","../node_modules/date-fns/_lib/addLeadingZeros.js","../node_modules/date-fns/_lib/format/lightFormatters.js","../node_modules/date-fns/_lib/format/formatters.js","../node_modules/date-fns/format.js","../node_modules/date-fns/setHours.js","../node_modules/date-fns/setMinutes.js","../node_modules/date-fns/setSeconds.js","../node_modules/date-fns/startOfMonth.js","../node_modules/date-fns/startOfQuarter.js","../node_modules/date-fns/endOfDay.js","../node_modules/date-fns/endOfWeek.js","../node_modules/date-fns/endOfMonth.js","../node_modules/date-fns/isSameYear.js","../node_modules/date-fns/isSameMonth.js","../node_modules/date-fns/isSameQuarter.js","../node_modules/date-fns/isSameDay.js","../node_modules/date-fns/isEqual.js","../node_modules/date-fns/isWithinInterval.js","../node_modules/date-fns/getDaysInMonth.js","../node_modules/date-fns/setMonth.js","../node_modules/date-fns/setQuarter.js","../node_modules/date-fns/getYear.js","../node_modules/date-fns/getMonth.js","../node_modules/date-fns/endOfYear.js","../node_modules/date-fns/getQuarter.js","../node_modules/date-fns/getHours.js","../node_modules/date-fns/getMinutes.js","../node_modules/date-fns/getSeconds.js","../node_modules/date-fns/addMonths.js","../node_modules/date-fns/subMonths.js","../node_modules/date-fns/differenceInCalendarMonths.js","../node_modules/date-fns/addQuarters.js","../node_modules/date-fns/subQuarters.js","../node_modules/date-fns/differenceInCalendarQuarters.js","../node_modules/date-fns/addYears.js","../node_modules/date-fns/subYears.js","../node_modules/date-fns/differenceInCalendarYears.js","../node_modules/date-fns/min.js","../node_modules/date-fns/max.js","../node_modules/date-fns/addMilliseconds.js","../node_modules/date-fns/addHours.js","../node_modules/date-fns/addMinutes.js","../node_modules/date-fns/addSeconds.js","../node_modules/date-fns/isAfter.js","../node_modules/date-fns/getDay.js","../node_modules/date-fns/getDate.js","../node_modules/date-fns/addWeeks.js","../node_modules/date-fns/getTime.js","../node_modules/date-fns/setYear.js","../node_modules/date-fns/differenceInDays.js","../node_modules/date-fns/subWeeks.js","../node_modules/date-fns/subDays.js","../node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../node_modules/@floating-ui/react/dist/floating-ui.react.mjs","../node_modules/react-datepicker/node_modules/tslib/tslib.es6.js","../../src/calendar_container.tsx","../../src/date_utils.ts","../../src/click_outside_wrapper.tsx","../../src/input_time.tsx","../../src/day.tsx","../../src/week_number.tsx","../../src/week.tsx","../../src/month.tsx","../../src/month_dropdown_options.tsx","../../src/month_dropdown.tsx","../../src/month_year_dropdown_options.tsx","../../src/month_year_dropdown.tsx","../../src/time.tsx","../../src/year.tsx","../../src/year_dropdown_options.tsx","../../src/year_dropdown.tsx","../../src/calendar.tsx","../../src/calendar_icon.tsx","../../src/portal.tsx","../../src/tab_loop.tsx","../../src/popper_component.tsx","../../src/with_floating.tsx","../../src/index.tsx","components/Administer.jsx","App.jsx","reportWebVitals.js","index.js"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return (type.displayName || \"Context\") + \".Provider\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionLane = 256,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 4194048;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextTransitionLane() {\n  var lane = nextTransitionLane;\n  nextTransitionLane <<= 1;\n  0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n  return lane;\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$5 = 31 - clz32(remainingLanes),\n      lane = 1 << index$5;\n    entanglements[index$5] = 0;\n    expirationTimes[index$5] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$5];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$5] = null, index$5 = 0;\n        index$5 < hiddenUpdatesForLane.length;\n        index$5++\n      ) {\n        var update = hiddenUpdatesForLane[index$5];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 4194090);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$6 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$6;\n    (lane & entangledLanes) | (root[index$6] & entangledLanes) &&\n      (root[index$6] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentSuspenseInstance(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentSuspenseInstance(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[: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]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$8 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$8 && \"aria-\" !== prefix$8) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$9) {\n                control = x$9;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$10) {\n              control = x$10;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\";\n    do\n      (info += describeFiber(workInProgress)),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? \"checked\" : \"value\",\n    descriptor = Object.getOwnPropertyDescriptor(\n      node.constructor.prototype,\n      valueField\n    ),\n    currentValue = \"\" + node[valueField];\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    )\n      return;\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"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(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\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;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$282;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_417 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_417) {\n      var element$jscomp$inline_418 = document.createElement(\"div\");\n      element$jscomp$inline_418.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_417 =\n        \"function\" === typeof element$jscomp$inline_418.oninput;\n    }\n    JSCompiler_inline_result$jscomp$282 = isSupported$jscomp$inline_417;\n  } else JSCompiler_inline_result$jscomp$282 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$282 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"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(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_PROVIDER_TYPE:\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(formatProdErrorMessage(418, \"\"));\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      track(instance);\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children),\n        track(instance);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    a: {\n      fiber = fiber.nextSibling;\n      for (tag = 0; fiber; ) {\n        if (8 === fiber.nodeType)\n          if (((JSCompiler_temp = fiber.data), \"/$\" === JSCompiler_temp)) {\n            if (0 === tag) {\n              nextHydratableInstance = getNextHydratable(fiber.nextSibling);\n              break a;\n            }\n            tag--;\n          } else\n            (\"$\" !== JSCompiler_temp &&\n              \"$!\" !== JSCompiler_temp &&\n              \"$?\" !== JSCompiler_temp) ||\n              tag++;\n        fiber = fiber.nextSibling;\n      }\n      nextHydratableInstance = null;\n    }\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction noop$3() {}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$3, noop$3), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$3, noop$3);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter$1 = 0,\n  thenableState$1 = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter$1 = 0;\n  thenableState$1 = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);\n    thenableIndexCounter$1 = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter$1 = localIdCounter = 0;\n  thenableState$1 = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  thenable = trackUsedThenable(thenableState$1, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$32 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$32 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$32 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$32 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n  updateEffectImpl(2048, 8, create, [subscribe]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 124) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      ReactSharedInternals.T = prevTransition;\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$38) {\n      onActionError(actionQueue, node, error$38);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, createDeps) {\n  tag = { tag: tag, create: create, deps: createDeps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((createDeps = create.next),\n      (create.next = tag),\n      (tag.next = createDeps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction createEffectInstance() {\n  return { destroy: void 0, resource: void 0 };\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {\n  var hook = mountWorkInProgressHook();\n  createDeps = void 0 === createDeps ? null : createDeps;\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    createEffectInstance(),\n    create,\n    createDeps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, createDeps) {\n  mountEffectImpl(8390656, 8, create, createDeps);\n}\nfunction updateEffect(create, createDeps) {\n  updateEffectImpl(2048, 8, create, createDeps);\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (0 === (renderLanes & 42))\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop$2() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop$2\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$41 = enqueueUpdate(provider, fiber, lane);\n        null !== root$41 &&\n          (scheduleUpdateOnFiber(root$41, provider, lane),\n          entangleTransitions(root$41, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n    readContext: readContext,\n    use: use,\n    useCallback: throwInvalidHookError,\n    useContext: throwInvalidHookError,\n    useEffect: throwInvalidHookError,\n    useImperativeHandle: throwInvalidHookError,\n    useLayoutEffect: throwInvalidHookError,\n    useInsertionEffect: throwInvalidHookError,\n    useMemo: throwInvalidHookError,\n    useReducer: throwInvalidHookError,\n    useRef: throwInvalidHookError,\n    useState: throwInvalidHookError,\n    useDebugValue: throwInvalidHookError,\n    useDeferredValue: throwInvalidHookError,\n    useTransition: throwInvalidHookError,\n    useSyncExternalStore: throwInvalidHookError,\n    useId: throwInvalidHookError,\n    useHostTransitionStatus: throwInvalidHookError,\n    useFormState: throwInvalidHookError,\n    useActionState: throwInvalidHookError,\n    useOptimistic: throwInvalidHookError,\n    useMemoCache: throwInvalidHookError,\n    useCacheRefresh: throwInvalidHookError\n  },\n  HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 124) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        createEffectInstance(),\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"\\u00ab\" + identifierPrefix + \"R\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"\\u00bb\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"\\u00ab\" +\n            identifierPrefix +\n            \"r\" +\n            JSCompiler_inline_result.toString(32) +\n            \"\\u00bb\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  HooksDispatcherOnRerender = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: rerenderReducer,\n    useRef: updateRef,\n    useState: function () {\n      return rerenderReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return null === currentHook\n        ? mountDeferredValueImpl(hook, value, initialValue)\n        : updateDeferredValueImpl(\n            hook,\n            currentHook.memoizedState,\n            value,\n            initialValue\n          );\n    },\n    useTransition: function () {\n      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: rerenderActionState,\n    useActionState: rerenderActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      if (null !== currentHook)\n        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n      hook.baseState = passthrough;\n      return [passthrough, hook.queue.dispatch];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  thenableState = null,\n  thenableIndexCounter = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  return trackUsedThenable(thenableState, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction resolveLazy(lazyType) {\n  var init = lazyType._init;\n  return init(lazyType._payload);\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return createChild(returnFiber, newChild, lanes);\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return updateFromMap(\n            existingChildren,\n            returnFiber,\n            newIdx,\n            newChild,\n            lanes\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  if (22 === fiber.tag) {\n    if (\n      (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary)\n    ) {\n      var current = fiber.alternate;\n      null !== current &&\n        null !== current.memoizedState &&\n        (shellBoundary = fiber);\n    }\n  } else reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          \"$?\" === state.data ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      nextProps =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextChildren = workInProgress.child = current.child;\n        for (prevState = 0; null !== nextChildren; )\n          (prevState =\n            prevState | nextChildren.lanes | nextChildren.childLanes),\n            (nextChildren = nextChildren.sibling);\n        workInProgress.childLanes = prevState & ~nextProps;\n      } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        nextProps,\n        renderLanes\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (workInProgress.lanes = workInProgress.childLanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  return null;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      if (isHydrating) {\n        var nextInstance = nextHydratableInstance,\n          JSCompiler_temp$jscomp$0;\n        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {\n          c: {\n            JSCompiler_temp$jscomp$0 = nextInstance;\n            for (\n              nextInstance = rootOrSingletonContext;\n              8 !== JSCompiler_temp$jscomp$0.nodeType;\n\n            ) {\n              if (!nextInstance) {\n                nextInstance = null;\n                break c;\n              }\n              JSCompiler_temp$jscomp$0 = getNextHydratable(\n                JSCompiler_temp$jscomp$0.nextSibling\n              );\n              if (null === JSCompiler_temp$jscomp$0) {\n                nextInstance = null;\n                break c;\n              }\n            }\n            nextInstance = JSCompiler_temp$jscomp$0;\n          }\n          null !== nextInstance\n            ? ((workInProgress.memoizedState = {\n                dehydrated: nextInstance,\n                treeContext:\n                  null !== treeContextProvider\n                    ? { id: treeContextId, overflow: treeContextOverflow }\n                    : null,\n                retryLane: 536870912,\n                hydrationErrors: null\n              }),\n              (JSCompiler_temp$jscomp$0 = createFiberImplClass(\n                18,\n                null,\n                null,\n                0\n              )),\n              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),\n              (JSCompiler_temp$jscomp$0.return = workInProgress),\n              (workInProgress.child = JSCompiler_temp$jscomp$0),\n              (hydrationParentFiber = workInProgress),\n              (nextHydratableInstance = null),\n              (JSCompiler_temp$jscomp$0 = !0))\n            : (JSCompiler_temp$jscomp$0 = !1);\n        }\n        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);\n      }\n      nextInstance = workInProgress.memoizedState;\n      if (\n        null !== nextInstance &&\n        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)\n      )\n        return (\n          isSuspenseInstanceFallback(nextInstance)\n            ? (workInProgress.lanes = 32)\n            : (workInProgress.lanes = 536870912),\n          null\n        );\n      popSuspenseHandler(workInProgress);\n    }\n    nextInstance = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextInstance = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextInstance },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextInstance.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextInstance.sibling = nextProps),\n        (workInProgress.child = nextInstance),\n        (showFallback = workInProgress.child),\n        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        nextProps\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextInstance);\n  }\n  JSCompiler_temp$jscomp$0 = current.memoizedState;\n  if (\n    null !== JSCompiler_temp$jscomp$0 &&\n    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),\n    null !== nextInstance)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (showFallback = nextProps.fallback),\n            (nextInstance = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              nextInstance\n            )),\n            (showFallback = createFiberFromFragment(\n              showFallback,\n              nextInstance,\n              renderLanes,\n              null\n            )),\n            (showFallback.flags |= 2),\n            (nextProps.return = workInProgress),\n            (showFallback.return = workInProgress),\n            (nextProps.sibling = showFallback),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = showFallback));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextInstance))\n    ) {\n      JSCompiler_temp =\n        nextInstance.nextSibling && nextInstance.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = renderLanes & -renderLanes),\n        (nextProps =\n          0 !== (nextProps & 42)\n            ? 1\n            : getBumpedLaneForHydrationByLane(nextProps)),\n        (nextProps =\n          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))\n            ? 0\n            : nextProps),\n        0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)\n      )\n        throw (\n          ((JSCompiler_temp$jscomp$0.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      \"$?\" === nextInstance.data || renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      \"$?\" === nextInstance.data\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = JSCompiler_temp$jscomp$0.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextInstance.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            ((idStack[idStackIndex++] = treeContextId),\n            (idStack[idStackIndex++] = treeContextOverflow),\n            (idStack[idStackIndex++] = treeContextProvider),\n            (treeContextId = current.id),\n            (treeContextOverflow = current.overflow),\n            (treeContextProvider = workInProgress)),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (showFallback = nextProps.fallback),\n      (nextInstance = workInProgress.mode),\n      (JSCompiler_temp$jscomp$0 = current.child),\n      (digest = JSCompiler_temp$jscomp$0.sibling),\n      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags =\n        JSCompiler_temp$jscomp$0.subtreeFlags & 65011712),\n      null !== digest\n        ? (showFallback = createWorkInProgress(digest, showFallback))\n        : ((showFallback = createFiberFromFragment(\n            showFallback,\n            nextInstance,\n            renderLanes,\n            null\n          )),\n          (showFallback.flags |= 2)),\n      (showFallback.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = showFallback),\n      (workInProgress.child = nextProps),\n      (nextProps = showFallback),\n      (showFallback = workInProgress.child),\n      (nextInstance = current.child.memoizedState),\n      null === nextInstance\n        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))\n        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),\n          null !== JSCompiler_temp$jscomp$0\n            ? ((digest = CacheContext._currentValue),\n              (JSCompiler_temp$jscomp$0 =\n                JSCompiler_temp$jscomp$0.parent !== digest\n                  ? { parent: digest, pool: digest }\n                  : JSCompiler_temp$jscomp$0))\n            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),\n          (nextInstance = {\n            baseLanes: nextInstance.baseLanes | renderLanes,\n            cachePool: JSCompiler_temp$jscomp$0\n          })),\n      (showFallback.memoizedState = nextInstance),\n      (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      nextProps\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  offscreenProps.stateNode = {\n    _visibility: 1,\n    _pendingMarkers: null,\n    _retryCache: null,\n    _transitions: null\n  };\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n  nextProps = suspenseStackCursor.current;\n  if (0 !== (nextProps & 2))\n    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n  else {\n    if (null !== current && 0 !== (current.flags & 128))\n      a: for (current = workInProgress.child; null !== current; ) {\n        if (13 === current.tag)\n          null !== current.memoizedState &&\n            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (19 === current.tag)\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (null !== current.child) {\n          current.child.return = current;\n          current = current.child;\n          continue;\n        }\n        if (current === workInProgress) break a;\n        for (; null === current.sibling; ) {\n          if (null === current.return || current.return === workInProgress)\n            break a;\n          current = current.return;\n        }\n        current.sibling.return = current.return;\n        current = current.sibling;\n      }\n    nextProps &= 1;\n  }\n  push(suspenseStackCursor, nextProps);\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode\n      );\n      break;\n    case \"backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 13:\n      var state = workInProgress.memoizedState;\n      if (null !== state) {\n        if (null !== state.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state = 0 !== (renderLanes & workInProgress.childLanes);\n      state ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state) break;\n      else return null;\n    case 22:\n    case 23:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(current, workInProgress, renderLanes)\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        current = workInProgress.pendingProps;\n        var lazyComponent = workInProgress.elementType,\n          init = lazyComponent._init;\n        lazyComponent = init(lazyComponent._payload);\n        workInProgress.type = lazyComponent;\n        if (\"function\" === typeof lazyComponent)\n          shouldConstruct(lazyComponent)\n            ? ((current = resolveClassComponentProps(lazyComponent, current)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== lazyComponent && null !== lazyComponent)\n            if (\n              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)\n            ) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            } else if (init === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            }\n          workInProgress =\n            getComponentNameFromType(lazyComponent) || lazyComponent;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (lazyComponent = workInProgress.type),\n        (init = resolveClassComponentProps(\n          lazyComponent,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          lazyComponent,\n          init,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        lazyComponent = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        init = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, lazyComponent, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        lazyComponent = nextState.cache;\n        pushProvider(workInProgress, CacheContext, lazyComponent);\n        lazyComponent !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        lazyComponent = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: lazyComponent,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else if (lazyComponent !== init) {\n            init = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError(init);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (lazyComponent === init) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(\n            current,\n            workInProgress,\n            lazyComponent,\n            renderLanes\n          );\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (lazyComponent = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (lazyComponent[internalInstanceKey] = workInProgress),\n              (lazyComponent[internalPropsKey] = current),\n              setInitialProperties(lazyComponent, renderLanes, current),\n              markNodeAsHoistable(lazyComponent),\n              (workInProgress.stateNode = lazyComponent))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((lazyComponent = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          (init = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = init),\n              (nextHydratableInstance = getNextHydratable(\n                lazyComponent.firstChild\n              )))\n            : (nextHydratableInstance = init)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if ((init = lazyComponent = nextHydratableInstance))\n          (lazyComponent = canHydrateInstance(\n            lazyComponent,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== lazyComponent\n              ? ((workInProgress.stateNode = lazyComponent),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(\n                  lazyComponent.firstChild\n                )),\n                (rootOrSingletonContext = !1),\n                (init = !0))\n              : (init = !1);\n        init || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      init = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      lazyComponent = prevState.children;\n      shouldSetTextContent(init, prevState)\n        ? (lazyComponent = null)\n        : null !== nextState &&\n          shouldSetTextContent(init, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        ((init = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = init));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, lazyComponent, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (lazyComponent = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            ))\n          : reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            ),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),\n        reconcileChildren(\n          current,\n          workInProgress,\n          lazyComponent.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        (init = workInProgress.type._context),\n        (lazyComponent = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        (init = readContext(init)),\n        (lazyComponent = lazyComponent(init)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, lazyComponent, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        (renderLanes = workInProgress.mode),\n        (lazyComponent = {\n          mode: lazyComponent.mode,\n          children: lazyComponent.children\n        }),\n        null === current\n          ? ((renderLanes = mountWorkInProgressOffscreenFiber(\n              lazyComponent,\n              renderLanes\n            )),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes))\n          : ((renderLanes = createWorkInProgress(current.child, lazyComponent)),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes)),\n        workInProgress\n      );\n    case 22:\n      return updateOffscreenComponent(current, workInProgress, renderLanes);\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (lazyComponent = readContext(CacheContext)),\n        null === current\n          ? ((init = peekCacheFromPool()),\n            null === init &&\n              ((init = workInProgressRoot),\n              (prevState = createCache()),\n              (init.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && (init.pooledCacheLanes |= renderLanes),\n              (init = prevState)),\n            (workInProgress.memoizedState = {\n              parent: lazyComponent,\n              cache: init\n            }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, init))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            (init = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            init.parent !== lazyComponent\n              ? ((init = { parent: lazyComponent, cache: lazyComponent }),\n                (workInProgress.memoizedState = init),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      init),\n                pushProvider(workInProgress, CacheContext, lazyComponent))\n              : ((lazyComponent = prevState.cache),\n                pushProvider(workInProgress, CacheContext, lazyComponent),\n                lazyComponent !== init.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource))) {\n    resource = suspenseHandlerStackCursor.current;\n    if (\n      null !== resource &&\n      ((workInProgressRootRenderLanes & 4194048) ===\n      workInProgressRootRenderLanes\n        ? null !== shellBoundary\n        : ((workInProgressRootRenderLanes & 62914560) !==\n            workInProgressRootRenderLanes &&\n            0 === (workInProgressRootRenderLanes & 536870912)) ||\n          resource !== shellBoundary)\n    )\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n    workInProgress.flags |= 8192;\n  }\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$113 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$113 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$113\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$113.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags & 65011712),\n        (subtreeFlags |= child$114.flags & 65011712),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  else\n    for (child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags),\n        (subtreeFlags |= child$114.flags),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 31:\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      return (\n        (renderLanes = workInProgress.memoizedState),\n        null === current\n          ? (markUpdate(workInProgress),\n            null !== renderLanes\n              ? (bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217)))\n          : renderLanes\n            ? renderLanes !== current.memoizedState\n              ? (markUpdate(workInProgress),\n                bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217))\n            : (current.memoizedProps !== newProps && markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217)),\n        null\n      );\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      var type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      renderLanes = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, current);\n        else {\n          type = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (current) {\n            case 1:\n              current = type.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                renderLanes\n              );\n              break;\n            case 2:\n              current = type.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                renderLanes\n              );\n              break;\n            default:\n              switch (renderLanes) {\n                case \"svg\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    renderLanes\n                  );\n                  break;\n                case \"math\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    renderLanes\n                  );\n                  break;\n                case \"script\":\n                  current = type.createElement(\"div\");\n                  current.innerHTML = \"<script>\\x3c/script>\";\n                  current = current.removeChild(current.firstChild);\n                  break;\n                case \"select\":\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(\"select\", { is: newProps.is })\n                      : type.createElement(\"select\");\n                  newProps.multiple\n                    ? (current.multiple = !0)\n                    : newProps.size && (current.size = newProps.size);\n                  break;\n                default:\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(renderLanes, { is: newProps.is })\n                      : type.createElement(renderLanes);\n              }\n          }\n          current[internalInstanceKey] = workInProgress;\n          current[internalPropsKey] = newProps;\n          a: for (type = workInProgress.child; null !== type; ) {\n            if (5 === type.tag || 6 === type.tag)\n              current.appendChild(type.stateNode);\n            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {\n              type.child.return = type;\n              type = type.child;\n              continue;\n            }\n            if (type === workInProgress) break a;\n            for (; null === type.sibling; ) {\n              if (null === type.return || type.return === workInProgress)\n                break a;\n              type = type.return;\n            }\n            type.sibling.return = type.return;\n            type = type.sibling;\n          }\n          workInProgress.stateNode = current;\n          a: switch (\n            (setInitialProperties(current, renderLanes, newProps), renderLanes)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              current = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              current = !0;\n              break a;\n            default:\n              current = !1;\n          }\n          current && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.flags &= -16777217;\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      if (renderLanes) {\n        newProps = workInProgress.child;\n        type = null;\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool);\n        var cache$127 = null;\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (cache$127 = newProps.memoizedState.cachePool.pool);\n        cache$127 !== type && (newProps.flags |= 2048);\n      }\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      type = workInProgress.memoizedState;\n      if (null === type) return bubbleProperties(workInProgress), null;\n      newProps = 0 !== (workInProgress.flags & 128);\n      cache$127 = type.rendering;\n      if (null === cache$127)\n        if (newProps) cutOffTailIfNeeded(type, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              cache$127 = findFirstSuspended(current);\n              if (null !== cache$127) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(type, !1);\n                current = cache$127.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== type.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (newProps = !0),\n            cutOffTailIfNeeded(type, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!newProps)\n          if (((current = findFirstSuspended(cache$127)), null !== current)) {\n            if (\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(type, !0),\n              null === type.tail &&\n                \"hidden\" === type.tailMode &&\n                !cache$127.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - type.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              cutOffTailIfNeeded(type, !1),\n              (workInProgress.lanes = 4194304));\n        type.isBackwards\n          ? ((cache$127.sibling = workInProgress.child),\n            (workInProgress.child = cache$127))\n          : ((current = type.last),\n            null !== current\n              ? (current.sibling = cache$127)\n              : (workInProgress.child = cache$127),\n            (type.last = cache$127));\n      }\n      if (null !== type.tail)\n        return (\n          (workInProgress = type.tail),\n          (type.rendering = workInProgress),\n          (type.tail = workInProgress.sibling),\n          (type.renderingStartTime = now()),\n          (workInProgress.sibling = null),\n          (current = suspenseStackCursor.current),\n          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n          workInProgress\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$143) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$143);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset,\n                  JSCompiler_temp.elementType === JSCompiler_temp.type\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$142) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$142\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearSuspenseBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n    retryCache.has(wakeable) ||\n      (retryCache.add(wakeable), wakeable.then(retry, retry));\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13878)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$144 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$144, \"\"), (hostParentFiber.flags &= -33));\n          var before$145 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$145, parent$144);\n          break;\n        case 3:\n        case 4:\n          var parent$146 = hostParentFiber.stateNode.containerInfo,\n            before$147 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$147,\n            parent$146\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256)\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 10256);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(parentFiber) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(fiber),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(fiber));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)\n    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n  if (null !== ReactSharedInternals.T) {\n    var actionScopeLane = currentEntangledLane;\n    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();\n  }\n  return resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  0 === workInProgressDeferredLane &&\n    (workInProgressDeferredLane =\n      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n        ? claimNextTransitionLane()\n        : 536870912);\n  var suspenseHandler = suspenseHandlerStackCursor.current;\n  null !== suspenseHandler && (suspenseHandler.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 124) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              2,\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          0,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  )\n    if (\n      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n      accumulateSuspenseyCommitOnFiber(finishedWork),\n      (suspendedCommitReason = waitForCommitToBeReady()),\n      null !== suspendedCommitReason)\n    ) {\n      root.cancelPendingCommit = suspendedCommitReason(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          1,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$4 = 31 - clz32(lanes),\n      lane = 1 << index$4;\n    didAttemptEntireTree[index$4] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState = null),\n        (thenableIndexCounter = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$2 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$2;\n      lanes |= root[index$2];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (resource ? preloadResource(resource) : 1) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$169) {\n      handleThrow(root, thrownValue$169);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState = null;\n  thenableIndexCounter = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects(!0);\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects(wasDelayedCommit) {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects(wasDelayedCommit);\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$174 = firstScheduledRoot; null !== root$174; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$174.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$174.suspendedLanes,\n                pingedLanes = root$174.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$174,\n                root$174 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$174.cancelPendingCommit ||\n                  -1 !== root$174.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$174, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n        root$174 = root$174.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    (shouldAttemptEagerTransition() &&\n      (syncTransitionLanes = currentEventTransitionLane),\n    (currentEventTransitionLane = 0));\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$3 = 31 - clz32(lanes),\n      lane = 1 << index$3,\n      expirationTime = expirationTimes[index$3];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$3] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  0 === currentEventTransitionLane &&\n    (currentEventTransitionLane = claimNextTransitionLane());\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1528 = 0;\n  i$jscomp$inline_1528 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1528++\n) {\n  var eventName$jscomp$inline_1529 =\n      simpleEventPluginEvents[i$jscomp$inline_1528],\n    domEventName$jscomp$inline_1530 =\n      eventName$jscomp$inline_1529.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1531 =\n      eventName$jscomp$inline_1529[0].toUpperCase() +\n      eventName$jscomp$inline_1529.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1530,\n    \"on\" + capitalizedEvent$jscomp$inline_1531\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"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(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = SyntheticEventCtor;\n                reactEventName = reactEventType;\n                instance = 0;\n                for (\n                  lastHostComponent = inCapturePhase;\n                  lastHostComponent;\n                  lastHostComponent = getParent(lastHostComponent)\n                )\n                  instance++;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = getParent(_instance)\n                )\n                  lastHostComponent++;\n                for (; 0 < instance - lastHostComponent; )\n                  (inCapturePhase = getParent(inCapturePhase)), instance--;\n                for (; 0 < lastHostComponent - instance; )\n                  (reactEventName = getParent(reactEventName)),\n                    lastHostComponent--;\n                for (; instance--; ) {\n                  if (\n                    inCapturePhase === reactEventName ||\n                    (null !== reactEventName &&\n                      inCapturePhase === reactEventName.alternate)\n                  )\n                    break b;\n                  inCapturePhase = getParent(inCapturePhase);\n                  reactEventName = getParent(reactEventName);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction noop$1() {}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\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().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$188 = props[hasSrc];\n          if (null != propValue$188)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$188;\n                break;\n              case \"type\":\n                propValue = propValue$188;\n                break;\n              case \"checked\":\n                checked = propValue$188;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$188;\n                break;\n              case \"value\":\n                propKey = propValue$188;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$188;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$188)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$188, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      track(domElement);\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      track(domElement);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$188 in props)\n          props.hasOwnProperty(propValue$188) &&\n            ((hasSrc = props[propValue$188]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$188,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$205 in nextProps) {\n        var propKey = nextProps[propKey$205];\n        lastProp = lastProps[propKey$205];\n        if (\n          nextProps.hasOwnProperty(propKey$205) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$205) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$205,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$205 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$205 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$205\n        ? updateOptions(domElement, !!lastProps, propKey$205, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$205 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$205 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$205, propKey);\n      return;\n    case \"option\":\n      for (var propKey$221 in lastProps)\n        if (\n          ((propKey$205 = lastProps[propKey$221]),\n          lastProps.hasOwnProperty(propKey$221) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$221))\n        )\n          switch (propKey$221) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$221,\n                null,\n                nextProps,\n                propKey$205\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$205 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$205 &&\n                \"function\" !== typeof propKey$205 &&\n                \"symbol\" !== typeof propKey$205;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$226 in lastProps)\n        (propKey$205 = lastProps[propKey$226]),\n          lastProps.hasOwnProperty(propKey$226) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$226) &&\n            setProp(domElement, tag, propKey$226, null, nextProps, propKey$205);\n      for (checked in nextProps)\n        if (\n          ((propKey$205 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$205)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$231 in lastProps)\n          (propKey$205 = lastProps[propKey$231]),\n            lastProps.hasOwnProperty(propKey$231) &&\n              void 0 !== propKey$205 &&\n              !nextProps.hasOwnProperty(propKey$231) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$231,\n                void 0,\n                nextProps,\n                propKey$205\n              );\n        for (defaultChecked in nextProps)\n          (propKey$205 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$205 === propKey ||\n              (void 0 === propKey$205 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$236 in lastProps)\n    (propKey$205 = lastProps[propKey$236]),\n      lastProps.hasOwnProperty(propKey$236) &&\n        null != propKey$205 &&\n        !nextProps.hasOwnProperty(propKey$236) &&\n        setProp(domElement, tag, propKey$236, null, nextProps, propKey$205);\n  for (lastProp in nextProps)\n    (propKey$205 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$205 === propKey ||\n        (null == propKey$205 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$205, nextProps, propKey);\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n  var node = suspenseInstance,\n    possiblePreambleContribution = 0,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node)) {\n        if (\n          0 < possiblePreambleContribution &&\n          8 > possiblePreambleContribution\n        ) {\n          node = possiblePreambleContribution;\n          var ownerDocument = parentInstance.ownerDocument;\n          node & 1 && releaseSingletonInstance(ownerDocument.documentElement);\n          node & 2 && releaseSingletonInstance(ownerDocument.body);\n          if (node & 4)\n            for (\n              node = ownerDocument.head,\n                releaseSingletonInstance(node),\n                ownerDocument = node.firstChild;\n              ownerDocument;\n\n            ) {\n              var nextNode$jscomp$0 = ownerDocument.nextSibling,\n                nodeName = ownerDocument.nodeName;\n              ownerDocument[internalHoistableMarker] ||\n                \"SCRIPT\" === nodeName ||\n                \"STYLE\" === nodeName ||\n                (\"LINK\" === nodeName &&\n                  \"stylesheet\" === ownerDocument.rel.toLowerCase()) ||\n                node.removeChild(ownerDocument);\n              ownerDocument = nextNode$jscomp$0;\n            }\n        }\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(suspenseInstance);\n          return;\n        }\n        depth--;\n      } else\n        \"$\" === node || \"$?\" === node || \"$!\" === node\n          ? depth++\n          : (possiblePreambleContribution = node.charCodeAt(0) - 48);\n    else possiblePreambleContribution = 0;\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"complete\" === instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$?\" !== instance.data || \"complete\" === ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getParentSuspenseInstance(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\"$\" === data || \"$!\" === data || \"$?\" === data) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else \"/$\" === data && depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$244 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$245 = styles$244.get(type);\n        resource$245 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$245 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$244.set(type, resource$245),\n          (styles$244 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$244._p &&\n            ((resource$245.instance = styles$244),\n            (resource$245.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$244 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$245.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$245;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$250 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$250)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$250),\n            markNodeAsHoistable(instance$250),\n            instance$250\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$250 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$250);\n        var linkInstance = instance$250;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$250, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$250, props.precedence, hoistableRoot);\n        return (resource.instance = instance$250);\n      case \"script\":\n        instance$250 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$250)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$250)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nvar suspendedState = null;\nfunction noop() {}\nfunction suspendResource(hoistableRoot, resource, props) {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nfunction waitForCommitToBeReady() {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4);\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count)\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  transitionCallbacks,\n  formState\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"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(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            if (13 === nearestMounted.tag) {\n              var lane = requestUpdateLane();\n              lane = getBumpedLaneForHydrationByLane(lane);\n              var root = enqueueConcurrentRenderForLane(nearestMounted, lane);\n              null !== root &&\n                scheduleUpdateOnFiber(root, nearestMounted, lane);\n              markRetryLaneIfNotHydrated(nearestMounted, lane);\n            }\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1785 = React.version;\nif (\n  \"19.1.0\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1785\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1785,\n      \"19.1.0\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2256 = {\n  bundleType: 0,\n  version: \"19.1.0\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.1.0\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2257 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2257.isDisabled &&\n    hook$jscomp$inline_2257.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2257.inject(\n        internals$jscomp$inline_2256\n      )),\n        (injectedHook = hook$jscomp$inline_2257);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    null\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    formState\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, self, source, owner, props) {\n  self = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== self ? self : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(\n    oldElement.type,\n    newKey,\n    void 0,\n    void 0,\n    void 0,\n    oldElement.props\n  );\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction noop$1() {}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop$1, noop$1)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction noop() {}\nexports.Children = {\n  map: mapChildren,\n  forEach: function (children, forEachFunc, forEachContext) {\n    mapChildren(\n      children,\n      function () {\n        forEachFunc.apply(this, arguments);\n      },\n      forEachContext\n    );\n  },\n  count: function (children) {\n    var n = 0;\n    mapChildren(children, function () {\n      n++;\n    });\n    return n;\n  },\n  toArray: function (children) {\n    return (\n      mapChildren(children, function (child) {\n        return child;\n      }) || []\n    );\n  },\n  only: function (children) {\n    if (!isValidElement(children))\n      throw Error(\n        \"React.Children.only expected to receive a single React element child.\"\n      );\n    return children;\n  }\n};\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key,\n    owner = void 0;\n  if (null != config)\n    for (propName in (void 0 !== config.ref && (owner = void 0),\n    void 0 !== config.key && (key = \"\" + config.key),\n    config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, void 0, void 0, owner, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, void 0, void 0, null, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    ReactSharedInternals.T = prevTransition;\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, createDeps, update) {\n  var dispatcher = ReactSharedInternals.H;\n  if (\"function\" === typeof update)\n    throw Error(\n      \"useEffect CRUD overload is not enabled in this build of React.\"\n    );\n  return dispatcher.useEffect(create, createDeps);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.1.0\";\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.1.0\";\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"116b9008\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n  /**\n   * A POP indicates a change to an arbitrary index in the history stack, such\n   * as a back or forward navigation. It does not describe the direction of the\n   * navigation, only that the current index changed.\n   *\n   * Note: This is the default action for newly created history objects.\n   */\n  Pop = \"POP\",\n\n  /**\n   * A PUSH indicates a new entry being added to the history stack, such as when\n   * a link is clicked and a new page loads. When this happens, all subsequent\n   * entries in the stack are lost.\n   */\n  Push = \"PUSH\",\n\n  /**\n   * A REPLACE indicates the entry at the current index in the history stack\n   * being replaced by a new one.\n   */\n  Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n  /**\n   * A URL pathname, beginning with a /.\n   */\n  pathname: string;\n\n  /**\n   * A URL search string, beginning with a ?.\n   */\n  search: string;\n\n  /**\n   * A URL fragment identifier, beginning with a #.\n   */\n  hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location<State = any> extends Path {\n  /**\n   * A value of arbitrary data associated with this location.\n   */\n  state: State;\n\n  /**\n   * A unique string associated with this location. May be used to safely store\n   * and retrieve data in some other storage API, like `localStorage`.\n   *\n   * Note: This value is always \"default\" on the initial location.\n   */\n  key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n  /**\n   * The action that triggered the change.\n   */\n  action: Action;\n\n  /**\n   * The new location.\n   */\n  location: Location;\n\n  /**\n   * The delta between this location and the former location in the history stack\n   */\n  delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n  (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial<Path>;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n  /**\n   * The last action that modified the current location. This will always be\n   * Action.Pop when a history instance is first created. This value is mutable.\n   */\n  readonly action: Action;\n\n  /**\n   * The current location. This value is mutable.\n   */\n  readonly location: Location;\n\n  /**\n   * Returns a valid href for the given `to` value that may be used as\n   * the value of an <a href> attribute.\n   *\n   * @param to - The destination URL\n   */\n  createHref(to: To): string;\n\n  /**\n   * Returns a URL for the given `to` value\n   *\n   * @param to - The destination URL\n   */\n  createURL(to: To): URL;\n\n  /**\n   * Encode a location the same way window.history would do (no-op for memory\n   * history) so we ensure our PUSH/REPLACE navigations for data routers\n   * behave the same as POP\n   *\n   * @param to Unencoded path\n   */\n  encodeLocation(to: To): Path;\n\n  /**\n   * Pushes a new location onto the history stack, increasing its length by one.\n   * If there were any entries in the stack after the current one, they are\n   * lost.\n   *\n   * @param to - The new URL\n   * @param state - Data to associate with the new location\n   */\n  push(to: To, state?: any): void;\n\n  /**\n   * Replaces the current location in the history stack with a new one.  The\n   * location that was replaced will no longer be available.\n   *\n   * @param to - The new URL\n   * @param state - Data to associate with the new location\n   */\n  replace(to: To, state?: any): void;\n\n  /**\n   * Navigates `n` entries backward/forward in the history stack relative to the\n   * current index. For example, a \"back\" navigation would use go(-1).\n   *\n   * @param delta - The delta in the stack index\n   */\n  go(delta: number): void;\n\n  /**\n   * Sets up a listener that will be called whenever the current location\n   * changes.\n   *\n   * @param listener - A function that will be called when the location changes\n   * @returns unlisten - A function that may be used to stop listening\n   */\n  listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n  usr: any;\n  key?: string;\n  idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial<Location>;\n\nexport type MemoryHistoryOptions = {\n  initialEntries?: InitialEntry[];\n  initialIndex?: number;\n  v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n  /**\n   * The current index in the history stack.\n   */\n  readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n  options: MemoryHistoryOptions = {}\n): MemoryHistory {\n  let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n  let entries: Location[]; // Declare so we can access from createMemoryLocation\n  entries = initialEntries.map((entry, index) =>\n    createMemoryLocation(\n      entry,\n      typeof entry === \"string\" ? null : entry.state,\n      index === 0 ? \"default\" : undefined\n    )\n  );\n  let index = clampIndex(\n    initialIndex == null ? entries.length - 1 : initialIndex\n  );\n  let action = Action.Pop;\n  let listener: Listener | null = null;\n\n  function clampIndex(n: number): number {\n    return Math.min(Math.max(n, 0), entries.length - 1);\n  }\n  function getCurrentLocation(): Location {\n    return entries[index];\n  }\n  function createMemoryLocation(\n    to: To,\n    state: any = null,\n    key?: string\n  ): Location {\n    let location = createLocation(\n      entries ? getCurrentLocation().pathname : \"/\",\n      to,\n      state,\n      key\n    );\n    warning(\n      location.pathname.charAt(0) === \"/\",\n      `relative pathnames are not supported in memory history: ${JSON.stringify(\n        to\n      )}`\n    );\n    return location;\n  }\n\n  function createHref(to: To) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n\n  let history: MemoryHistory = {\n    get index() {\n      return index;\n    },\n    get action() {\n      return action;\n    },\n    get location() {\n      return getCurrentLocation();\n    },\n    createHref,\n    createURL(to) {\n      return new URL(createHref(to), \"http://localhost\");\n    },\n    encodeLocation(to: To) {\n      let path = typeof to === \"string\" ? parsePath(to) : to;\n      return {\n        pathname: path.pathname || \"\",\n        search: path.search || \"\",\n        hash: path.hash || \"\",\n      };\n    },\n    push(to, state) {\n      action = Action.Push;\n      let nextLocation = createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({ action, location: nextLocation, delta: 1 });\n      }\n    },\n    replace(to, state) {\n      action = Action.Replace;\n      let nextLocation = createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({ action, location: nextLocation, delta: 0 });\n      }\n    },\n    go(delta) {\n      action = Action.Pop;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({ action, location: nextLocation, delta });\n      }\n    },\n    listen(fn: Listener) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    },\n  };\n\n  return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n  options: BrowserHistoryOptions = {}\n): BrowserHistory {\n  function createBrowserLocation(\n    window: Window,\n    globalHistory: Window[\"history\"]\n  ) {\n    let { pathname, search, hash } = window.location;\n    return createLocation(\n      \"\",\n      { pathname, search, hash },\n      // state defaults to `null` because `window.history.state` does\n      (globalHistory.state && globalHistory.state.usr) || null,\n      (globalHistory.state && globalHistory.state.key) || \"default\"\n    );\n  }\n\n  function createBrowserHref(window: Window, to: To) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n\n  return getUrlBasedHistory(\n    createBrowserLocation,\n    createBrowserHref,\n    null,\n    options\n  );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n  options: HashHistoryOptions = {}\n): HashHistory {\n  function createHashLocation(\n    window: Window,\n    globalHistory: Window[\"history\"]\n  ) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\",\n    } = parsePath(window.location.hash.substr(1));\n\n    // Hash URL should always have a leading / just like window.location.pathname\n    // does, so if an app ends up at a route like /#something then we add a\n    // leading slash so all of our path-matching behaves the same as if it would\n    // in a browser router.  This is particularly important when there exists a\n    // root splat route (<Route path=\"*\">) since that matches internally against\n    // \"/*\" and we'd expect /#something to 404 in a hash router app.\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n\n    return createLocation(\n      \"\",\n      { pathname, search, hash },\n      // state defaults to `null` because `window.history.state` does\n      (globalHistory.state && globalHistory.state.usr) || null,\n      (globalHistory.state && globalHistory.state.key) || \"default\"\n    );\n  }\n\n  function createHashHref(window: Window, to: To) {\n    let base = window.document.querySelector(\"base\");\n    let href = \"\";\n\n    if (base && base.getAttribute(\"href\")) {\n      let url = window.location.href;\n      let hashIndex = url.indexOf(\"#\");\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n\n    return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n  }\n\n  function validateHashLocation(location: Location, to: To) {\n    warning(\n      location.pathname.charAt(0) === \"/\",\n      `relative pathnames are not supported in hash history.push(${JSON.stringify(\n        to\n      )})`\n    );\n  }\n\n  return getUrlBasedHistory(\n    createHashLocation,\n    createHashHref,\n    validateHashLocation,\n    options\n  );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant<T>(\n  value: T | null | undefined,\n  message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\n\nexport function warning(cond: any, message: string) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== \"undefined\") console.warn(message);\n\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience, so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\n\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index,\n  };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n  current: string | Location,\n  to: To,\n  state: any = null,\n  key?: string\n): Readonly<Location> {\n  let location: Readonly<Location> = {\n    pathname: typeof current === \"string\" ? current : current.pathname,\n    search: \"\",\n    hash: \"\",\n    ...(typeof to === \"string\" ? parsePath(to) : to),\n    state,\n    // TODO: This could be cleaned up.  push/replace should probably just take\n    // full Locations now and avoid the need to run through this flow at all\n    // But that's a pretty big refactor to the current test suite so going to\n    // keep as is for the time being and just let any incoming keys take precedence\n    key: (to && (to as Location).key) || key || createKey(),\n  };\n  return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n  pathname = \"/\",\n  search = \"\",\n  hash = \"\",\n}: Partial<Path>) {\n  if (search && search !== \"?\")\n    pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\")\n    pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial<Path> {\n  let parsedPath: Partial<Path> = {};\n\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n\n  return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n  window?: Window;\n  v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n  getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n  createHref: (window: Window, to: To) => string,\n  validateLocation: ((location: Location, to: To) => void) | null,\n  options: UrlHistoryOptions = {}\n): UrlHistory {\n  let { window = document.defaultView!, v5Compat = false } = options;\n  let globalHistory = window.history;\n  let action = Action.Pop;\n  let listener: Listener | null = null;\n\n  let index = getIndex()!;\n  // Index should only be null when we initialize. If not, it's because the\n  // user called history.pushState or history.replaceState directly, in which\n  // case we should log a warning as it will result in bugs.\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n  }\n\n  function getIndex(): number {\n    let state = globalHistory.state || { idx: null };\n    return state.idx;\n  }\n\n  function handlePop() {\n    action = Action.Pop;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({ action, location: history.location, delta });\n    }\n  }\n\n  function push(to: To, state?: any) {\n    action = Action.Push;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n\n    index = getIndex() + 1;\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n\n    // try...catch because iOS limits us to 100 pushState calls :/\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      // If the exception is because `state` can't be serialized, let that throw\n      // outwards just like a replace call would so the dev knows the cause\n      // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n      // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      // They are going to lose state here, but there is no real\n      // way to warn them about it since the page will refresh...\n      window.location.assign(url);\n    }\n\n    if (v5Compat && listener) {\n      listener({ action, location: history.location, delta: 1 });\n    }\n  }\n\n  function replace(to: To, state?: any) {\n    action = Action.Replace;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n\n    index = getIndex();\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    globalHistory.replaceState(historyState, \"\", url);\n\n    if (v5Compat && listener) {\n      listener({ action, location: history.location, delta: 0 });\n    }\n  }\n\n  function createURL(to: To): URL {\n    // window.location.origin is \"null\" (the literal string value) in Firefox\n    // under certain conditions, notably when serving from a local HTML file\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n    let base =\n      window.location.origin !== \"null\"\n        ? window.location.origin\n        : window.location.href;\n\n    let href = typeof to === \"string\" ? to : createPath(to);\n    // Treating this as a full URL will strip any trailing spaces so we need to\n    // pre-encode them since they might be part of a matching splat param from\n    // an ancestor route\n    href = href.replace(/ $/, \"%20\");\n    invariant(\n      base,\n      `No window.location.(origin|href) available to create URL for href: ${href}`\n    );\n    return new URL(href, base);\n  }\n\n  let history: History = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window, globalHistory);\n    },\n    listen(fn: Listener) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n\n      return () => {\n        window.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref(window, to);\n    },\n    createURL,\n    encodeLocation(to) {\n      // Encode a Location the same way window.location would\n      let url = createURL(to);\n      return {\n        pathname: url.pathname,\n        search: url.search,\n        hash: url.hash,\n      };\n    },\n    push,\n    replace,\n    go(n) {\n      return globalHistory.go(n);\n    },\n  };\n\n  return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n  [routeId: string]: any;\n}\n\nexport enum ResultType {\n  data = \"data\",\n  deferred = \"deferred\",\n  redirect = \"redirect\",\n  error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n  type: ResultType.data;\n  data: unknown;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n  type: ResultType.deferred;\n  deferredData: DeferredData;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n  type: ResultType.redirect;\n  // We keep the raw Response for redirects so we can return it verbatim\n  response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n  type: ResultType.error;\n  error: unknown;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n  | SuccessResult\n  | DeferredResult\n  | RedirectResult\n  | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase<LowerCaseFormMethod>;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `<Form>`,\n * useSubmit(), `<fetcher.Form>`, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude<FormMethod, \"get\">;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState.  This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude<V7_FormMethod, \"GET\">;\n\nexport type FormEncType =\n  | \"application/x-www-form-urlencoded\"\n  | \"multipart/form-data\"\n  | \"application/json\"\n  | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n  [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: FormData;\n      json: undefined;\n      text: undefined;\n    }\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: undefined;\n      json: JsonValue;\n      text: undefined;\n    }\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: undefined;\n      json: undefined;\n      text: string;\n    };\n\n/**\n * @private\n * Arguments passed to route loader/action functions.  Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs<Context> {\n  request: Request;\n  params: Params;\n  context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n//   ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n//   Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return).  Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable<unknown> | null;\n\ntype DataFunctionReturnValue = Promise<DataFunctionValue> | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction<Context = any> = {\n  (\n    args: LoaderFunctionArgs<Context>,\n    handlerCtx?: unknown\n  ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction<Context = any> {\n  (\n    args: ActionFunctionArgs<Context>,\n    handlerCtx?: unknown\n  ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n  currentUrl: URL;\n  currentParams: AgnosticDataRouteMatch[\"params\"];\n  nextUrl: URL;\n  nextParams: AgnosticDataRouteMatch[\"params\"];\n  formMethod?: Submission[\"formMethod\"];\n  formAction?: Submission[\"formAction\"];\n  formEncType?: Submission[\"formEncType\"];\n  text?: Submission[\"text\"];\n  formData?: Submission[\"formData\"];\n  json?: Submission[\"json\"];\n  actionStatus?: number;\n  actionResult?: any;\n  defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature.  This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments.  It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n  (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n  (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n  extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {\n  shouldLoad: boolean;\n  resolve: (\n    handlerOverride?: (\n      handler: (ctx?: unknown) => DataFunctionReturnValue\n    ) => DataFunctionReturnValue\n  ) => Promise<DataStrategyResult>;\n}\n\nexport interface DataStrategyFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {\n  matches: DataStrategyMatch[];\n  fetcherKey: string | null;\n}\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface DataStrategyResult {\n  type: \"data\" | \"error\";\n  result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\nexport interface DataStrategyFunction {\n  (args: DataStrategyFunctionArgs): Promise<Record<string, DataStrategyResult>>;\n}\n\nexport type AgnosticPatchRoutesOnNavigationFunctionArgs<\n  O extends AgnosticRouteObject = AgnosticRouteObject,\n  M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = {\n  signal: AbortSignal;\n  path: string;\n  matches: M[];\n  fetcherKey: string | undefined;\n  patch: (routeId: string | null, children: O[]) => void;\n};\n\nexport type AgnosticPatchRoutesOnNavigationFunction<\n  O extends AgnosticRouteObject = AgnosticRouteObject,\n  M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = (\n  opts: AgnosticPatchRoutesOnNavigationFunctionArgs<O, M>\n) => void | Promise<void>;\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n  (route: AgnosticRouteObject): {\n    hasErrorBoundary: boolean;\n  } & Record<string, any>;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n  | \"lazy\"\n  | \"caseSensitive\"\n  | \"path\"\n  | \"id\"\n  | \"index\"\n  | \"children\";\n\nexport const immutableRouteKeys = new Set<ImmutableRouteKey>([\n  \"lazy\",\n  \"caseSensitive\",\n  \"path\",\n  \"id\",\n  \"index\",\n  \"children\",\n]);\n\ntype RequireOne<T, Key = keyof T> = Exclude<\n  {\n    [K in keyof T]: K extends Key ? Omit<T, K> & Required<Pick<T, K>> : never;\n  }[keyof T],\n  undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction<R extends AgnosticRouteObject> {\n  (): Promise<RequireOne<Omit<R, ImmutableRouteKey>>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n  caseSensitive?: boolean;\n  path?: string;\n  id?: string;\n  loader?: LoaderFunction | boolean;\n  action?: ActionFunction | boolean;\n  hasErrorBoundary?: boolean;\n  shouldRevalidate?: ShouldRevalidateFunction;\n  handle?: any;\n  lazy?: LazyRouteFunction<AgnosticBaseRouteObject>;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n  children?: undefined;\n  index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n  children?: AgnosticRouteObject[];\n  index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n  | AgnosticIndexRouteObject\n  | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n  id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n  children?: AgnosticDataRouteObject[];\n  id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n  | AgnosticDataIndexRouteObject\n  | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record<string, AgnosticDataRouteObject | undefined>;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam<Path extends string> =\n  // split path into individual path segments\n  Path extends `${infer L}/${infer R}`\n    ? _PathParam<L> | _PathParam<R>\n    : // find params after `:`\n    Path extends `:${infer Param}`\n    ? Param extends `${infer Optional}?`\n      ? Optional\n      : Param\n    : // otherwise, there aren't any params present\n      never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam<Path extends string> =\n  // check if path is just a wildcard\n  Path extends \"*\" | \"/*\"\n    ? \"*\"\n    : // look for wildcard at the end of the path\n    Path extends `${infer Rest}/*`\n    ? \"*\" | _PathParam<Rest>\n    : // look for params in the absence of wildcards\n      _PathParam<Path>;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey<Segment extends string> =\n  // if you could not find path params, fallback to `string`\n  [PathParam<Segment>] extends [never] ? string : PathParam<Segment>;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params<Key extends string = string> = {\n  readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n  ParamKey extends string = string,\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  /**\n   * The names and values of dynamic parameters in the URL.\n   */\n  params: Params<ParamKey>;\n  /**\n   * The portion of the URL pathname that was matched.\n   */\n  pathname: string;\n  /**\n   * The portion of the URL pathname that was matched before child routes.\n   */\n  pathnameBase: string;\n  /**\n   * The route object that was used to match.\n   */\n  route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n  extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {}\n\nfunction isIndexRoute(\n  route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n  return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n  routes: AgnosticRouteObject[],\n  mapRouteProperties: MapRoutePropertiesFunction,\n  parentPath: string[] = [],\n  manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n  return routes.map((route, index) => {\n    let treePath = [...parentPath, String(index)];\n    let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n    invariant(\n      route.index !== true || !route.children,\n      `Cannot specify children on an index route`\n    );\n    invariant(\n      !manifest[id],\n      `Found a route id collision on id \"${id}\".  Route ` +\n        \"id's must be globally unique within Data Router usages\"\n    );\n\n    if (isIndexRoute(route)) {\n      let indexRoute: AgnosticDataIndexRouteObject = {\n        ...route,\n        ...mapRouteProperties(route),\n        id,\n      };\n      manifest[id] = indexRoute;\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n        ...route,\n        ...mapRouteProperties(route),\n        id,\n        children: undefined,\n      };\n      manifest[id] = pathOrLayoutRoute;\n\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n          route.children,\n          mapRouteProperties,\n          treePath,\n          manifest\n        );\n      }\n\n      return pathOrLayoutRoute;\n    }\n  });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/v6/utils/match-routes\n */\nexport function matchRoutes<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  routes: RouteObjectType[],\n  locationArg: Partial<Location> | string,\n  basename = \"/\"\n): AgnosticRouteMatch<string, RouteObjectType>[] | null {\n  return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  routes: RouteObjectType[],\n  locationArg: Partial<Location> | string,\n  basename: string,\n  allowPartial: boolean\n): AgnosticRouteMatch<string, RouteObjectType>[] | null {\n  let location =\n    typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n  let pathname = stripBasename(location.pathname || \"/\", basename);\n\n  if (pathname == null) {\n    return null;\n  }\n\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n\n  let matches = null;\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    // Incoming pathnames are generally encoded from either window.location\n    // or from router.navigate, but we want to match against the unencoded\n    // paths in the route definitions.  Memory router locations won't be\n    // encoded here but there also shouldn't be anything to decode so this\n    // should be a safe operation.  This avoids needing matchRoutes to be\n    // history-aware.\n    let decoded = decodePath(pathname);\n    matches = matchRouteBranch<string, RouteObjectType>(\n      branches[i],\n      decoded,\n      allowPartial\n    );\n  }\n\n  return matches;\n}\n\nexport interface UIMatch<Data = unknown, Handle = unknown> {\n  id: string;\n  pathname: string;\n  params: AgnosticRouteMatch[\"params\"];\n  data: Data;\n  handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n  match: AgnosticDataRouteMatch,\n  loaderData: RouteData\n): UIMatch {\n  let { route, pathname, params } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    handle: route.handle,\n  };\n}\n\ninterface RouteMeta<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  relativePath: string;\n  caseSensitive: boolean;\n  childrenIndex: number;\n  route: RouteObjectType;\n}\n\ninterface RouteBranch<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  path: string;\n  score: number;\n  routesMeta: RouteMeta<RouteObjectType>[];\n}\n\nfunction flattenRoutes<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  routes: RouteObjectType[],\n  branches: RouteBranch<RouteObjectType>[] = [],\n  parentsMeta: RouteMeta<RouteObjectType>[] = [],\n  parentPath = \"\"\n): RouteBranch<RouteObjectType>[] {\n  let flattenRoute = (\n    route: RouteObjectType,\n    index: number,\n    relativePath?: string\n  ) => {\n    let meta: RouteMeta<RouteObjectType> = {\n      relativePath:\n        relativePath === undefined ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route,\n    };\n\n    if (meta.relativePath.startsWith(\"/\")) {\n      invariant(\n        meta.relativePath.startsWith(parentPath),\n        `Absolute route path \"${meta.relativePath}\" nested under path ` +\n          `\"${parentPath}\" is not valid. An absolute child route path ` +\n          `must start with the combined path of all its parent routes.`\n      );\n\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\n\n    // Add the children before adding this route to the array, so we traverse the\n    // route tree depth-first and child routes appear before their parents in\n    // the \"flattened\" version.\n    if (route.children && route.children.length > 0) {\n      invariant(\n        // Our types know better, but runtime JS may not!\n        // @ts-expect-error\n        route.index !== true,\n        `Index routes must not have child routes. Please remove ` +\n          `all child routes from route path \"${path}\".`\n      );\n      flattenRoutes(route.children, branches, routesMeta, path);\n    }\n\n    // Routes without a path shouldn't ever match by themselves unless they are\n    // index routes, so don't add them to the list of possible branches.\n    if (route.path == null && !route.index) {\n      return;\n    }\n\n    branches.push({\n      path,\n      score: computeScore(path, route.index),\n      routesMeta,\n    });\n  };\n  routes.forEach((route, index) => {\n    // coarse-grain check for optional params\n    if (route.path === \"\" || !route.path?.includes(\"?\")) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, exploded);\n      }\n    }\n  });\n\n  return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n\n  let [first, ...rest] = segments;\n\n  // Optional path segments are denoted by a trailing `?`\n  let isOptional = first.endsWith(\"?\");\n  // Compute the corresponding required segment: `foo?` -> `foo`\n  let required = first.replace(/\\?$/, \"\");\n\n  if (rest.length === 0) {\n    // Intepret empty string as omitting an optional segment\n    // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n    return isOptional ? [required, \"\"] : [required];\n  }\n\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n  let result: string[] = [];\n\n  // All child paths with the prefix.  Do this for all children before the\n  // optional version for all children, so we get consistent ordering where the\n  // parent optional aspect is preferred as required.  Otherwise, we can get\n  // child sections interspersed where deeper optional segments are higher than\n  // parent optional segments, where for example, /:two would explode _earlier_\n  // then /:one.  By always including the parent as required _for all children_\n  // first, we avoid this issue\n  result.push(\n    ...restExploded.map((subpath) =>\n      subpath === \"\" ? required : [required, subpath].join(\"/\")\n    )\n  );\n\n  // Then, if this is an optional value, add all child versions without\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n\n  // for absolute paths, ensure `/` instead of empty segment\n  return result.map((exploded) =>\n    path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n  );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n  branches.sort((a, b) =>\n    a.score !== b.score\n      ? b.score - a.score // Higher score first\n      : compareIndexes(\n          a.routesMeta.map((meta) => meta.childrenIndex),\n          b.routesMeta.map((meta) => meta.childrenIndex)\n        )\n  );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n  let segments = path.split(\"/\");\n  let initialScore = segments.length;\n  if (segments.some(isSplat)) {\n    initialScore += splatPenalty;\n  }\n\n  if (index) {\n    initialScore += indexRouteValue;\n  }\n\n  return segments\n    .filter((s) => !isSplat(s))\n    .reduce(\n      (score, segment) =>\n        score +\n        (paramRe.test(segment)\n          ? dynamicSegmentValue\n          : segment === \"\"\n          ? emptySegmentValue\n          : staticSegmentValue),\n      initialScore\n    );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n  let siblings =\n    a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n  return siblings\n    ? // If two routes are siblings, we should try to match the earlier sibling\n      // first. This allows people to have fine-grained control over the matching\n      // behavior by simply putting routes with identical paths in the order they\n      // want them tried.\n      a[a.length - 1] - b[b.length - 1]\n    : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n      // so they sort equally.\n      0;\n}\n\nfunction matchRouteBranch<\n  ParamKey extends string = string,\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  branch: RouteBranch<RouteObjectType>,\n  pathname: string,\n  allowPartial = false\n): AgnosticRouteMatch<ParamKey, RouteObjectType>[] | null {\n  let { routesMeta } = branch;\n\n  let matchedParams = {};\n  let matchedPathname = \"/\";\n  let matches: AgnosticRouteMatch<ParamKey, RouteObjectType>[] = [];\n  for (let i = 0; i < routesMeta.length; ++i) {\n    let meta = routesMeta[i];\n    let end = i === routesMeta.length - 1;\n    let remainingPathname =\n      matchedPathname === \"/\"\n        ? pathname\n        : pathname.slice(matchedPathname.length) || \"/\";\n    let match = matchPath(\n      { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n      remainingPathname\n    );\n\n    let route = meta.route;\n\n    if (\n      !match &&\n      end &&\n      allowPartial &&\n      !routesMeta[routesMeta.length - 1].route.index\n    ) {\n      match = matchPath(\n        {\n          path: meta.relativePath,\n          caseSensitive: meta.caseSensitive,\n          end: false,\n        },\n        remainingPathname\n      );\n    }\n\n    if (!match) {\n      return null;\n    }\n\n    Object.assign(matchedParams, match.params);\n\n    matches.push({\n      // TODO: Can this as be avoided?\n      params: matchedParams as Params<ParamKey>,\n      pathname: joinPaths([matchedPathname, match.pathname]),\n      pathnameBase: normalizePathname(\n        joinPaths([matchedPathname, match.pathnameBase])\n      ),\n      route,\n    });\n\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n\n  return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/v6/utils/generate-path\n */\nexport function generatePath<Path extends string>(\n  originalPath: Path,\n  params: {\n    [key in PathParam<Path>]: string | null;\n  } = {} as any\n): string {\n  let path: string = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(\n      false,\n      `Route path \"${path}\" will be treated as if it were ` +\n        `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n        `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n        `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n    );\n    path = path.replace(/\\*$/, \"/*\") as Path;\n  }\n\n  // ensure `/` is added at the beginning if the path is absolute\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n  const stringify = (p: any) =>\n    p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n  const segments = path\n    .split(/\\/+/)\n    .map((segment, index, array) => {\n      const isLastSegment = index === array.length - 1;\n\n      // only apply the splat if it's the last segment\n      if (isLastSegment && segment === \"*\") {\n        const star = \"*\" as PathParam<Path>;\n        // Apply the splat\n        return stringify(params[star]);\n      }\n\n      const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n      if (keyMatch) {\n        const [, key, optional] = keyMatch;\n        let param = params[key as PathParam<Path>];\n        invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n        return stringify(param);\n      }\n\n      // Remove any optional markers from optional static segments\n      return segment.replace(/\\?$/g, \"\");\n    })\n    // Remove empty segments\n    .filter((segment) => !!segment);\n\n  return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern<Path extends string = string> {\n  /**\n   * A string to match against a URL pathname. May contain `:id`-style segments\n   * to indicate placeholders for dynamic parameters. May also end with `/*` to\n   * indicate matching the rest of the URL pathname.\n   */\n  path: Path;\n  /**\n   * Should be `true` if the static portions of the `path` should be matched in\n   * the same case.\n   */\n  caseSensitive?: boolean;\n  /**\n   * Should be `true` if this pattern should match the entire URL pathname.\n   */\n  end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch<ParamKey extends string = string> {\n  /**\n   * The names and values of dynamic parameters in the URL.\n   */\n  params: Params<ParamKey>;\n  /**\n   * The portion of the URL pathname that was matched.\n   */\n  pathname: string;\n  /**\n   * The portion of the URL pathname that was matched before child routes.\n   */\n  pathnameBase: string;\n  /**\n   * The pattern that was used to match.\n   */\n  pattern: PathPattern;\n}\n\ntype Mutable<T> = {\n  -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/v6/utils/match-path\n */\nexport function matchPath<\n  ParamKey extends ParamParseKey<Path>,\n  Path extends string\n>(\n  pattern: PathPattern<Path> | Path,\n  pathname: string\n): PathMatch<ParamKey> | null {\n  if (typeof pattern === \"string\") {\n    pattern = { path: pattern, caseSensitive: false, end: true };\n  }\n\n  let [matcher, compiledParams] = compilePath(\n    pattern.path,\n    pattern.caseSensitive,\n    pattern.end\n  );\n\n  let match = pathname.match(matcher);\n  if (!match) return null;\n\n  let matchedPathname = match[0];\n  let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n  let captureGroups = match.slice(1);\n  let params: Params = compiledParams.reduce<Mutable<Params>>(\n    (memo, { paramName, isOptional }, index) => {\n      // We need to compute the pathnameBase here using the raw splat value\n      // instead of using params[\"*\"] later because it will be decoded then\n      if (paramName === \"*\") {\n        let splatValue = captureGroups[index] || \"\";\n        pathnameBase = matchedPathname\n          .slice(0, matchedPathname.length - splatValue.length)\n          .replace(/(.)\\/+$/, \"$1\");\n      }\n\n      const value = captureGroups[index];\n      if (isOptional && !value) {\n        memo[paramName] = undefined;\n      } else {\n        memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n      }\n      return memo;\n    },\n    {}\n  );\n\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern,\n  };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n  path: string,\n  caseSensitive = false,\n  end = true\n): [RegExp, CompiledPathParam[]] {\n  warning(\n    path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n    `Route path \"${path}\" will be treated as if it were ` +\n      `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n      `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n      `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n  );\n\n  let params: CompiledPathParam[] = [];\n  let regexpSource =\n    \"^\" +\n    path\n      .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n      .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n      .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n      .replace(\n        /\\/:([\\w-]+)(\\?)?/g,\n        (_: string, paramName: string, isOptional) => {\n          params.push({ paramName, isOptional: isOptional != null });\n          return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n        }\n      );\n\n  if (path.endsWith(\"*\")) {\n    params.push({ paramName: \"*\" });\n    regexpSource +=\n      path === \"*\" || path === \"/*\"\n        ? \"(.*)$\" // Already matched the initial /, just match the rest\n        : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n  } else if (end) {\n    // When matching to the end, ignore trailing slashes\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    // If our path is non-empty and contains anything beyond an initial slash,\n    // then we have _some_ form of path in our regex, so we should expect to\n    // match only if we find the end of this path segment.  Look for an optional\n    // non-captured trailing slash (to match a portion of the URL) or the end\n    // of the path (if we've matched to the end).  We used to do this with a\n    // word boundary but that gives false positives on routes like\n    // /user-preferences since `-` counts as a word boundary.\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else {\n    // Nothing to match for \"\" or \"/\"\n  }\n\n  let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n  return [matcher, params];\n}\n\nexport function decodePath(value: string) {\n  try {\n    return value\n      .split(\"/\")\n      .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n      .join(\"/\");\n  } catch (error) {\n    warning(\n      false,\n      `The URL path \"${value}\" could not be decoded because it is is a ` +\n        `malformed URL segment. This is probably due to a bad percent ` +\n        `encoding (${error}).`\n    );\n\n    return value;\n  }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n  pathname: string,\n  basename: string\n): string | null {\n  if (basename === \"/\") return pathname;\n\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  let startIndex = basename.endsWith(\"/\")\n    ? basename.length - 1\n    : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    // pathname does not start with basename/\n    return null;\n  }\n\n  return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/v6/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\",\n  } = typeof to === \"string\" ? parsePath(to) : to;\n\n  let pathname = toPathname\n    ? toPathname.startsWith(\"/\")\n      ? toPathname\n      : resolvePathname(toPathname, fromPathname)\n    : fromPathname;\n\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash),\n  };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n  let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n\n  relativeSegments.forEach((segment) => {\n    if (segment === \"..\") {\n      // Keep the root \"\" segment so the pathname starts at /\n      if (segments.length > 1) segments.pop();\n    } else if (segment !== \".\") {\n      segments.push(segment);\n    }\n  });\n\n  return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n  char: string,\n  field: string,\n  dest: string,\n  path: Partial<Path>\n) {\n  return (\n    `Cannot include a '${char}' character in a manually specified ` +\n    `\\`to.${field}\\` field [${JSON.stringify(\n      path\n    )}].  Please separate it out to the ` +\n    `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n    `a string in <Link to=\"...\"> and the router will parse it for you.`\n  );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same.  Both of the following examples should link back to the root:\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\" element={<Link to=\"..\"}>\n *   </Route>\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\">\n *       <Route element={<AccountsLayout />}>       // <-- Does not contribute\n *         <Route index element={<Link to=\"..\"} />  // <-- Does not contribute\n *       </Route\n *     </Route>\n *   </Route>\n */\nexport function getPathContributingMatches<\n  T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n  return matches.filter(\n    (match, index) =>\n      index === 0 || (match.route.path && match.route.path.length > 0)\n  );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n  T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n  let pathMatches = getPathContributingMatches(matches);\n\n  // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n  // match so we include splat values for \".\" links.  See:\n  // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n  if (v7_relativeSplatPath) {\n    return pathMatches.map((match, idx) =>\n      idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n    );\n  }\n\n  return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n  toArg: To,\n  routePathnames: string[],\n  locationPathname: string,\n  isPathRelative = false\n): Path {\n  let to: Partial<Path>;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = { ...toArg };\n\n    invariant(\n      !to.pathname || !to.pathname.includes(\"?\"),\n      getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n    );\n    invariant(\n      !to.pathname || !to.pathname.includes(\"#\"),\n      getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n    );\n    invariant(\n      !to.search || !to.search.includes(\"#\"),\n      getInvalidPathError(\"#\", \"search\", \"hash\", to)\n    );\n  }\n\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n  let from: string;\n\n  // Routing is relative to the current pathname if explicitly requested.\n  //\n  // If a pathname is explicitly provided in `to`, it should be relative to the\n  // route context. This is explained in `Note on `<Link to>` values` in our\n  // migration guide from v5 as a means of disambiguation between `to` values\n  // that begin with `/` and those that do not. However, this is problematic for\n  // `to` values that do not provide a pathname. `to` can simply be a search or\n  // hash string, in which case we should assume that the navigation is relative\n  // to the current location's pathname and *not* the route pathname.\n  if (toPathname == null) {\n    from = locationPathname;\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\n\n    // With relative=\"route\" (the default), each leading .. segment means\n    // \"go up one route\" instead of \"go up one URL segment\".  This is a key\n    // difference from how <a href> works and a major reason we call this a\n    // \"to\" value instead of a \"href\".\n    if (!isPathRelative && toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        routePathnameIndex -= 1;\n      }\n\n      to.pathname = toSegments.join(\"/\");\n    }\n\n    from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n  }\n\n  let path = resolvePath(to, from);\n\n  // Ensure the pathname has a trailing slash if the original \"to\" had one\n  let hasExplicitTrailingSlash =\n    toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  // Or if this was a link to the current path which has a trailing slash\n  let hasCurrentTrailingSlash =\n    (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (\n    !path.pathname.endsWith(\"/\") &&\n    (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n  ) {\n    path.pathname += \"/\";\n  }\n\n  return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n  // Empty strings should be treated the same as / paths\n  return to === \"\" || (to as Path).pathname === \"\"\n    ? \"/\"\n    : typeof to === \"string\"\n    ? parsePath(to).pathname\n    : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n  paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n  pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n  !search || search === \"?\"\n    ? \"\"\n    : search.startsWith(\"?\")\n    ? search\n    : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n  !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = <Data>(\n  data: Data,\n  init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n  let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n  let headers = new Headers(responseInit.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n  }\n\n  return new Response(JSON.stringify(data), {\n    ...responseInit,\n    headers,\n  });\n};\n\nexport class DataWithResponseInit<D> {\n  type: string = \"DataWithResponseInit\";\n  data: D;\n  init: ResponseInit | null;\n\n  constructor(data: D, init?: ResponseInit) {\n    this.data = data;\n    this.init = init || null;\n  }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data<D>(data: D, init?: number | ResponseInit) {\n  return new DataWithResponseInit(\n    data,\n    typeof init === \"number\" ? { status: init } : init\n  );\n}\n\nexport interface TrackedPromise extends Promise<any> {\n  _tracked?: boolean;\n  _data?: any;\n  _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n  private pendingKeysSet: Set<string> = new Set<string>();\n  private controller: AbortController;\n  private abortPromise: Promise<void>;\n  private unlistenAbortSignal: () => void;\n  private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n    new Set();\n  data: Record<string, unknown>;\n  init?: ResponseInit;\n  deferredKeys: string[] = [];\n\n  constructor(data: Record<string, unknown>, responseInit?: ResponseInit) {\n    invariant(\n      data && typeof data === \"object\" && !Array.isArray(data),\n      \"defer() only accepts plain objects\"\n    );\n\n    // Set up an AbortController + Promise we can race against to exit early\n    // cancellation\n    let reject: (e: AbortedDeferredError) => void;\n    this.abortPromise = new Promise((_, r) => (reject = r));\n    this.controller = new AbortController();\n    let onAbort = () =>\n      reject(new AbortedDeferredError(\"Deferred data aborted\"));\n    this.unlistenAbortSignal = () =>\n      this.controller.signal.removeEventListener(\"abort\", onAbort);\n    this.controller.signal.addEventListener(\"abort\", onAbort);\n\n    this.data = Object.entries(data).reduce(\n      (acc, [key, value]) =>\n        Object.assign(acc, {\n          [key]: this.trackPromise(key, value),\n        }),\n      {}\n    );\n\n    if (this.done) {\n      // All incoming values were resolved\n      this.unlistenAbortSignal();\n    }\n\n    this.init = responseInit;\n  }\n\n  private trackPromise(\n    key: string,\n    value: Promise<unknown> | unknown\n  ): TrackedPromise | unknown {\n    if (!(value instanceof Promise)) {\n      return value;\n    }\n\n    this.deferredKeys.push(key);\n    this.pendingKeysSet.add(key);\n\n    // We store a little wrapper promise that will be extended with\n    // _data/_error props upon resolve/reject\n    let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n      (data) => this.onSettle(promise, key, undefined, data as unknown),\n      (error) => this.onSettle(promise, key, error as unknown)\n    );\n\n    // Register rejection listeners to avoid uncaught promise rejections on\n    // errors or aborted deferred values\n    promise.catch(() => {});\n\n    Object.defineProperty(promise, \"_tracked\", { get: () => true });\n    return promise;\n  }\n\n  private onSettle(\n    promise: TrackedPromise,\n    key: string,\n    error: unknown,\n    data?: unknown\n  ): unknown {\n    if (\n      this.controller.signal.aborted &&\n      error instanceof AbortedDeferredError\n    ) {\n      this.unlistenAbortSignal();\n      Object.defineProperty(promise, \"_error\", { get: () => error });\n      return Promise.reject(error);\n    }\n\n    this.pendingKeysSet.delete(key);\n\n    if (this.done) {\n      // Nothing left to abort!\n      this.unlistenAbortSignal();\n    }\n\n    // If the promise was resolved/rejected with undefined, we'll throw an error as you\n    // should always resolve with a value or null\n    if (error === undefined && data === undefined) {\n      let undefinedError = new Error(\n        `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n          `you must resolve/reject with a value or \\`null\\`.`\n      );\n      Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n      this.emit(false, key);\n      return Promise.reject(undefinedError);\n    }\n\n    if (data === undefined) {\n      Object.defineProperty(promise, \"_error\", { get: () => error });\n      this.emit(false, key);\n      return Promise.reject(error);\n    }\n\n    Object.defineProperty(promise, \"_data\", { get: () => data });\n    this.emit(false, key);\n    return data;\n  }\n\n  private emit(aborted: boolean, settledKey?: string) {\n    this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n  }\n\n  subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n    this.subscribers.add(fn);\n    return () => this.subscribers.delete(fn);\n  }\n\n  cancel() {\n    this.controller.abort();\n    this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n    this.emit(true);\n  }\n\n  async resolveData(signal: AbortSignal) {\n    let aborted = false;\n    if (!this.done) {\n      let onAbort = () => this.cancel();\n      signal.addEventListener(\"abort\", onAbort);\n      aborted = await new Promise((resolve) => {\n        this.subscribe((aborted) => {\n          signal.removeEventListener(\"abort\", onAbort);\n          if (aborted || this.done) {\n            resolve(aborted);\n          }\n        });\n      });\n    }\n    return aborted;\n  }\n\n  get done() {\n    return this.pendingKeysSet.size === 0;\n  }\n\n  get unwrappedData() {\n    invariant(\n      this.data !== null && this.done,\n      \"Can only unwrap data on initialized and settled deferreds\"\n    );\n\n    return Object.entries(this.data).reduce(\n      (acc, [key, value]) =>\n        Object.assign(acc, {\n          [key]: unwrapTrackedPromise(value),\n        }),\n      {}\n    );\n  }\n\n  get pendingKeys() {\n    return Array.from(this.pendingKeysSet);\n  }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n  return (\n    value instanceof Promise && (value as TrackedPromise)._tracked === true\n  );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n  if (!isTrackedPromise(value)) {\n    return value;\n  }\n\n  if (value._error) {\n    throw value._error;\n  }\n  return value._data;\n}\n\nexport type DeferFunction = (\n  data: Record<string, unknown>,\n  init?: number | ResponseInit\n) => DeferredData;\n\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\n */\nexport const defer: DeferFunction = (data, init = {}) => {\n  let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n  return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n  url: string,\n  init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = { status: responseInit };\n  } else if (typeof responseInit.status === \"undefined\") {\n    responseInit.status = 302;\n  }\n\n  let headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n\n  return new Response(null, {\n    ...responseInit,\n    headers,\n  });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\n\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Replace\", \"true\");\n  return response;\n};\n\nexport type ErrorResponse = {\n  status: number;\n  statusText: string;\n  data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n  status: number;\n  statusText: string;\n  data: any;\n  private error?: Error;\n  private internal: boolean;\n\n  constructor(\n    status: number,\n    statusText: string | undefined,\n    data: any,\n    internal = false\n  ) {\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data instanceof Error) {\n      this.data = data.toString();\n      this.error = data;\n    } else {\n      this.data = data;\n    }\n  }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n  return (\n    error != null &&\n    typeof error.status === \"number\" &&\n    typeof error.statusText === \"string\" &&\n    typeof error.internal === \"boolean\" &&\n    \"data\" in error\n  );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n  Action as HistoryAction,\n  createLocation,\n  createPath,\n  invariant,\n  parsePath,\n  warning,\n} from \"./history\";\nimport type {\n  AgnosticDataRouteMatch,\n  AgnosticDataRouteObject,\n  DataStrategyMatch,\n  AgnosticRouteObject,\n  DataResult,\n  DataStrategyFunction,\n  DataStrategyFunctionArgs,\n  DeferredData,\n  DeferredResult,\n  DetectErrorBoundaryFunction,\n  ErrorResult,\n  FormEncType,\n  FormMethod,\n  HTMLFormMethod,\n  DataStrategyResult,\n  ImmutableRouteKey,\n  MapRoutePropertiesFunction,\n  MutationFormMethod,\n  RedirectResult,\n  RouteData,\n  RouteManifest,\n  ShouldRevalidateFunctionArgs,\n  Submission,\n  SuccessResult,\n  UIMatch,\n  V7_FormMethod,\n  V7_MutationFormMethod,\n  AgnosticPatchRoutesOnNavigationFunction,\n  DataWithResponseInit,\n} from \"./utils\";\nimport {\n  ErrorResponseImpl,\n  ResultType,\n  convertRouteMatchToUiMatch,\n  convertRoutesToDataRoutes,\n  getPathContributingMatches,\n  getResolveToMatches,\n  immutableRouteKeys,\n  isRouteErrorResponse,\n  joinPaths,\n  matchRoutes,\n  matchRoutesImpl,\n  resolveTo,\n  stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the basename for the router\n   */\n  get basename(): RouterInit[\"basename\"];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the future config for the router\n   */\n  get future(): FutureConfig;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the current state of the router\n   */\n  get state(): RouterState;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the routes for this router instance\n   */\n  get routes(): AgnosticDataRouteObject[];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the window associated with the router\n   */\n  get window(): RouterInit[\"window\"];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Initialize the router, including adding history listeners and kicking off\n   * initial data fetches.  Returns a function to cleanup listeners and abort\n   * any in-progress loads\n   */\n  initialize(): Router;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Subscribe to router.state updates\n   *\n   * @param fn function to call with the new state\n   */\n  subscribe(fn: RouterSubscriber): () => void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Enable scroll restoration behavior in the router\n   *\n   * @param savedScrollPositions Object that will manage positions, in case\n   *                             it's being restored from sessionStorage\n   * @param getScrollPosition    Function to get the active Y scroll position\n   * @param getKey               Function to get the key to use for restoration\n   */\n  enableScrollRestoration(\n    savedScrollPositions: Record<string, number>,\n    getScrollPosition: GetScrollPositionFunction,\n    getKey?: GetScrollRestorationKeyFunction\n  ): () => void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Navigate forward/backward in the history stack\n   * @param to Delta to move in the history stack\n   */\n  navigate(to: number): Promise<void>;\n\n  /**\n   * Navigate to the given path\n   * @param to Path to navigate to\n   * @param opts Navigation options (method, submission, etc.)\n   */\n  navigate(to: To | null, opts?: RouterNavigateOptions): Promise<void>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Trigger a fetcher load/submission\n   *\n   * @param key     Fetcher key\n   * @param routeId Route that owns the fetcher\n   * @param href    href to fetch\n   * @param opts    Fetcher options, (method, submission, etc.)\n   */\n  fetch(\n    key: string,\n    routeId: string,\n    href: string | null,\n    opts?: RouterFetchOptions\n  ): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Trigger a revalidation of all current route loaders and fetcher loads\n   */\n  revalidate(): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Utility function to create an href for the given location\n   * @param location\n   */\n  createHref(location: Location | URL): string;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Utility function to URL encode a destination path according to the internal\n   * history implementation\n   * @param to\n   */\n  encodeLocation(to: To): Path;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Get/create a fetcher for the given key\n   * @param key\n   */\n  getFetcher<TData = any>(key: string): Fetcher<TData>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Delete the fetcher for a given key\n   * @param key\n   */\n  deleteFetcher(key: string): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Cleanup listeners and abort any in-progress loads\n   */\n  dispose(): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Get a navigation blocker\n   * @param key The identifier for the blocker\n   * @param fn The blocker function implementation\n   */\n  getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Delete a navigation blocker\n   * @param key The identifier for the blocker\n   */\n  deleteBlocker(key: string): void;\n\n  /**\n   * @internal\n   * PRIVATE DO NOT USE\n   *\n   * Patch additional children routes into an existing parent route\n   * @param routeId The parent route id or a callback function accepting `patch`\n   *                to perform batch patching\n   * @param children The additional children routes\n   */\n  patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * HMR needs to pass in-flight route updates to React Router\n   * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n   */\n  _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Internal fetch AbortControllers accessed by unit tests\n   */\n  _internalFetchControllers: Map<string, AbortController>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Internal pending DeferredData instances accessed by unit tests\n   */\n  _internalActiveDeferreds: Map<string, DeferredData>;\n}\n\n/**\n * State maintained internally by the router.  During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n  /**\n   * The action of the most recent navigation\n   */\n  historyAction: HistoryAction;\n\n  /**\n   * The current location reflected by the router\n   */\n  location: Location;\n\n  /**\n   * The current set of route matches\n   */\n  matches: AgnosticDataRouteMatch[];\n\n  /**\n   * Tracks whether we've completed our initial data load\n   */\n  initialized: boolean;\n\n  /**\n   * Current scroll position we should start at for a new view\n   *  - number -> scroll position to restore to\n   *  - false -> do not restore scroll at all (used during submissions)\n   *  - null -> don't have a saved position, scroll to hash or top of page\n   */\n  restoreScrollPosition: number | false | null;\n\n  /**\n   * Indicate whether this navigation should skip resetting the scroll position\n   * if we are unable to restore the scroll position\n   */\n  preventScrollReset: boolean;\n\n  /**\n   * Tracks the state of the current navigation\n   */\n  navigation: Navigation;\n\n  /**\n   * Tracks any in-progress revalidations\n   */\n  revalidation: RevalidationState;\n\n  /**\n   * Data from the loaders for the current matches\n   */\n  loaderData: RouteData;\n\n  /**\n   * Data from the action for the current matches\n   */\n  actionData: RouteData | null;\n\n  /**\n   * Errors caught from loaders for the current matches\n   */\n  errors: RouteData | null;\n\n  /**\n   * Map of current fetchers\n   */\n  fetchers: Map<string, Fetcher>;\n\n  /**\n   * Map of current blockers\n   */\n  blockers: Map<string, Blocker>;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n  Pick<RouterState, \"loaderData\" | \"actionData\" | \"errors\">\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n  v7_fetcherPersist: boolean;\n  v7_normalizeFormMethod: boolean;\n  v7_partialHydration: boolean;\n  v7_prependBasename: boolean;\n  v7_relativeSplatPath: boolean;\n  v7_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n  routes: AgnosticRouteObject[];\n  history: History;\n  basename?: string;\n  /**\n   * @deprecated Use `mapRouteProperties` instead\n   */\n  detectErrorBoundary?: DetectErrorBoundaryFunction;\n  mapRouteProperties?: MapRoutePropertiesFunction;\n  future?: Partial<FutureConfig>;\n  hydrationData?: HydrationState;\n  window?: Window;\n  dataStrategy?: DataStrategyFunction;\n  patchRoutesOnNavigation?: AgnosticPatchRoutesOnNavigationFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n  basename: Router[\"basename\"];\n  location: RouterState[\"location\"];\n  matches: RouterState[\"matches\"];\n  loaderData: RouterState[\"loaderData\"];\n  actionData: RouterState[\"actionData\"];\n  errors: RouterState[\"errors\"];\n  statusCode: number;\n  loaderHeaders: Record<string, Headers>;\n  actionHeaders: Record<string, Headers>;\n  activeDeferreds: Record<string, DeferredData> | null;\n  _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n  dataRoutes: AgnosticDataRouteObject[];\n  query(\n    request: Request,\n    opts?: {\n      requestContext?: unknown;\n      skipLoaderErrorBubbling?: boolean;\n      dataStrategy?: DataStrategyFunction;\n    }\n  ): Promise<StaticHandlerContext | Response>;\n  queryRoute(\n    request: Request,\n    opts?: {\n      routeId?: string;\n      requestContext?: unknown;\n      dataStrategy?: DataStrategyFunction;\n    }\n  ): Promise<any>;\n}\n\ntype ViewTransitionOpts = {\n  currentLocation: Location;\n  nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n  (\n    state: RouterState,\n    opts: {\n      deletedFetchers: string[];\n      viewTransitionOpts?: ViewTransitionOpts;\n      flushSync: boolean;\n    }\n  ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n  (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n  (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n  replace?: boolean;\n  state?: any;\n  fromRouteId?: string;\n  viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n  formMethod?: HTMLFormMethod;\n  formEncType?: FormEncType;\n} & (\n  | { formData: FormData; body?: undefined }\n  | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n  | LinkNavigateOptions\n  | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n  Idle: {\n    state: \"idle\";\n    location: undefined;\n    formMethod: undefined;\n    formAction: undefined;\n    formEncType: undefined;\n    formData: undefined;\n    json: undefined;\n    text: undefined;\n  };\n  Loading: {\n    state: \"loading\";\n    location: Location;\n    formMethod: Submission[\"formMethod\"] | undefined;\n    formAction: Submission[\"formAction\"] | undefined;\n    formEncType: Submission[\"formEncType\"] | undefined;\n    formData: Submission[\"formData\"] | undefined;\n    json: Submission[\"json\"] | undefined;\n    text: Submission[\"text\"] | undefined;\n  };\n  Submitting: {\n    state: \"submitting\";\n    location: Location;\n    formMethod: Submission[\"formMethod\"];\n    formAction: Submission[\"formAction\"];\n    formEncType: Submission[\"formEncType\"];\n    formData: Submission[\"formData\"];\n    json: Submission[\"json\"];\n    text: Submission[\"text\"];\n  };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates<TData = any> = {\n  Idle: {\n    state: \"idle\";\n    formMethod: undefined;\n    formAction: undefined;\n    formEncType: undefined;\n    text: undefined;\n    formData: undefined;\n    json: undefined;\n    data: TData | undefined;\n  };\n  Loading: {\n    state: \"loading\";\n    formMethod: Submission[\"formMethod\"] | undefined;\n    formAction: Submission[\"formAction\"] | undefined;\n    formEncType: Submission[\"formEncType\"] | undefined;\n    text: Submission[\"text\"] | undefined;\n    formData: Submission[\"formData\"] | undefined;\n    json: Submission[\"json\"] | undefined;\n    data: TData | undefined;\n  };\n  Submitting: {\n    state: \"submitting\";\n    formMethod: Submission[\"formMethod\"];\n    formAction: Submission[\"formAction\"];\n    formEncType: Submission[\"formEncType\"];\n    text: Submission[\"text\"];\n    formData: Submission[\"formData\"];\n    json: Submission[\"json\"];\n    data: TData | undefined;\n  };\n};\n\nexport type Fetcher<TData = any> =\n  FetcherStates<TData>[keyof FetcherStates<TData>];\n\ninterface BlockerBlocked {\n  state: \"blocked\";\n  reset(): void;\n  proceed(): void;\n  location: Location;\n}\n\ninterface BlockerUnblocked {\n  state: \"unblocked\";\n  reset: undefined;\n  proceed: undefined;\n  location: undefined;\n}\n\ninterface BlockerProceeding {\n  state: \"proceeding\";\n  reset: undefined;\n  proceed: undefined;\n  location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n  currentLocation: Location;\n  nextLocation: Location;\n  historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n  /**\n   * startNavigation does not need to complete the navigation because we\n   * redirected or got interrupted\n   */\n  shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n  /**\n   * Route matches which may have been updated from fog of war discovery\n   */\n  matches?: RouterState[\"matches\"];\n  /**\n   * Tuple for the returned or thrown value from the current action.  The routeId\n   * is the action route for success and the bubbled boundary route for errors.\n   */\n  pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n  /**\n   * Route matches which may have been updated from fog of war discovery\n   */\n  matches?: RouterState[\"matches\"];\n  /**\n   * loaderData returned from the current set of loaders\n   */\n  loaderData?: RouterState[\"loaderData\"];\n  /**\n   * errors thrown from the current set of loaders\n   */\n  errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n  routeId: string;\n  path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n  key: string;\n  match: AgnosticDataRouteMatch | null;\n  matches: AgnosticDataRouteMatch[] | null;\n  controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n  \"post\",\n  \"put\",\n  \"patch\",\n  \"delete\",\n];\nconst validMutationMethods = new Set<MutationFormMethod>(\n  validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n  \"get\",\n  ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set<FormMethod>(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n  state: \"idle\",\n  location: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n  state: \"idle\",\n  data: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n  state: \"unblocked\",\n  proceed: undefined,\n  reset: undefined,\n  location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n  const routerWindow = init.window\n    ? init.window\n    : typeof window !== \"undefined\"\n    ? window\n    : undefined;\n  const isBrowser =\n    typeof routerWindow !== \"undefined\" &&\n    typeof routerWindow.document !== \"undefined\" &&\n    typeof routerWindow.document.createElement !== \"undefined\";\n  const isServer = !isBrowser;\n\n  invariant(\n    init.routes.length > 0,\n    \"You must provide a non-empty routes array to createRouter\"\n  );\n\n  let mapRouteProperties: MapRoutePropertiesFunction;\n  if (init.mapRouteProperties) {\n    mapRouteProperties = init.mapRouteProperties;\n  } else if (init.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = init.detectErrorBoundary;\n    mapRouteProperties = (route) => ({\n      hasErrorBoundary: detectErrorBoundary(route),\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n\n  // Routes keyed by ID\n  let manifest: RouteManifest = {};\n  // Routes in tree format for matching\n  let dataRoutes = convertRoutesToDataRoutes(\n    init.routes,\n    mapRouteProperties,\n    undefined,\n    manifest\n  );\n  let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n  let basename = init.basename || \"/\";\n  let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n  let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n\n  // Config driven behavior flags\n  let future: FutureConfig = {\n    v7_fetcherPersist: false,\n    v7_normalizeFormMethod: false,\n    v7_partialHydration: false,\n    v7_prependBasename: false,\n    v7_relativeSplatPath: false,\n    v7_skipActionErrorRevalidation: false,\n    ...init.future,\n  };\n  // Cleanup function for history\n  let unlistenHistory: (() => void) | null = null;\n  // Externally-provided functions to call on all state changes\n  let subscribers = new Set<RouterSubscriber>();\n  // Externally-provided object to hold scroll restoration locations during routing\n  let savedScrollPositions: Record<string, number> | null = null;\n  // Externally-provided function to get scroll restoration keys\n  let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n  // Externally-provided function to get current scroll position\n  let getScrollPosition: GetScrollPositionFunction | null = null;\n  // One-time flag to control the initial hydration scroll restoration.  Because\n  // we don't get the saved positions from <ScrollRestoration /> until _after_\n  // the initial render, we need to manually trigger a separate updateState to\n  // send along the restoreScrollPosition\n  // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n  // SSR did the initial scroll restoration.\n  let initialScrollRestored = init.hydrationData != null;\n\n  let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n  let initialMatchesIsFOW = false;\n  let initialErrors: RouteData | null = null;\n\n  if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n    // If we do not match a user-provided-route, fall back to the root\n    // to allow the error boundary to take over\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname,\n    });\n    let { matches, route } = getShortCircuitMatches(dataRoutes);\n    initialMatches = matches;\n    initialErrors = { [route.id]: error };\n  }\n\n  // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n  // our initial match is a splat route, clear them out so we run through lazy\n  // discovery on hydration in case there's a more accurate lazy route match.\n  // In SSR apps (with `hydrationData`), we expect that the server will send\n  // up the proper matched routes so we don't want to run lazy discovery on\n  // initial hydration and want to hydrate into the splat route.\n  if (initialMatches && !init.hydrationData) {\n    let fogOfWar = checkFogOfWar(\n      initialMatches,\n      dataRoutes,\n      init.history.location.pathname\n    );\n    if (fogOfWar.active) {\n      initialMatches = null;\n    }\n  }\n\n  let initialized: boolean;\n  if (!initialMatches) {\n    initialized = false;\n    initialMatches = [];\n\n    // If partial hydration and fog of war is enabled, we will be running\n    // `patchRoutesOnNavigation` during hydration so include any partial matches as\n    // the initial matches so we can properly render `HydrateFallback`'s\n    if (future.v7_partialHydration) {\n      let fogOfWar = checkFogOfWar(\n        null,\n        dataRoutes,\n        init.history.location.pathname\n      );\n      if (fogOfWar.active && fogOfWar.matches) {\n        initialMatchesIsFOW = true;\n        initialMatches = fogOfWar.matches;\n      }\n    }\n  } else if (initialMatches.some((m) => m.route.lazy)) {\n    // All initialMatches need to be loaded before we're ready.  If we have lazy\n    // functions around still then we'll need to run them in initialize()\n    initialized = false;\n  } else if (!initialMatches.some((m) => m.route.loader)) {\n    // If we've got no loaders to run, then we're good to go\n    initialized = true;\n  } else if (future.v7_partialHydration) {\n    // If partial hydration is enabled, we're initialized so long as we were\n    // provided with hydrationData for every route with a loader, and no loaders\n    // were marked for explicit hydration\n    let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n    let errors = init.hydrationData ? init.hydrationData.errors : null;\n    // If errors exist, don't consider routes below the boundary\n    if (errors) {\n      let idx = initialMatches.findIndex(\n        (m) => errors![m.route.id] !== undefined\n      );\n      initialized = initialMatches\n        .slice(0, idx + 1)\n        .every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n    } else {\n      initialized = initialMatches.every(\n        (m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)\n      );\n    }\n  } else {\n    // Without partial hydration - we're initialized if we were provided any\n    // hydrationData - which is expected to be complete\n    initialized = init.hydrationData != null;\n  }\n\n  let router: Router;\n  let state: RouterState = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    navigation: IDLE_NAVIGATION,\n    // Don't restore on initial updateState() if we were SSR'd\n    restoreScrollPosition: init.hydrationData != null ? false : null,\n    preventScrollReset: false,\n    revalidation: \"idle\",\n    loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n    actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n    errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n    fetchers: new Map(),\n    blockers: new Map(),\n  };\n\n  // -- Stateful internal variables to manage navigations --\n  // Current navigation in progress (to be committed in completeNavigation)\n  let pendingAction: HistoryAction = HistoryAction.Pop;\n\n  // Should the current navigation prevent the scroll reset if scroll cannot\n  // be restored?\n  let pendingPreventScrollReset = false;\n\n  // AbortController for the active navigation\n  let pendingNavigationController: AbortController | null;\n\n  // Should the current navigation enable document.startViewTransition?\n  let pendingViewTransitionEnabled = false;\n\n  // Store applied view transitions so we can apply them on POP\n  let appliedViewTransitions: Map<string, Set<string>> = new Map<\n    string,\n    Set<string>\n  >();\n\n  // Cleanup function for persisting applied transitions to sessionStorage\n  let removePageHideEventListener: (() => void) | null = null;\n\n  // We use this to avoid touching history in completeNavigation if a\n  // revalidation is entirely uninterrupted\n  let isUninterruptedRevalidation = false;\n\n  // Use this internal flag to force revalidation of all loaders:\n  //  - submissions (completed or interrupted)\n  //  - useRevalidator()\n  //  - X-Remix-Revalidate (from redirect)\n  let isRevalidationRequired = false;\n\n  // Use this internal array to capture routes that require revalidation due\n  // to a cancelled deferred on action submission\n  let cancelledDeferredRoutes: string[] = [];\n\n  // Use this internal array to capture fetcher loads that were cancelled by an\n  // action navigation and require revalidation\n  let cancelledFetcherLoads: Set<string> = new Set();\n\n  // AbortControllers for any in-flight fetchers\n  let fetchControllers = new Map<string, AbortController>();\n\n  // Track loads based on the order in which they started\n  let incrementingLoadId = 0;\n\n  // Track the outstanding pending navigation data load to be compared against\n  // the globally incrementing load when a fetcher load lands after a completed\n  // navigation\n  let pendingNavigationLoadId = -1;\n\n  // Fetchers that triggered data reloads as a result of their actions\n  let fetchReloadIds = new Map<string, number>();\n\n  // Fetchers that triggered redirect navigations\n  let fetchRedirectIds = new Set<string>();\n\n  // Most recent href/match for fetcher.load calls for fetchers\n  let fetchLoadMatches = new Map<string, FetchLoadMatch>();\n\n  // Ref-count mounted fetchers so we know when it's ok to clean them up\n  let activeFetchers = new Map<string, number>();\n\n  // Fetchers that have requested a delete when using v7_fetcherPersist,\n  // they'll be officially removed after they return to idle\n  let deletedFetchers = new Set<string>();\n\n  // Store DeferredData instances for active route matches.  When a\n  // route loader returns defer() we stick one in here.  Then, when a nested\n  // promise resolves we update loaderData.  If a new navigation starts we\n  // cancel active deferreds for eliminated routes.\n  let activeDeferreds = new Map<string, DeferredData>();\n\n  // Store blocker functions in a separate Map outside of router state since\n  // we don't need to update UI state if they change\n  let blockerFunctions = new Map<string, BlockerFunction>();\n\n  // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n  // that we only kick them off once for a given combo\n  let pendingPatchRoutes = new Map<\n    string,\n    ReturnType<AgnosticPatchRoutesOnNavigationFunction>\n  >();\n\n  // Flag to ignore the next history update, so we can revert the URL change on\n  // a POP navigation that was blocked by the user without touching router state\n  let unblockBlockerHistoryUpdate: (() => void) | undefined = undefined;\n\n  // Initialize the router, all side effects should be kicked off from here.\n  // Implemented as a Fluent API for ease of:\n  //   let router = createRouter(init).initialize();\n  function initialize() {\n    // If history informs us of a POP navigation, start the navigation but do not update\n    // state.  We'll update our own state once the navigation completes\n    unlistenHistory = init.history.listen(\n      ({ action: historyAction, location, delta }) => {\n        // Ignore this event if it was just us resetting the URL from a\n        // blocked POP navigation\n        if (unblockBlockerHistoryUpdate) {\n          unblockBlockerHistoryUpdate();\n          unblockBlockerHistoryUpdate = undefined;\n          return;\n        }\n\n        warning(\n          blockerFunctions.size === 0 || delta != null,\n          \"You are trying to use a blocker on a POP navigation to a location \" +\n            \"that was not created by @remix-run/router. This will fail silently in \" +\n            \"production. This can happen if you are navigating outside the router \" +\n            \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n            \"router navigation APIs.  This can also happen if you are using \" +\n            \"createHashRouter and the user manually changes the URL.\"\n        );\n\n        let blockerKey = shouldBlockNavigation({\n          currentLocation: state.location,\n          nextLocation: location,\n          historyAction,\n        });\n\n        if (blockerKey && delta != null) {\n          // Restore the URL to match the current UI, but don't update router state\n          let nextHistoryUpdatePromise = new Promise<void>((resolve) => {\n            unblockBlockerHistoryUpdate = resolve;\n          });\n          init.history.go(delta * -1);\n\n          // Put the blocker into a blocked state\n          updateBlocker(blockerKey, {\n            state: \"blocked\",\n            location,\n            proceed() {\n              updateBlocker(blockerKey!, {\n                state: \"proceeding\",\n                proceed: undefined,\n                reset: undefined,\n                location,\n              });\n              // Re-do the same POP navigation we just blocked, after the url\n              // restoration is also complete.  See:\n              // https://github.com/remix-run/react-router/issues/11613\n              nextHistoryUpdatePromise.then(() => init.history.go(delta));\n            },\n            reset() {\n              let blockers = new Map(state.blockers);\n              blockers.set(blockerKey!, IDLE_BLOCKER);\n              updateState({ blockers });\n            },\n          });\n          return;\n        }\n\n        return startNavigation(historyAction, location);\n      }\n    );\n\n    if (isBrowser) {\n      // FIXME: This feels gross.  How can we cleanup the lines between\n      // scrollRestoration/appliedTransitions persistance?\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () =>\n        persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () =>\n        routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n\n    // Kick off initial data load if needed.  Use Pop to avoid modifying history\n    // Note we don't do any handling of lazy here.  For SPA's it'll get handled\n    // in the normal navigation flow.  For SSR it's expected that lazy modules are\n    // resolved prior to router creation since we can't go into a fallbackElement\n    // UI for SSR'd apps\n    if (!state.initialized) {\n      startNavigation(HistoryAction.Pop, state.location, {\n        initialHydration: true,\n      });\n    }\n\n    return router;\n  }\n\n  // Clean up a router and it's side effects\n  function dispose() {\n    if (unlistenHistory) {\n      unlistenHistory();\n    }\n    if (removePageHideEventListener) {\n      removePageHideEventListener();\n    }\n    subscribers.clear();\n    pendingNavigationController && pendingNavigationController.abort();\n    state.fetchers.forEach((_, key) => deleteFetcher(key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n\n  // Subscribe to state updates for the router\n  function subscribe(fn: RouterSubscriber) {\n    subscribers.add(fn);\n    return () => subscribers.delete(fn);\n  }\n\n  // Update our state and notify the calling context of the change\n  function updateState(\n    newState: Partial<RouterState>,\n    opts: {\n      flushSync?: boolean;\n      viewTransitionOpts?: ViewTransitionOpts;\n    } = {}\n  ): void {\n    state = {\n      ...state,\n      ...newState,\n    };\n\n    // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n    // can be removed\n    let completedFetchers: string[] = [];\n    let deletedFetchersKeys: string[] = [];\n\n    if (future.v7_fetcherPersist) {\n      state.fetchers.forEach((fetcher, key) => {\n        if (fetcher.state === \"idle\") {\n          if (deletedFetchers.has(key)) {\n            // Unmounted from the UI and can be totally removed\n            deletedFetchersKeys.push(key);\n          } else {\n            // Returned to idle but still mounted in the UI, so semi-remains for\n            // revalidations and such\n            completedFetchers.push(key);\n          }\n        }\n      });\n    }\n\n    // Remove any lingering deleted fetchers that have already been removed\n    // from state.fetchers\n    deletedFetchers.forEach((key) => {\n      if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n        deletedFetchersKeys.push(key);\n      }\n    });\n\n    // Iterate over a local copy so that if flushSync is used and we end up\n    // removing and adding a new subscriber due to the useCallback dependencies,\n    // we don't get ourselves into a loop calling the new subscriber immediately\n    [...subscribers].forEach((subscriber) =>\n      subscriber(state, {\n        deletedFetchers: deletedFetchersKeys,\n        viewTransitionOpts: opts.viewTransitionOpts,\n        flushSync: opts.flushSync === true,\n      })\n    );\n\n    // Remove idle fetchers from state since we only care about in-flight fetchers.\n    if (future.v7_fetcherPersist) {\n      completedFetchers.forEach((key) => state.fetchers.delete(key));\n      deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n    } else {\n      // We already called deleteFetcher() on these, can remove them from this\n      // Set now that we've handed the keys off to the data layer\n      deletedFetchersKeys.forEach((key) => deletedFetchers.delete(key));\n    }\n  }\n\n  // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n  // and setting state.[historyAction/location/matches] to the new route.\n  // - Location is a required param\n  // - Navigation will always be set to IDLE_NAVIGATION\n  // - Can pass any other state in newState\n  function completeNavigation(\n    location: Location,\n    newState: Partial<Omit<RouterState, \"action\" | \"location\" | \"navigation\">>,\n    { flushSync }: { flushSync?: boolean } = {}\n  ): void {\n    // Deduce if we're in a loading/actionReload state:\n    // - We have committed actionData in the store\n    // - The current navigation was a mutation submission\n    // - We're past the submitting state and into the loading state\n    // - The location being loaded is not the result of a redirect\n    let isActionReload =\n      state.actionData != null &&\n      state.navigation.formMethod != null &&\n      isMutationMethod(state.navigation.formMethod) &&\n      state.navigation.state === \"loading\" &&\n      location.state?._isRedirect !== true;\n\n    let actionData: RouteData | null;\n    if (newState.actionData) {\n      if (Object.keys(newState.actionData).length > 0) {\n        actionData = newState.actionData;\n      } else {\n        // Empty actionData -> clear prior actionData due to an action error\n        actionData = null;\n      }\n    } else if (isActionReload) {\n      // Keep the current data if we're wrapping up the action reload\n      actionData = state.actionData;\n    } else {\n      // Clear actionData on any other completed navigations\n      actionData = null;\n    }\n\n    // Always preserve any existing loaderData from re-used routes\n    let loaderData = newState.loaderData\n      ? mergeLoaderData(\n          state.loaderData,\n          newState.loaderData,\n          newState.matches || [],\n          newState.errors\n        )\n      : state.loaderData;\n\n    // On a successful navigation we can assume we got through all blockers\n    // so we can start fresh\n    let blockers = state.blockers;\n    if (blockers.size > 0) {\n      blockers = new Map(blockers);\n      blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n    }\n\n    // Always respect the user flag.  Otherwise don't reset on mutation\n    // submission navigations unless they redirect\n    let preventScrollReset =\n      pendingPreventScrollReset === true ||\n      (state.navigation.formMethod != null &&\n        isMutationMethod(state.navigation.formMethod) &&\n        location.state?._isRedirect !== true);\n\n    // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n    if (inFlightDataRoutes) {\n      dataRoutes = inFlightDataRoutes;\n      inFlightDataRoutes = undefined;\n    }\n\n    if (isUninterruptedRevalidation) {\n      // If this was an uninterrupted revalidation then do not touch history\n    } else if (pendingAction === HistoryAction.Pop) {\n      // Do nothing for POP - URL has already been updated\n    } else if (pendingAction === HistoryAction.Push) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === HistoryAction.Replace) {\n      init.history.replace(location, location.state);\n    }\n\n    let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n    // On POP, enable transitions if they were enabled on the original navigation\n    if (pendingAction === HistoryAction.Pop) {\n      // Forward takes precedence so they behave like the original navigation\n      let priorPaths = appliedViewTransitions.get(state.location.pathname);\n      if (priorPaths && priorPaths.has(location.pathname)) {\n        viewTransitionOpts = {\n          currentLocation: state.location,\n          nextLocation: location,\n        };\n      } else if (appliedViewTransitions.has(location.pathname)) {\n        // If we don't have a previous forward nav, assume we're popping back to\n        // the new location and enable if that location previously enabled\n        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location,\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      // Store the applied transition on PUSH/REPLACE\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = new Set<string>([location.pathname]);\n        appliedViewTransitions.set(state.location.pathname, toPaths);\n      }\n      viewTransitionOpts = {\n        currentLocation: state.location,\n        nextLocation: location,\n      };\n    }\n\n    updateState(\n      {\n        ...newState, // matches, errors, fetchers go through as-is\n        actionData,\n        loaderData,\n        historyAction: pendingAction,\n        location,\n        initialized: true,\n        navigation: IDLE_NAVIGATION,\n        revalidation: \"idle\",\n        restoreScrollPosition: getSavedScrollPosition(\n          location,\n          newState.matches || state.matches\n        ),\n        preventScrollReset,\n        blockers,\n      },\n      {\n        viewTransitionOpts,\n        flushSync: flushSync === true,\n      }\n    );\n\n    // Reset stateful navigation vars\n    pendingAction = HistoryAction.Pop;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    cancelledDeferredRoutes = [];\n  }\n\n  // Trigger a navigation event, which can either be a numerical POP or a PUSH\n  // replace with an optional submission\n  async function navigate(\n    to: number | To | null,\n    opts?: RouterNavigateOptions\n  ): Promise<void> {\n    if (typeof to === \"number\") {\n      init.history.go(to);\n      return;\n    }\n\n    let normalizedPath = normalizeTo(\n      state.location,\n      state.matches,\n      basename,\n      future.v7_prependBasename,\n      to,\n      future.v7_relativeSplatPath,\n      opts?.fromRouteId,\n      opts?.relative\n    );\n    let { path, submission, error } = normalizeNavigateOptions(\n      future.v7_normalizeFormMethod,\n      false,\n      normalizedPath,\n      opts\n    );\n\n    let currentLocation = state.location;\n    let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n    // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n    // URL from window.location, so we need to encode it here so the behavior\n    // remains the same as POP and non-data-router usages.  new URL() does all\n    // the same encoding we'd get from a history.pushState/window.location read\n    // without having to touch history\n    nextLocation = {\n      ...nextLocation,\n      ...init.history.encodeLocation(nextLocation),\n    };\n\n    let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n    let historyAction = HistoryAction.Push;\n\n    if (userReplace === true) {\n      historyAction = HistoryAction.Replace;\n    } else if (userReplace === false) {\n      // no-op\n    } else if (\n      submission != null &&\n      isMutationMethod(submission.formMethod) &&\n      submission.formAction === state.location.pathname + state.location.search\n    ) {\n      // By default on submissions to the current location we REPLACE so that\n      // users don't have to double-click the back button to get to the prior\n      // location.  If the user redirects to a different location from the\n      // action/loader this will be ignored and the redirect will be a PUSH\n      historyAction = HistoryAction.Replace;\n    }\n\n    let preventScrollReset =\n      opts && \"preventScrollReset\" in opts\n        ? opts.preventScrollReset === true\n        : undefined;\n\n    let flushSync = (opts && opts.flushSync) === true;\n\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction,\n    });\n\n    if (blockerKey) {\n      // Put the blocker into a blocked state\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey!, {\n            state: \"proceeding\",\n            proceed: undefined,\n            reset: undefined,\n            location: nextLocation,\n          });\n          // Send the same navigation through\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey!, IDLE_BLOCKER);\n          updateState({ blockers });\n        },\n      });\n      return;\n    }\n\n    return await startNavigation(historyAction, nextLocation, {\n      submission,\n      // Send through the formData serialization error if we have one so we can\n      // render at the right error boundary after we match routes\n      pendingError: error,\n      preventScrollReset,\n      replace: opts && opts.replace,\n      enableViewTransition: opts && opts.viewTransition,\n      flushSync,\n    });\n  }\n\n  // Revalidate all current loaders.  If a navigation is in progress or if this\n  // is interrupted by a navigation, allow this to \"succeed\" by calling all\n  // loaders during the next loader round\n  function revalidate() {\n    interruptActiveLoads();\n    updateState({ revalidation: \"loading\" });\n\n    // If we're currently submitting an action, we don't need to start a new\n    // navigation, we'll just let the follow up loader execution call all loaders\n    if (state.navigation.state === \"submitting\") {\n      return;\n    }\n\n    // If we're currently in an idle state, start a new navigation for the current\n    // action/location and mark it as uninterrupted, which will skip the history\n    // update in completeNavigation\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true,\n      });\n      return;\n    }\n\n    // Otherwise, if we're currently in a loading state, just start a new\n    // navigation to the navigation.location but do not trigger an uninterrupted\n    // revalidation so that history correctly updates once the navigation completes\n    startNavigation(\n      pendingAction || state.historyAction,\n      state.navigation.location,\n      {\n        overrideNavigation: state.navigation,\n        // Proxy through any rending view transition\n        enableViewTransition: pendingViewTransitionEnabled === true,\n      }\n    );\n  }\n\n  // Start a navigation to the given action/location.  Can optionally provide a\n  // overrideNavigation which will override the normalLoad in the case of a redirect\n  // navigation\n  async function startNavigation(\n    historyAction: HistoryAction,\n    location: Location,\n    opts?: {\n      initialHydration?: boolean;\n      submission?: Submission;\n      fetcherSubmission?: Submission;\n      overrideNavigation?: Navigation;\n      pendingError?: ErrorResponseImpl;\n      startUninterruptedRevalidation?: boolean;\n      preventScrollReset?: boolean;\n      replace?: boolean;\n      enableViewTransition?: boolean;\n      flushSync?: boolean;\n    }\n  ): Promise<void> {\n    // Abort any in-progress navigations and start a new one. Unset any ongoing\n    // uninterrupted revalidations unless told otherwise, since we want this\n    // new navigation to update history normally\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation =\n      (opts && opts.startUninterruptedRevalidation) === true;\n\n    // Save the current scroll position every time we start a new navigation,\n    // and track whether we should reset scroll on completion\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let loadingNavigation = opts && opts.overrideNavigation;\n    let matches =\n      opts?.initialHydration &&\n      state.matches &&\n      state.matches.length > 0 &&\n      !initialMatchesIsFOW\n        ? // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n          state.matches\n        : matchRoutes(routesToUse, location, basename);\n    let flushSync = (opts && opts.flushSync) === true;\n\n    // Short circuit if it's only a hash change and not a revalidation or\n    // mutation submission.\n    //\n    // Ignore on initial page loads because since the initial hydration will always\n    // be \"same hash\".  For example, on /page#hash and submit a <Form method=\"post\">\n    // which will default to a navigation to /page\n    if (\n      matches &&\n      state.initialized &&\n      !isRevalidationRequired &&\n      isHashChangeOnly(state.location, location) &&\n      !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n    ) {\n      completeNavigation(location, { matches }, { flushSync });\n      return;\n    }\n\n    let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n\n    // Short circuit with a 404 on the root error boundary if we match nothing\n    if (!matches) {\n      let { error, notFoundMatches, route } = handleNavigational404(\n        location.pathname\n      );\n      completeNavigation(\n        location,\n        {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error,\n          },\n        },\n        { flushSync }\n      );\n      return;\n    }\n\n    // Create a controller/Request for this navigation\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(\n      init.history,\n      location,\n      pendingNavigationController.signal,\n      opts && opts.submission\n    );\n    let pendingActionResult: PendingActionResult | undefined;\n\n    if (opts && opts.pendingError) {\n      // If we have a pendingError, it means the user attempted a GET submission\n      // with binary FormData so assign here and skip to handleLoaders.  That\n      // way we handle calling loaders above the boundary etc.  It's not really\n      // different from an actionError in that sense.\n      pendingActionResult = [\n        findNearestBoundary(matches).route.id,\n        { type: ResultType.error, error: opts.pendingError },\n      ];\n    } else if (\n      opts &&\n      opts.submission &&\n      isMutationMethod(opts.submission.formMethod)\n    ) {\n      // Call action if we received an action submission\n      let actionResult = await handleAction(\n        request,\n        location,\n        opts.submission,\n        matches,\n        fogOfWar.active,\n        { replace: opts.replace, flushSync }\n      );\n\n      if (actionResult.shortCircuited) {\n        return;\n      }\n\n      // If we received a 404 from handleAction, it's because we couldn't lazily\n      // discover the destination route so we don't want to call loaders\n      if (actionResult.pendingActionResult) {\n        let [routeId, result] = actionResult.pendingActionResult;\n        if (\n          isErrorResult(result) &&\n          isRouteErrorResponse(result.error) &&\n          result.error.status === 404\n        ) {\n          pendingNavigationController = null;\n\n          completeNavigation(location, {\n            matches: actionResult.matches,\n            loaderData: {},\n            errors: {\n              [routeId]: result.error,\n            },\n          });\n          return;\n        }\n      }\n\n      matches = actionResult.matches || matches;\n      pendingActionResult = actionResult.pendingActionResult;\n      loadingNavigation = getLoadingNavigation(location, opts.submission);\n      flushSync = false;\n      // No need to do fog of war matching again on loader execution\n      fogOfWar.active = false;\n\n      // Create a GET request for the loaders\n      request = createClientSideRequest(\n        init.history,\n        request.url,\n        request.signal\n      );\n    }\n\n    // Call loaders\n    let {\n      shortCircuited,\n      matches: updatedMatches,\n      loaderData,\n      errors,\n    } = await handleLoaders(\n      request,\n      location,\n      matches,\n      fogOfWar.active,\n      loadingNavigation,\n      opts && opts.submission,\n      opts && opts.fetcherSubmission,\n      opts && opts.replace,\n      opts && opts.initialHydration === true,\n      flushSync,\n      pendingActionResult\n    );\n\n    if (shortCircuited) {\n      return;\n    }\n\n    // Clean up now that the action/loaders have completed.  Don't clean up if\n    // we short circuited because pendingNavigationController will have already\n    // been assigned to a new controller for the next navigation\n    pendingNavigationController = null;\n\n    completeNavigation(location, {\n      matches: updatedMatches || matches,\n      ...getActionDataForCommit(pendingActionResult),\n      loaderData,\n      errors,\n    });\n  }\n\n  // Call the action matched by the leaf route for this navigation and handle\n  // redirects/errors\n  async function handleAction(\n    request: Request,\n    location: Location,\n    submission: Submission,\n    matches: AgnosticDataRouteMatch[],\n    isFogOfWar: boolean,\n    opts: { replace?: boolean; flushSync?: boolean } = {}\n  ): Promise<HandleActionResult> {\n    interruptActiveLoads();\n\n    // Put us in a submitting state\n    let navigation = getSubmittingNavigation(location, submission);\n    updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        matches,\n        location.pathname,\n        request.signal\n      );\n      if (discoverResult.type === \"aborted\") {\n        return { shortCircuited: true };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n          .route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          pendingActionResult: [\n            boundaryId,\n            {\n              type: ResultType.error,\n              error: discoverResult.error,\n            },\n          ],\n        };\n      } else if (!discoverResult.matches) {\n        let { notFoundMatches, error, route } = handleNavigational404(\n          location.pathname\n        );\n        return {\n          matches: notFoundMatches,\n          pendingActionResult: [\n            route.id,\n            {\n              type: ResultType.error,\n              error,\n            },\n          ],\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n\n    // Call our action and get the result\n    let result: DataResult;\n    let actionMatch = getTargetMatch(matches, location);\n\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: ResultType.error,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id,\n        }),\n      };\n    } else {\n      let results = await callDataStrategy(\n        \"action\",\n        state,\n        request,\n        [actionMatch],\n        matches,\n        null\n      );\n      result = results[actionMatch.route.id];\n\n      if (request.signal.aborted) {\n        return { shortCircuited: true };\n      }\n    }\n\n    if (isRedirectResult(result)) {\n      let replace: boolean;\n      if (opts && opts.replace != null) {\n        replace = opts.replace;\n      } else {\n        // If the user didn't explicity indicate replace behavior, replace if\n        // we redirected to the exact same location we're currently at to avoid\n        // double back-buttons\n        let location = normalizeRedirectLocation(\n          result.response.headers.get(\"Location\")!,\n          new URL(request.url),\n          basename\n        );\n        replace = location === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(request, result, true, {\n        submission,\n        replace,\n      });\n      return { shortCircuited: true };\n    }\n\n    if (isDeferredResult(result)) {\n      throw getInternalRouterError(400, { type: \"defer-action\" });\n    }\n\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n      // By default, all submissions to the current location are REPLACE\n      // navigations, but if the action threw an error that'll be rendered in\n      // an errorElement, we fall back to PUSH so that the user can use the\n      // back button to get back to the pre-submission form location to try\n      // again\n      if ((opts && opts.replace) !== true) {\n        pendingAction = HistoryAction.Push;\n      }\n\n      return {\n        matches,\n        pendingActionResult: [boundaryMatch.route.id, result],\n      };\n    }\n\n    return {\n      matches,\n      pendingActionResult: [actionMatch.route.id, result],\n    };\n  }\n\n  // Call all applicable loaders for the given matches, handling redirects,\n  // errors, etc.\n  async function handleLoaders(\n    request: Request,\n    location: Location,\n    matches: AgnosticDataRouteMatch[],\n    isFogOfWar: boolean,\n    overrideNavigation?: Navigation,\n    submission?: Submission,\n    fetcherSubmission?: Submission,\n    replace?: boolean,\n    initialHydration?: boolean,\n    flushSync?: boolean,\n    pendingActionResult?: PendingActionResult\n  ): Promise<HandleLoadersResult> {\n    // Figure out the right navigation we want to use for data loading\n    let loadingNavigation =\n      overrideNavigation || getLoadingNavigation(location, submission);\n\n    // If this was a redirect from an action we don't have a \"submission\" but\n    // we have it on the loading navigation so use that if available\n    let activeSubmission =\n      submission ||\n      fetcherSubmission ||\n      getSubmissionFromNavigation(loadingNavigation);\n\n    // If this is an uninterrupted revalidation, we remain in our current idle\n    // state.  If not, we need to switch to our loading state and load data,\n    // preserving any new action data or existing action data (in the case of\n    // a revalidation interrupting an actionReload)\n    // If we have partialHydration enabled, then don't update the state for the\n    // initial data load since it's not a \"navigation\"\n    let shouldUpdateNavigationState =\n      !isUninterruptedRevalidation &&\n      (!future.v7_partialHydration || !initialHydration);\n\n    // When fog of war is enabled, we enter our `loading` state earlier so we\n    // can discover new routes during the `loading` state.  We skip this if\n    // we've already run actions since we would have done our matching already.\n    // If the children() function threw then, we want to proceed with the\n    // partial matches it discovered.\n    if (isFogOfWar) {\n      if (shouldUpdateNavigationState) {\n        let actionData = getUpdatedActionData(pendingActionResult);\n        updateState(\n          {\n            navigation: loadingNavigation,\n            ...(actionData !== undefined ? { actionData } : {}),\n          },\n          {\n            flushSync,\n          }\n        );\n      }\n\n      let discoverResult = await discoverRoutes(\n        matches,\n        location.pathname,\n        request.signal\n      );\n\n      if (discoverResult.type === \"aborted\") {\n        return { shortCircuited: true };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n          .route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          loaderData: {},\n          errors: {\n            [boundaryId]: discoverResult.error,\n          },\n        };\n      } else if (!discoverResult.matches) {\n        let { error, notFoundMatches, route } = handleNavigational404(\n          location.pathname\n        );\n        return {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error,\n          },\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n      init.history,\n      state,\n      matches,\n      activeSubmission,\n      location,\n      future.v7_partialHydration && initialHydration === true,\n      future.v7_skipActionErrorRevalidation,\n      isRevalidationRequired,\n      cancelledDeferredRoutes,\n      cancelledFetcherLoads,\n      deletedFetchers,\n      fetchLoadMatches,\n      fetchRedirectIds,\n      routesToUse,\n      basename,\n      pendingActionResult\n    );\n\n    // Cancel pending deferreds for no-longer-matched routes or routes we're\n    // about to reload.  Note that if this is an action reload we would have\n    // already cancelled all pending deferreds so this would be a no-op\n    cancelActiveDeferreds(\n      (routeId) =>\n        !(matches && matches.some((m) => m.route.id === routeId)) ||\n        (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n    );\n\n    pendingNavigationLoadId = ++incrementingLoadId;\n\n    // Short circuit if we have no loaders to run\n    if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n      let updatedFetchers = markFetchRedirectsDone();\n      completeNavigation(\n        location,\n        {\n          matches,\n          loaderData: {},\n          // Commit pending error if we're short circuiting\n          errors:\n            pendingActionResult && isErrorResult(pendingActionResult[1])\n              ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n              : null,\n          ...getActionDataForCommit(pendingActionResult),\n          ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n        },\n        { flushSync }\n      );\n      return { shortCircuited: true };\n    }\n\n    if (shouldUpdateNavigationState) {\n      let updates: Partial<RouterState> = {};\n      if (!isFogOfWar) {\n        // Only update navigation/actionNData if we didn't already do it above\n        updates.navigation = loadingNavigation;\n        let actionData = getUpdatedActionData(pendingActionResult);\n        if (actionData !== undefined) {\n          updates.actionData = actionData;\n        }\n      }\n      if (revalidatingFetchers.length > 0) {\n        updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n      }\n      updateState(updates, { flushSync });\n    }\n\n    revalidatingFetchers.forEach((rf) => {\n      abortFetcher(rf.key);\n      if (rf.controller) {\n        // Fetchers use an independent AbortController so that aborting a fetcher\n        // (via deleteFetcher) does not abort the triggering navigation that\n        // triggered the revalidation\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n\n    // Proxy navigation abort through to revalidation fetchers\n    let abortPendingFetchRevalidations = () =>\n      revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\n        \"abort\",\n        abortPendingFetchRevalidations\n      );\n    }\n\n    let { loaderResults, fetcherResults } =\n      await callLoadersAndMaybeResolveData(\n        state,\n        matches,\n        matchesToLoad,\n        revalidatingFetchers,\n        request\n      );\n\n    if (request.signal.aborted) {\n      return { shortCircuited: true };\n    }\n\n    // Clean up _after_ loaders have completed.  Don't clean up if we short\n    // circuited because fetchControllers would have been aborted and\n    // reassigned to new controllers for the next navigation\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\n        \"abort\",\n        abortPendingFetchRevalidations\n      );\n    }\n\n    revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n    // If any loaders returned a redirect Response, start a new REPLACE navigation\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace,\n      });\n      return { shortCircuited: true };\n    }\n\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace,\n      });\n      return { shortCircuited: true };\n    }\n\n    // Process and commit output from loaders\n    let { loaderData, errors } = processLoaderData(\n      state,\n      matches,\n      loaderResults,\n      pendingActionResult,\n      revalidatingFetchers,\n      fetcherResults,\n      activeDeferreds\n    );\n\n    // Wire up subscribers to update loaderData as promises settle\n    activeDeferreds.forEach((deferredData, routeId) => {\n      deferredData.subscribe((aborted) => {\n        // Note: No need to updateState here since the TrackedPromise on\n        // loaderData is stable across resolve/reject\n        // Remove this instance if we were aborted or if promises have settled\n        if (aborted || deferredData.done) {\n          activeDeferreds.delete(routeId);\n        }\n      });\n    });\n\n    // Preserve SSR errors during partial hydration\n    if (future.v7_partialHydration && initialHydration && state.errors) {\n      errors = { ...state.errors, ...errors };\n    }\n\n    let updatedFetchers = markFetchRedirectsDone();\n    let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n    let shouldUpdateFetchers =\n      updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n    return {\n      matches,\n      loaderData,\n      errors,\n      ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n    };\n  }\n\n  function getUpdatedActionData(\n    pendingActionResult: PendingActionResult | undefined\n  ): Record<string, RouteData> | null | undefined {\n    if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n      // This is cast to `any` currently because `RouteData`uses any and it\n      // would be a breaking change to use any.\n      // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n      return {\n        [pendingActionResult[0]]: pendingActionResult[1].data as any,\n      };\n    } else if (state.actionData) {\n      if (Object.keys(state.actionData).length === 0) {\n        return null;\n      } else {\n        return state.actionData;\n      }\n    }\n  }\n\n  function getUpdatedRevalidatingFetchers(\n    revalidatingFetchers: RevalidatingFetcher[]\n  ) {\n    revalidatingFetchers.forEach((rf) => {\n      let fetcher = state.fetchers.get(rf.key);\n      let revalidatingFetcher = getLoadingFetcher(\n        undefined,\n        fetcher ? fetcher.data : undefined\n      );\n      state.fetchers.set(rf.key, revalidatingFetcher);\n    });\n    return new Map(state.fetchers);\n  }\n\n  // Trigger a fetcher load/submit for the given fetcher key\n  function fetch(\n    key: string,\n    routeId: string,\n    href: string | null,\n    opts?: RouterFetchOptions\n  ) {\n    if (isServer) {\n      throw new Error(\n        \"router.fetch() was called during the server render, but it shouldn't be. \" +\n          \"You are likely calling a useFetcher() method in the body of your component. \" +\n          \"Try moving it to a useEffect or a callback.\"\n      );\n    }\n\n    abortFetcher(key);\n\n    let flushSync = (opts && opts.flushSync) === true;\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let normalizedPath = normalizeTo(\n      state.location,\n      state.matches,\n      basename,\n      future.v7_prependBasename,\n      href,\n      future.v7_relativeSplatPath,\n      routeId,\n      opts?.relative\n    );\n    let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n    let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n\n    if (!matches) {\n      setFetcherError(\n        key,\n        routeId,\n        getInternalRouterError(404, { pathname: normalizedPath }),\n        { flushSync }\n      );\n      return;\n    }\n\n    let { path, submission, error } = normalizeNavigateOptions(\n      future.v7_normalizeFormMethod,\n      true,\n      normalizedPath,\n      opts\n    );\n\n    if (error) {\n      setFetcherError(key, routeId, error, { flushSync });\n      return;\n    }\n\n    let match = getTargetMatch(matches, path);\n\n    let preventScrollReset = (opts && opts.preventScrollReset) === true;\n\n    if (submission && isMutationMethod(submission.formMethod)) {\n      handleFetcherAction(\n        key,\n        routeId,\n        path,\n        match,\n        matches,\n        fogOfWar.active,\n        flushSync,\n        preventScrollReset,\n        submission\n      );\n      return;\n    }\n\n    // Store off the match so we can call it's shouldRevalidate on subsequent\n    // revalidations\n    fetchLoadMatches.set(key, { routeId, path });\n    handleFetcherLoader(\n      key,\n      routeId,\n      path,\n      match,\n      matches,\n      fogOfWar.active,\n      flushSync,\n      preventScrollReset,\n      submission\n    );\n  }\n\n  // Call the action for the matched fetcher.submit(), and then handle redirects,\n  // errors, and revalidation\n  async function handleFetcherAction(\n    key: string,\n    routeId: string,\n    path: string,\n    match: AgnosticDataRouteMatch,\n    requestMatches: AgnosticDataRouteMatch[],\n    isFogOfWar: boolean,\n    flushSync: boolean,\n    preventScrollReset: boolean,\n    submission: Submission\n  ) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\n\n    function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n      if (!m.route.action && !m.route.lazy) {\n        let error = getInternalRouterError(405, {\n          method: submission.formMethod,\n          pathname: path,\n          routeId: routeId,\n        });\n        setFetcherError(key, routeId, error, { flushSync });\n        return true;\n      }\n      return false;\n    }\n\n    if (!isFogOfWar && detectAndHandle405Error(match)) {\n      return;\n    }\n\n    // Put this fetcher into it's submitting state\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n      flushSync,\n    });\n\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(\n      init.history,\n      path,\n      abortController.signal,\n      submission\n    );\n\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        requestMatches,\n        new URL(fetchRequest.url).pathname,\n        fetchRequest.signal,\n        key\n      );\n\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, { flushSync });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(\n          key,\n          routeId,\n          getInternalRouterError(404, { pathname: path }),\n          { flushSync }\n        );\n        return;\n      } else {\n        requestMatches = discoverResult.matches;\n        match = getTargetMatch(requestMatches, path);\n\n        if (detectAndHandle405Error(match)) {\n          return;\n        }\n      }\n    }\n\n    // Call the action for the fetcher\n    fetchControllers.set(key, abortController);\n\n    let originatingLoadId = incrementingLoadId;\n    let actionResults = await callDataStrategy(\n      \"action\",\n      state,\n      fetchRequest,\n      [match],\n      requestMatches,\n      key\n    );\n    let actionResult = actionResults[match.route.id];\n\n    if (fetchRequest.signal.aborted) {\n      // We can delete this so long as we weren't aborted by our own fetcher\n      // re-submit which would have put _new_ controller is in fetchControllers\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n\n    // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n    // or redirects processed for unmounted fetchers so we just revert them to\n    // idle\n    if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n      if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      }\n      // Let SuccessResult's fall through for revalidation\n    } else {\n      if (isRedirectResult(actionResult)) {\n        fetchControllers.delete(key);\n        if (pendingNavigationLoadId > originatingLoadId) {\n          // A new navigation was kicked off after our action started, so that\n          // should take precedence over this redirect navigation.  We already\n          // set isRevalidationRequired so all loaders for the new route should\n          // fire unless opted out via shouldRevalidate\n          updateFetcherState(key, getDoneFetcher(undefined));\n          return;\n        } else {\n          fetchRedirectIds.add(key);\n          updateFetcherState(key, getLoadingFetcher(submission));\n          return startRedirectNavigation(fetchRequest, actionResult, false, {\n            fetcherSubmission: submission,\n            preventScrollReset,\n          });\n        }\n      }\n\n      // Process any non-redirect errors thrown\n      if (isErrorResult(actionResult)) {\n        setFetcherError(key, routeId, actionResult.error);\n        return;\n      }\n    }\n\n    if (isDeferredResult(actionResult)) {\n      throw getInternalRouterError(400, { type: \"defer-action\" });\n    }\n\n    // Start the data load for current matches, or the next location if we're\n    // in the middle of a navigation\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(\n      init.history,\n      nextLocation,\n      abortController.signal\n    );\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let matches =\n      state.navigation.state !== \"idle\"\n        ? matchRoutes(routesToUse, state.navigation.location, basename)\n        : state.matches;\n\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    state.fetchers.set(key, loadFetcher);\n\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n      init.history,\n      state,\n      matches,\n      submission,\n      nextLocation,\n      false,\n      future.v7_skipActionErrorRevalidation,\n      isRevalidationRequired,\n      cancelledDeferredRoutes,\n      cancelledFetcherLoads,\n      deletedFetchers,\n      fetchLoadMatches,\n      fetchRedirectIds,\n      routesToUse,\n      basename,\n      [match.route.id, actionResult]\n    );\n\n    // Put all revalidating fetchers into the loading state, except for the\n    // current fetcher which we want to keep in it's current loading state which\n    // contains it's action submission info + action data\n    revalidatingFetchers\n      .filter((rf) => rf.key !== key)\n      .forEach((rf) => {\n        let staleKey = rf.key;\n        let existingFetcher = state.fetchers.get(staleKey);\n        let revalidatingFetcher = getLoadingFetcher(\n          undefined,\n          existingFetcher ? existingFetcher.data : undefined\n        );\n        state.fetchers.set(staleKey, revalidatingFetcher);\n        abortFetcher(staleKey);\n        if (rf.controller) {\n          fetchControllers.set(staleKey, rf.controller);\n        }\n      });\n\n    updateState({ fetchers: new Map(state.fetchers) });\n\n    let abortPendingFetchRevalidations = () =>\n      revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n    abortController.signal.addEventListener(\n      \"abort\",\n      abortPendingFetchRevalidations\n    );\n\n    let { loaderResults, fetcherResults } =\n      await callLoadersAndMaybeResolveData(\n        state,\n        matches,\n        matchesToLoad,\n        revalidatingFetchers,\n        revalidationRequest\n      );\n\n    if (abortController.signal.aborted) {\n      return;\n    }\n\n    abortController.signal.removeEventListener(\n      \"abort\",\n      abortPendingFetchRevalidations\n    );\n\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      return startRedirectNavigation(\n        revalidationRequest,\n        redirect.result,\n        false,\n        { preventScrollReset }\n      );\n    }\n\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      return startRedirectNavigation(\n        revalidationRequest,\n        redirect.result,\n        false,\n        { preventScrollReset }\n      );\n    }\n\n    // Process and commit output from loaders\n    let { loaderData, errors } = processLoaderData(\n      state,\n      matches,\n      loaderResults,\n      undefined,\n      revalidatingFetchers,\n      fetcherResults,\n      activeDeferreds\n    );\n\n    // Since we let revalidations complete even if the submitting fetcher was\n    // deleted, only put it back to idle if it hasn't been deleted\n    if (state.fetchers.has(key)) {\n      let doneFetcher = getDoneFetcher(actionResult.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n\n    abortStaleFetchLoads(loadId);\n\n    // If we are currently in a navigation loading state and this fetcher is\n    // more recent than the navigation, we want the newer data so abort the\n    // navigation and complete it with the fetcher data\n    if (\n      state.navigation.state === \"loading\" &&\n      loadId > pendingNavigationLoadId\n    ) {\n      invariant(pendingAction, \"Expected pending action\");\n      pendingNavigationController && pendingNavigationController.abort();\n\n      completeNavigation(state.navigation.location, {\n        matches,\n        loaderData,\n        errors,\n        fetchers: new Map(state.fetchers),\n      });\n    } else {\n      // otherwise just update with the fetcher data, preserving any existing\n      // loaderData for loaders that did not need to reload.  We have to\n      // manually merge here since we aren't going through completeNavigation\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(\n          state.loaderData,\n          loaderData,\n          matches,\n          errors\n        ),\n        fetchers: new Map(state.fetchers),\n      });\n      isRevalidationRequired = false;\n    }\n  }\n\n  // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n  async function handleFetcherLoader(\n    key: string,\n    routeId: string,\n    path: string,\n    match: AgnosticDataRouteMatch,\n    matches: AgnosticDataRouteMatch[],\n    isFogOfWar: boolean,\n    flushSync: boolean,\n    preventScrollReset: boolean,\n    submission?: Submission\n  ) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(\n      key,\n      getLoadingFetcher(\n        submission,\n        existingFetcher ? existingFetcher.data : undefined\n      ),\n      { flushSync }\n    );\n\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(\n      init.history,\n      path,\n      abortController.signal\n    );\n\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        matches,\n        new URL(fetchRequest.url).pathname,\n        fetchRequest.signal,\n        key\n      );\n\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, { flushSync });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(\n          key,\n          routeId,\n          getInternalRouterError(404, { pathname: path }),\n          { flushSync }\n        );\n        return;\n      } else {\n        matches = discoverResult.matches;\n        match = getTargetMatch(matches, path);\n      }\n    }\n\n    // Call the loader for this fetcher route match\n    fetchControllers.set(key, abortController);\n\n    let originatingLoadId = incrementingLoadId;\n    let results = await callDataStrategy(\n      \"loader\",\n      state,\n      fetchRequest,\n      [match],\n      matches,\n      key\n    );\n    let result = results[match.route.id];\n\n    // Deferred isn't supported for fetcher loads, await everything and treat it\n    // as a normal load.  resolveDeferredData will return undefined if this\n    // fetcher gets aborted, so we just leave result untouched and short circuit\n    // below if that happens\n    if (isDeferredResult(result)) {\n      result =\n        (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n        result;\n    }\n\n    // We can delete this so long as we weren't aborted by our our own fetcher\n    // re-load which would have put _new_ controller is in fetchControllers\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n\n    // We don't want errors bubbling up or redirects followed for unmounted\n    // fetchers, so short circuit here if it was removed from the UI\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n\n    // If the loader threw a redirect Response, start a new REPLACE navigation\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our loader started, so that\n        // should take precedence over this redirect navigation\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(fetchRequest, result, false, {\n          preventScrollReset,\n        });\n        return;\n      }\n    }\n\n    // Process any non-redirect errors thrown\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n\n    invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n    // Put the fetcher back into an idle state\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n\n  /**\n   * Utility function to handle redirects returned from an action or loader.\n   * Normally, a redirect \"replaces\" the navigation that triggered it.  So, for\n   * example:\n   *\n   *  - user is on /a\n   *  - user clicks a link to /b\n   *  - loader for /b redirects to /c\n   *\n   * In a non-JS app the browser would track the in-flight navigation to /b and\n   * then replace it with /c when it encountered the redirect response.  In\n   * the end it would only ever update the URL bar with /c.\n   *\n   * In client-side routing using pushState/replaceState, we aim to emulate\n   * this behavior and we also do not update history until the end of the\n   * navigation (including processed redirects).  This means that we never\n   * actually touch history until we've processed redirects, so we just use\n   * the history action from the original navigation (PUSH or REPLACE).\n   */\n  async function startRedirectNavigation(\n    request: Request,\n    redirect: RedirectResult,\n    isNavigation: boolean,\n    {\n      submission,\n      fetcherSubmission,\n      preventScrollReset,\n      replace,\n    }: {\n      submission?: Submission;\n      fetcherSubmission?: Submission;\n      preventScrollReset?: boolean;\n      replace?: boolean;\n    } = {}\n  ) {\n    if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n      isRevalidationRequired = true;\n    }\n\n    let location = redirect.response.headers.get(\"Location\");\n    invariant(location, \"Expected a Location header on the redirect Response\");\n    location = normalizeRedirectLocation(\n      location,\n      new URL(request.url),\n      basename\n    );\n    let redirectLocation = createLocation(state.location, location, {\n      _isRedirect: true,\n    });\n\n    if (isBrowser) {\n      let isDocumentReload = false;\n\n      if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n        // Hard reload if the response contained X-Remix-Reload-Document\n        isDocumentReload = true;\n      } else if (ABSOLUTE_URL_REGEX.test(location)) {\n        const url = init.history.createURL(location);\n        isDocumentReload =\n          // Hard reload if it's an absolute URL to a new origin\n          url.origin !== routerWindow.location.origin ||\n          // Hard reload if it's an absolute URL that does not match our basename\n          stripBasename(url.pathname, basename) == null;\n      }\n\n      if (isDocumentReload) {\n        if (replace) {\n          routerWindow.location.replace(location);\n        } else {\n          routerWindow.location.assign(location);\n        }\n        return;\n      }\n    }\n\n    // There's no need to abort on redirects, since we don't detect the\n    // redirect until the action/loaders have settled\n    pendingNavigationController = null;\n\n    let redirectHistoryAction =\n      replace === true || redirect.response.headers.has(\"X-Remix-Replace\")\n        ? HistoryAction.Replace\n        : HistoryAction.Push;\n\n    // Use the incoming submission if provided, fallback on the active one in\n    // state.navigation\n    let { formMethod, formAction, formEncType } = state.navigation;\n    if (\n      !submission &&\n      !fetcherSubmission &&\n      formMethod &&\n      formAction &&\n      formEncType\n    ) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n\n    // If this was a 307/308 submission we want to preserve the HTTP method and\n    // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n    // redirected location\n    let activeSubmission = submission || fetcherSubmission;\n    if (\n      redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n      activeSubmission &&\n      isMutationMethod(activeSubmission.formMethod)\n    ) {\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        submission: {\n          ...activeSubmission,\n          formAction: location,\n        },\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation\n          ? pendingViewTransitionEnabled\n          : undefined,\n      });\n    } else {\n      // If we have a navigation submission, we will preserve it through the\n      // redirect navigation\n      let overrideNavigation = getLoadingNavigation(\n        redirectLocation,\n        submission\n      );\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        overrideNavigation,\n        // Send fetcher submissions through for shouldRevalidate\n        fetcherSubmission,\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation\n          ? pendingViewTransitionEnabled\n          : undefined,\n      });\n    }\n  }\n\n  // Utility wrapper for calling dataStrategy client-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(\n    type: \"loader\" | \"action\",\n    state: RouterState,\n    request: Request,\n    matchesToLoad: AgnosticDataRouteMatch[],\n    matches: AgnosticDataRouteMatch[],\n    fetcherKey: string | null\n  ): Promise<Record<string, DataResult>> {\n    let results: Record<string, DataStrategyResult>;\n    let dataResults: Record<string, DataResult> = {};\n    try {\n      results = await callDataStrategyImpl(\n        dataStrategyImpl,\n        type,\n        state,\n        request,\n        matchesToLoad,\n        matches,\n        fetcherKey,\n        manifest,\n        mapRouteProperties\n      );\n    } catch (e) {\n      // If the outer dataStrategy method throws, just return the error for all\n      // matches - and it'll naturally bubble to the root\n      matchesToLoad.forEach((m) => {\n        dataResults[m.route.id] = {\n          type: ResultType.error,\n          error: e,\n        };\n      });\n      return dataResults;\n    }\n\n    for (let [routeId, result] of Object.entries(results)) {\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result as Response;\n        dataResults[routeId] = {\n          type: ResultType.redirect,\n          response: normalizeRelativeRoutingRedirectResponse(\n            response,\n            request,\n            routeId,\n            matches,\n            basename,\n            future.v7_relativeSplatPath\n          ),\n        };\n      } else {\n        dataResults[routeId] = await convertDataStrategyResultToDataResult(\n          result\n        );\n      }\n    }\n\n    return dataResults;\n  }\n\n  async function callLoadersAndMaybeResolveData(\n    state: RouterState,\n    matches: AgnosticDataRouteMatch[],\n    matchesToLoad: AgnosticDataRouteMatch[],\n    fetchersToLoad: RevalidatingFetcher[],\n    request: Request\n  ) {\n    let currentMatches = state.matches;\n\n    // Kick off loaders and fetchers in parallel\n    let loaderResultsPromise = callDataStrategy(\n      \"loader\",\n      state,\n      request,\n      matchesToLoad,\n      matches,\n      null\n    );\n\n    let fetcherResultsPromise = Promise.all(\n      fetchersToLoad.map(async (f) => {\n        if (f.matches && f.match && f.controller) {\n          let results = await callDataStrategy(\n            \"loader\",\n            state,\n            createClientSideRequest(init.history, f.path, f.controller.signal),\n            [f.match],\n            f.matches,\n            f.key\n          );\n          let result = results[f.match.route.id];\n          // Fetcher results are keyed by fetcher key from here on out, not routeId\n          return { [f.key]: result };\n        } else {\n          return Promise.resolve({\n            [f.key]: {\n              type: ResultType.error,\n              error: getInternalRouterError(404, {\n                pathname: f.path,\n              }),\n            } as ErrorResult,\n          });\n        }\n      })\n    );\n\n    let loaderResults = await loaderResultsPromise;\n    let fetcherResults = (await fetcherResultsPromise).reduce(\n      (acc, r) => Object.assign(acc, r),\n      {}\n    );\n\n    await Promise.all([\n      resolveNavigationDeferredResults(\n        matches,\n        loaderResults,\n        request.signal,\n        currentMatches,\n        state.loaderData\n      ),\n      resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad),\n    ]);\n\n    return {\n      loaderResults,\n      fetcherResults,\n    };\n  }\n\n  function interruptActiveLoads() {\n    // Every interruption triggers a revalidation\n    isRevalidationRequired = true;\n\n    // Cancel pending route-level deferreds and mark cancelled routes for\n    // revalidation\n    cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n    // Abort in-flight fetcher loads\n    fetchLoadMatches.forEach((_, key) => {\n      if (fetchControllers.has(key)) {\n        cancelledFetcherLoads.add(key);\n      }\n      abortFetcher(key);\n    });\n  }\n\n  function updateFetcherState(\n    key: string,\n    fetcher: Fetcher,\n    opts: { flushSync?: boolean } = {}\n  ) {\n    state.fetchers.set(key, fetcher);\n    updateState(\n      { fetchers: new Map(state.fetchers) },\n      { flushSync: (opts && opts.flushSync) === true }\n    );\n  }\n\n  function setFetcherError(\n    key: string,\n    routeId: string,\n    error: any,\n    opts: { flushSync?: boolean } = {}\n  ) {\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    deleteFetcher(key);\n    updateState(\n      {\n        errors: {\n          [boundaryMatch.route.id]: error,\n        },\n        fetchers: new Map(state.fetchers),\n      },\n      { flushSync: (opts && opts.flushSync) === true }\n    );\n  }\n\n  function getFetcher<TData = any>(key: string): Fetcher<TData> {\n    activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n    // If this fetcher was previously marked for deletion, unmark it since we\n    // have a new instance\n    if (deletedFetchers.has(key)) {\n      deletedFetchers.delete(key);\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n\n  function deleteFetcher(key: string): void {\n    let fetcher = state.fetchers.get(key);\n    // Don't abort the controller if this is a deletion of a fetcher.submit()\n    // in it's loading phase since - we don't want to abort the corresponding\n    // revalidation and want them to complete and land\n    if (\n      fetchControllers.has(key) &&\n      !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n    ) {\n      abortFetcher(key);\n    }\n    fetchLoadMatches.delete(key);\n    fetchReloadIds.delete(key);\n    fetchRedirectIds.delete(key);\n\n    // If we opted into the flag we can clear this now since we're calling\n    // deleteFetcher() at the end of updateState() and we've already handed the\n    // deleted fetcher keys off to the data layer.\n    // If not, we're eagerly calling deleteFetcher() and we need to keep this\n    // Set populated until the next updateState call, and we'll clear\n    // `deletedFetchers` then\n    if (future.v7_fetcherPersist) {\n      deletedFetchers.delete(key);\n    }\n\n    cancelledFetcherLoads.delete(key);\n    state.fetchers.delete(key);\n  }\n\n  function deleteFetcherAndUpdateState(key: string): void {\n    let count = (activeFetchers.get(key) || 0) - 1;\n    if (count <= 0) {\n      activeFetchers.delete(key);\n      deletedFetchers.add(key);\n      if (!future.v7_fetcherPersist) {\n        deleteFetcher(key);\n      }\n    } else {\n      activeFetchers.set(key, count);\n    }\n\n    updateState({ fetchers: new Map(state.fetchers) });\n  }\n\n  function abortFetcher(key: string) {\n    let controller = fetchControllers.get(key);\n    if (controller) {\n      controller.abort();\n      fetchControllers.delete(key);\n    }\n  }\n\n  function markFetchersDone(keys: string[]) {\n    for (let key of keys) {\n      let fetcher = getFetcher(key);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n\n  function markFetchRedirectsDone(): boolean {\n    let doneKeys = [];\n    let updatedFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = state.fetchers.get(key);\n      invariant(fetcher, `Expected fetcher: ${key}`);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        updatedFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys);\n    return updatedFetchers;\n  }\n\n  function abortStaleFetchLoads(landedId: number): boolean {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = state.fetchers.get(key);\n        invariant(fetcher, `Expected fetcher: ${key}`);\n        if (fetcher.state === \"loading\") {\n          abortFetcher(key);\n          fetchReloadIds.delete(key);\n          yeetedKeys.push(key);\n        }\n      }\n    }\n    markFetchersDone(yeetedKeys);\n    return yeetedKeys.length > 0;\n  }\n\n  function getBlocker(key: string, fn: BlockerFunction) {\n    let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n    if (blockerFunctions.get(key) !== fn) {\n      blockerFunctions.set(key, fn);\n    }\n\n    return blocker;\n  }\n\n  function deleteBlocker(key: string) {\n    state.blockers.delete(key);\n    blockerFunctions.delete(key);\n  }\n\n  // Utility function to update blockers, ensuring valid state transitions\n  function updateBlocker(key: string, newBlocker: Blocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n    // Poor mans state machine :)\n    // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n    invariant(\n      (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n        (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n      `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n    );\n\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({ blockers });\n  }\n\n  function shouldBlockNavigation({\n    currentLocation,\n    nextLocation,\n    historyAction,\n  }: {\n    currentLocation: Location;\n    nextLocation: Location;\n    historyAction: HistoryAction;\n  }): string | undefined {\n    if (blockerFunctions.size === 0) {\n      return;\n    }\n\n    // We ony support a single active blocker at the moment since we don't have\n    // any compelling use cases for multi-blocker yet\n    if (blockerFunctions.size > 1) {\n      warning(false, \"A router only supports one blocker at a time\");\n    }\n\n    let entries = Array.from(blockerFunctions.entries());\n    let [blockerKey, blockerFunction] = entries[entries.length - 1];\n    let blocker = state.blockers.get(blockerKey);\n\n    if (blocker && blocker.state === \"proceeding\") {\n      // If the blocker is currently proceeding, we don't need to re-check\n      // it and can let this navigation continue\n      return;\n    }\n\n    // At this point, we know we're unblocked/blocked so we need to check the\n    // user-provided blocker function\n    if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n      return blockerKey;\n    }\n  }\n\n  function handleNavigational404(pathname: string) {\n    let error = getInternalRouterError(404, { pathname });\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let { matches, route } = getShortCircuitMatches(routesToUse);\n\n    // Cancel all pending deferred on 404s since we don't keep any routes\n    cancelActiveDeferreds();\n\n    return { notFoundMatches: matches, route, error };\n  }\n\n  function cancelActiveDeferreds(\n    predicate?: (routeId: string) => boolean\n  ): string[] {\n    let cancelledRouteIds: string[] = [];\n    activeDeferreds.forEach((dfd, routeId) => {\n      if (!predicate || predicate(routeId)) {\n        // Cancel the deferred - but do not remove from activeDeferreds here -\n        // we rely on the subscribers to do that so our tests can assert proper\n        // cleanup via _internalActiveDeferreds\n        dfd.cancel();\n        cancelledRouteIds.push(routeId);\n        activeDeferreds.delete(routeId);\n      }\n    });\n    return cancelledRouteIds;\n  }\n\n  // Opt in to capturing and reporting scroll positions during navigations,\n  // used by the <ScrollRestoration> component\n  function enableScrollRestoration(\n    positions: Record<string, number>,\n    getPosition: GetScrollPositionFunction,\n    getKey?: GetScrollRestorationKeyFunction\n  ) {\n    savedScrollPositions = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey = getKey || null;\n\n    // Perform initial hydration scroll restoration, since we miss the boat on\n    // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n    // and therefore have no savedScrollPositions available\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({ restoreScrollPosition: y });\n      }\n    }\n\n    return () => {\n      savedScrollPositions = null;\n      getScrollPosition = null;\n      getScrollRestorationKey = null;\n    };\n  }\n\n  function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n    if (getScrollRestorationKey) {\n      let key = getScrollRestorationKey(\n        location,\n        matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n      );\n      return key || location.key;\n    }\n    return location.key;\n  }\n\n  function saveScrollPosition(\n    location: Location,\n    matches: AgnosticDataRouteMatch[]\n  ): void {\n    if (savedScrollPositions && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions[key] = getScrollPosition();\n    }\n  }\n\n  function getSavedScrollPosition(\n    location: Location,\n    matches: AgnosticDataRouteMatch[]\n  ): number | null {\n    if (savedScrollPositions) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n\n  function checkFogOfWar(\n    matches: AgnosticDataRouteMatch[] | null,\n    routesToUse: AgnosticDataRouteObject[],\n    pathname: string\n  ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n    if (patchRoutesOnNavigationImpl) {\n      if (!matches) {\n        let fogMatches = matchRoutesImpl<AgnosticDataRouteObject>(\n          routesToUse,\n          pathname,\n          basename,\n          true\n        );\n\n        return { active: true, matches: fogMatches || [] };\n      } else {\n        if (Object.keys(matches[0].params).length > 0) {\n          // If we matched a dynamic param or a splat, it might only be because\n          // we haven't yet discovered other routes that would match with a\n          // higher score.  Call patchRoutesOnNavigation just to be sure\n          let partialMatches = matchRoutesImpl<AgnosticDataRouteObject>(\n            routesToUse,\n            pathname,\n            basename,\n            true\n          );\n          return { active: true, matches: partialMatches };\n        }\n      }\n    }\n\n    return { active: false, matches: null };\n  }\n\n  type DiscoverRoutesSuccessResult = {\n    type: \"success\";\n    matches: AgnosticDataRouteMatch[] | null;\n  };\n  type DiscoverRoutesErrorResult = {\n    type: \"error\";\n    error: any;\n    partialMatches: AgnosticDataRouteMatch[];\n  };\n  type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n  type DiscoverRoutesResult =\n    | DiscoverRoutesSuccessResult\n    | DiscoverRoutesErrorResult\n    | DiscoverRoutesAbortedResult;\n\n  async function discoverRoutes(\n    matches: AgnosticDataRouteMatch[],\n    pathname: string,\n    signal: AbortSignal,\n    fetcherKey?: string\n  ): Promise<DiscoverRoutesResult> {\n    if (!patchRoutesOnNavigationImpl) {\n      return { type: \"success\", matches };\n    }\n\n    let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n    while (true) {\n      let isNonHMR = inFlightDataRoutes == null;\n      let routesToUse = inFlightDataRoutes || dataRoutes;\n      let localManifest = manifest;\n      try {\n        await patchRoutesOnNavigationImpl({\n          signal,\n          path: pathname,\n          matches: partialMatches,\n          fetcherKey,\n          patch: (routeId, children) => {\n            if (signal.aborted) return;\n            patchRoutesImpl(\n              routeId,\n              children,\n              routesToUse,\n              localManifest,\n              mapRouteProperties\n            );\n          },\n        });\n      } catch (e) {\n        return { type: \"error\", error: e, partialMatches };\n      } finally {\n        // If we are not in the middle of an HMR revalidation and we changed the\n        // routes, provide a new identity so when we `updateState` at the end of\n        // this navigation/fetch `router.routes` will be a new identity and\n        // trigger a re-run of memoized `router.routes` dependencies.\n        // HMR will already update the identity and reflow when it lands\n        // `inFlightDataRoutes` in `completeNavigation`\n        if (isNonHMR && !signal.aborted) {\n          dataRoutes = [...dataRoutes];\n        }\n      }\n\n      if (signal.aborted) {\n        return { type: \"aborted\" };\n      }\n\n      let newMatches = matchRoutes(routesToUse, pathname, basename);\n      if (newMatches) {\n        return { type: \"success\", matches: newMatches };\n      }\n\n      let newPartialMatches = matchRoutesImpl<AgnosticDataRouteObject>(\n        routesToUse,\n        pathname,\n        basename,\n        true\n      );\n\n      // Avoid loops if the second pass results in the same partial matches\n      if (\n        !newPartialMatches ||\n        (partialMatches.length === newPartialMatches.length &&\n          partialMatches.every(\n            (m, i) => m.route.id === newPartialMatches![i].route.id\n          ))\n      ) {\n        return { type: \"success\", matches: null };\n      }\n\n      partialMatches = newPartialMatches;\n    }\n  }\n\n  function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n    manifest = {};\n    inFlightDataRoutes = convertRoutesToDataRoutes(\n      newRoutes,\n      mapRouteProperties,\n      undefined,\n      manifest\n    );\n  }\n\n  function patchRoutes(\n    routeId: string | null,\n    children: AgnosticRouteObject[]\n  ): void {\n    let isNonHMR = inFlightDataRoutes == null;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    patchRoutesImpl(\n      routeId,\n      children,\n      routesToUse,\n      manifest,\n      mapRouteProperties\n    );\n\n    // If we are not in the middle of an HMR revalidation and we changed the\n    // routes, provide a new identity and trigger a reflow via `updateState`\n    // to re-run memoized `router.routes` dependencies.\n    // HMR will already update the identity and reflow when it lands\n    // `inFlightDataRoutes` in `completeNavigation`\n    if (isNonHMR) {\n      dataRoutes = [...dataRoutes];\n      updateState({});\n    }\n  }\n\n  router = {\n    get basename() {\n      return basename;\n    },\n    get future() {\n      return future;\n    },\n    get state() {\n      return state;\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch,\n    revalidate,\n    // Passthrough to history-aware createHref used by useHref so we get proper\n    // hash-aware URLs in DOM paths\n    createHref: (to: To) => init.history.createHref(to),\n    encodeLocation: (to: To) => init.history.encodeLocation(to),\n    getFetcher,\n    deleteFetcher: deleteFetcherAndUpdateState,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    patchRoutes,\n    _internalFetchControllers: fetchControllers,\n    _internalActiveDeferreds: activeDeferreds,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes,\n  };\n\n  return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n  v7_relativeSplatPath: boolean;\n  v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n  basename?: string;\n  /**\n   * @deprecated Use `mapRouteProperties` instead\n   */\n  detectErrorBoundary?: DetectErrorBoundaryFunction;\n  mapRouteProperties?: MapRoutePropertiesFunction;\n  future?: Partial<StaticHandlerFutureConfig>;\n}\n\nexport function createStaticHandler(\n  routes: AgnosticRouteObject[],\n  opts?: CreateStaticHandlerOptions\n): StaticHandler {\n  invariant(\n    routes.length > 0,\n    \"You must provide a non-empty routes array to createStaticHandler\"\n  );\n\n  let manifest: RouteManifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let mapRouteProperties: MapRoutePropertiesFunction;\n  if (opts?.mapRouteProperties) {\n    mapRouteProperties = opts.mapRouteProperties;\n  } else if (opts?.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = opts.detectErrorBoundary;\n    mapRouteProperties = (route) => ({\n      hasErrorBoundary: detectErrorBoundary(route),\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Config driven behavior flags\n  let future: StaticHandlerFutureConfig = {\n    v7_relativeSplatPath: false,\n    v7_throwAbortReason: false,\n    ...(opts ? opts.future : null),\n  };\n\n  let dataRoutes = convertRoutesToDataRoutes(\n    routes,\n    mapRouteProperties,\n    undefined,\n    manifest\n  );\n\n  /**\n   * The query() method is intended for document requests, in which we want to\n   * call an optional action and potentially multiple loaders for all nested\n   * routes.  It returns a StaticHandlerContext object, which is very similar\n   * to the router state (location, loaderData, actionData, errors, etc.) and\n   * also adds SSR-specific information such as the statusCode and headers\n   * from action/loaders Responses.\n   *\n   * It _should_ never throw and should report all errors through the\n   * returned context.errors object, properly associating errors to their error\n   * boundary.  Additionally, it tracks _deepestRenderedBoundaryId which can be\n   * used to emulate React error boundaries during SSr by performing a second\n   * pass only down to the boundaryId.\n   *\n   * The one exception where we do not return a StaticHandlerContext is when a\n   * redirect response is returned or thrown from any action/loader.  We\n   * propagate that out and return the raw Response so the HTTP server can\n   * return it directly.\n   *\n   * - `opts.requestContext` is an optional server context that will be passed\n   *   to actions/loaders in the `context` parameter\n   * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n   *   the bubbling of errors which allows single-fetch-type implementations\n   *   where the client will handle the bubbling and we may need to return data\n   *   for the handling route\n   */\n  async function query(\n    request: Request,\n    {\n      requestContext,\n      skipLoaderErrorBubbling,\n      dataStrategy,\n    }: {\n      requestContext?: unknown;\n      skipLoaderErrorBubbling?: boolean;\n      dataStrategy?: DataStrategyFunction;\n    } = {}\n  ): Promise<StaticHandlerContext | Response> {\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, { method });\n      let { matches: methodNotAllowedMatches, route } =\n        getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: methodNotAllowedMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error,\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    } else if (!matches) {\n      let error = getInternalRouterError(404, { pathname: location.pathname });\n      let { matches: notFoundMatches, route } =\n        getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: notFoundMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error,\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    let result = await queryImpl(\n      request,\n      location,\n      matches,\n      requestContext,\n      dataStrategy || null,\n      skipLoaderErrorBubbling === true,\n      null\n    );\n    if (isResponse(result)) {\n      return result;\n    }\n\n    // When returning StaticHandlerContext, we patch back in the location here\n    // since we need it for React Context.  But this helps keep our submit and\n    // loadRouteData operating on a Request instead of a Location\n    return { location, basename, ...result };\n  }\n\n  /**\n   * The queryRoute() method is intended for targeted route requests, either\n   * for fetch ?_data requests or resource route requests.  In this case, we\n   * are only ever calling a single action or loader, and we are returning the\n   * returned value directly.  In most cases, this will be a Response returned\n   * from the action/loader, but it may be a primitive or other value as well -\n   * and in such cases the calling context should handle that accordingly.\n   *\n   * We do respect the throw/return differentiation, so if an action/loader\n   * throws, then this method will throw the value.  This is important so we\n   * can do proper boundary identification in Remix where a thrown Response\n   * must go to the Catch Boundary but a returned Response is happy-path.\n   *\n   * One thing to note is that any Router-initiated Errors that make sense\n   * to associate with a status code will be thrown as an ErrorResponse\n   * instance which include the raw Error, such that the calling context can\n   * serialize the error as they see fit while including the proper response\n   * code.  Examples here are 404 and 405 errors that occur prior to reaching\n   * any user-defined loaders.\n   *\n   * - `opts.routeId` allows you to specify the specific route handler to call.\n   *   If not provided the handler will determine the proper route by matching\n   *   against `request.url`\n   * - `opts.requestContext` is an optional server context that will be passed\n   *    to actions/loaders in the `context` parameter\n   */\n  async function queryRoute(\n    request: Request,\n    {\n      routeId,\n      requestContext,\n      dataStrategy,\n    }: {\n      requestContext?: unknown;\n      routeId?: string;\n      dataStrategy?: DataStrategyFunction;\n    } = {}\n  ): Promise<any> {\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, { method });\n    } else if (!matches) {\n      throw getInternalRouterError(404, { pathname: location.pathname });\n    }\n\n    let match = routeId\n      ? matches.find((m) => m.route.id === routeId)\n      : getTargetMatch(matches, location);\n\n    if (routeId && !match) {\n      throw getInternalRouterError(403, {\n        pathname: location.pathname,\n        routeId,\n      });\n    } else if (!match) {\n      // This should never hit I don't think?\n      throw getInternalRouterError(404, { pathname: location.pathname });\n    }\n\n    let result = await queryImpl(\n      request,\n      location,\n      matches,\n      requestContext,\n      dataStrategy || null,\n      false,\n      match\n    );\n\n    if (isResponse(result)) {\n      return result;\n    }\n\n    let error = result.errors ? Object.values(result.errors)[0] : undefined;\n    if (error !== undefined) {\n      // If we got back result.errors, that means the loader/action threw\n      // _something_ that wasn't a Response, but it's not guaranteed/required\n      // to be an `instanceof Error` either, so we have to use throw here to\n      // preserve the \"error\" state outside of queryImpl.\n      throw error;\n    }\n\n    // Pick off the right state value to return\n    if (result.actionData) {\n      return Object.values(result.actionData)[0];\n    }\n\n    if (result.loaderData) {\n      let data = Object.values(result.loaderData)[0];\n      if (result.activeDeferreds?.[match.route.id]) {\n        data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n      }\n      return data;\n    }\n\n    return undefined;\n  }\n\n  async function queryImpl(\n    request: Request,\n    location: Location,\n    matches: AgnosticDataRouteMatch[],\n    requestContext: unknown,\n    dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    routeMatch: AgnosticDataRouteMatch | null\n  ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n    invariant(\n      request.signal,\n      \"query()/queryRoute() requests must contain an AbortController signal\"\n    );\n\n    try {\n      if (isMutationMethod(request.method.toLowerCase())) {\n        let result = await submit(\n          request,\n          matches,\n          routeMatch || getTargetMatch(matches, location),\n          requestContext,\n          dataStrategy,\n          skipLoaderErrorBubbling,\n          routeMatch != null\n        );\n        return result;\n      }\n\n      let result = await loadRouteData(\n        request,\n        matches,\n        requestContext,\n        dataStrategy,\n        skipLoaderErrorBubbling,\n        routeMatch\n      );\n      return isResponse(result)\n        ? result\n        : {\n            ...result,\n            actionData: null,\n            actionHeaders: {},\n          };\n    } catch (e) {\n      // If the user threw/returned a Response in callLoaderOrAction for a\n      // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n      // and then return or throw the raw Response here accordingly\n      if (isDataStrategyResult(e) && isResponse(e.result)) {\n        if (e.type === ResultType.error) {\n          throw e.result;\n        }\n        return e.result;\n      }\n      // Redirects are always returned since they don't propagate to catch\n      // boundaries\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n\n  async function submit(\n    request: Request,\n    matches: AgnosticDataRouteMatch[],\n    actionMatch: AgnosticDataRouteMatch,\n    requestContext: unknown,\n    dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    isRouteRequest: boolean\n  ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n    let result: DataResult;\n\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: actionMatch.route.id,\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error,\n      };\n    } else {\n      let results = await callDataStrategy(\n        \"action\",\n        request,\n        [actionMatch],\n        matches,\n        isRouteRequest,\n        requestContext,\n        dataStrategy\n      );\n      result = results[actionMatch.route.id];\n\n      if (request.signal.aborted) {\n        throwStaticHandlerAbortedError(request, isRouteRequest, future);\n      }\n    }\n\n    if (isRedirectResult(result)) {\n      // Uhhhh - this should never happen, we should always throw these from\n      // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n      // can get back on the \"throw all redirect responses\" train here should\n      // this ever happen :/\n      throw new Response(null, {\n        status: result.response.status,\n        headers: {\n          Location: result.response.headers.get(\"Location\")!,\n        },\n      });\n    }\n\n    if (isDeferredResult(result)) {\n      let error = getInternalRouterError(400, { type: \"defer-action\" });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error,\n      };\n    }\n\n    if (isRouteRequest) {\n      // Note: This should only be non-Response values if we get here, since\n      // isRouteRequest should throw any Response received in callLoaderOrAction\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: { [actionMatch.route.id]: result.data },\n        errors: null,\n        // Note: statusCode + headers are unused here since queryRoute will\n        // return the raw Response or value\n        statusCode: 200,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    // Create a GET request for the loaders\n    let loaderRequest = new Request(request.url, {\n      headers: request.headers,\n      redirect: request.redirect,\n      signal: request.signal,\n    });\n\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = skipLoaderErrorBubbling\n        ? actionMatch\n        : findNearestBoundary(matches, actionMatch.route.id);\n\n      let context = await loadRouteData(\n        loaderRequest,\n        matches,\n        requestContext,\n        dataStrategy,\n        skipLoaderErrorBubbling,\n        null,\n        [boundaryMatch.route.id, result]\n      );\n\n      // action status codes take precedence over loader status codes\n      return {\n        ...context,\n        statusCode: isRouteErrorResponse(result.error)\n          ? result.error.status\n          : result.statusCode != null\n          ? result.statusCode\n          : 500,\n        actionData: null,\n        actionHeaders: {\n          ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n        },\n      };\n    }\n\n    let context = await loadRouteData(\n      loaderRequest,\n      matches,\n      requestContext,\n      dataStrategy,\n      skipLoaderErrorBubbling,\n      null\n    );\n\n    return {\n      ...context,\n      actionData: {\n        [actionMatch.route.id]: result.data,\n      },\n      // action status codes take precedence over loader status codes\n      ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n      actionHeaders: result.headers\n        ? { [actionMatch.route.id]: result.headers }\n        : {},\n    };\n  }\n\n  async function loadRouteData(\n    request: Request,\n    matches: AgnosticDataRouteMatch[],\n    requestContext: unknown,\n    dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    routeMatch: AgnosticDataRouteMatch | null,\n    pendingActionResult?: PendingActionResult\n  ): Promise<\n    | Omit<\n        StaticHandlerContext,\n        \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n      >\n    | Response\n  > {\n    let isRouteRequest = routeMatch != null;\n\n    // Short circuit if we have no loaders to run (queryRoute())\n    if (\n      isRouteRequest &&\n      !routeMatch?.route.loader &&\n      !routeMatch?.route.lazy\n    ) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch?.route.id,\n      });\n    }\n\n    let requestMatches = routeMatch\n      ? [routeMatch]\n      : pendingActionResult && isErrorResult(pendingActionResult[1])\n      ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n      : matches;\n    let matchesToLoad = requestMatches.filter(\n      (m) => m.route.loader || m.route.lazy\n    );\n\n    // Short circuit if we have no loaders to run (query())\n    if (matchesToLoad.length === 0) {\n      return {\n        matches,\n        // Add a null for all matched routes for proper revalidation on the client\n        loaderData: matches.reduce(\n          (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n          {}\n        ),\n        errors:\n          pendingActionResult && isErrorResult(pendingActionResult[1])\n            ? {\n                [pendingActionResult[0]]: pendingActionResult[1].error,\n              }\n            : null,\n        statusCode: 200,\n        loaderHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    let results = await callDataStrategy(\n      \"loader\",\n      request,\n      matchesToLoad,\n      matches,\n      isRouteRequest,\n      requestContext,\n      dataStrategy\n    );\n\n    if (request.signal.aborted) {\n      throwStaticHandlerAbortedError(request, isRouteRequest, future);\n    }\n\n    // Process and commit output from loaders\n    let activeDeferreds = new Map<string, DeferredData>();\n    let context = processRouteLoaderData(\n      matches,\n      results,\n      pendingActionResult,\n      activeDeferreds,\n      skipLoaderErrorBubbling\n    );\n\n    // Add a null for any non-loader matches for proper revalidation on the client\n    let executedLoaders = new Set<string>(\n      matchesToLoad.map((match) => match.route.id)\n    );\n    matches.forEach((match) => {\n      if (!executedLoaders.has(match.route.id)) {\n        context.loaderData[match.route.id] = null;\n      }\n    });\n\n    return {\n      ...context,\n      matches,\n      activeDeferreds:\n        activeDeferreds.size > 0\n          ? Object.fromEntries(activeDeferreds.entries())\n          : null,\n    };\n  }\n\n  // Utility wrapper for calling dataStrategy server-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(\n    type: \"loader\" | \"action\",\n    request: Request,\n    matchesToLoad: AgnosticDataRouteMatch[],\n    matches: AgnosticDataRouteMatch[],\n    isRouteRequest: boolean,\n    requestContext: unknown,\n    dataStrategy: DataStrategyFunction | null\n  ): Promise<Record<string, DataResult>> {\n    let results = await callDataStrategyImpl(\n      dataStrategy || defaultDataStrategy,\n      type,\n      null,\n      request,\n      matchesToLoad,\n      matches,\n      null,\n      manifest,\n      mapRouteProperties,\n      requestContext\n    );\n\n    let dataResults: Record<string, DataResult> = {};\n    await Promise.all(\n      matches.map(async (match) => {\n        if (!(match.route.id in results)) {\n          return;\n        }\n        let result = results[match.route.id];\n        if (isRedirectDataStrategyResultResult(result)) {\n          let response = result.result as Response;\n          // Throw redirects and let the server handle them with an HTTP redirect\n          throw normalizeRelativeRoutingRedirectResponse(\n            response,\n            request,\n            match.route.id,\n            matches,\n            basename,\n            future.v7_relativeSplatPath\n          );\n        }\n        if (isResponse(result.result) && isRouteRequest) {\n          // For SSR single-route requests, we want to hand Responses back\n          // directly without unwrapping\n          throw result;\n        }\n\n        dataResults[match.route.id] =\n          await convertDataStrategyResultToDataResult(result);\n      })\n    );\n    return dataResults;\n  }\n\n  return {\n    dataRoutes,\n    query,\n    queryRoute,\n  };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n  routes: AgnosticDataRouteObject[],\n  context: StaticHandlerContext,\n  error: any\n) {\n  let newContext: StaticHandlerContext = {\n    ...context,\n    statusCode: isRouteErrorResponse(error) ? error.status : 500,\n    errors: {\n      [context._deepestRenderedBoundaryId || routes[0].id]: error,\n    },\n  };\n  return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n  request: Request,\n  isRouteRequest: boolean,\n  future: StaticHandlerFutureConfig\n) {\n  if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n    throw request.signal.reason;\n  }\n\n  let method = isRouteRequest ? \"queryRoute\" : \"query\";\n  throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n  opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n  return (\n    opts != null &&\n    ((\"formData\" in opts && opts.formData != null) ||\n      (\"body\" in opts && opts.body !== undefined))\n  );\n}\n\nfunction normalizeTo(\n  location: Path,\n  matches: AgnosticDataRouteMatch[],\n  basename: string,\n  prependBasename: boolean,\n  to: To | null,\n  v7_relativeSplatPath: boolean,\n  fromRouteId?: string,\n  relative?: RelativeRoutingType\n) {\n  let contextualMatches: AgnosticDataRouteMatch[];\n  let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n  if (fromRouteId) {\n    // Grab matches up to the calling route so our route-relative logic is\n    // relative to the correct source route\n    contextualMatches = [];\n    for (let match of matches) {\n      contextualMatches.push(match);\n      if (match.route.id === fromRouteId) {\n        activeRouteMatch = match;\n        break;\n      }\n    }\n  } else {\n    contextualMatches = matches;\n    activeRouteMatch = matches[matches.length - 1];\n  }\n\n  // Resolve the relative path\n  let path = resolveTo(\n    to ? to : \".\",\n    getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n    stripBasename(location.pathname, basename) || location.pathname,\n    relative === \"path\"\n  );\n\n  // When `to` is not specified we inherit search/hash from the current\n  // location, unlike when to=\".\" and we just inherit the path.\n  // See https://github.com/remix-run/remix/issues/927\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n\n  // Account for `?index` params when routing to the current location\n  if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n    let nakedIndex = hasNakedIndexQuery(path.search);\n    if (activeRouteMatch.route.index && !nakedIndex) {\n      // Add one when we're targeting an index route\n      path.search = path.search\n        ? path.search.replace(/^\\?/, \"?index&\")\n        : \"?index\";\n    } else if (!activeRouteMatch.route.index && nakedIndex) {\n      // Remove existing ones when we're not\n      let params = new URLSearchParams(path.search);\n      let indexValues = params.getAll(\"index\");\n      params.delete(\"index\");\n      indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? `?${qs}` : \"\";\n    }\n  }\n\n  // If we're operating within a basename, prepend it to the pathname.  If\n  // this is a root navigation, then just use the raw basename which allows\n  // the basename to have full control over the presence of a trailing slash\n  // on root actions\n  if (prependBasename && basename !== \"/\") {\n    path.pathname =\n      path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n\n  return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n  normalizeFormMethod: boolean,\n  isFetcher: boolean,\n  path: string,\n  opts?: BaseNavigateOrFetchOptions\n): {\n  path: string;\n  submission?: Submission;\n  error?: ErrorResponseImpl;\n} {\n  // Return location verbatim on non-submission navigations\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return { path };\n  }\n\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, { method: opts.formMethod }),\n    };\n  }\n\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, { type: \"invalid-body\" }),\n  });\n\n  // Create a Submission on non-GET navigations\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = normalizeFormMethod\n    ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n    : (rawFormMethod.toLowerCase() as FormMethod);\n  let formAction = stripHashFromPath(path);\n\n  if (opts.body !== undefined) {\n    if (opts.formEncType === \"text/plain\") {\n      // text only support POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n\n      let text =\n        typeof opts.body === \"string\"\n          ? opts.body\n          : opts.body instanceof FormData ||\n            opts.body instanceof URLSearchParams\n          ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n            Array.from(opts.body.entries()).reduce(\n              (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n              \"\"\n            )\n          : String(opts.body);\n\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: undefined,\n          json: undefined,\n          text,\n        },\n      };\n    } else if (opts.formEncType === \"application/json\") {\n      // json only supports POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n\n      try {\n        let json =\n          typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n        return {\n          path,\n          submission: {\n            formMethod,\n            formAction,\n            formEncType: opts.formEncType,\n            formData: undefined,\n            json,\n            text: undefined,\n          },\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n\n  invariant(\n    typeof FormData === \"function\",\n    \"FormData is not available in this environment\"\n  );\n\n  let searchParams: URLSearchParams;\n  let formData: FormData;\n\n  if (opts.formData) {\n    searchParams = convertFormDataToSearchParams(opts.formData);\n    formData = opts.formData;\n  } else if (opts.body instanceof FormData) {\n    searchParams = convertFormDataToSearchParams(opts.body);\n    formData = opts.body;\n  } else if (opts.body instanceof URLSearchParams) {\n    searchParams = opts.body;\n    formData = convertSearchParamsToFormData(searchParams);\n  } else if (opts.body == null) {\n    searchParams = new URLSearchParams();\n    formData = new FormData();\n  } else {\n    try {\n      searchParams = new URLSearchParams(opts.body);\n      formData = convertSearchParamsToFormData(searchParams);\n    } catch (e) {\n      return getInvalidBodyError();\n    }\n  }\n\n  let submission: Submission = {\n    formMethod,\n    formAction,\n    formEncType:\n      (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n    formData,\n    json: undefined,\n    text: undefined,\n  };\n\n  if (isMutationMethod(submission.formMethod)) {\n    return { path, submission };\n  }\n\n  // Flatten submission onto URLSearchParams for GET submissions\n  let parsedPath = parsePath(path);\n  // On GET navigation submissions we can drop the ?index param from the\n  // resulting location since all loaders will run.  But fetcher GET submissions\n  // only run a single loader so we need to preserve any incoming ?index params\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = `?${searchParams}`;\n\n  return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n  matches: AgnosticDataRouteMatch[],\n  boundaryId: string,\n  includeBoundary = false\n) {\n  let index = matches.findIndex((m) => m.route.id === boundaryId);\n  if (index >= 0) {\n    return matches.slice(0, includeBoundary ? index + 1 : index);\n  }\n  return matches;\n}\n\nfunction getMatchesToLoad(\n  history: History,\n  state: RouterState,\n  matches: AgnosticDataRouteMatch[],\n  submission: Submission | undefined,\n  location: Location,\n  initialHydration: boolean,\n  skipActionErrorRevalidation: boolean,\n  isRevalidationRequired: boolean,\n  cancelledDeferredRoutes: string[],\n  cancelledFetcherLoads: Set<string>,\n  deletedFetchers: Set<string>,\n  fetchLoadMatches: Map<string, FetchLoadMatch>,\n  fetchRedirectIds: Set<string>,\n  routesToUse: AgnosticDataRouteObject[],\n  basename: string | undefined,\n  pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n  let actionResult = pendingActionResult\n    ? isErrorResult(pendingActionResult[1])\n      ? pendingActionResult[1].error\n      : pendingActionResult[1].data\n    : undefined;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n\n  // Pick navigation matches that are net-new or qualify for revalidation\n  let boundaryMatches = matches;\n  if (initialHydration && state.errors) {\n    // On initial hydration, only consider matches up to _and including_ the boundary.\n    // This is inclusive to handle cases where a server loader ran successfully,\n    // a child server loader bubbled up to this route, but this route has\n    // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n    // we have a complete version of `loaderData`\n    boundaryMatches = getLoaderMatchesUntilBoundary(\n      matches,\n      Object.keys(state.errors)[0],\n      true\n    );\n  } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n    // If an action threw an error, we call loaders up to, but not including the\n    // boundary\n    boundaryMatches = getLoaderMatchesUntilBoundary(\n      matches,\n      pendingActionResult[0]\n    );\n  }\n\n  // Don't revalidate loaders by default after action 4xx/5xx responses\n  // when the flag is enabled.  They can still opt-into revalidation via\n  // `shouldRevalidate` via `actionResult`\n  let actionStatus = pendingActionResult\n    ? pendingActionResult[1].statusCode\n    : undefined;\n  let shouldSkipRevalidation =\n    skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n  let navigationMatches = boundaryMatches.filter((match, index) => {\n    let { route } = match;\n    if (route.lazy) {\n      // We haven't loaded this route yet so we don't know if it's got a loader!\n      return true;\n    }\n\n    if (route.loader == null) {\n      return false;\n    }\n\n    if (initialHydration) {\n      return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n    }\n\n    // Always call the loader on new route instances and pending defer cancellations\n    if (\n      isNewLoader(state.loaderData, state.matches[index], match) ||\n      cancelledDeferredRoutes.some((id) => id === match.route.id)\n    ) {\n      return true;\n    }\n\n    // This is the default implementation for when we revalidate.  If the route\n    // provides it's own implementation, then we give them full control but\n    // provide this value so they can leverage it if needed after they check\n    // their own specific use cases\n    let currentRouteMatch = state.matches[index];\n    let nextRouteMatch = match;\n\n    return shouldRevalidateLoader(match, {\n      currentUrl,\n      currentParams: currentRouteMatch.params,\n      nextUrl,\n      nextParams: nextRouteMatch.params,\n      ...submission,\n      actionResult,\n      actionStatus,\n      defaultShouldRevalidate: shouldSkipRevalidation\n        ? false\n        : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n          isRevalidationRequired ||\n          currentUrl.pathname + currentUrl.search ===\n            nextUrl.pathname + nextUrl.search ||\n          // Search params affect all loaders\n          currentUrl.search !== nextUrl.search ||\n          isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n    });\n  });\n\n  // Pick fetcher.loads that need to be revalidated\n  let revalidatingFetchers: RevalidatingFetcher[] = [];\n  fetchLoadMatches.forEach((f, key) => {\n    // Don't revalidate:\n    //  - on initial hydration (shouldn't be any fetchers then anyway)\n    //  - if fetcher won't be present in the subsequent render\n    //    - no longer matches the URL (v7_fetcherPersist=false)\n    //    - was unmounted but persisted due to v7_fetcherPersist=true\n    if (\n      initialHydration ||\n      !matches.some((m) => m.route.id === f.routeId) ||\n      deletedFetchers.has(key)\n    ) {\n      return;\n    }\n\n    let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n    // If the fetcher path no longer matches, push it in with null matches so\n    // we can trigger a 404 in callLoadersAndMaybeResolveData.  Note this is\n    // currently only a use-case for Remix HMR where the route tree can change\n    // at runtime and remove a route previously loaded via a fetcher\n    if (!fetcherMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        controller: null,\n      });\n      return;\n    }\n\n    // Revalidating fetchers are decoupled from the route matches since they\n    // load from a static href.  They revalidate based on explicit revalidation\n    // (submission, useRevalidator, or X-Remix-Revalidate)\n    let fetcher = state.fetchers.get(key);\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n    let shouldRevalidate = false;\n    if (fetchRedirectIds.has(key)) {\n      // Never trigger a revalidation of an actively redirecting fetcher\n      shouldRevalidate = false;\n    } else if (cancelledFetcherLoads.has(key)) {\n      // Always mark for revalidation if the fetcher was cancelled\n      cancelledFetcherLoads.delete(key);\n      shouldRevalidate = true;\n    } else if (\n      fetcher &&\n      fetcher.state !== \"idle\" &&\n      fetcher.data === undefined\n    ) {\n      // If the fetcher hasn't ever completed loading yet, then this isn't a\n      // revalidation, it would just be a brand new load if an explicit\n      // revalidation is required\n      shouldRevalidate = isRevalidationRequired;\n    } else {\n      // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n      // to explicit revalidations only\n      shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n        currentUrl,\n        currentParams: state.matches[state.matches.length - 1].params,\n        nextUrl,\n        nextParams: matches[matches.length - 1].params,\n        ...submission,\n        actionResult,\n        actionStatus,\n        defaultShouldRevalidate: shouldSkipRevalidation\n          ? false\n          : isRevalidationRequired,\n      });\n    }\n\n    if (shouldRevalidate) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherMatches,\n        match: fetcherMatch,\n        controller: new AbortController(),\n      });\n    }\n  });\n\n  return [navigationMatches, revalidatingFetchers];\n}\n\nfunction shouldLoadRouteOnHydration(\n  route: AgnosticDataRouteObject,\n  loaderData: RouteData | null | undefined,\n  errors: RouteData | null | undefined\n) {\n  // We dunno if we have a loader - gotta find out!\n  if (route.lazy) {\n    return true;\n  }\n\n  // No loader, nothing to initialize\n  if (!route.loader) {\n    return false;\n  }\n\n  let hasData = loaderData != null && loaderData[route.id] !== undefined;\n  let hasError = errors != null && errors[route.id] !== undefined;\n\n  // Don't run if we error'd during SSR\n  if (!hasData && hasError) {\n    return false;\n  }\n\n  // Explicitly opting-in to running on hydration\n  if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n    return true;\n  }\n\n  // Otherwise, run if we're not yet initialized with anything\n  return !hasData && !hasError;\n}\n\nfunction isNewLoader(\n  currentLoaderData: RouteData,\n  currentMatch: AgnosticDataRouteMatch,\n  match: AgnosticDataRouteMatch\n) {\n  let isNew =\n    // [a] -> [a, b]\n    !currentMatch ||\n    // [a, b] -> [a, c]\n    match.route.id !== currentMatch.route.id;\n\n  // Handle the case that we don't have data for a re-used route, potentially\n  // from a prior error or from a cancelled pending deferred\n  let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n  // Always load if this is a net-new route or we don't yet have data\n  return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n  currentMatch: AgnosticDataRouteMatch,\n  match: AgnosticDataRouteMatch\n) {\n  let currentPath = currentMatch.route.path;\n  return (\n    // param change for this match, /users/123 -> /users/456\n    currentMatch.pathname !== match.pathname ||\n    // splat param changed, which is not present in match.path\n    // e.g. /files/images/avatar.jpg -> files/finances.xls\n    (currentPath != null &&\n      currentPath.endsWith(\"*\") &&\n      currentMatch.params[\"*\"] !== match.params[\"*\"])\n  );\n}\n\nfunction shouldRevalidateLoader(\n  loaderMatch: AgnosticDataRouteMatch,\n  arg: ShouldRevalidateFunctionArgs\n) {\n  if (loaderMatch.route.shouldRevalidate) {\n    let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n    if (typeof routeChoice === \"boolean\") {\n      return routeChoice;\n    }\n  }\n\n  return arg.defaultShouldRevalidate;\n}\n\nfunction patchRoutesImpl(\n  routeId: string | null,\n  children: AgnosticRouteObject[],\n  routesToUse: AgnosticDataRouteObject[],\n  manifest: RouteManifest,\n  mapRouteProperties: MapRoutePropertiesFunction\n) {\n  let childrenToPatch: AgnosticDataRouteObject[];\n  if (routeId) {\n    let route = manifest[routeId];\n    invariant(\n      route,\n      `No route found to patch children into: routeId = ${routeId}`\n    );\n    if (!route.children) {\n      route.children = [];\n    }\n    childrenToPatch = route.children;\n  } else {\n    childrenToPatch = routesToUse;\n  }\n\n  // Don't patch in routes we already know about so that `patch` is idempotent\n  // to simplify user-land code. This is useful because we re-call the\n  // `patchRoutesOnNavigation` function for matched routes with params.\n  let uniqueChildren = children.filter(\n    (newRoute) =>\n      !childrenToPatch.some((existingRoute) =>\n        isSameRoute(newRoute, existingRoute)\n      )\n  );\n\n  let newRoutes = convertRoutesToDataRoutes(\n    uniqueChildren,\n    mapRouteProperties,\n    [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n    manifest\n  );\n\n  childrenToPatch.push(...newRoutes);\n}\n\nfunction isSameRoute(\n  newRoute: AgnosticRouteObject,\n  existingRoute: AgnosticRouteObject\n): boolean {\n  // Most optimal check is by id\n  if (\n    \"id\" in newRoute &&\n    \"id\" in existingRoute &&\n    newRoute.id === existingRoute.id\n  ) {\n    return true;\n  }\n\n  // Second is by pathing differences\n  if (\n    !(\n      newRoute.index === existingRoute.index &&\n      newRoute.path === existingRoute.path &&\n      newRoute.caseSensitive === existingRoute.caseSensitive\n    )\n  ) {\n    return false;\n  }\n\n  // Pathless layout routes are trickier since we need to check children.\n  // If they have no children then they're the same as far as we can tell\n  if (\n    (!newRoute.children || newRoute.children.length === 0) &&\n    (!existingRoute.children || existingRoute.children.length === 0)\n  ) {\n    return true;\n  }\n\n  // Otherwise, we look to see if every child in the new route is already\n  // represented in the existing route's children\n  return newRoute.children!.every((aChild, i) =>\n    existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n  );\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n  route: AgnosticDataRouteObject,\n  mapRouteProperties: MapRoutePropertiesFunction,\n  manifest: RouteManifest\n) {\n  if (!route.lazy) {\n    return;\n  }\n\n  let lazyRoute = await route.lazy();\n\n  // If the lazy route function was executed and removed by another parallel\n  // call then we can return - first lazy() to finish wins because the return\n  // value of lazy is expected to be static\n  if (!route.lazy) {\n    return;\n  }\n\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n\n  // Update the route in place.  This should be safe because there's no way\n  // we could yet be sitting on this route as we can't get there without\n  // resolving lazy() first.\n  //\n  // This is different than the HMR \"update\" use-case where we may actively be\n  // on the route being updated.  The main concern boils down to \"does this\n  // mutation affect any ongoing navigations or any current state.matches\n  // values?\".  If not, it should be safe to update in place.\n  let routeUpdates: Record<string, any> = {};\n  for (let lazyRouteProperty in lazyRoute) {\n    let staticRouteValue =\n      routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n    let isPropertyStaticallyDefined =\n      staticRouteValue !== undefined &&\n      // This property isn't static since it should always be updated based\n      // on the route updates\n      lazyRouteProperty !== \"hasErrorBoundary\";\n\n    warning(\n      !isPropertyStaticallyDefined,\n      `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n        `defined but its lazy function is also returning a value for this property. ` +\n        `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n    );\n\n    if (\n      !isPropertyStaticallyDefined &&\n      !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n    ) {\n      routeUpdates[lazyRouteProperty] =\n        lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n    }\n  }\n\n  // Mutate the route with the provided updates.  Do this first so we pass\n  // the updated version to mapRouteProperties\n  Object.assign(routeToUpdate, routeUpdates);\n\n  // Mutate the `hasErrorBoundary` property on the route based on the route\n  // updates and remove the `lazy` function so we don't resolve the lazy\n  // route again.\n  Object.assign(routeToUpdate, {\n    // To keep things framework agnostic, we use the provided\n    // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n    // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n    // the logic will differ between frameworks.\n    ...mapRouteProperties(routeToUpdate),\n    lazy: undefined,\n  });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy({\n  matches,\n}: DataStrategyFunctionArgs): ReturnType<DataStrategyFunction> {\n  let matchesToLoad = matches.filter((m) => m.shouldLoad);\n  let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n  return results.reduce(\n    (acc, result, i) =>\n      Object.assign(acc, { [matchesToLoad[i].route.id]: result }),\n    {}\n  );\n}\n\nasync function callDataStrategyImpl(\n  dataStrategyImpl: DataStrategyFunction,\n  type: \"loader\" | \"action\",\n  state: RouterState | null,\n  request: Request,\n  matchesToLoad: AgnosticDataRouteMatch[],\n  matches: AgnosticDataRouteMatch[],\n  fetcherKey: string | null,\n  manifest: RouteManifest,\n  mapRouteProperties: MapRoutePropertiesFunction,\n  requestContext?: unknown\n): Promise<Record<string, DataStrategyResult>> {\n  let loadRouteDefinitionsPromises = matches.map((m) =>\n    m.route.lazy\n      ? loadLazyRouteModule(m.route, mapRouteProperties, manifest)\n      : undefined\n  );\n\n  let dsMatches = matches.map((match, i) => {\n    let loadRoutePromise = loadRouteDefinitionsPromises[i];\n    let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n    // `resolve` encapsulates route.lazy(), executing the loader/action,\n    // and mapping return values/thrown errors to a `DataStrategyResult`.  Users\n    // can pass a callback to take fine-grained control over the execution\n    // of the loader/action\n    let resolve: DataStrategyMatch[\"resolve\"] = async (handlerOverride) => {\n      if (\n        handlerOverride &&\n        request.method === \"GET\" &&\n        (match.route.lazy || match.route.loader)\n      ) {\n        shouldLoad = true;\n      }\n      return shouldLoad\n        ? callLoaderOrAction(\n            type,\n            request,\n            match,\n            loadRoutePromise,\n            handlerOverride,\n            requestContext\n          )\n        : Promise.resolve({ type: ResultType.data, result: undefined });\n    };\n\n    return {\n      ...match,\n      shouldLoad,\n      resolve,\n    };\n  });\n\n  // Send all matches here to allow for a middleware-type implementation.\n  // handler will be a no-op for unneeded routes and we filter those results\n  // back out below.\n  let results = await dataStrategyImpl({\n    matches: dsMatches,\n    request,\n    params: matches[0].params,\n    fetcherKey,\n    context: requestContext,\n  });\n\n  // Wait for all routes to load here but 'swallow the error since we want\n  // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n  // called from `match.resolve()`\n  try {\n    await Promise.all(loadRouteDefinitionsPromises);\n  } catch (e) {\n    // No-op\n  }\n\n  return results;\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n  type: \"loader\" | \"action\",\n  request: Request,\n  match: AgnosticDataRouteMatch,\n  loadRoutePromise: Promise<void> | undefined,\n  handlerOverride: Parameters<DataStrategyMatch[\"resolve\"]>[0],\n  staticContext?: unknown\n): Promise<DataStrategyResult> {\n  let result: DataStrategyResult;\n  let onReject: (() => void) | undefined;\n\n  let runHandler = (\n    handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n  ): Promise<DataStrategyResult> => {\n    // Setup a promise we can race against so that abort signals short circuit\n    let reject: () => void;\n    // This will never resolve so safe to type it as Promise<DataStrategyResult> to\n    // satisfy the function return value\n    let abortPromise = new Promise<DataStrategyResult>((_, r) => (reject = r));\n    onReject = () => reject();\n    request.signal.addEventListener(\"abort\", onReject);\n\n    let actualHandler = (ctx?: unknown) => {\n      if (typeof handler !== \"function\") {\n        return Promise.reject(\n          new Error(\n            `You cannot call the handler for a route which defines a boolean ` +\n              `\"${type}\" [routeId: ${match.route.id}]`\n          )\n        );\n      }\n      return handler(\n        {\n          request,\n          params: match.params,\n          context: staticContext,\n        },\n        ...(ctx !== undefined ? [ctx] : [])\n      );\n    };\n\n    let handlerPromise: Promise<DataStrategyResult> = (async () => {\n      try {\n        let val = await (handlerOverride\n          ? handlerOverride((ctx: unknown) => actualHandler(ctx))\n          : actualHandler());\n        return { type: \"data\", result: val };\n      } catch (e) {\n        return { type: \"error\", result: e };\n      }\n    })();\n\n    return Promise.race([handlerPromise, abortPromise]);\n  };\n\n  try {\n    let handler = match.route[type];\n\n    // If we have a route.lazy promise, await that first\n    if (loadRoutePromise) {\n      if (handler) {\n        // Run statically defined handler in parallel with lazy()\n        let handlerError;\n        let [value] = await Promise.all([\n          // If the handler throws, don't let it immediately bubble out,\n          // since we need to let the lazy() execution finish so we know if this\n          // route has a boundary that can handle the error\n          runHandler(handler).catch((e) => {\n            handlerError = e;\n          }),\n          loadRoutePromise,\n        ]);\n        if (handlerError !== undefined) {\n          throw handlerError;\n        }\n        result = value!;\n      } else {\n        // Load lazy route module, then run any returned handler\n        await loadRoutePromise;\n\n        handler = match.route[type];\n        if (handler) {\n          // Handler still runs even if we got interrupted to maintain consistency\n          // with un-abortable behavior of handler execution on non-lazy or\n          // previously-lazy-loaded routes\n          result = await runHandler(handler);\n        } else if (type === \"action\") {\n          let url = new URL(request.url);\n          let pathname = url.pathname + url.search;\n          throw getInternalRouterError(405, {\n            method: request.method,\n            pathname,\n            routeId: match.route.id,\n          });\n        } else {\n          // lazy() route has no loader to run.  Short circuit here so we don't\n          // hit the invariant below that errors on returning undefined.\n          return { type: ResultType.data, result: undefined };\n        }\n      }\n    } else if (!handler) {\n      let url = new URL(request.url);\n      let pathname = url.pathname + url.search;\n      throw getInternalRouterError(404, {\n        pathname,\n      });\n    } else {\n      result = await runHandler(handler);\n    }\n\n    invariant(\n      result.result !== undefined,\n      `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n        `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n        `function. Please return a value or \\`null\\`.`\n    );\n  } catch (e) {\n    // We should already be catching and converting normal handler executions to\n    // DataStrategyResults and returning them, so anything that throws here is an\n    // unexpected error we still need to wrap\n    return { type: ResultType.error, result: e };\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n\n  return result;\n}\n\nasync function convertDataStrategyResultToDataResult(\n  dataStrategyResult: DataStrategyResult\n): Promise<DataResult> {\n  let { result, type } = dataStrategyResult;\n\n  if (isResponse(result)) {\n    let data: any;\n\n    try {\n      let contentType = result.headers.get(\"Content-Type\");\n      // Check between word boundaries instead of startsWith() due to the last\n      // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n      if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n        if (result.body == null) {\n          data = null;\n        } else {\n          data = await result.json();\n        }\n      } else {\n        data = await result.text();\n      }\n    } catch (e) {\n      return { type: ResultType.error, error: e };\n    }\n\n    if (type === ResultType.error) {\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(result.status, result.statusText, data),\n        statusCode: result.status,\n        headers: result.headers,\n      };\n    }\n\n    return {\n      type: ResultType.data,\n      data,\n      statusCode: result.status,\n      headers: result.headers,\n    };\n  }\n\n  if (type === ResultType.error) {\n    if (isDataWithResponseInit(result)) {\n      if (result.data instanceof Error) {\n        return {\n          type: ResultType.error,\n          error: result.data,\n          statusCode: result.init?.status,\n          headers: result.init?.headers\n            ? new Headers(result.init.headers)\n            : undefined,\n        };\n      }\n\n      // Convert thrown data() to ErrorResponse instances\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(\n          result.init?.status || 500,\n          undefined,\n          result.data\n        ),\n        statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n        headers: result.init?.headers\n          ? new Headers(result.init.headers)\n          : undefined,\n      };\n    }\n    return {\n      type: ResultType.error,\n      error: result,\n      statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n    };\n  }\n\n  if (isDeferredData(result)) {\n    return {\n      type: ResultType.deferred,\n      deferredData: result,\n      statusCode: result.init?.status,\n      headers: result.init?.headers && new Headers(result.init.headers),\n    };\n  }\n\n  if (isDataWithResponseInit(result)) {\n    return {\n      type: ResultType.data,\n      data: result.data,\n      statusCode: result.init?.status,\n      headers: result.init?.headers\n        ? new Headers(result.init.headers)\n        : undefined,\n    };\n  }\n\n  return { type: ResultType.data, data: result };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n  response: Response,\n  request: Request,\n  routeId: string,\n  matches: AgnosticDataRouteMatch[],\n  basename: string,\n  v7_relativeSplatPath: boolean\n) {\n  let location = response.headers.get(\"Location\");\n  invariant(\n    location,\n    \"Redirects returned/thrown from loaders/actions must have a Location header\"\n  );\n\n  if (!ABSOLUTE_URL_REGEX.test(location)) {\n    let trimmedMatches = matches.slice(\n      0,\n      matches.findIndex((m) => m.route.id === routeId) + 1\n    );\n    location = normalizeTo(\n      new URL(request.url),\n      trimmedMatches,\n      basename,\n      true,\n      location,\n      v7_relativeSplatPath\n    );\n    response.headers.set(\"Location\", location);\n  }\n\n  return response;\n}\n\nfunction normalizeRedirectLocation(\n  location: string,\n  currentUrl: URL,\n  basename: string\n): string {\n  if (ABSOLUTE_URL_REGEX.test(location)) {\n    // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n    let normalizedLocation = location;\n    let url = normalizedLocation.startsWith(\"//\")\n      ? new URL(currentUrl.protocol + normalizedLocation)\n      : new URL(normalizedLocation);\n    let isSameBasename = stripBasename(url.pathname, basename) != null;\n    if (url.origin === currentUrl.origin && isSameBasename) {\n      return url.pathname + url.search + url.hash;\n    }\n  }\n  return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches.  During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n  history: History,\n  location: string | Location,\n  signal: AbortSignal,\n  submission?: Submission\n): Request {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init: RequestInit = { signal };\n\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let { formMethod, formEncType } = submission;\n    // Didn't think we needed this but it turns out unlike other methods, patch\n    // won't be properly normalized to uppercase and results in a 405 error.\n    // See: https://fetch.spec.whatwg.org/#concept-method\n    init.method = formMethod.toUpperCase();\n\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({ \"Content-Type\": formEncType });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.text;\n    } else if (\n      formEncType === \"application/x-www-form-urlencoded\" &&\n      submission.formData\n    ) {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.formData;\n    }\n  }\n\n  return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n  let searchParams = new URLSearchParams();\n\n  for (let [key, value] of formData.entries()) {\n    // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n    searchParams.append(key, typeof value === \"string\" ? value : value.name);\n  }\n\n  return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n  searchParams: URLSearchParams\n): FormData {\n  let formData = new FormData();\n  for (let [key, value] of searchParams.entries()) {\n    formData.append(key, value);\n  }\n  return formData;\n}\n\nfunction processRouteLoaderData(\n  matches: AgnosticDataRouteMatch[],\n  results: Record<string, DataResult>,\n  pendingActionResult: PendingActionResult | undefined,\n  activeDeferreds: Map<string, DeferredData>,\n  skipLoaderErrorBubbling: boolean\n): {\n  loaderData: RouterState[\"loaderData\"];\n  errors: RouterState[\"errors\"] | null;\n  statusCode: number;\n  loaderHeaders: Record<string, Headers>;\n} {\n  // Fill in loaderData/errors from our loaders\n  let loaderData: RouterState[\"loaderData\"] = {};\n  let errors: RouterState[\"errors\"] | null = null;\n  let statusCode: number | undefined;\n  let foundError = false;\n  let loaderHeaders: Record<string, Headers> = {};\n  let pendingError =\n    pendingActionResult && isErrorResult(pendingActionResult[1])\n      ? pendingActionResult[1].error\n      : undefined;\n\n  // Process loader results into state.loaderData/state.errors\n  matches.forEach((match) => {\n    if (!(match.route.id in results)) {\n      return;\n    }\n    let id = match.route.id;\n    let result = results[id];\n    invariant(\n      !isRedirectResult(result),\n      \"Cannot handle redirect results in processLoaderData\"\n    );\n    if (isErrorResult(result)) {\n      let error = result.error;\n      // If we have a pending action error, we report it at the highest-route\n      // that throws a loader error, and then clear it out to indicate that\n      // it was consumed\n      if (pendingError !== undefined) {\n        error = pendingError;\n        pendingError = undefined;\n      }\n\n      errors = errors || {};\n\n      if (skipLoaderErrorBubbling) {\n        errors[id] = error;\n      } else {\n        // Look upwards from the matched route for the closest ancestor error\n        // boundary, defaulting to the root match.  Prefer higher error values\n        // if lower errors bubble to the same boundary\n        let boundaryMatch = findNearestBoundary(matches, id);\n        if (errors[boundaryMatch.route.id] == null) {\n          errors[boundaryMatch.route.id] = error;\n        }\n      }\n\n      // Clear our any prior loaderData for the throwing route\n      loaderData[id] = undefined;\n\n      // Once we find our first (highest) error, we set the status code and\n      // prevent deeper status codes from overriding\n      if (!foundError) {\n        foundError = true;\n        statusCode = isRouteErrorResponse(result.error)\n          ? result.error.status\n          : 500;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    } else {\n      if (isDeferredResult(result)) {\n        activeDeferreds.set(id, result.deferredData);\n        loaderData[id] = result.deferredData.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (\n          result.statusCode != null &&\n          result.statusCode !== 200 &&\n          !foundError\n        ) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      } else {\n        loaderData[id] = result.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      }\n    }\n  });\n\n  // If we didn't consume the pending action error (i.e., all loaders\n  // resolved), then consume it here.  Also clear out any loaderData for the\n  // throwing route\n  if (pendingError !== undefined && pendingActionResult) {\n    errors = { [pendingActionResult[0]]: pendingError };\n    loaderData[pendingActionResult[0]] = undefined;\n  }\n\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders,\n  };\n}\n\nfunction processLoaderData(\n  state: RouterState,\n  matches: AgnosticDataRouteMatch[],\n  results: Record<string, DataResult>,\n  pendingActionResult: PendingActionResult | undefined,\n  revalidatingFetchers: RevalidatingFetcher[],\n  fetcherResults: Record<string, DataResult>,\n  activeDeferreds: Map<string, DeferredData>\n): {\n  loaderData: RouterState[\"loaderData\"];\n  errors?: RouterState[\"errors\"];\n} {\n  let { loaderData, errors } = processRouteLoaderData(\n    matches,\n    results,\n    pendingActionResult,\n    activeDeferreds,\n    false // This method is only called client side so we always want to bubble\n  );\n\n  // Process results from our revalidating fetchers\n  revalidatingFetchers.forEach((rf) => {\n    let { key, match, controller } = rf;\n    let result = fetcherResults[key];\n    invariant(result, \"Did not find corresponding fetcher result\");\n\n    // Process fetcher non-redirect errors\n    if (controller && controller.signal.aborted) {\n      // Nothing to do for aborted fetchers\n      return;\n    } else if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = {\n          ...errors,\n          [boundaryMatch.route.id]: result.error,\n        };\n      }\n      state.fetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      // Should never get here, redirects should get processed above, but we\n      // keep this to type narrow to a success result in the else\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else if (isDeferredResult(result)) {\n      // Should never get here, deferred data should be awaited for fetchers\n      // in resolveDeferredResults\n      invariant(false, \"Unhandled fetcher deferred data\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  });\n\n  return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n  loaderData: RouteData,\n  newLoaderData: RouteData,\n  matches: AgnosticDataRouteMatch[],\n  errors: RouteData | null | undefined\n): RouteData {\n  let mergedLoaderData = { ...newLoaderData };\n  for (let match of matches) {\n    let id = match.route.id;\n    if (newLoaderData.hasOwnProperty(id)) {\n      if (newLoaderData[id] !== undefined) {\n        mergedLoaderData[id] = newLoaderData[id];\n      } else {\n        // No-op - this is so we ignore existing data if we have a key in the\n        // incoming object with an undefined value, which is how we unset a prior\n        // loaderData if we encounter a loader error\n      }\n    } else if (loaderData[id] !== undefined && match.route.loader) {\n      // Preserve existing keys not included in newLoaderData and where a loader\n      // wasn't removed by HMR\n      mergedLoaderData[id] = loaderData[id];\n    }\n\n    if (errors && errors.hasOwnProperty(id)) {\n      // Don't keep any loader data below the boundary\n      break;\n    }\n  }\n  return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n  pendingActionResult: PendingActionResult | undefined\n) {\n  if (!pendingActionResult) {\n    return {};\n  }\n  return isErrorResult(pendingActionResult[1])\n    ? {\n        // Clear out prior actionData on errors\n        actionData: {},\n      }\n    : {\n        actionData: {\n          [pendingActionResult[0]]: pendingActionResult[1].data,\n        },\n      };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n  matches: AgnosticDataRouteMatch[],\n  routeId?: string\n): AgnosticDataRouteMatch {\n  let eligibleMatches = routeId\n    ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n    : [...matches];\n  return (\n    eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n    matches[0]\n  );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n  matches: AgnosticDataRouteMatch[];\n  route: AgnosticDataRouteObject;\n} {\n  // Prefer a root layout route if present, otherwise shim in a route object\n  let route =\n    routes.length === 1\n      ? routes[0]\n      : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n          id: `__shim-error-route__`,\n        };\n\n  return {\n    matches: [\n      {\n        params: {},\n        pathname: \"\",\n        pathnameBase: \"\",\n        route,\n      },\n    ],\n    route,\n  };\n}\n\nfunction getInternalRouterError(\n  status: number,\n  {\n    pathname,\n    routeId,\n    method,\n    type,\n    message,\n  }: {\n    pathname?: string;\n    routeId?: string;\n    method?: string;\n    type?: \"defer-action\" | \"invalid-body\";\n    message?: string;\n  } = {}\n) {\n  let statusText = \"Unknown Server Error\";\n  let errorMessage = \"Unknown @remix-run/router error\";\n\n  if (status === 400) {\n    statusText = \"Bad Request\";\n    if (method && pathname && routeId) {\n      errorMessage =\n        `You made a ${method} request to \"${pathname}\" but ` +\n        `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n        `so there is no way to handle the request.`;\n    } else if (type === \"defer-action\") {\n      errorMessage = \"defer() is not supported in actions\";\n    } else if (type === \"invalid-body\") {\n      errorMessage = \"Unable to encode submission body\";\n    }\n  } else if (status === 403) {\n    statusText = \"Forbidden\";\n    errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n  } else if (status === 404) {\n    statusText = \"Not Found\";\n    errorMessage = `No route matches URL \"${pathname}\"`;\n  } else if (status === 405) {\n    statusText = \"Method Not Allowed\";\n    if (method && pathname && routeId) {\n      errorMessage =\n        `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n        `did not provide an \\`action\\` for route \"${routeId}\", ` +\n        `so there is no way to handle the request.`;\n    } else if (method) {\n      errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n    }\n  }\n\n  return new ErrorResponseImpl(\n    status || 500,\n    statusText,\n    new Error(errorMessage),\n    true\n  );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n  results: Record<string, DataResult>\n): { key: string; result: RedirectResult } | undefined {\n  let entries = Object.entries(results);\n  for (let i = entries.length - 1; i >= 0; i--) {\n    let [key, result] = entries[i];\n    if (isRedirectResult(result)) {\n      return { key, result };\n    }\n  }\n}\n\nfunction stripHashFromPath(path: To) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n\n  if (a.hash === \"\") {\n    // /page -> /page#hash\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    // /page#hash -> /page#hash\n    return true;\n  } else if (b.hash !== \"\") {\n    // /page#hash -> /page#other\n    return true;\n  }\n\n  // If the hash is removed the browser will re-perform a request to the server\n  // /page#hash -> /page\n  return false;\n}\n\nfunction isPromise<T = unknown>(val: unknown): val is Promise<T> {\n  return typeof val === \"object\" && val != null && \"then\" in val;\n}\n\nfunction isDataStrategyResult(result: unknown): result is DataStrategyResult {\n  return (\n    result != null &&\n    typeof result === \"object\" &&\n    \"type\" in result &&\n    \"result\" in result &&\n    (result.type === ResultType.data || result.type === ResultType.error)\n  );\n}\n\nfunction isRedirectDataStrategyResultResult(result: DataStrategyResult) {\n  return (\n    isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n  );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n  return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n  return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n  return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDataWithResponseInit(\n  value: any\n): value is DataWithResponseInit<unknown> {\n  return (\n    typeof value === \"object\" &&\n    value != null &&\n    \"type\" in value &&\n    \"data\" in value &&\n    \"init\" in value &&\n    value.type === \"DataWithResponseInit\"\n  );\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n  let deferred: DeferredData = value;\n  return (\n    deferred &&\n    typeof deferred === \"object\" &&\n    typeof deferred.data === \"object\" &&\n    typeof deferred.subscribe === \"function\" &&\n    typeof deferred.cancel === \"function\" &&\n    typeof deferred.resolveData === \"function\"\n  );\n}\n\nfunction isResponse(value: any): value is Response {\n  return (\n    value != null &&\n    typeof value.status === \"number\" &&\n    typeof value.statusText === \"string\" &&\n    typeof value.headers === \"object\" &&\n    typeof value.body !== \"undefined\"\n  );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n  if (!isResponse(result)) {\n    return false;\n  }\n\n  let status = result.status;\n  let location = result.headers.get(\"Location\");\n  return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n  return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n  method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n  return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveNavigationDeferredResults(\n  matches: (AgnosticDataRouteMatch | null)[],\n  results: Record<string, DataResult>,\n  signal: AbortSignal,\n  currentMatches: AgnosticDataRouteMatch[],\n  currentLoaderData: RouteData\n) {\n  let entries = Object.entries(results);\n  for (let index = 0; index < entries.length; index++) {\n    let [routeId, result] = entries[index];\n    let match = matches.find((m) => m?.route.id === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n\n    let currentMatch = currentMatches.find(\n      (m) => m.route.id === match!.route.id\n    );\n    let isRevalidatingLoader =\n      currentMatch != null &&\n      !isNewRouteInstance(currentMatch, match) &&\n      (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n    if (isDeferredResult(result) && isRevalidatingLoader) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      await resolveDeferredData(result, signal, false).then((result) => {\n        if (result) {\n          results[routeId] = result;\n        }\n      });\n    }\n  }\n}\n\nasync function resolveFetcherDeferredResults(\n  matches: (AgnosticDataRouteMatch | null)[],\n  results: Record<string, DataResult>,\n  revalidatingFetchers: RevalidatingFetcher[]\n) {\n  for (let index = 0; index < revalidatingFetchers.length; index++) {\n    let { key, routeId, controller } = revalidatingFetchers[index];\n    let result = results[key];\n    let match = matches.find((m) => m?.route.id === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n\n    if (isDeferredResult(result)) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      invariant(\n        controller,\n        \"Expected an AbortController for revalidating fetcher deferred result\"\n      );\n      await resolveDeferredData(result, controller.signal, true).then(\n        (result) => {\n          if (result) {\n            results[key] = result;\n          }\n        }\n      );\n    }\n  }\n}\n\nasync function resolveDeferredData(\n  result: DeferredResult,\n  signal: AbortSignal,\n  unwrap = false\n): Promise<SuccessResult | ErrorResult | undefined> {\n  let aborted = await result.deferredData.resolveData(signal);\n  if (aborted) {\n    return;\n  }\n\n  if (unwrap) {\n    try {\n      return {\n        type: ResultType.data,\n        data: result.deferredData.unwrappedData,\n      };\n    } catch (e) {\n      // Handle any TrackedPromise._error values encountered while unwrapping\n      return {\n        type: ResultType.error,\n        error: e,\n      };\n    }\n  }\n\n  return {\n    type: ResultType.data,\n    data: result.deferredData.data,\n  };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n  return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n  matches: AgnosticDataRouteMatch[],\n  location: Location | string\n) {\n  let search =\n    typeof location === \"string\" ? parsePath(location).search : location.search;\n  if (\n    matches[matches.length - 1].route.index &&\n    hasNakedIndexQuery(search || \"\")\n  ) {\n    // Return the leaf index route when index is present\n    return matches[matches.length - 1];\n  }\n  // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n  // pathless layout routes)\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n  navigation: Navigation\n): Submission | undefined {\n  let { formMethod, formAction, formEncType, text, formData, json } =\n    navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json: undefined,\n      text,\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: undefined,\n      text: undefined,\n    };\n  } else if (json !== undefined) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json,\n      text: undefined,\n    };\n  }\n}\n\nfunction getLoadingNavigation(\n  location: Location,\n  submission?: Submission\n): NavigationStates[\"Loading\"] {\n  if (submission) {\n    let navigation: NavigationStates[\"Loading\"] = {\n      state: \"loading\",\n      location,\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n    };\n    return navigation;\n  } else {\n    let navigation: NavigationStates[\"Loading\"] = {\n      state: \"loading\",\n      location,\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n    };\n    return navigation;\n  }\n}\n\nfunction getSubmittingNavigation(\n  location: Location,\n  submission: Submission\n): NavigationStates[\"Submitting\"] {\n  let navigation: NavigationStates[\"Submitting\"] = {\n    state: \"submitting\",\n    location,\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n  };\n  return navigation;\n}\n\nfunction getLoadingFetcher(\n  submission?: Submission,\n  data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n  if (submission) {\n    let fetcher: FetcherStates[\"Loading\"] = {\n      state: \"loading\",\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n      data,\n    };\n    return fetcher;\n  } else {\n    let fetcher: FetcherStates[\"Loading\"] = {\n      state: \"loading\",\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n      data,\n    };\n    return fetcher;\n  }\n}\n\nfunction getSubmittingFetcher(\n  submission: Submission,\n  existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n  let fetcher: FetcherStates[\"Submitting\"] = {\n    state: \"submitting\",\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n    data: existingFetcher ? existingFetcher.data : undefined,\n  };\n  return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n  let fetcher: FetcherStates[\"Idle\"] = {\n    state: \"idle\",\n    formMethod: undefined,\n    formAction: undefined,\n    formEncType: undefined,\n    formData: undefined,\n    json: undefined,\n    text: undefined,\n    data,\n  };\n  return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n  _window: Window,\n  transitions: Map<string, Set<string>>\n) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(\n      TRANSITIONS_STORAGE_KEY\n    );\n    if (sessionPositions) {\n      let json = JSON.parse(sessionPositions);\n      for (let [k, v] of Object.entries(json || {})) {\n        if (v && Array.isArray(v)) {\n          transitions.set(k, new Set(v || []));\n        }\n      }\n    }\n  } catch (e) {\n    // no-op, use default empty object\n  }\n}\n\nfunction persistAppliedTransitions(\n  _window: Window,\n  transitions: Map<string, Set<string>>\n) {\n  if (transitions.size > 0) {\n    let json: Record<string, string[]> = {};\n    for (let [k, v] of transitions) {\n      json[k] = [...v];\n    }\n    try {\n      _window.sessionStorage.setItem(\n        TRANSITIONS_STORAGE_KEY,\n        JSON.stringify(json)\n      );\n    } catch (error) {\n      warning(\n        false,\n        `Failed to save applied view transitions in sessionStorage (${error}).`\n      );\n    }\n  }\n}\n//#endregion\n","import * as React from \"react\";\nimport type {\n  AgnosticIndexRouteObject,\n  AgnosticNonIndexRouteObject,\n  AgnosticRouteMatch,\n  History,\n  LazyRouteFunction,\n  Location,\n  Action as NavigationType,\n  RelativeRoutingType,\n  Router,\n  StaticHandlerContext,\n  To,\n  TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n  caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n  path?: AgnosticIndexRouteObject[\"path\"];\n  id?: AgnosticIndexRouteObject[\"id\"];\n  loader?: AgnosticIndexRouteObject[\"loader\"];\n  action?: AgnosticIndexRouteObject[\"action\"];\n  hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n  handle?: AgnosticIndexRouteObject[\"handle\"];\n  index: true;\n  children?: undefined;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n  lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport interface NonIndexRouteObject {\n  caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n  path?: AgnosticNonIndexRouteObject[\"path\"];\n  id?: AgnosticNonIndexRouteObject[\"id\"];\n  loader?: AgnosticNonIndexRouteObject[\"loader\"];\n  action?: AgnosticNonIndexRouteObject[\"action\"];\n  hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n  handle?: AgnosticNonIndexRouteObject[\"handle\"];\n  index?: false;\n  children?: RouteObject[];\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n  lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n  children?: DataRouteObject[];\n  id: string;\n};\n\nexport interface RouteMatch<\n  ParamKey extends string = string,\n  RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch<ParamKey, RouteObjectType> {}\n\nexport interface DataRouteMatch extends RouteMatch<string, DataRouteObject> {}\n\nexport interface DataRouterContextObject\n  // Omit `future` since those can be pulled from the `router`\n  // `NavigationContext` needs future since it doesn't have a `router` in all cases\n  extends Omit<NavigationContextObject, \"future\"> {\n  router: Router;\n  staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n  React.createContext<DataRouterContextObject | null>(null);\nif (__DEV__) {\n  DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n  Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n  DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext<TrackedPromise | null>(null);\nif (__DEV__) {\n  AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n  replace?: boolean;\n  state?: any;\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  flushSync?: boolean;\n  viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n  createHref: History[\"createHref\"];\n  // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n  encodeLocation?: History[\"encodeLocation\"];\n  go: History[\"go\"];\n  push(to: To, state?: any, opts?: NavigateOptions): void;\n  replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n  basename: string;\n  navigator: Navigator;\n  static: boolean;\n  future: {\n    v7_relativeSplatPath: boolean;\n  };\n}\n\nexport const NavigationContext = React.createContext<NavigationContextObject>(\n  null!\n);\n\nif (__DEV__) {\n  NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n  location: Location;\n  navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext<LocationContextObject>(\n  null!\n);\n\nif (__DEV__) {\n  LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n  outlet: React.ReactElement | null;\n  matches: RouteMatch[];\n  isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext<RouteContextObject>({\n  outlet: null,\n  matches: [],\n  isDataRoute: false,\n});\n\nif (__DEV__) {\n  RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext<any>(null);\n\nif (__DEV__) {\n  RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n  AgnosticRouteMatch,\n  Blocker,\n  BlockerFunction,\n  Location,\n  ParamParseKey,\n  Params,\n  Path,\n  PathMatch,\n  PathPattern,\n  RelativeRoutingType,\n  Router as RemixRouter,\n  RevalidationState,\n  To,\n  UIMatch,\n} from \"@remix-run/router\";\nimport {\n  IDLE_BLOCKER,\n  Action as NavigationType,\n  UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n  UNSAFE_decodePath as decodePath,\n  UNSAFE_getResolveToMatches as getResolveToMatches,\n  UNSAFE_invariant as invariant,\n  isRouteErrorResponse,\n  joinPaths,\n  matchPath,\n  matchRoutes,\n  parsePath,\n  resolveTo,\n  stripBasename,\n  UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n  DataRouteMatch,\n  NavigateOptions,\n  RouteContextObject,\n  RouteMatch,\n  RouteObject,\n} from \"./context\";\nimport {\n  AwaitContext,\n  DataRouterContext,\n  DataRouterStateContext,\n  LocationContext,\n  NavigationContext,\n  RouteContext,\n  RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/v6/hooks/use-href\n */\nexport function useHref(\n  to: To,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useHref() may be used only in the context of a <Router> component.`\n  );\n\n  let { basename, navigator } = React.useContext(NavigationContext);\n  let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n  let joinedPathname = pathname;\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the href.  If this is a root navigation, then just use the raw\n  // basename which allows the basename to have full control over the presence\n  // of a trailing slash on root links\n  if (basename !== \"/\") {\n    joinedPathname =\n      pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n\n  return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n  return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/v6/hooks/use-location\n */\nexport function useLocation(): Location {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useLocation() may be used only in the context of a <Router> component.`\n  );\n\n  return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n  return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-match\n */\nexport function useMatch<\n  ParamKey extends ParamParseKey<Path>,\n  Path extends string\n>(pattern: PathPattern<Path> | Path): PathMatch<ParamKey> | null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useMatch() may be used only in the context of a <Router> component.`\n  );\n\n  let { pathname } = useLocation();\n  return React.useMemo(\n    () => matchPath<ParamKey, Path>(pattern, decodePath(pathname)),\n    [pathname, pattern]\n  );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n  (to: To, options?: NavigateOptions): void;\n  (delta: number): void;\n}\n\nconst navigateEffectWarning =\n  `You should call navigate() in a React.useEffect(), not when ` +\n  `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n  cb: Parameters<typeof React.useLayoutEffect>[0]\n) {\n  let isStatic = React.useContext(NavigationContext).static;\n  if (!isStatic) {\n    // We should be able to get rid of this once react 18.3 is released\n    // See: https://github.com/facebook/react/pull/26395\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(cb);\n  }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n  let { isDataRoute } = React.useContext(RouteContext);\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useNavigate() may be used only in the context of a <Router> component.`\n  );\n\n  let dataRouterContext = React.useContext(DataRouterContext);\n  let { basename, future, navigator } = React.useContext(NavigationContext);\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n\n  let routePathnamesJson = JSON.stringify(\n    getResolveToMatches(matches, future.v7_relativeSplatPath)\n  );\n\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n\n  let navigate: NavigateFunction = React.useCallback(\n    (to: To | number, options: NavigateOptions = {}) => {\n      warning(activeRef.current, navigateEffectWarning);\n\n      // Short circuit here since if this happens on first render the navigate\n      // is useless because we haven't wired up our history listener yet\n      if (!activeRef.current) return;\n\n      if (typeof to === \"number\") {\n        navigator.go(to);\n        return;\n      }\n\n      let path = resolveTo(\n        to,\n        JSON.parse(routePathnamesJson),\n        locationPathname,\n        options.relative === \"path\"\n      );\n\n      // If we're operating within a basename, prepend it to the pathname prior\n      // to handing off to history (but only if we're not in a data router,\n      // otherwise it'll prepend the basename inside of the router).\n      // If this is a root navigation, then we navigate to the raw basename\n      // which allows the basename to have full control over the presence of a\n      // trailing slash on root links\n      if (dataRouterContext == null && basename !== \"/\") {\n        path.pathname =\n          path.pathname === \"/\"\n            ? basename\n            : joinPaths([basename, path.pathname]);\n      }\n\n      (!!options.replace ? navigator.replace : navigator.push)(\n        path,\n        options.state,\n        options\n      );\n    },\n    [\n      basename,\n      navigator,\n      routePathnamesJson,\n      locationPathname,\n      dataRouterContext,\n    ]\n  );\n\n  return navigate;\n}\n\nconst OutletContext = React.createContext<unknown>(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/v6/hooks/use-outlet-context\n */\nexport function useOutletContext<Context = unknown>(): Context {\n  return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/v6/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n  let outlet = React.useContext(RouteContext).outlet;\n  if (outlet) {\n    return (\n      <OutletContext.Provider value={context}>{outlet}</OutletContext.Provider>\n    );\n  }\n  return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/v6/hooks/use-params\n */\nexport function useParams<\n  ParamsOrKey extends string | Record<string, string | undefined> = string\n>(): Readonly<\n  [ParamsOrKey] extends [string] ? Params<ParamsOrKey> : Partial<ParamsOrKey>\n> {\n  let { matches } = React.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/v6/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n  to: To,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n  let { future } = React.useContext(NavigationContext);\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let routePathnamesJson = JSON.stringify(\n    getResolveToMatches(matches, future.v7_relativeSplatPath)\n  );\n\n  return React.useMemo(\n    () =>\n      resolveTo(\n        to,\n        JSON.parse(routePathnamesJson),\n        locationPathname,\n        relative === \"path\"\n      ),\n    [to, routePathnamesJson, locationPathname, relative]\n  );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/v6/hooks/use-routes\n */\nexport function useRoutes(\n  routes: RouteObject[],\n  locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n  return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n  routes: RouteObject[],\n  locationArg?: Partial<Location> | string,\n  dataRouterState?: RemixRouter[\"state\"],\n  future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useRoutes() may be used only in the context of a <Router> component.`\n  );\n\n  let { navigator, static: isStatic } = React.useContext(NavigationContext);\n  let { matches: parentMatches } = React.useContext(RouteContext);\n  let routeMatch = parentMatches[parentMatches.length - 1];\n  let parentParams = routeMatch ? routeMatch.params : {};\n  let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n  let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n  let parentRoute = routeMatch && routeMatch.route;\n\n  if (__DEV__) {\n    // You won't get a warning about 2 different <Routes> under a <Route>\n    // without a trailing *, but this is a best-effort warning anyway since we\n    // cannot even give the warning unless they land at the parent route.\n    //\n    // Example:\n    //\n    // <Routes>\n    //   {/* This route path MUST end with /* because otherwise\n    //       it will never match /blog/post/123 */}\n    //   <Route path=\"blog\" element={<Blog />} />\n    //   <Route path=\"blog/feed\" element={<BlogFeed />} />\n    // </Routes>\n    //\n    // function Blog() {\n    //   return (\n    //     <Routes>\n    //       <Route path=\"post/:id\" element={<Post />} />\n    //     </Routes>\n    //   );\n    // }\n    let parentPath = (parentRoute && parentRoute.path) || \"\";\n    warningOnce(\n      parentPathname,\n      !parentRoute || parentPath.endsWith(\"*\"),\n      `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n        `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n        `parent route path has no trailing \"*\". This means if you navigate ` +\n        `deeper, the parent won't match anymore and therefore the child ` +\n        `routes will never render.\\n\\n` +\n        `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n        `path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n    );\n  }\n\n  let locationFromContext = useLocation();\n\n  let location;\n  if (locationArg) {\n    let parsedLocationArg =\n      typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n    invariant(\n      parentPathnameBase === \"/\" ||\n        parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n      `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n        `the location pathname must begin with the portion of the URL pathname that was ` +\n        `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n        `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n    );\n\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n\n  let pathname = location.pathname || \"/\";\n\n  let remainingPathname = pathname;\n  if (parentPathnameBase !== \"/\") {\n    // Determine the remaining pathname by removing the # of URL segments the\n    // parentPathnameBase has, instead of removing based on character count.\n    // This is because we can't guarantee that incoming/outgoing encodings/\n    // decodings will match exactly.\n    // We decode paths before matching on a per-segment basis with\n    // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n    // match what `window.location.pathname` would reflect.  Those don't 100%\n    // align when it comes to encoded URI characters such as % and &.\n    //\n    // So we may end up with:\n    //   pathname:           \"/descendant/a%25b/match\"\n    //   parentPathnameBase: \"/descendant/a%b\"\n    //\n    // And the direct substring removal approach won't work :/\n    let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n    let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n    remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n  }\n\n  let matches =\n    !isStatic &&\n    dataRouterState &&\n    dataRouterState.matches &&\n    dataRouterState.matches.length > 0\n      ? (dataRouterState.matches as AgnosticRouteMatch<string, RouteObject>[])\n      : matchRoutes(routes, { pathname: remainingPathname });\n\n  if (__DEV__) {\n    warning(\n      parentRoute || matches != null,\n      `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n    );\n\n    warning(\n      matches == null ||\n        matches[matches.length - 1].route.element !== undefined ||\n        matches[matches.length - 1].route.Component !== undefined ||\n        matches[matches.length - 1].route.lazy !== undefined,\n      `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n        `does not have an element or Component. This means it will render an <Outlet /> with a ` +\n        `null value by default resulting in an \"empty\" page.`\n    );\n  }\n\n  let renderedMatches = _renderMatches(\n    matches &&\n      matches.map((match) =>\n        Object.assign({}, match, {\n          params: Object.assign({}, parentParams, match.params),\n          pathname: joinPaths([\n            parentPathnameBase,\n            // Re-encode pathnames that were decoded inside matchRoutes\n            navigator.encodeLocation\n              ? navigator.encodeLocation(match.pathname).pathname\n              : match.pathname,\n          ]),\n          pathnameBase:\n            match.pathnameBase === \"/\"\n              ? parentPathnameBase\n              : joinPaths([\n                  parentPathnameBase,\n                  // Re-encode pathnames that were decoded inside matchRoutes\n                  navigator.encodeLocation\n                    ? navigator.encodeLocation(match.pathnameBase).pathname\n                    : match.pathnameBase,\n                ]),\n        })\n      ),\n    parentMatches,\n    dataRouterState,\n    future\n  );\n\n  // When a user passes in a `locationArg`, the associated routes need to\n  // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n  // to use the scoped location instead of the global location.\n  if (locationArg && renderedMatches) {\n    return (\n      <LocationContext.Provider\n        value={{\n          location: {\n            pathname: \"/\",\n            search: \"\",\n            hash: \"\",\n            state: null,\n            key: \"default\",\n            ...location,\n          },\n          navigationType: NavigationType.Pop,\n        }}\n      >\n        {renderedMatches}\n      </LocationContext.Provider>\n    );\n  }\n\n  return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n  let error = useRouteError();\n  let message = isRouteErrorResponse(error)\n    ? `${error.status} ${error.statusText}`\n    : error instanceof Error\n    ? error.message\n    : JSON.stringify(error);\n  let stack = error instanceof Error ? error.stack : null;\n  let lightgrey = \"rgba(200,200,200, 0.5)\";\n  let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n  let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n  let devInfo = null;\n  if (__DEV__) {\n    console.error(\n      \"Error handled by React Router default ErrorBoundary:\",\n      error\n    );\n\n    devInfo = (\n      <>\n        <p>💿 Hey developer 👋</p>\n        <p>\n          You can provide a way better UX than this when your app throws errors\n          by providing your own <code style={codeStyles}>ErrorBoundary</code> or{\" \"}\n          <code style={codeStyles}>errorElement</code> prop on your route.\n        </p>\n      </>\n    );\n  }\n\n  return (\n    <>\n      <h2>Unexpected Application Error!</h2>\n      <h3 style={{ fontStyle: \"italic\" }}>{message}</h3>\n      {stack ? <pre style={preStyles}>{stack}</pre> : null}\n      {devInfo}\n    </>\n  );\n}\n\nconst defaultErrorElement = <DefaultErrorComponent />;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n  location: Location;\n  revalidation: RevalidationState;\n  error: any;\n  component: React.ReactNode;\n  routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n  location: Location;\n  revalidation: RevalidationState;\n  error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n  RenderErrorBoundaryProps,\n  RenderErrorBoundaryState\n> {\n  constructor(props: RenderErrorBoundaryProps) {\n    super(props);\n    this.state = {\n      location: props.location,\n      revalidation: props.revalidation,\n      error: props.error,\n    };\n  }\n\n  static getDerivedStateFromError(error: any) {\n    return { error: error };\n  }\n\n  static getDerivedStateFromProps(\n    props: RenderErrorBoundaryProps,\n    state: RenderErrorBoundaryState\n  ) {\n    // When we get into an error state, the user will likely click \"back\" to the\n    // previous page that didn't have an error. Because this wraps the entire\n    // application, that will have no effect--the error page continues to display.\n    // This gives us a mechanism to recover from the error when the location changes.\n    //\n    // Whether we're in an error state or not, we update the location in state\n    // so that when we are in an error state, it gets reset when a new location\n    // comes in and the user recovers from the error.\n    if (\n      state.location !== props.location ||\n      (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n    ) {\n      return {\n        error: props.error,\n        location: props.location,\n        revalidation: props.revalidation,\n      };\n    }\n\n    // If we're not changing locations, preserve the location but still surface\n    // any new errors that may come through. We retain the existing error, we do\n    // this because the error provided from the app state may be cleared without\n    // the location changing.\n    return {\n      error: props.error !== undefined ? props.error : state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation,\n    };\n  }\n\n  componentDidCatch(error: any, errorInfo: any) {\n    console.error(\n      \"React Router caught the following error during render\",\n      error,\n      errorInfo\n    );\n  }\n\n  render() {\n    return this.state.error !== undefined ? (\n      <RouteContext.Provider value={this.props.routeContext}>\n        <RouteErrorContext.Provider\n          value={this.state.error}\n          children={this.props.component}\n        />\n      </RouteContext.Provider>\n    ) : (\n      this.props.children\n    );\n  }\n}\n\ninterface RenderedRouteProps {\n  routeContext: RouteContextObject;\n  match: RouteMatch<string, RouteObject>;\n  children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n  let dataRouterContext = React.useContext(DataRouterContext);\n\n  // Track how deep we got in our render pass to emulate SSR componentDidCatch\n  // in a DataStaticRouter\n  if (\n    dataRouterContext &&\n    dataRouterContext.static &&\n    dataRouterContext.staticContext &&\n    (match.route.errorElement || match.route.ErrorBoundary)\n  ) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n\n  return (\n    <RouteContext.Provider value={routeContext}>\n      {children}\n    </RouteContext.Provider>\n  );\n}\n\nexport function _renderMatches(\n  matches: RouteMatch[] | null,\n  parentMatches: RouteMatch[] = [],\n  dataRouterState: RemixRouter[\"state\"] | null = null,\n  future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n  if (matches == null) {\n    if (!dataRouterState) {\n      return null;\n    }\n\n    if (dataRouterState.errors) {\n      // Don't bail if we have data router errors so we can render them in the\n      // boundary.  Use the pre-matched (or shimmed) matches\n      matches = dataRouterState.matches as DataRouteMatch[];\n    } else if (\n      future?.v7_partialHydration &&\n      parentMatches.length === 0 &&\n      !dataRouterState.initialized &&\n      dataRouterState.matches.length > 0\n    ) {\n      // Don't bail if we're initializing with partial hydration and we have\n      // router matches.  That means we're actively running `patchRoutesOnNavigation`\n      // so we should render down the partial matches to the appropriate\n      // `HydrateFallback`.  We only do this if `parentMatches` is empty so it\n      // only impacts the root matches for `RouterProvider` and no descendant\n      // `<Routes>`\n      matches = dataRouterState.matches as DataRouteMatch[];\n    } else {\n      return null;\n    }\n  }\n\n  let renderedMatches = matches;\n\n  // If we have data errors, trim matches to the highest error boundary\n  let errors = dataRouterState?.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(\n      (m) => m.route.id && errors?.[m.route.id] !== undefined\n    );\n    invariant(\n      errorIndex >= 0,\n      `Could not find a matching route for errors on route IDs: ${Object.keys(\n        errors\n      ).join(\",\")}`\n    );\n    renderedMatches = renderedMatches.slice(\n      0,\n      Math.min(renderedMatches.length, errorIndex + 1)\n    );\n  }\n\n  // If we're in a partial hydration mode, detect if we need to render down to\n  // a given HydrateFallback while we load the rest of the hydration data\n  let renderFallback = false;\n  let fallbackIndex = -1;\n  if (dataRouterState && future && future.v7_partialHydration) {\n    for (let i = 0; i < renderedMatches.length; i++) {\n      let match = renderedMatches[i];\n      // Track the deepest fallback up until the first route without data\n      if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n        fallbackIndex = i;\n      }\n\n      if (match.route.id) {\n        let { loaderData, errors } = dataRouterState;\n        let needsToRunLoader =\n          match.route.loader &&\n          loaderData[match.route.id] === undefined &&\n          (!errors || errors[match.route.id] === undefined);\n        if (match.route.lazy || needsToRunLoader) {\n          // We found the first route that's not ready to render (waiting on\n          // lazy, or has a loader that hasn't run yet).  Flag that we need to\n          // render a fallback and render up until the appropriate fallback\n          renderFallback = true;\n          if (fallbackIndex >= 0) {\n            renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n          } else {\n            renderedMatches = [renderedMatches[0]];\n          }\n          break;\n        }\n      }\n    }\n  }\n\n  return renderedMatches.reduceRight((outlet, match, index) => {\n    // Only data routers handle errors/fallbacks\n    let error: any;\n    let shouldRenderHydrateFallback = false;\n    let errorElement: React.ReactNode | null = null;\n    let hydrateFallbackElement: React.ReactNode | null = null;\n    if (dataRouterState) {\n      error = errors && match.route.id ? errors[match.route.id] : undefined;\n      errorElement = match.route.errorElement || defaultErrorElement;\n\n      if (renderFallback) {\n        if (fallbackIndex < 0 && index === 0) {\n          warningOnce(\n            \"route-fallback\",\n            false,\n            \"No `HydrateFallback` element provided to render during initial hydration\"\n          );\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = null;\n        } else if (fallbackIndex === index) {\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n        }\n      }\n    }\n\n    let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n    let getChildren = () => {\n      let children: React.ReactNode;\n      if (error) {\n        children = errorElement;\n      } else if (shouldRenderHydrateFallback) {\n        children = hydrateFallbackElement;\n      } else if (match.route.Component) {\n        // Note: This is a de-optimized path since React won't re-use the\n        // ReactElement since it's identity changes with each new\n        // React.createElement call.  We keep this so folks can use\n        // `<Route Component={...}>` in `<Routes>` but generally `Component`\n        // usage is only advised in `RouterProvider` when we can convert it to\n        // `element` ahead of time.\n        children = <match.route.Component />;\n      } else if (match.route.element) {\n        children = match.route.element;\n      } else {\n        children = outlet;\n      }\n      return (\n        <RenderedRoute\n          match={match}\n          routeContext={{\n            outlet,\n            matches,\n            isDataRoute: dataRouterState != null,\n          }}\n          children={children}\n        />\n      );\n    };\n    // Only wrap in an error boundary within data router usages when we have an\n    // ErrorBoundary/errorElement on this route.  Otherwise let it bubble up to\n    // an ancestor ErrorBoundary/errorElement\n    return dataRouterState &&\n      (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n      <RenderErrorBoundary\n        location={dataRouterState.location}\n        revalidation={dataRouterState.revalidation}\n        component={errorElement}\n        error={error}\n        children={getChildren()}\n        routeContext={{ outlet: null, matches, isDataRoute: true }}\n      />\n    ) : (\n      getChildren()\n    );\n  }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n  UseBlocker = \"useBlocker\",\n  UseRevalidator = \"useRevalidator\",\n  UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n  UseBlocker = \"useBlocker\",\n  UseLoaderData = \"useLoaderData\",\n  UseActionData = \"useActionData\",\n  UseRouteError = \"useRouteError\",\n  UseNavigation = \"useNavigation\",\n  UseRouteLoaderData = \"useRouteLoaderData\",\n  UseMatches = \"useMatches\",\n  UseRevalidator = \"useRevalidator\",\n  UseNavigateStable = \"useNavigate\",\n  UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n  hookName: DataRouterHook | DataRouterStateHook\n) {\n  return `${hookName} must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n  let ctx = React.useContext(DataRouterContext);\n  invariant(ctx, getDataRouterConsoleError(hookName));\n  return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n  let state = React.useContext(DataRouterStateContext);\n  invariant(state, getDataRouterConsoleError(hookName));\n  return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n  let route = React.useContext(RouteContext);\n  invariant(route, getDataRouterConsoleError(hookName));\n  return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  invariant(\n    thisRoute.route.id,\n    `${hookName} can only be used on routes that contain a unique \"id\"`\n  );\n  return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n  return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n  let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n  return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n  let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n  let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n  return React.useMemo(\n    () => ({\n      revalidate: dataRouterContext.router.revalidate,\n      state: state.revalidation,\n    }),\n    [dataRouterContext.router.revalidate, state.revalidation]\n  );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n  let { matches, loaderData } = useDataRouterState(\n    DataRouterStateHook.UseMatches\n  );\n  return React.useMemo(\n    () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n    [matches, loaderData]\n  );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n  if (state.errors && state.errors[routeId] != null) {\n    console.error(\n      `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n    );\n    return undefined;\n  }\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseActionData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error.  This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n  let error = React.useContext(RouteErrorContext);\n  let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n  // If this was a render error, we put it in a RouteError context inside\n  // of RenderErrorBoundary\n  if (error !== undefined) {\n    return error;\n  }\n\n  // Otherwise look for errors from our data router state\n  return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nexport function useAsyncValue(): unknown {\n  let value = React.useContext(AwaitContext);\n  return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nexport function useAsyncError(): unknown {\n  let value = React.useContext(AwaitContext);\n  return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation.  Mostly used to avoid\n * using half-filled form data.  This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n  let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n  let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n  let [blockerKey, setBlockerKey] = React.useState(\"\");\n  let blockerFunction = React.useCallback<BlockerFunction>(\n    (arg) => {\n      if (typeof shouldBlock !== \"function\") {\n        return !!shouldBlock;\n      }\n      if (basename === \"/\") {\n        return shouldBlock(arg);\n      }\n\n      // If they provided us a function and we've got an active basename, strip\n      // it from the locations we expose to the user to match the behavior of\n      // useLocation\n      let { currentLocation, nextLocation, historyAction } = arg;\n      return shouldBlock({\n        currentLocation: {\n          ...currentLocation,\n          pathname:\n            stripBasename(currentLocation.pathname, basename) ||\n            currentLocation.pathname,\n        },\n        nextLocation: {\n          ...nextLocation,\n          pathname:\n            stripBasename(nextLocation.pathname, basename) ||\n            nextLocation.pathname,\n        },\n        historyAction,\n      });\n    },\n    [basename, shouldBlock]\n  );\n\n  // This effect is in charge of blocker key assignment and deletion (which is\n  // tightly coupled to the key)\n  React.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n\n  // This effect handles assigning the blockerFunction.  This is to handle\n  // unstable blocker function identities, and happens only after the prior\n  // effect so we don't get an orphaned blockerFunction in the router with a\n  // key of \"\".  Until then we just have the IDLE_BLOCKER.\n  React.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n\n  // Prefer the blocker from `state` not `router.state` since DataRouterContext\n  // is memoized so this ensures we update on blocker state updates\n  return blockerKey && state.blockers.has(blockerKey)\n    ? state.blockers.get(blockerKey)!\n    : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n  let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n  let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n\n  let navigate: NavigateFunction = React.useCallback(\n    (to: To | number, options: NavigateOptions = {}) => {\n      warning(activeRef.current, navigateEffectWarning);\n\n      // Short circuit here since if this happens on first render the navigate\n      // is useless because we haven't wired up our router subscriber yet\n      if (!activeRef.current) return;\n\n      if (typeof to === \"number\") {\n        router.navigate(to);\n      } else {\n        router.navigate(to, { fromRouteId: id, ...options });\n      }\n    },\n    [router, id]\n  );\n\n  return navigate;\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n  if (!cond && !alreadyWarned[key]) {\n    alreadyWarned[key] = true;\n    warning(false, message);\n  }\n}\n","import type { FutureConfig as RouterFutureConfig } from \"@remix-run/router\";\nimport type { FutureConfig as RenderFutureConfig } from \"./components\";\n\nconst alreadyWarned: { [key: string]: boolean } = {};\n\nexport function warnOnce(key: string, message: string): void {\n  if (__DEV__ && !alreadyWarned[message]) {\n    alreadyWarned[message] = true;\n    console.warn(message);\n  }\n}\n\nconst logDeprecation = (flag: string, msg: string, link: string) =>\n  warnOnce(\n    flag,\n    `⚠️ React Router Future Flag Warning: ${msg}. ` +\n      `You can use the \\`${flag}\\` future flag to opt-in early. ` +\n      `For more information, see ${link}.`\n  );\n\nexport function logV6DeprecationWarnings(\n  renderFuture: Partial<RenderFutureConfig> | undefined,\n  routerFuture?: Omit<RouterFutureConfig, \"v7_prependBasename\">\n) {\n  if (renderFuture?.v7_startTransition === undefined) {\n    logDeprecation(\n      \"v7_startTransition\",\n      \"React Router will begin wrapping state updates in `React.startTransition` in v7\",\n      \"https://reactrouter.com/v6/upgrading/future#v7_starttransition\"\n    );\n  }\n\n  if (\n    renderFuture?.v7_relativeSplatPath === undefined &&\n    (!routerFuture || !routerFuture.v7_relativeSplatPath)\n  ) {\n    logDeprecation(\n      \"v7_relativeSplatPath\",\n      \"Relative route resolution within Splat routes is changing in v7\",\n      \"https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath\"\n    );\n  }\n\n  if (routerFuture) {\n    if (routerFuture.v7_fetcherPersist === undefined) {\n      logDeprecation(\n        \"v7_fetcherPersist\",\n        \"The persistence behavior of fetchers is changing in v7\",\n        \"https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist\"\n      );\n    }\n\n    if (routerFuture.v7_normalizeFormMethod === undefined) {\n      logDeprecation(\n        \"v7_normalizeFormMethod\",\n        \"Casing of `formMethod` fields is being normalized to uppercase in v7\",\n        \"https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod\"\n      );\n    }\n\n    if (routerFuture.v7_partialHydration === undefined) {\n      logDeprecation(\n        \"v7_partialHydration\",\n        \"`RouterProvider` hydration behavior is changing in v7\",\n        \"https://reactrouter.com/v6/upgrading/future#v7_partialhydration\"\n      );\n    }\n\n    if (routerFuture.v7_skipActionErrorRevalidation === undefined) {\n      logDeprecation(\n        \"v7_skipActionErrorRevalidation\",\n        \"The revalidation behavior after 4xx/5xx `action` responses is changing in v7\",\n        \"https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation\"\n      );\n    }\n  }\n}\n","import type {\n  InitialEntry,\n  LazyRouteFunction,\n  Location,\n  MemoryHistory,\n  RelativeRoutingType,\n  Router as RemixRouter,\n  RouterState,\n  RouterSubscriber,\n  To,\n  TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n  AbortedDeferredError,\n  Action as NavigationType,\n  createMemoryHistory,\n  UNSAFE_getResolveToMatches as getResolveToMatches,\n  UNSAFE_invariant as invariant,\n  parsePath,\n  resolveTo,\n  stripBasename,\n  UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n  DataRouteObject,\n  IndexRouteObject,\n  Navigator,\n  NonIndexRouteObject,\n  RouteMatch,\n  RouteObject,\n} from \"./context\";\nimport {\n  AwaitContext,\n  DataRouterContext,\n  DataRouterStateContext,\n  LocationContext,\n  NavigationContext,\n  RouteContext,\n} from \"./context\";\nimport {\n  _renderMatches,\n  useAsyncValue,\n  useInRouterContext,\n  useLocation,\n  useNavigate,\n  useOutlet,\n  useRoutes,\n  useRoutesImpl,\n} from \"./hooks\";\nimport { logV6DeprecationWarnings } from \"./deprecations\";\n\nexport interface FutureConfig {\n  v7_relativeSplatPath: boolean;\n  v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n  fallbackElement?: React.ReactNode;\n  router: RemixRouter;\n  // Only accept future flags relevant to rendering behavior\n  // routing flags should be accessed via router.future\n  future?: Partial<Pick<FutureConfig, \"v7_startTransition\">>;\n}\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n  fallbackElement,\n  router,\n  future,\n}: RouterProviderProps): React.ReactElement {\n  let [state, setStateImpl] = React.useState(router.state);\n  let { v7_startTransition } = future || {};\n\n  let setState = React.useCallback<RouterSubscriber>(\n    (newState: RouterState) => {\n      if (v7_startTransition && startTransitionImpl) {\n        startTransitionImpl(() => setStateImpl(newState));\n      } else {\n        setStateImpl(newState);\n      }\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n  React.useEffect(() => {\n    warning(\n      fallbackElement == null || !router.future.v7_partialHydration,\n      \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n        \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n    );\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  let navigator = React.useMemo((): Navigator => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: (n) => router.navigate(n),\n      push: (to, state, opts) =>\n        router.navigate(to, {\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n      replace: (to, state, opts) =>\n        router.navigate(to, {\n          replace: true,\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n    };\n  }, [router]);\n\n  let basename = router.basename || \"/\";\n\n  let dataRouterContext = React.useMemo(\n    () => ({\n      router,\n      navigator,\n      static: false,\n      basename,\n    }),\n    [router, navigator, basename]\n  );\n\n  React.useEffect(\n    () => logV6DeprecationWarnings(future, router.future),\n    [router, future]\n  );\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return (\n    <>\n      <DataRouterContext.Provider value={dataRouterContext}>\n        <DataRouterStateContext.Provider value={state}>\n          <Router\n            basename={basename}\n            location={state.location}\n            navigationType={state.historyAction}\n            navigator={navigator}\n            future={{\n              v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n            }}\n          >\n            {state.initialized || router.future.v7_partialHydration ? (\n              <DataRoutes\n                routes={router.routes}\n                future={router.future}\n                state={state}\n              />\n            ) : (\n              fallbackElement\n            )}\n          </Router>\n        </DataRouterStateContext.Provider>\n      </DataRouterContext.Provider>\n      {null}\n    </>\n  );\n}\n\nfunction DataRoutes({\n  routes,\n  future,\n  state,\n}: {\n  routes: DataRouteObject[];\n  future: RemixRouter[\"future\"];\n  state: RouterState;\n}): React.ReactElement | null {\n  return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface MemoryRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  initialEntries?: InitialEntry[];\n  initialIndex?: number;\n  future?: Partial<FutureConfig>;\n}\n\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/v6/router-components/memory-router\n */\nexport function MemoryRouter({\n  basename,\n  children,\n  initialEntries,\n  initialIndex,\n  future,\n}: MemoryRouterProps): React.ReactElement {\n  let historyRef = React.useRef<MemoryHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createMemoryHistory({\n      initialEntries,\n      initialIndex,\n      v5Compat: true,\n    });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface NavigateProps {\n  to: To;\n  replace?: boolean;\n  state?: any;\n  relative?: RelativeRoutingType;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/v6/components/navigate\n */\nexport function Navigate({\n  to,\n  replace,\n  state,\n  relative,\n}: NavigateProps): null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of\n    // the router loaded. We can help them understand how to avoid that.\n    `<Navigate> may be used only in the context of a <Router> component.`\n  );\n\n  let { future, static: isStatic } = React.useContext(NavigationContext);\n\n  warning(\n    !isStatic,\n    `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n      `This is a no-op, but you should modify your code so the <Navigate> is ` +\n      `only ever rendered in response to some user interaction or state change.`\n  );\n\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let navigate = useNavigate();\n\n  // Resolve the path outside of the effect so that when effects run twice in\n  // StrictMode they navigate to the same place\n  let path = resolveTo(\n    to,\n    getResolveToMatches(matches, future.v7_relativeSplatPath),\n    locationPathname,\n    relative === \"path\"\n  );\n  let jsonPath = JSON.stringify(path);\n\n  React.useEffect(\n    () => navigate(JSON.parse(jsonPath), { replace, state, relative }),\n    [navigate, jsonPath, relative, replace, state]\n  );\n\n  return null;\n}\n\nexport interface OutletProps {\n  context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/v6/components/outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n  return useOutlet(props.context);\n}\n\nexport interface PathRouteProps {\n  caseSensitive?: NonIndexRouteObject[\"caseSensitive\"];\n  path?: NonIndexRouteObject[\"path\"];\n  id?: NonIndexRouteObject[\"id\"];\n  lazy?: LazyRouteFunction<NonIndexRouteObject>;\n  loader?: NonIndexRouteObject[\"loader\"];\n  action?: NonIndexRouteObject[\"action\"];\n  hasErrorBoundary?: NonIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: NonIndexRouteObject[\"shouldRevalidate\"];\n  handle?: NonIndexRouteObject[\"handle\"];\n  index?: false;\n  children?: React.ReactNode;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n}\n\nexport interface LayoutRouteProps extends PathRouteProps {}\n\nexport interface IndexRouteProps {\n  caseSensitive?: IndexRouteObject[\"caseSensitive\"];\n  path?: IndexRouteObject[\"path\"];\n  id?: IndexRouteObject[\"id\"];\n  lazy?: LazyRouteFunction<IndexRouteObject>;\n  loader?: IndexRouteObject[\"loader\"];\n  action?: IndexRouteObject[\"action\"];\n  hasErrorBoundary?: IndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: IndexRouteObject[\"shouldRevalidate\"];\n  handle?: IndexRouteObject[\"handle\"];\n  index: true;\n  children?: undefined;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n}\n\nexport type RouteProps = PathRouteProps | LayoutRouteProps | IndexRouteProps;\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/v6/components/route\n */\nexport function Route(_props: RouteProps): React.ReactElement | null {\n  invariant(\n    false,\n    `A <Route> is only ever to be used as the child of <Routes> element, ` +\n      `never rendered directly. Please wrap your <Route> in a <Routes>.`\n  );\n}\n\nexport interface RouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  location: Partial<Location> | string;\n  navigationType?: NavigationType;\n  navigator: Navigator;\n  static?: boolean;\n  future?: Partial<Pick<FutureConfig, \"v7_relativeSplatPath\">>;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/v6/router-components/router\n */\nexport function Router({\n  basename: basenameProp = \"/\",\n  children = null,\n  location: locationProp,\n  navigationType = NavigationType.Pop,\n  navigator,\n  static: staticProp = false,\n  future,\n}: RouterProps): React.ReactElement | null {\n  invariant(\n    !useInRouterContext(),\n    `You cannot render a <Router> inside another <Router>.` +\n      ` You should never have more than one in your app.`\n  );\n\n  // Preserve trailing slashes on basename, so we can let the user control\n  // the enforcement of trailing slashes throughout the app\n  let basename = basenameProp.replace(/^\\/*/, \"/\");\n  let navigationContext = React.useMemo(\n    () => ({\n      basename,\n      navigator,\n      static: staticProp,\n      future: {\n        v7_relativeSplatPath: false,\n        ...future,\n      },\n    }),\n    [basename, future, navigator, staticProp]\n  );\n\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\",\n    state = null,\n    key = \"default\",\n  } = locationProp;\n\n  let locationContext = React.useMemo(() => {\n    let trailingPathname = stripBasename(pathname, basename);\n\n    if (trailingPathname == null) {\n      return null;\n    }\n\n    return {\n      location: {\n        pathname: trailingPathname,\n        search,\n        hash,\n        state,\n        key,\n      },\n      navigationType,\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType]);\n\n  warning(\n    locationContext != null,\n    `<Router basename=\"${basename}\"> is not able to match the URL ` +\n      `\"${pathname}${search}${hash}\" because it does not start with the ` +\n      `basename, so the <Router> won't render anything.`\n  );\n\n  if (locationContext == null) {\n    return null;\n  }\n\n  return (\n    <NavigationContext.Provider value={navigationContext}>\n      <LocationContext.Provider children={children} value={locationContext} />\n    </NavigationContext.Provider>\n  );\n}\n\nexport interface RoutesProps {\n  children?: React.ReactNode;\n  location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/v6/components/routes\n */\nexport function Routes({\n  children,\n  location,\n}: RoutesProps): React.ReactElement | null {\n  return useRoutes(createRoutesFromChildren(children), location);\n}\n\nexport interface AwaitResolveRenderFunction {\n  (data: Awaited<any>): React.ReactNode;\n}\n\nexport interface AwaitProps {\n  children: React.ReactNode | AwaitResolveRenderFunction;\n  errorElement?: React.ReactNode;\n  resolve: TrackedPromise | any;\n}\n\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nexport function Await({ children, errorElement, resolve }: AwaitProps) {\n  return (\n    <AwaitErrorBoundary resolve={resolve} errorElement={errorElement}>\n      <ResolveAwait>{children}</ResolveAwait>\n    </AwaitErrorBoundary>\n  );\n}\n\ntype AwaitErrorBoundaryProps = React.PropsWithChildren<{\n  errorElement?: React.ReactNode;\n  resolve: TrackedPromise | any;\n}>;\n\ntype AwaitErrorBoundaryState = {\n  error: any;\n};\n\nenum AwaitRenderStatus {\n  pending,\n  success,\n  error,\n}\n\nconst neverSettledPromise = new Promise(() => {});\n\nclass AwaitErrorBoundary extends React.Component<\n  AwaitErrorBoundaryProps,\n  AwaitErrorBoundaryState\n> {\n  constructor(props: AwaitErrorBoundaryProps) {\n    super(props);\n    this.state = { error: null };\n  }\n\n  static getDerivedStateFromError(error: any) {\n    return { error };\n  }\n\n  componentDidCatch(error: any, errorInfo: any) {\n    console.error(\n      \"<Await> caught the following error during render\",\n      error,\n      errorInfo\n    );\n  }\n\n  render() {\n    let { children, errorElement, resolve } = this.props;\n\n    let promise: TrackedPromise | null = null;\n    let status: AwaitRenderStatus = AwaitRenderStatus.pending;\n\n    if (!(resolve instanceof Promise)) {\n      // Didn't get a promise - provide as a resolved promise\n      status = AwaitRenderStatus.success;\n      promise = Promise.resolve();\n      Object.defineProperty(promise, \"_tracked\", { get: () => true });\n      Object.defineProperty(promise, \"_data\", { get: () => resolve });\n    } else if (this.state.error) {\n      // Caught a render error, provide it as a rejected promise\n      status = AwaitRenderStatus.error;\n      let renderError = this.state.error;\n      promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n      Object.defineProperty(promise, \"_tracked\", { get: () => true });\n      Object.defineProperty(promise, \"_error\", { get: () => renderError });\n    } else if ((resolve as TrackedPromise)._tracked) {\n      // Already tracked promise - check contents\n      promise = resolve;\n      status =\n        \"_error\" in promise\n          ? AwaitRenderStatus.error\n          : \"_data\" in promise\n          ? AwaitRenderStatus.success\n          : AwaitRenderStatus.pending;\n    } else {\n      // Raw (untracked) promise - track it\n      status = AwaitRenderStatus.pending;\n      Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n      promise = resolve.then(\n        (data: any) =>\n          Object.defineProperty(resolve, \"_data\", { get: () => data }),\n        (error: any) =>\n          Object.defineProperty(resolve, \"_error\", { get: () => error })\n      );\n    }\n\n    if (\n      status === AwaitRenderStatus.error &&\n      promise._error instanceof AbortedDeferredError\n    ) {\n      // Freeze the UI by throwing a never resolved promise\n      throw neverSettledPromise;\n    }\n\n    if (status === AwaitRenderStatus.error && !errorElement) {\n      // No errorElement, throw to the nearest route-level error boundary\n      throw promise._error;\n    }\n\n    if (status === AwaitRenderStatus.error) {\n      // Render via our errorElement\n      return <AwaitContext.Provider value={promise} children={errorElement} />;\n    }\n\n    if (status === AwaitRenderStatus.success) {\n      // Render children with resolved value\n      return <AwaitContext.Provider value={promise} children={children} />;\n    }\n\n    // Throw to the suspense boundary\n    throw promise;\n  }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait({\n  children,\n}: {\n  children: React.ReactNode | AwaitResolveRenderFunction;\n}) {\n  let data = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data) : children;\n  return <>{toRender}</>;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/v6/utils/create-routes-from-children\n */\nexport function createRoutesFromChildren(\n  children: React.ReactNode,\n  parentPath: number[] = []\n): RouteObject[] {\n  let routes: RouteObject[] = [];\n\n  React.Children.forEach(children, (element, index) => {\n    if (!React.isValidElement(element)) {\n      // Ignore non-elements. This allows people to more easily inline\n      // conditionals in their route config.\n      return;\n    }\n\n    let treePath = [...parentPath, index];\n\n    if (element.type === React.Fragment) {\n      // Transparently support React.Fragment and its children.\n      routes.push.apply(\n        routes,\n        createRoutesFromChildren(element.props.children, treePath)\n      );\n      return;\n    }\n\n    invariant(\n      element.type === Route,\n      `[${\n        typeof element.type === \"string\" ? element.type : element.type.name\n      }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n    );\n\n    invariant(\n      !element.props.index || !element.props.children,\n      \"An index route cannot have child routes.\"\n    );\n\n    let route: RouteObject = {\n      id: element.props.id || treePath.join(\"-\"),\n      caseSensitive: element.props.caseSensitive,\n      element: element.props.element,\n      Component: element.props.Component,\n      index: element.props.index,\n      path: element.props.path,\n      loader: element.props.loader,\n      action: element.props.action,\n      errorElement: element.props.errorElement,\n      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary:\n        element.props.ErrorBoundary != null ||\n        element.props.errorElement != null,\n      shouldRevalidate: element.props.shouldRevalidate,\n      handle: element.props.handle,\n      lazy: element.props.lazy,\n    };\n\n    if (element.props.children) {\n      route.children = createRoutesFromChildren(\n        element.props.children,\n        treePath\n      );\n    }\n\n    routes.push(route);\n  });\n\n  return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n  matches: RouteMatch[] | null\n): React.ReactElement | null {\n  return _renderMatches(matches);\n}\n","import type {\n  FormEncType,\n  HTMLFormMethod,\n  RelativeRoutingType,\n} from \"@remix-run/router\";\nimport { stripBasename, UNSAFE_warning as warning } from \"@remix-run/router\";\n\nexport const defaultMethod: HTMLFormMethod = \"get\";\nconst defaultEncType: FormEncType = \"application/x-www-form-urlencoded\";\n\nexport function isHtmlElement(object: any): object is HTMLElement {\n  return object != null && typeof object.tagName === \"string\";\n}\n\nexport function isButtonElement(object: any): object is HTMLButtonElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\n\nexport function isFormElement(object: any): object is HTMLFormElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\n\nexport function isInputElement(object: any): object is HTMLInputElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\n\ntype LimitedMouseEvent = Pick<\n  MouseEvent,\n  \"button\" | \"metaKey\" | \"altKey\" | \"ctrlKey\" | \"shiftKey\"\n>;\n\nfunction isModifiedEvent(event: LimitedMouseEvent) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport function shouldProcessLinkClick(\n  event: LimitedMouseEvent,\n  target?: string\n) {\n  return (\n    event.button === 0 && // Ignore everything but left clicks\n    (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n    !isModifiedEvent(event) // Ignore clicks with modifier keys\n  );\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n  | string\n  | ParamKeyValuePair[]\n  | Record<string, string | string[]>\n  | URLSearchParams;\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n */\nexport function createSearchParams(\n  init: URLSearchParamsInit = \"\"\n): URLSearchParams {\n  return new URLSearchParams(\n    typeof init === \"string\" ||\n    Array.isArray(init) ||\n    init instanceof URLSearchParams\n      ? init\n      : Object.keys(init).reduce((memo, key) => {\n          let value = init[key];\n          return memo.concat(\n            Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n          );\n        }, [] as ParamKeyValuePair[])\n  );\n}\n\nexport function getSearchParamsForLocation(\n  locationSearch: string,\n  defaultSearchParams: URLSearchParams | null\n) {\n  let searchParams = createSearchParams(locationSearch);\n\n  if (defaultSearchParams) {\n    // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n    // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n    // web extensions. Relevant Bugzilla tickets:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n    defaultSearchParams.forEach((_, key) => {\n      if (!searchParams.has(key)) {\n        defaultSearchParams.getAll(key).forEach((value) => {\n          searchParams.append(key, value);\n        });\n      }\n    });\n  }\n\n  return searchParams;\n}\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n  [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport type SubmitTarget =\n  | HTMLFormElement\n  | HTMLButtonElement\n  | HTMLInputElement\n  | FormData\n  | URLSearchParams\n  | JsonValue\n  | null;\n\n// One-time check for submitter support\nlet _formDataSupportsSubmitter: boolean | null = null;\n\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(\n        document.createElement(\"form\"),\n        // @ts-expect-error if FormData supports the submitter parameter, this will throw\n        0\n      );\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\n\n/**\n * Submit options shared by both navigations and fetchers\n */\ninterface SharedSubmitOptions {\n  /**\n   * The HTTP method used to submit the form. Overrides `<form method>`.\n   * Defaults to \"GET\".\n   */\n  method?: HTMLFormMethod;\n\n  /**\n   * The action URL path used to submit the form. Overrides `<form action>`.\n   * Defaults to the path of the current route.\n   */\n  action?: string;\n\n  /**\n   * The encoding used to submit the form. Overrides `<form encType>`.\n   * Defaults to \"application/x-www-form-urlencoded\".\n   */\n  encType?: FormEncType;\n\n  /**\n   * Determines whether the form action is relative to the route hierarchy or\n   * the pathname.  Use this if you want to opt out of navigating the route\n   * hierarchy and want to instead route based on /-delimited URL segments\n   */\n  relative?: RelativeRoutingType;\n\n  /**\n   * In browser-based environments, prevent resetting scroll after this\n   * navigation when using the <ScrollRestoration> component\n   */\n  preventScrollReset?: boolean;\n\n  /**\n   * Enable flushSync for this submission's state updates\n   */\n  flushSync?: boolean;\n}\n\n/**\n * Submit options available to fetchers\n */\nexport interface FetcherSubmitOptions extends SharedSubmitOptions {}\n\n/**\n * Submit options available to navigations\n */\nexport interface SubmitOptions extends FetcherSubmitOptions {\n  /**\n   * Set `true` to replace the current entry in the browser's history stack\n   * instead of creating a new one (i.e. stay on \"the same page\"). Defaults\n   * to `false`.\n   */\n  replace?: boolean;\n\n  /**\n   * State object to add to the history stack entry for this navigation\n   */\n  state?: any;\n\n  /**\n   * Indicate a specific fetcherKey to use when using navigate=false\n   */\n  fetcherKey?: string;\n\n  /**\n   * navigate=false will use a fetcher instead of a navigation\n   */\n  navigate?: boolean;\n\n  /**\n   * Enable view transitions on this submission navigation\n   */\n  viewTransition?: boolean;\n}\n\nconst supportedFormEncTypes: Set<FormEncType> = new Set([\n  \"application/x-www-form-urlencoded\",\n  \"multipart/form-data\",\n  \"text/plain\",\n]);\n\nfunction getFormEncType(encType: string | null) {\n  if (encType != null && !supportedFormEncTypes.has(encType as FormEncType)) {\n    warning(\n      false,\n      `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` ` +\n        `and will default to \"${defaultEncType}\"`\n    );\n\n    return null;\n  }\n  return encType;\n}\n\nexport function getFormSubmissionInfo(\n  target: SubmitTarget,\n  basename: string\n): {\n  action: string | null;\n  method: string;\n  encType: string;\n  formData: FormData | undefined;\n  body: any;\n} {\n  let method: string;\n  let action: string | null;\n  let encType: string;\n  let formData: FormData | undefined;\n  let body: any;\n\n  if (isFormElement(target)) {\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n\n    formData = new FormData(target);\n  } else if (\n    isButtonElement(target) ||\n    (isInputElement(target) &&\n      (target.type === \"submit\" || target.type === \"image\"))\n  ) {\n    let form = target.form;\n\n    if (form == null) {\n      throw new Error(\n        `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n      );\n    }\n\n    // <button>/<input type=\"submit\"> may override attributes of <form>\n\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n\n    method =\n      target.getAttribute(\"formmethod\") ||\n      form.getAttribute(\"method\") ||\n      defaultMethod;\n    encType =\n      getFormEncType(target.getAttribute(\"formenctype\")) ||\n      getFormEncType(form.getAttribute(\"enctype\")) ||\n      defaultEncType;\n\n    // Build a FormData object populated from a form and submitter\n    formData = new FormData(form, target);\n\n    // If this browser doesn't support the `FormData(el, submitter)` format,\n    // then tack on the submitter value at the end.  This is a lightweight\n    // solution that is not 100% spec compliant.  For complete support in older\n    // browsers, consider using the `formdata-submitter-polyfill` package\n    if (!isFormDataSubmitterSupported()) {\n      let { name, type, value } = target;\n      if (type === \"image\") {\n        let prefix = name ? `${name}.` : \"\";\n        formData.append(`${prefix}x`, \"0\");\n        formData.append(`${prefix}y`, \"0\");\n      } else if (name) {\n        formData.append(name, value);\n      }\n    }\n  } else if (isHtmlElement(target)) {\n    throw new Error(\n      `Cannot submit element that is not <form>, <button>, or ` +\n        `<input type=\"submit|image\">`\n    );\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n\n  // Send body for <Form encType=\"text/plain\" so we encode it into text\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = undefined;\n  }\n\n  return { action, method: method.toLowerCase(), encType, formData, body };\n}\n","/**\n * NOTE: If you refactor this to split up the modules into separate files,\n * you'll need to update the rollup config for react-router-dom-v5-compat.\n */\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport type {\n  DataRouteObject,\n  FutureConfig,\n  Location,\n  NavigateOptions,\n  NavigationType,\n  Navigator,\n  RelativeRoutingType,\n  RouteObject,\n  RouterProps,\n  RouterProviderProps,\n  To,\n  DataStrategyFunction,\n  PatchRoutesOnNavigationFunction,\n} from \"react-router\";\nimport {\n  Router,\n  createPath,\n  useHref,\n  useLocation,\n  useMatches,\n  useNavigate,\n  useNavigation,\n  useResolvedPath,\n  useBlocker,\n  UNSAFE_DataRouterContext as DataRouterContext,\n  UNSAFE_DataRouterStateContext as DataRouterStateContext,\n  UNSAFE_NavigationContext as NavigationContext,\n  UNSAFE_RouteContext as RouteContext,\n  UNSAFE_logV6DeprecationWarnings as logV6DeprecationWarnings,\n  UNSAFE_mapRouteProperties as mapRouteProperties,\n  UNSAFE_useRouteId as useRouteId,\n  UNSAFE_useRoutesImpl as useRoutesImpl,\n} from \"react-router\";\nimport type {\n  BrowserHistory,\n  Fetcher,\n  FormEncType,\n  FormMethod,\n  FutureConfig as RouterFutureConfig,\n  GetScrollRestorationKeyFunction,\n  HashHistory,\n  History,\n  HTMLFormMethod,\n  HydrationState,\n  Router as RemixRouter,\n  V7_FormMethod,\n  RouterState,\n  RouterSubscriber,\n  BlockerFunction,\n} from \"@remix-run/router\";\nimport {\n  createRouter,\n  createBrowserHistory,\n  createHashHistory,\n  joinPaths,\n  stripBasename,\n  UNSAFE_ErrorResponseImpl as ErrorResponseImpl,\n  UNSAFE_invariant as invariant,\n  UNSAFE_warning as warning,\n  matchPath,\n  IDLE_FETCHER,\n} from \"@remix-run/router\";\n\nimport type {\n  SubmitOptions,\n  ParamKeyValuePair,\n  URLSearchParamsInit,\n  SubmitTarget,\n  FetcherSubmitOptions,\n} from \"./dom\";\nimport {\n  createSearchParams,\n  defaultMethod,\n  getFormSubmissionInfo,\n  getSearchParamsForLocation,\n  shouldProcessLinkClick,\n} from \"./dom\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Re-exports\n////////////////////////////////////////////////////////////////////////////////\n\nexport type {\n  FormEncType,\n  FormMethod,\n  GetScrollRestorationKeyFunction,\n  ParamKeyValuePair,\n  SubmitOptions,\n  URLSearchParamsInit,\n  V7_FormMethod,\n};\nexport { createSearchParams, ErrorResponseImpl as UNSAFE_ErrorResponseImpl };\n\n// Note: Keep in sync with react-router exports!\nexport type {\n  ActionFunction,\n  ActionFunctionArgs,\n  AwaitProps,\n  Blocker,\n  BlockerFunction,\n  DataRouteMatch,\n  DataRouteObject,\n  DataStrategyFunction,\n  DataStrategyFunctionArgs,\n  DataStrategyMatch,\n  DataStrategyResult,\n  ErrorResponse,\n  Fetcher,\n  FutureConfig,\n  Hash,\n  IndexRouteObject,\n  IndexRouteProps,\n  JsonFunction,\n  LazyRouteFunction,\n  LayoutRouteProps,\n  LoaderFunction,\n  LoaderFunctionArgs,\n  Location,\n  MemoryRouterProps,\n  NavigateFunction,\n  NavigateOptions,\n  NavigateProps,\n  Navigation,\n  Navigator,\n  NonIndexRouteObject,\n  OutletProps,\n  Params,\n  ParamParseKey,\n  PatchRoutesOnNavigationFunction,\n  PatchRoutesOnNavigationFunctionArgs,\n  Path,\n  PathMatch,\n  Pathname,\n  PathParam,\n  PathPattern,\n  PathRouteProps,\n  RedirectFunction,\n  RelativeRoutingType,\n  RouteMatch,\n  RouteObject,\n  RouteProps,\n  RouterProps,\n  RouterProviderProps,\n  RoutesProps,\n  Search,\n  ShouldRevalidateFunction,\n  ShouldRevalidateFunctionArgs,\n  To,\n  UIMatch,\n} from \"react-router\";\nexport {\n  AbortedDeferredError,\n  Await,\n  MemoryRouter,\n  Navigate,\n  NavigationType,\n  Outlet,\n  Route,\n  Router,\n  Routes,\n  createMemoryRouter,\n  createPath,\n  createRoutesFromChildren,\n  createRoutesFromElements,\n  defer,\n  isRouteErrorResponse,\n  generatePath,\n  json,\n  matchPath,\n  matchRoutes,\n  parsePath,\n  redirect,\n  redirectDocument,\n  replace,\n  renderMatches,\n  resolvePath,\n  useActionData,\n  useAsyncError,\n  useAsyncValue,\n  useBlocker,\n  useHref,\n  useInRouterContext,\n  useLoaderData,\n  useLocation,\n  useMatch,\n  useMatches,\n  useNavigate,\n  useNavigation,\n  useNavigationType,\n  useOutlet,\n  useOutletContext,\n  useParams,\n  useResolvedPath,\n  useRevalidator,\n  useRouteError,\n  useRouteLoaderData,\n  useRoutes,\n} from \"react-router\";\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n  UNSAFE_DataRouterContext,\n  UNSAFE_DataRouterStateContext,\n  UNSAFE_NavigationContext,\n  UNSAFE_LocationContext,\n  UNSAFE_RouteContext,\n  UNSAFE_useRouteId,\n} from \"react-router\";\n//#endregion\n\ndeclare global {\n  var __staticRouterHydrationData: HydrationState | undefined;\n  var __reactRouterVersion: string;\n  interface Document {\n    startViewTransition(cb: () => Promise<void> | void): ViewTransition;\n  }\n}\n\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report.  This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"0\";\ntry {\n  window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n  // no-op\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Routers\n////////////////////////////////////////////////////////////////////////////////\n\ninterface DOMRouterOpts {\n  basename?: string;\n  future?: Partial<Omit<RouterFutureConfig, \"v7_prependBasename\">>;\n  hydrationData?: HydrationState;\n  dataStrategy?: DataStrategyFunction;\n  patchRoutesOnNavigation?: PatchRoutesOnNavigationFunction;\n  window?: Window;\n}\n\nexport function createBrowserRouter(\n  routes: RouteObject[],\n  opts?: DOMRouterOpts\n): RemixRouter {\n  return createRouter({\n    basename: opts?.basename,\n    future: {\n      ...opts?.future,\n      v7_prependBasename: true,\n    },\n    history: createBrowserHistory({ window: opts?.window }),\n    hydrationData: opts?.hydrationData || parseHydrationData(),\n    routes,\n    mapRouteProperties,\n    dataStrategy: opts?.dataStrategy,\n    patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n    window: opts?.window,\n  }).initialize();\n}\n\nexport function createHashRouter(\n  routes: RouteObject[],\n  opts?: DOMRouterOpts\n): RemixRouter {\n  return createRouter({\n    basename: opts?.basename,\n    future: {\n      ...opts?.future,\n      v7_prependBasename: true,\n    },\n    history: createHashHistory({ window: opts?.window }),\n    hydrationData: opts?.hydrationData || parseHydrationData(),\n    routes,\n    mapRouteProperties,\n    dataStrategy: opts?.dataStrategy,\n    patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n    window: opts?.window,\n  }).initialize();\n}\n\nfunction parseHydrationData(): HydrationState | undefined {\n  let state = window?.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = {\n      ...state,\n      errors: deserializeErrors(state.errors),\n    };\n  }\n  return state;\n}\n\nfunction deserializeErrors(\n  errors: RemixRouter[\"state\"][\"errors\"]\n): RemixRouter[\"state\"][\"errors\"] {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized: RemixRouter[\"state\"][\"errors\"] = {};\n  for (let [key, val] of entries) {\n    // Hey you!  If you change this, please change the corresponding logic in\n    // serializeErrors in react-router-dom/server.tsx :)\n    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new ErrorResponseImpl(\n        val.status,\n        val.statusText,\n        val.data,\n        val.internal === true\n      );\n    } else if (val && val.__type === \"Error\") {\n      // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            // @ts-expect-error\n            let error = new ErrorConstructor(val.message);\n            // Wipe away the client-side stack trace.  Nothing to fill it in with\n            // because we don't serialize SSR stack traces for security reasons\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n            // no-op - fall through and create a normal Error\n          }\n        }\n      }\n\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        // Wipe away the client-side stack trace.  Nothing to fill it in with\n        // because we don't serialize SSR stack traces for security reasons\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Contexts\n////////////////////////////////////////////////////////////////////////////////\n\ntype ViewTransitionContextObject =\n  | {\n      isTransitioning: false;\n    }\n  | {\n      isTransitioning: true;\n      flushSync: boolean;\n      currentLocation: Location;\n      nextLocation: Location;\n    };\n\nconst ViewTransitionContext = React.createContext<ViewTransitionContextObject>({\n  isTransitioning: false,\n});\nif (__DEV__) {\n  ViewTransitionContext.displayName = \"ViewTransition\";\n}\n\nexport { ViewTransitionContext as UNSAFE_ViewTransitionContext };\n\n// TODO: (v7) Change the useFetcher data from `any` to `unknown`\ntype FetchersContextObject = Map<string, any>;\n\nconst FetchersContext = React.createContext<FetchersContextObject>(new Map());\nif (__DEV__) {\n  FetchersContext.displayName = \"Fetchers\";\n}\n\nexport { FetchersContext as UNSAFE_FetchersContext };\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\n\nfunction startTransitionSafe(cb: () => void) {\n  if (startTransitionImpl) {\n    startTransitionImpl(cb);\n  } else {\n    cb();\n  }\n}\n\nfunction flushSyncSafe(cb: () => void) {\n  if (flushSyncImpl) {\n    flushSyncImpl(cb);\n  } else {\n    cb();\n  }\n}\n\ninterface ViewTransition {\n  finished: Promise<void>;\n  ready: Promise<void>;\n  updateCallbackDone: Promise<void>;\n  skipTransition(): void;\n}\n\nclass Deferred<T> {\n  status: \"pending\" | \"resolved\" | \"rejected\" = \"pending\";\n  promise: Promise<T>;\n  // @ts-expect-error - no initializer\n  resolve: (value: T) => void;\n  // @ts-expect-error - no initializer\n  reject: (reason?: unknown) => void;\n  constructor() {\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = (value) => {\n        if (this.status === \"pending\") {\n          this.status = \"resolved\";\n          resolve(value);\n        }\n      };\n      this.reject = (reason) => {\n        if (this.status === \"pending\") {\n          this.status = \"rejected\";\n          reject(reason);\n        }\n      };\n    });\n  }\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n  fallbackElement,\n  router,\n  future,\n}: RouterProviderProps): React.ReactElement {\n  let [state, setStateImpl] = React.useState(router.state);\n  let [pendingState, setPendingState] = React.useState<RouterState>();\n  let [vtContext, setVtContext] = React.useState<ViewTransitionContextObject>({\n    isTransitioning: false,\n  });\n  let [renderDfd, setRenderDfd] = React.useState<Deferred<void>>();\n  let [transition, setTransition] = React.useState<ViewTransition>();\n  let [interruption, setInterruption] = React.useState<{\n    state: RouterState;\n    currentLocation: Location;\n    nextLocation: Location;\n  }>();\n  let fetcherData = React.useRef<Map<string, any>>(new Map());\n  let { v7_startTransition } = future || {};\n\n  let optInStartTransition = React.useCallback(\n    (cb: () => void) => {\n      if (v7_startTransition) {\n        startTransitionSafe(cb);\n      } else {\n        cb();\n      }\n    },\n    [v7_startTransition]\n  );\n\n  let setState = React.useCallback<RouterSubscriber>(\n    (\n      newState: RouterState,\n      {\n        deletedFetchers,\n        flushSync: flushSync,\n        viewTransitionOpts: viewTransitionOpts,\n      }\n    ) => {\n      newState.fetchers.forEach((fetcher, key) => {\n        if (fetcher.data !== undefined) {\n          fetcherData.current.set(key, fetcher.data);\n        }\n      });\n      deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n\n      let isViewTransitionUnavailable =\n        router.window == null ||\n        router.window.document == null ||\n        typeof router.window.document.startViewTransition !== \"function\";\n\n      // If this isn't a view transition or it's not available in this browser,\n      // just update and be done with it\n      if (!viewTransitionOpts || isViewTransitionUnavailable) {\n        if (flushSync) {\n          flushSyncSafe(() => setStateImpl(newState));\n        } else {\n          optInStartTransition(() => setStateImpl(newState));\n        }\n        return;\n      }\n\n      // flushSync + startViewTransition\n      if (flushSync) {\n        // Flush through the context to mark DOM elements as transition=ing\n        flushSyncSafe(() => {\n          // Cancel any pending transitions\n          if (transition) {\n            renderDfd && renderDfd.resolve();\n            transition.skipTransition();\n          }\n          setVtContext({\n            isTransitioning: true,\n            flushSync: true,\n            currentLocation: viewTransitionOpts.currentLocation,\n            nextLocation: viewTransitionOpts.nextLocation,\n          });\n        });\n\n        // Update the DOM\n        let t = router.window!.document.startViewTransition(() => {\n          flushSyncSafe(() => setStateImpl(newState));\n        });\n\n        // Clean up after the animation completes\n        t.finished.finally(() => {\n          flushSyncSafe(() => {\n            setRenderDfd(undefined);\n            setTransition(undefined);\n            setPendingState(undefined);\n            setVtContext({ isTransitioning: false });\n          });\n        });\n\n        flushSyncSafe(() => setTransition(t));\n        return;\n      }\n\n      // startTransition + startViewTransition\n      if (transition) {\n        // Interrupting an in-progress transition, cancel and let everything flush\n        // out, and then kick off a new transition from the interruption state\n        renderDfd && renderDfd.resolve();\n        transition.skipTransition();\n        setInterruption({\n          state: newState,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation,\n        });\n      } else {\n        // Completed navigation update with opted-in view transitions, let 'er rip\n        setPendingState(newState);\n        setVtContext({\n          isTransitioning: true,\n          flushSync: false,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation,\n        });\n      }\n    },\n    [router.window, transition, renderDfd, fetcherData, optInStartTransition]\n  );\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n  // When we start a view transition, create a Deferred we can use for the\n  // eventual \"completed\" render\n  React.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred<void>());\n    }\n  }, [vtContext]);\n\n  // Once the deferred is created, kick off startViewTransition() to update the\n  // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n  // happened)\n  React.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition = router.window.document.startViewTransition(async () => {\n        optInStartTransition(() => setStateImpl(newState));\n        await renderPromise;\n      });\n      transition.finished.finally(() => {\n        setRenderDfd(undefined);\n        setTransition(undefined);\n        setPendingState(undefined);\n        setVtContext({ isTransitioning: false });\n      });\n      setTransition(transition);\n    }\n  }, [optInStartTransition, pendingState, renderDfd, router.window]);\n\n  // When the new location finally renders and is committed to the DOM, this\n  // effect will run to resolve the transition\n  React.useEffect(() => {\n    if (\n      renderDfd &&\n      pendingState &&\n      state.location.key === pendingState.location.key\n    ) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n\n  // If we get interrupted with a new navigation during a transition, we skip\n  // the active transition, let it cleanup, then kick it off again here\n  React.useEffect(() => {\n    if (!vtContext.isTransitioning && interruption) {\n      setPendingState(interruption.state);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: interruption.currentLocation,\n        nextLocation: interruption.nextLocation,\n      });\n      setInterruption(undefined);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n\n  React.useEffect(() => {\n    warning(\n      fallbackElement == null || !router.future.v7_partialHydration,\n      \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n        \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n    );\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  let navigator = React.useMemo((): Navigator => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: (n) => router.navigate(n),\n      push: (to, state, opts) =>\n        router.navigate(to, {\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n      replace: (to, state, opts) =>\n        router.navigate(to, {\n          replace: true,\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n    };\n  }, [router]);\n\n  let basename = router.basename || \"/\";\n\n  let dataRouterContext = React.useMemo(\n    () => ({\n      router,\n      navigator,\n      static: false,\n      basename,\n    }),\n    [router, navigator, basename]\n  );\n\n  let routerFuture = React.useMemo<RouterProps[\"future\"]>(\n    () => ({\n      v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n    }),\n    [router.future.v7_relativeSplatPath]\n  );\n\n  React.useEffect(\n    () => logV6DeprecationWarnings(future, router.future),\n    [future, router.future]\n  );\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return (\n    <>\n      <DataRouterContext.Provider value={dataRouterContext}>\n        <DataRouterStateContext.Provider value={state}>\n          <FetchersContext.Provider value={fetcherData.current}>\n            <ViewTransitionContext.Provider value={vtContext}>\n              <Router\n                basename={basename}\n                location={state.location}\n                navigationType={state.historyAction}\n                navigator={navigator}\n                future={routerFuture}\n              >\n                {state.initialized || router.future.v7_partialHydration ? (\n                  <MemoizedDataRoutes\n                    routes={router.routes}\n                    future={router.future}\n                    state={state}\n                  />\n                ) : (\n                  fallbackElement\n                )}\n              </Router>\n            </ViewTransitionContext.Provider>\n          </FetchersContext.Provider>\n        </DataRouterStateContext.Provider>\n      </DataRouterContext.Provider>\n      {null}\n    </>\n  );\n}\n\n// Memoize to avoid re-renders when updating `ViewTransitionContext`\nconst MemoizedDataRoutes = React.memo(DataRoutes);\n\nfunction DataRoutes({\n  routes,\n  future,\n  state,\n}: {\n  routes: DataRouteObject[];\n  future: RemixRouter[\"future\"];\n  state: RouterState;\n}): React.ReactElement | null {\n  return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface BrowserRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: Partial<FutureConfig>;\n  window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nexport function BrowserRouter({\n  basename,\n  children,\n  future,\n  window,\n}: BrowserRouterProps) {\n  let historyRef = React.useRef<BrowserHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({ window, v5Compat: true });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface HashRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: Partial<FutureConfig>;\n  window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nexport function HashRouter({\n  basename,\n  children,\n  future,\n  window,\n}: HashRouterProps) {\n  let historyRef = React.useRef<HashHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({ window, v5Compat: true });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface HistoryRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: FutureConfig;\n  history: History;\n}\n\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter({\n  basename,\n  children,\n  future,\n  history,\n}: HistoryRouterProps) {\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nif (__DEV__) {\n  HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nexport { HistoryRouter as unstable_HistoryRouter };\n\nexport interface LinkProps\n  extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n  reloadDocument?: boolean;\n  replace?: boolean;\n  state?: any;\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  to: To;\n  viewTransition?: boolean;\n}\n\nconst isBrowser =\n  typeof window !== \"undefined\" &&\n  typeof window.document !== \"undefined\" &&\n  typeof window.document.createElement !== \"undefined\";\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n  function LinkWithRef(\n    {\n      onClick,\n      relative,\n      reloadDocument,\n      replace,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      viewTransition,\n      ...rest\n    },\n    ref\n  ) {\n    let { basename } = React.useContext(NavigationContext);\n\n    // Rendered into <a href> for absolute URLs\n    let absoluteHref;\n    let isExternal = false;\n\n    if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n      // Render the absolute href server- and client-side\n      absoluteHref = to;\n\n      // Only check for external origins client-side\n      if (isBrowser) {\n        try {\n          let currentUrl = new URL(window.location.href);\n          let targetUrl = to.startsWith(\"//\")\n            ? new URL(currentUrl.protocol + to)\n            : new URL(to);\n          let path = stripBasename(targetUrl.pathname, basename);\n\n          if (targetUrl.origin === currentUrl.origin && path != null) {\n            // Strip the protocol/origin/basename for same-origin absolute URLs\n            to = path + targetUrl.search + targetUrl.hash;\n          } else {\n            isExternal = true;\n          }\n        } catch (e) {\n          // We can't do external URL detection without a valid URL\n          warning(\n            false,\n            `<Link to=\"${to}\"> contains an invalid URL which will probably break ` +\n              `when clicked - please update to a valid URL path.`\n          );\n        }\n      }\n    }\n\n    // Rendered into <a href> for relative URLs\n    let href = useHref(to, { relative });\n\n    let internalOnClick = useLinkClickHandler(to, {\n      replace,\n      state,\n      target,\n      preventScrollReset,\n      relative,\n      viewTransition,\n    });\n    function handleClick(\n      event: React.MouseEvent<HTMLAnchorElement, MouseEvent>\n    ) {\n      if (onClick) onClick(event);\n      if (!event.defaultPrevented) {\n        internalOnClick(event);\n      }\n    }\n\n    return (\n      // eslint-disable-next-line jsx-a11y/anchor-has-content\n      <a\n        {...rest}\n        href={absoluteHref || href}\n        onClick={isExternal || reloadDocument ? onClick : handleClick}\n        ref={ref}\n        target={target}\n      />\n    );\n  }\n);\n\nif (__DEV__) {\n  Link.displayName = \"Link\";\n}\n\nexport type NavLinkRenderProps = {\n  isActive: boolean;\n  isPending: boolean;\n  isTransitioning: boolean;\n};\n\nexport interface NavLinkProps\n  extends Omit<LinkProps, \"className\" | \"style\" | \"children\"> {\n  children?: React.ReactNode | ((props: NavLinkRenderProps) => React.ReactNode);\n  caseSensitive?: boolean;\n  className?: string | ((props: NavLinkRenderProps) => string | undefined);\n  end?: boolean;\n  style?:\n    | React.CSSProperties\n    | ((props: NavLinkRenderProps) => React.CSSProperties | undefined);\n}\n\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nexport const NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n  function NavLinkWithRef(\n    {\n      \"aria-current\": ariaCurrentProp = \"page\",\n      caseSensitive = false,\n      className: classNameProp = \"\",\n      end = false,\n      style: styleProp,\n      to,\n      viewTransition,\n      children,\n      ...rest\n    },\n    ref\n  ) {\n    let path = useResolvedPath(to, { relative: rest.relative });\n    let location = useLocation();\n    let routerState = React.useContext(DataRouterStateContext);\n    let { navigator, basename } = React.useContext(NavigationContext);\n    let isTransitioning =\n      routerState != null &&\n      // Conditional usage is OK here because the usage of a data router is static\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      useViewTransitionState(path) &&\n      viewTransition === true;\n\n    let toPathname = navigator.encodeLocation\n      ? navigator.encodeLocation(path).pathname\n      : path.pathname;\n    let locationPathname = location.pathname;\n    let nextLocationPathname =\n      routerState && routerState.navigation && routerState.navigation.location\n        ? routerState.navigation.location.pathname\n        : null;\n\n    if (!caseSensitive) {\n      locationPathname = locationPathname.toLowerCase();\n      nextLocationPathname = nextLocationPathname\n        ? nextLocationPathname.toLowerCase()\n        : null;\n      toPathname = toPathname.toLowerCase();\n    }\n\n    if (nextLocationPathname && basename) {\n      nextLocationPathname =\n        stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n    }\n\n    // If the `to` has a trailing slash, look at that exact spot.  Otherwise,\n    // we're looking for a slash _after_ what's in `to`.  For example:\n    //\n    // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n    // both want to look for a / at index 6 to match URL `/users/matt`\n    const endSlashPosition =\n      toPathname !== \"/\" && toPathname.endsWith(\"/\")\n        ? toPathname.length - 1\n        : toPathname.length;\n    let isActive =\n      locationPathname === toPathname ||\n      (!end &&\n        locationPathname.startsWith(toPathname) &&\n        locationPathname.charAt(endSlashPosition) === \"/\");\n\n    let isPending =\n      nextLocationPathname != null &&\n      (nextLocationPathname === toPathname ||\n        (!end &&\n          nextLocationPathname.startsWith(toPathname) &&\n          nextLocationPathname.charAt(toPathname.length) === \"/\"));\n\n    let renderProps = {\n      isActive,\n      isPending,\n      isTransitioning,\n    };\n\n    let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n\n    let className: string | undefined;\n    if (typeof classNameProp === \"function\") {\n      className = classNameProp(renderProps);\n    } else {\n      // If the className prop is not a function, we use a default `active`\n      // class for <NavLink />s that are active. In v5 `active` was the default\n      // value for `activeClassName`, but we are removing that API and can still\n      // use the old default behavior for a cleaner upgrade path and keep the\n      // simple styling rules working as they currently do.\n      className = [\n        classNameProp,\n        isActive ? \"active\" : null,\n        isPending ? \"pending\" : null,\n        isTransitioning ? \"transitioning\" : null,\n      ]\n        .filter(Boolean)\n        .join(\" \");\n    }\n\n    let style =\n      typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n\n    return (\n      <Link\n        {...rest}\n        aria-current={ariaCurrent}\n        className={className}\n        ref={ref}\n        style={style}\n        to={to}\n        viewTransition={viewTransition}\n      >\n        {typeof children === \"function\" ? children(renderProps) : children}\n      </Link>\n    );\n  }\n);\n\nif (__DEV__) {\n  NavLink.displayName = \"NavLink\";\n}\n\n/**\n * Form props shared by navigations and fetchers\n */\ninterface SharedFormProps extends React.FormHTMLAttributes<HTMLFormElement> {\n  /**\n   * The HTTP verb to use when the form is submit. Supports \"get\", \"post\",\n   * \"put\", \"delete\", \"patch\".\n   */\n  method?: HTMLFormMethod;\n\n  /**\n   * `<form encType>` - enhancing beyond the normal string type and limiting\n   * to the built-in browser supported values\n   */\n  encType?:\n    | \"application/x-www-form-urlencoded\"\n    | \"multipart/form-data\"\n    | \"text/plain\";\n\n  /**\n   * Normal `<form action>` but supports React Router's relative paths.\n   */\n  action?: string;\n\n  /**\n   * Determines whether the form action is relative to the route hierarchy or\n   * the pathname.  Use this if you want to opt out of navigating the route\n   * hierarchy and want to instead route based on /-delimited URL segments\n   */\n  relative?: RelativeRoutingType;\n\n  /**\n   * Prevent the scroll position from resetting to the top of the viewport on\n   * completion of the navigation when using the <ScrollRestoration> component\n   */\n  preventScrollReset?: boolean;\n\n  /**\n   * A function to call when the form is submitted. If you call\n   * `event.preventDefault()` then this form will not do anything.\n   */\n  onSubmit?: React.FormEventHandler<HTMLFormElement>;\n}\n\n/**\n * Form props available to fetchers\n */\nexport interface FetcherFormProps extends SharedFormProps {}\n\n/**\n * Form props available to navigations\n */\nexport interface FormProps extends SharedFormProps {\n  /**\n   * Indicate a specific fetcherKey to use when using navigate=false\n   */\n  fetcherKey?: string;\n\n  /**\n   * navigate=false will use a fetcher instead of a navigation\n   */\n  navigate?: boolean;\n\n  /**\n   * Forces a full document navigation instead of a fetch.\n   */\n  reloadDocument?: boolean;\n\n  /**\n   * Replaces the current entry in the browser history stack when the form\n   * navigates. Use this if you don't want the user to be able to click \"back\"\n   * to the page with the form on it.\n   */\n  replace?: boolean;\n\n  /**\n   * State object to add to the history stack entry for this navigation\n   */\n  state?: any;\n\n  /**\n   * Enable view transitions on this Form navigation\n   */\n  viewTransition?: boolean;\n}\n\ntype HTMLSubmitEvent = React.BaseSyntheticEvent<\n  SubmitEvent,\n  Event,\n  HTMLFormElement\n>;\n\ntype HTMLFormSubmitter = HTMLButtonElement | HTMLInputElement;\n\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n  (\n    {\n      fetcherKey,\n      navigate,\n      reloadDocument,\n      replace,\n      state,\n      method = defaultMethod,\n      action,\n      onSubmit,\n      relative,\n      preventScrollReset,\n      viewTransition,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    let submit = useSubmit();\n    let formAction = useFormAction(action, { relative });\n    let formMethod: HTMLFormMethod =\n      method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n\n    let submitHandler: React.FormEventHandler<HTMLFormElement> = (event) => {\n      onSubmit && onSubmit(event);\n      if (event.defaultPrevented) return;\n      event.preventDefault();\n\n      let submitter = (event as unknown as HTMLSubmitEvent).nativeEvent\n        .submitter as HTMLFormSubmitter | null;\n\n      let submitMethod =\n        (submitter?.getAttribute(\"formmethod\") as HTMLFormMethod | undefined) ||\n        method;\n\n      submit(submitter || event.currentTarget, {\n        fetcherKey,\n        method: submitMethod,\n        navigate,\n        replace,\n        state,\n        relative,\n        preventScrollReset,\n        viewTransition,\n      });\n    };\n\n    return (\n      <form\n        ref={forwardedRef}\n        method={formMethod}\n        action={formAction}\n        onSubmit={reloadDocument ? onSubmit : submitHandler}\n        {...props}\n      />\n    );\n  }\n);\n\nif (__DEV__) {\n  Form.displayName = \"Form\";\n}\n\nexport interface ScrollRestorationProps {\n  getKey?: GetScrollRestorationKeyFunction;\n  storageKey?: string;\n}\n\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nexport function ScrollRestoration({\n  getKey,\n  storageKey,\n}: ScrollRestorationProps) {\n  useScrollRestoration({ getKey, storageKey });\n  return null;\n}\n\nif (__DEV__) {\n  ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\n\nenum DataRouterHook {\n  UseScrollRestoration = \"useScrollRestoration\",\n  UseSubmit = \"useSubmit\",\n  UseSubmitFetcher = \"useSubmitFetcher\",\n  UseFetcher = \"useFetcher\",\n  useViewTransitionState = \"useViewTransitionState\",\n}\n\nenum DataRouterStateHook {\n  UseFetcher = \"useFetcher\",\n  UseFetchers = \"useFetchers\",\n  UseScrollRestoration = \"useScrollRestoration\",\n}\n\n// Internal hooks\n\nfunction getDataRouterConsoleError(\n  hookName: DataRouterHook | DataRouterStateHook\n) {\n  return `${hookName} must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n  let ctx = React.useContext(DataRouterContext);\n  invariant(ctx, getDataRouterConsoleError(hookName));\n  return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n  let state = React.useContext(DataRouterStateContext);\n  invariant(state, getDataRouterConsoleError(hookName));\n  return state;\n}\n\n// External hooks\n\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nexport function useLinkClickHandler<E extends Element = HTMLAnchorElement>(\n  to: To,\n  {\n    target,\n    replace: replaceProp,\n    state,\n    preventScrollReset,\n    relative,\n    viewTransition,\n  }: {\n    target?: React.HTMLAttributeAnchorTarget;\n    replace?: boolean;\n    state?: any;\n    preventScrollReset?: boolean;\n    relative?: RelativeRoutingType;\n    viewTransition?: boolean;\n  } = {}\n): (event: React.MouseEvent<E, MouseEvent>) => void {\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, { relative });\n\n  return React.useCallback(\n    (event: React.MouseEvent<E, MouseEvent>) => {\n      if (shouldProcessLinkClick(event, target)) {\n        event.preventDefault();\n\n        // If the URL hasn't changed, a regular <a> will do a replace instead of\n        // a push, so do the same here unless the replace prop is explicitly set\n        let replace =\n          replaceProp !== undefined\n            ? replaceProp\n            : createPath(location) === createPath(path);\n\n        navigate(to, {\n          replace,\n          state,\n          preventScrollReset,\n          relative,\n          viewTransition,\n        });\n      }\n    },\n    [\n      location,\n      navigate,\n      path,\n      replaceProp,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      relative,\n      viewTransition,\n    ]\n  );\n}\n\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nexport function useSearchParams(\n  defaultInit?: URLSearchParamsInit\n): [URLSearchParams, SetURLSearchParams] {\n  warning(\n    typeof URLSearchParams !== \"undefined\",\n    `You cannot use the \\`useSearchParams\\` hook in a browser that does not ` +\n      `support the URLSearchParams API. If you need to support Internet ` +\n      `Explorer 11, we recommend you load a polyfill such as ` +\n      `https://github.com/ungap/url-search-params.`\n  );\n\n  let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React.useRef(false);\n\n  let location = useLocation();\n  let searchParams = React.useMemo(\n    () =>\n      // Only merge in the defaults if we haven't yet called setSearchParams.\n      // Once we call that we want those to take precedence, otherwise you can't\n      // remove a param with setSearchParams({}) if it has an initial value\n      getSearchParamsForLocation(\n        location.search,\n        hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n      ),\n    [location.search]\n  );\n\n  let navigate = useNavigate();\n  let setSearchParams = React.useCallback<SetURLSearchParams>(\n    (nextInit, navigateOptions) => {\n      const newSearchParams = createSearchParams(\n        typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit\n      );\n      hasSetSearchParamsRef.current = true;\n      navigate(\"?\" + newSearchParams, navigateOptions);\n    },\n    [navigate, searchParams]\n  );\n\n  return [searchParams, setSearchParams];\n}\n\nexport type SetURLSearchParams = (\n  nextInit?:\n    | URLSearchParamsInit\n    | ((prev: URLSearchParams) => URLSearchParamsInit),\n  navigateOpts?: NavigateOptions\n) => void;\n\n/**\n * Submits a HTML `<form>` to the server without reloading the page.\n */\nexport interface SubmitFunction {\n  (\n    /**\n     * Specifies the `<form>` to be submitted to the server, a specific\n     * `<button>` or `<input type=\"submit\">` to use to submit the form, or some\n     * arbitrary data to submit.\n     *\n     * Note: When using a `<button>` its `name` and `value` will also be\n     * included in the form data that is submitted.\n     */\n    target: SubmitTarget,\n\n    /**\n     * Options that override the `<form>`'s own attributes. Required when\n     * submitting arbitrary data without a backing `<form>`.\n     */\n    options?: SubmitOptions\n  ): void;\n}\n\n/**\n * Submits a fetcher `<form>` to the server without reloading the page.\n */\nexport interface FetcherSubmitFunction {\n  (\n    target: SubmitTarget,\n    // Fetchers cannot replace or set state because they are not navigation events\n    options?: FetcherSubmitOptions\n  ): void;\n}\n\nfunction validateClientSideSubmission() {\n  if (typeof document === \"undefined\") {\n    throw new Error(\n      \"You are calling submit during the server render. \" +\n        \"Try calling submit within a `useEffect` or callback instead.\"\n    );\n  }\n}\n\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\n\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nexport function useSubmit(): SubmitFunction {\n  let { router } = useDataRouterContext(DataRouterHook.UseSubmit);\n  let { basename } = React.useContext(NavigationContext);\n  let currentRouteId = useRouteId();\n\n  return React.useCallback<SubmitFunction>(\n    (target, options = {}) => {\n      validateClientSideSubmission();\n\n      let { action, method, encType, formData, body } = getFormSubmissionInfo(\n        target,\n        basename\n      );\n\n      if (options.navigate === false) {\n        let key = options.fetcherKey || getUniqueFetcherId();\n        router.fetch(key, currentRouteId, options.action || action, {\n          preventScrollReset: options.preventScrollReset,\n          formData,\n          body,\n          formMethod: options.method || (method as HTMLFormMethod),\n          formEncType: options.encType || (encType as FormEncType),\n          flushSync: options.flushSync,\n        });\n      } else {\n        router.navigate(options.action || action, {\n          preventScrollReset: options.preventScrollReset,\n          formData,\n          body,\n          formMethod: options.method || (method as HTMLFormMethod),\n          formEncType: options.encType || (encType as FormEncType),\n          replace: options.replace,\n          state: options.state,\n          fromRouteId: currentRouteId,\n          flushSync: options.flushSync,\n          viewTransition: options.viewTransition,\n        });\n      }\n    },\n    [router, basename, currentRouteId]\n  );\n}\n\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nexport function useFormAction(\n  action?: string,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n  let { basename } = React.useContext(NavigationContext);\n  let routeContext = React.useContext(RouteContext);\n  invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n\n  let [match] = routeContext.matches.slice(-1);\n  // Shallow clone path so we can modify it below, otherwise we modify the\n  // object referenced by useMemo inside useResolvedPath\n  let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n\n  // If no action was specified, browsers will persist current search params\n  // when determining the path, so match that behavior\n  // https://github.com/remix-run/remix/issues/927\n  let location = useLocation();\n  if (action == null) {\n    // Safe to write to this directly here since if action was undefined, we\n    // would have called useResolvedPath(\".\") which will never include a search\n    path.search = location.search;\n\n    // When grabbing search params from the URL, remove any included ?index param\n    // since it might not apply to our contextual route.  We add it back based\n    // on match.route.index below\n    let params = new URLSearchParams(path.search);\n    let indexValues = params.getAll(\"index\");\n    let hasNakedIndexParam = indexValues.some((v) => v === \"\");\n    if (hasNakedIndexParam) {\n      params.delete(\"index\");\n      indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? `?${qs}` : \"\";\n    }\n  }\n\n  if ((!action || action === \".\") && match.route.index) {\n    path.search = path.search\n      ? path.search.replace(/^\\?/, \"?index&\")\n      : \"?index\";\n  }\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the form action.  If this is a root navigation, then just use\n  // the raw basename which allows the basename to have full control over the\n  // presence of a trailing slash on root actions\n  if (basename !== \"/\") {\n    path.pathname =\n      path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n\n  return createPath(path);\n}\n\nexport type FetcherWithComponents<TData> = Fetcher<TData> & {\n  Form: React.ForwardRefExoticComponent<\n    FetcherFormProps & React.RefAttributes<HTMLFormElement>\n  >;\n  submit: FetcherSubmitFunction;\n  load: (href: string, opts?: { flushSync?: boolean }) => void;\n};\n\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nexport function useFetcher<TData = any>({\n  key,\n}: { key?: string } = {}): FetcherWithComponents<TData> {\n  let { router } = useDataRouterContext(DataRouterHook.UseFetcher);\n  let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n  let fetcherData = React.useContext(FetchersContext);\n  let route = React.useContext(RouteContext);\n  let routeId = route.matches[route.matches.length - 1]?.route.id;\n\n  invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n  invariant(route, `useFetcher must be used inside a RouteContext`);\n  invariant(\n    routeId != null,\n    `useFetcher can only be used on routes that contain a unique \"id\"`\n  );\n\n  // Fetcher key handling\n  // OK to call conditionally to feature detect `useId`\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  let defaultKey = useIdImpl ? useIdImpl() : \"\";\n  let [fetcherKey, setFetcherKey] = React.useState<string>(key || defaultKey);\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  } else if (!fetcherKey) {\n    // We will only fall through here when `useId` is not available\n    setFetcherKey(getUniqueFetcherId());\n  }\n\n  // Registration/cleanup\n  React.useEffect(() => {\n    router.getFetcher(fetcherKey);\n    return () => {\n      // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n      // will not delete immediately but instead queue up a delete after the\n      // fetcher returns to an `idle` state\n      router.deleteFetcher(fetcherKey);\n    };\n  }, [router, fetcherKey]);\n\n  // Fetcher additions\n  let load = React.useCallback(\n    (href: string, opts?: { flushSync?: boolean }) => {\n      invariant(routeId, \"No routeId available for fetcher.load()\");\n      router.fetch(fetcherKey, routeId, href, opts);\n    },\n    [fetcherKey, routeId, router]\n  );\n\n  let submitImpl = useSubmit();\n  let submit = React.useCallback<FetcherSubmitFunction>(\n    (target, opts) => {\n      submitImpl(target, {\n        ...opts,\n        navigate: false,\n        fetcherKey,\n      });\n    },\n    [fetcherKey, submitImpl]\n  );\n\n  let FetcherForm = React.useMemo(() => {\n    let FetcherForm = React.forwardRef<HTMLFormElement, FetcherFormProps>(\n      (props, ref) => {\n        return (\n          <Form {...props} navigate={false} fetcherKey={fetcherKey} ref={ref} />\n        );\n      }\n    );\n    if (__DEV__) {\n      FetcherForm.displayName = \"fetcher.Form\";\n    }\n    return FetcherForm;\n  }, [fetcherKey]);\n\n  // Exposed FetcherWithComponents\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React.useMemo(\n    () => ({\n      Form: FetcherForm,\n      submit,\n      load,\n      ...fetcher,\n      data,\n    }),\n    [FetcherForm, submit, load, fetcher, data]\n  );\n\n  return fetcherWithComponents;\n}\n\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nexport function useFetchers(): (Fetcher & { key: string })[] {\n  let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n  return Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n    ...fetcher,\n    key,\n  }));\n}\n\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions: Record<string, number> = {};\n\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration({\n  getKey,\n  storageKey,\n}: {\n  getKey?: GetScrollRestorationKeyFunction;\n  storageKey?: string;\n} = {}) {\n  let { router } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n  let { restoreScrollPosition, preventScrollReset } = useDataRouterState(\n    DataRouterStateHook.UseScrollRestoration\n  );\n  let { basename } = React.useContext(NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n\n  // Trigger manual scroll restoration while we're active\n  React.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n\n  // Save positions on pagehide\n  usePageHide(\n    React.useCallback(() => {\n      if (navigation.state === \"idle\") {\n        let key = (getKey ? getKey(location, matches) : null) || location.key;\n        savedScrollPositions[key] = window.scrollY;\n      }\n      try {\n        sessionStorage.setItem(\n          storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n          JSON.stringify(savedScrollPositions)\n        );\n      } catch (error) {\n        warning(\n          false,\n          `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n        );\n      }\n      window.history.scrollRestoration = \"auto\";\n    }, [storageKey, getKey, navigation.state, location, matches])\n  );\n\n  // Read in any saved scroll locations\n  if (typeof document !== \"undefined\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(\n          storageKey || SCROLL_RESTORATION_STORAGE_KEY\n        );\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n        // no-op, use default empty object\n      }\n    }, [storageKey]);\n\n    // Enable scroll restoration in the router\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      let getKeyWithoutBasename: GetScrollRestorationKeyFunction | undefined =\n        getKey && basename !== \"/\"\n          ? (location, matches) =>\n              getKey(\n                // Strip the basename to match useLocation()\n                {\n                  ...location,\n                  pathname:\n                    stripBasename(location.pathname, basename) ||\n                    location.pathname,\n                },\n                matches\n              )\n          : getKey;\n      let disableScrollRestoration = router?.enableScrollRestoration(\n        savedScrollPositions,\n        () => window.scrollY,\n        getKeyWithoutBasename\n      );\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n\n    // Restore scrolling when state.restoreScrollPosition changes\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      // Explicit false means don't do anything (used for submissions)\n      if (restoreScrollPosition === false) {\n        return;\n      }\n\n      // been here before, scroll to it\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n\n      // try to scroll to the hash\n      if (location.hash) {\n        let el = document.getElementById(\n          decodeURIComponent(location.hash.slice(1))\n        );\n        if (el) {\n          el.scrollIntoView();\n          return;\n        }\n      }\n\n      // Don't reset if this navigation opted out\n      if (preventScrollReset === true) {\n        return;\n      }\n\n      // otherwise go to the top on new locations\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\n\nexport { useScrollRestoration as UNSAFE_useScrollRestoration };\n\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nexport function useBeforeUnload(\n  callback: (event: BeforeUnloadEvent) => any,\n  options?: { capture?: boolean }\n): void {\n  let { capture } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? { capture } : undefined;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.  This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(\n  callback: (event: PageTransitionEvent) => any,\n  options?: { capture?: boolean }\n): void {\n  let { capture } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? { capture } : undefined;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open.  Use at your own risk.\n */\nfunction usePrompt({\n  when,\n  message,\n}: {\n  when: boolean | BlockerFunction;\n  message: string;\n}) {\n  let blocker = useBlocker(when);\n\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        // This timeout is needed to avoid a weird \"race\" on POP navigations\n        // between the `window.history` revert navigation and the result of\n        // `window.confirm`\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\n\nexport { usePrompt as unstable_usePrompt };\n\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href.  You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(\n  to: To,\n  opts: { relative?: RelativeRoutingType } = {}\n) {\n  let vtContext = React.useContext(ViewTransitionContext);\n\n  invariant(\n    vtContext != null,\n    \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  \" +\n      \"Did you accidentally import `RouterProvider` from `react-router`?\"\n  );\n\n  let { basename } = useDataRouterContext(\n    DataRouterHook.useViewTransitionState\n  );\n  let path = useResolvedPath(to, { relative: opts.relative });\n  if (!vtContext.isTransitioning) {\n    return false;\n  }\n\n  let currentPath =\n    stripBasename(vtContext.currentLocation.pathname, basename) ||\n    vtContext.currentLocation.pathname;\n  let nextPath =\n    stripBasename(vtContext.nextLocation.pathname, basename) ||\n    vtContext.nextLocation.pathname;\n\n  // Transition is active if we're going to or coming from the indicated\n  // destination.  This ensures that other PUSH navigations that reverse\n  // an indicated transition apply.  I.e., on the list view you have:\n  //\n  //   <NavLink to=\"/details/1\" viewTransition>\n  //\n  // If you click the breadcrumb back to the list view:\n  //\n  //   <NavLink to=\"/list\" viewTransition>\n  //\n  // We should apply the transition because it's indicated as active going\n  // from /list -> /details/1 and therefore should be active on the reverse\n  // (even though this isn't strictly a POP reverse)\n  return (\n    matchPath(path.pathname, nextPath) != null ||\n    matchPath(path.pathname, currentPath) != null\n  );\n}\n\nexport { useViewTransitionState as useViewTransitionState };\n\n//#endregion\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nexport { _objectSpread2 as default };","'use strict';\n\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n    const str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n  let kind;\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) || (\n      isFunction(thing.append) && (\n        (kind = kindOf(thing)) === 'formdata' ||\n        // detect form-data instance\n        (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n      )\n    )\n  )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n  str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\nfunction findKey(obj, key) {\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const {caseless} = isContextDefined(this) && this || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    const targetKey = caseless && findKey(result, key) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else {\n      result[targetKey] = val;\n    }\n  }\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n  forEach(b, (val, key) => {\n    if (thisArg && isFunction(val)) {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  }, {allOwnKeys});\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  Object.defineProperty(constructor, 'super', {\n    value: superConstructor.prototype\n  });\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n  // eslint-disable-next-line func-names\n  return thing => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n    function replacer(m, p1, p2) {\n      return p1.toUpperCase() + p2;\n    }\n  );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n      };\n    }\n  });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach(value => {\n      obj[value] = true;\n    });\n  }\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      if(!('toJSON' in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  }\n\n  return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n  thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported ? ((token, callbacks) => {\n    _global.addEventListener(\"message\", ({source, data}) => {\n      if (source === _global && data === token) {\n        callbacks.length && callbacks.shift()();\n      }\n    }, false);\n\n    return (cb) => {\n      callbacks.push(cb);\n      _global.postMessage(token, \"*\");\n    }\n  })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n  typeof setImmediate === 'function',\n  isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n  queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n  } else {\n    this.stack = (new Error()).stack;\n  }\n\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  if (response) {\n    this.response = response;\n    this.status = response.status ? response.status : null;\n  }\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: utils.toJSONObject(this.config),\n      code: this.code,\n      status: this.status\n    };\n  }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED',\n  'ERR_NOT_SUPPORT',\n  'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n  const axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  }, prop => {\n    return prop !== 'isAxiosError';\n  });\n\n  AxiosError.call(axiosError, error.message, code, config, request, response);\n\n  axiosError.cause = error;\n\n  axiosError.name = error.name;\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path.concat(key).map(function each(token, i) {\n    // eslint-disable-next-line no-param-reassign\n    token = removeBrackets(token);\n    return !dots && i ? '[' + token + ']' : token;\n  }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(options, {\n    metaTokens: true,\n    dots: false,\n    indexes: false\n  }, false, function defined(option, source) {\n    // eslint-disable-next-line no-eq-null,eqeqeq\n    return !utils.isUndefined(source[option]);\n  });\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n        )) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) && formData.append(\n            // eslint-disable-next-line no-nested-ternary\n            indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n            convertValue(el)\n          );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n        formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n      );\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00'\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder ? function(value) {\n    return encoder.call(this, value, encode);\n  } : encode;\n\n  return this._pairs.map(function each(pair) {\n    return _encode(pair[0]) + '=' + _encode(pair[1]);\n  }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n  \n  const _encode = options && options.encode || encode;\n\n  if (utils.isFunction(options)) {\n    options = {\n      serialize: options\n    };\n  } \n\n  const serializeFn = options && options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params) ?\n      params.toString() :\n      new AxiosURLSearchParams(params, options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf(\"#\");\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [function transformRequest(data, headers) {\n    const contentType = headers.getContentType() || '';\n    const hasJSONContentType = contentType.indexOf('application/json') > -1;\n    const isObjectPayload = utils.isObject(data);\n\n    if (isObjectPayload && utils.isHTMLForm(data)) {\n      data = new FormData(data);\n    }\n\n    const isFormData = utils.isFormData(data);\n\n    if (isFormData) {\n      return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n    }\n\n    if (utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data) ||\n      utils.isReadableStream(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n      return data.toString();\n    }\n\n    let isFileList;\n\n    if (isObjectPayload) {\n      if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n        return toURLEncodedForm(data, this.formSerializer).toString();\n      }\n\n      if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n        const _FormData = this.env && this.env.FormData;\n\n        return toFormData(\n          isFileList ? {'files[]': data} : data,\n          _FormData && new _FormData(),\n          this.formSerializer\n        );\n      }\n    }\n\n    if (isObjectPayload || hasJSONContentType ) {\n      headers.setContentType('application/json', false);\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    const transitional = this.transitional || defaults.transitional;\n    const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    const JSONRequested = this.responseType === 'json';\n\n    if (utils.isResponse(data) || utils.isReadableStream(data)) {\n      return data;\n    }\n\n    if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n      const silentJSONParsing = transitional && transitional.silentJSONParsing;\n      const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*',\n      'Content-Type': undefined\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n    visitor: function(value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    }\n  }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n    i = line.indexOf(':');\n    key = line.substring(0, i).trim().toLowerCase();\n    val = line.substring(i + 1).trim();\n\n    if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n      return;\n    }\n\n    if (key === 'set-cookie') {\n      if (parsed[key]) {\n        parsed[key].push(val);\n      } else {\n        parsed[key] = [val];\n      }\n    } else {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header.trim()\n    .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach(methodName => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function(arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite)\n    } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isIterable(header)) {\n      let obj = {}, dest, key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw TypeError('Object iterator must return a key-value pair');\n        }\n\n        obj[key = entry[0]] = (dest = obj[key]) ?\n          (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n      }\n\n      setHeaders(obj, valueOrRewrite)\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n  }\n\n  getSetCookie() {\n    return this.get(\"set-cookie\") || [];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals = this[$internals] = (this[$internals] = {\n      accessors: {}\n    });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    }\n  }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn.apply(null, args);\n  }\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if ( passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs)\n        }, threshold - passed);\n      }\n    }\n  }\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle(e => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? (loaded / total) : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true\n    };\n\n    listener(data);\n  }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [(loaded) => throttled[0]({\n    lengthComputable,\n    total,\n    loaded\n  }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n  url = new URL(url, platform.origin);\n\n  return (\n    origin.protocol === url.protocol &&\n    origin.host === url.host &&\n    (isMSIE || origin.port === url.port)\n  );\n})(\n  new URL(platform.origin),\n  platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n  // Standard browser envs support document.cookie\n  {\n    write(name, value, expires, path, domain, secure) {\n      const cookie = [name + '=' + encodeURIComponent(value)];\n\n      utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n      utils.isString(path) && cookie.push('path=' + path);\n\n      utils.isString(domain) && cookie.push('domain=' + domain);\n\n      secure === true && cookie.push('secure');\n\n      document.cookie = cookie.join('; ');\n    },\n\n    read(name) {\n      const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n      return (match ? decodeURIComponent(match[3]) : null);\n    },\n\n    remove(name) {\n      this.write(name, '', Date.now() - 86400000);\n    }\n  }\n\n  :\n\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {},\n    read() {\n      return null;\n    },\n    remove() {}\n  };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({caseless}, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(a, b, prop , caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop , caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop , caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n  };\n\n  utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n    const merge = mergeMap[prop] || mergeDeepProperties;\n    const configValue = merge(config1[prop], config2[prop], prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set('Authorization', 'Basic ' +\n      btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n    );\n  }\n\n  let contentType;\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // Let the browser set it\n    } else if ((contentType = headers.getContentType()) !== false) {\n      // fix semicolon duplication issue for ReactNative FormData implementation\n      const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n      headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    const _config = resolveConfig(config);\n    let requestData = _config.data;\n    const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n    let {responseType, onUploadProgress, onDownloadProgress} = _config;\n    let onCanceled;\n    let uploadThrottled, downloadThrottled;\n    let flushUpload, flushDownload;\n\n    function done() {\n      flushUpload && flushUpload(); // flush events\n      flushDownload && flushDownload(); // flush events\n\n      _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n      _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n    }\n\n    let request = new XMLHttpRequest();\n\n    request.open(_config.method.toUpperCase(), _config.url, true);\n\n    // Set the request timeout in MS\n    request.timeout = _config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      const responseHeaders = AxiosHeaders.from(\n        'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n      );\n      const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n        request.responseText : request.response;\n      const response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config,\n        request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n      const transitional = _config.transitional || transitionalDefaults;\n      if (_config.timeoutErrorMessage) {\n        timeoutErrorMessage = _config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Remove Content-Type if data is undefined\n    requestData === undefined && requestHeaders.setContentType(null);\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n        request.setRequestHeader(key, val);\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(_config.withCredentials)) {\n      request.withCredentials = !!_config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = _config.responseType;\n    }\n\n    // Handle progress if needed\n    if (onDownloadProgress) {\n      ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n      request.addEventListener('progress', downloadThrottled);\n    }\n\n    // Not all browsers support upload events\n    if (onUploadProgress && request.upload) {\n      ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n      request.upload.addEventListener('progress', uploadThrottled);\n\n      request.upload.addEventListener('loadend', flushUpload);\n    }\n\n    if (_config.cancelToken || _config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = cancel => {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n        request.abort();\n        request = null;\n      };\n\n      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n      if (_config.signal) {\n        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    const protocol = parseProtocol(_config.url);\n\n    if (protocol && platform.protocols.indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData || null);\n  });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n  if (timeout || length) {\n    let controller = new AbortController();\n\n    let aborted;\n\n    const onabort = function (reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n      }\n    }\n\n    let timer = timeout && setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n    }, timeout)\n\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach(signal => {\n          signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n        });\n        signals = null;\n      }\n    }\n\n    signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n    const {signal} = controller;\n\n    signal.unsubscribe = () => utils.asap(unsubscribe);\n\n    return signal;\n  }\n}\n\nexport default composeSignals;\n","function _OverloadYield(e, d) {\n  this.v = e, this.k = d;\n}\nexport { _OverloadYield as default };","import OverloadYield from \"./OverloadYield.js\";\nfunction _wrapAsyncGenerator(e) {\n  return function () {\n    return new AsyncGenerator(e.apply(this, arguments));\n  };\n}\nfunction AsyncGenerator(e) {\n  var r, t;\n  function resume(r, t) {\n    try {\n      var n = e[r](t),\n        o = n.value,\n        u = o instanceof OverloadYield;\n      Promise.resolve(u ? o.v : o).then(function (t) {\n        if (u) {\n          var i = \"return\" === r ? \"return\" : \"next\";\n          if (!o.k || t.done) return resume(i, t);\n          t = e[i](t).value;\n        }\n        settle(n.done ? \"return\" : \"normal\", t);\n      }, function (e) {\n        resume(\"throw\", e);\n      });\n    } catch (e) {\n      settle(\"throw\", e);\n    }\n  }\n  function settle(e, n) {\n    switch (e) {\n      case \"return\":\n        r.resolve({\n          value: n,\n          done: !0\n        });\n        break;\n      case \"throw\":\n        r.reject(n);\n        break;\n      default:\n        r.resolve({\n          value: n,\n          done: !1\n        });\n    }\n    (r = r.next) ? resume(r.key, r.arg) : t = null;\n  }\n  this._invoke = function (e, n) {\n    return new Promise(function (o, u) {\n      var i = {\n        key: e,\n        arg: n,\n        resolve: o,\n        reject: u,\n        next: null\n      };\n      t ? t = t.next = i : (r = t = i, resume(e, n));\n    });\n  }, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n  return this;\n}, AsyncGenerator.prototype.next = function (e) {\n  return this._invoke(\"next\", e);\n}, AsyncGenerator.prototype[\"throw\"] = function (e) {\n  return this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype[\"return\"] = function (e) {\n  return this._invoke(\"return\", e);\n};\nexport { _wrapAsyncGenerator as default };","import OverloadYield from \"./OverloadYield.js\";\nfunction _awaitAsyncGenerator(e) {\n  return new OverloadYield(e, 0);\n}\nexport { _awaitAsyncGenerator as default };","import OverloadYield from \"./OverloadYield.js\";\nfunction _asyncGeneratorDelegate(t) {\n  var e = {},\n    n = !1;\n  function pump(e, r) {\n    return n = !0, r = new Promise(function (n) {\n      n(t[e](r));\n    }), {\n      done: !1,\n      value: new OverloadYield(r, 1)\n    };\n  }\n  return e[\"undefined\" != typeof Symbol && Symbol.iterator || \"@@iterator\"] = function () {\n    return this;\n  }, e.next = function (t) {\n    return n ? (n = !1, t) : pump(\"next\", t);\n  }, \"function\" == typeof t[\"throw\"] && (e[\"throw\"] = function (t) {\n    if (n) throw n = !1, t;\n    return pump(\"throw\", t);\n  }), \"function\" == typeof t[\"return\"] && (e[\"return\"] = function (t) {\n    return n ? (n = !1, t) : pump(\"return\", t);\n  }), e;\n}\nexport { _asyncGeneratorDelegate as default };","function _asyncIterator(r) {\n  var n,\n    t,\n    o,\n    e = 2;\n  for (\"undefined\" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {\n    if (t && null != (n = r[t])) return n.call(r);\n    if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));\n    t = \"@@asyncIterator\", o = \"@@iterator\";\n  }\n  throw new TypeError(\"Object is not async iterable\");\n}\nfunction AsyncFromSyncIterator(r) {\n  function AsyncFromSyncIteratorContinuation(r) {\n    if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\"));\n    var n = r.done;\n    return Promise.resolve(r.value).then(function (r) {\n      return {\n        value: r,\n        done: n\n      };\n    });\n  }\n  return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) {\n    this.s = r, this.n = r.next;\n  }, AsyncFromSyncIterator.prototype = {\n    s: null,\n    n: null,\n    next: function next() {\n      return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n    },\n    \"return\": function _return(r) {\n      var n = this.s[\"return\"];\n      return void 0 === n ? Promise.resolve({\n        value: r,\n        done: !0\n      }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n    },\n    \"throw\": function _throw(r) {\n      var n = this.s[\"return\"];\n      return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n    }\n  }, new AsyncFromSyncIterator(r);\n}\nexport { _asyncIterator as default };","\nexport const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n}\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const {done, value} = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  }\n\n  return new ReadableStream({\n    async pull(controller) {\n      try {\n        const {done, value} = await iterator.next();\n\n        if (done) {\n         _onFinish();\n          controller.close();\n          return;\n        }\n\n        let len = value.byteLength;\n        if (onProgress) {\n          let loadedBytes = bytes += len;\n          onProgress(loadedBytes);\n        }\n        controller.enqueue(new Uint8Array(value));\n      } catch (err) {\n        _onFinish(err);\n        throw err;\n      }\n    },\n    cancel(reason) {\n      _onFinish(reason);\n      return iterator.return();\n    }\n  }, {\n    highWaterMark: 2\n  })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n    ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n    async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false\n  }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n  let duplexAccessed = false;\n\n  const hasContentType = new Request(platform.origin, {\n    body: new ReadableStream(),\n    method: 'POST',\n    get duplex() {\n      duplexAccessed = true;\n      return 'half';\n    },\n  }).headers.has('Content-Type');\n\n  return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n  test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n  stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n  ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n    !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n      (_, config) => {\n        throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n      })\n  });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n  if (body == null) {\n    return 0;\n  }\n\n  if(utils.isBlob(body)) {\n    return body.size;\n  }\n\n  if(utils.isSpecCompliantForm(body)) {\n    const _request = new Request(platform.origin, {\n      method: 'POST',\n      body,\n    });\n    return (await _request.arrayBuffer()).byteLength;\n  }\n\n  if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n    return body.byteLength;\n  }\n\n  if(utils.isURLSearchParams(body)) {\n    body = body + '';\n  }\n\n  if(utils.isString(body)) {\n    return (await encodeText(body)).byteLength;\n  }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n  const length = utils.toFiniteNumber(headers.getContentLength());\n\n  return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n  let {\n    url,\n    method,\n    data,\n    signal,\n    cancelToken,\n    timeout,\n    onDownloadProgress,\n    onUploadProgress,\n    responseType,\n    headers,\n    withCredentials = 'same-origin',\n    fetchOptions\n  } = resolveConfig(config);\n\n  responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n  let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n  let request;\n\n  const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n      composedSignal.unsubscribe();\n  });\n\n  let requestContentLength;\n\n  try {\n    if (\n      onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n      (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n    ) {\n      let _request = new Request(url, {\n        method: 'POST',\n        body: data,\n        duplex: \"half\"\n      });\n\n      let contentTypeHeader;\n\n      if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n        headers.setContentType(contentTypeHeader)\n      }\n\n      if (_request.body) {\n        const [onProgress, flush] = progressEventDecorator(\n          requestContentLength,\n          progressEventReducer(asyncDecorator(onUploadProgress))\n        );\n\n        data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n      }\n    }\n\n    if (!utils.isString(withCredentials)) {\n      withCredentials = withCredentials ? 'include' : 'omit';\n    }\n\n    // Cloudflare Workers throws when credentials are defined\n    // see https://github.com/cloudflare/workerd/issues/902\n    const isCredentialsSupported = \"credentials\" in Request.prototype;\n    request = new Request(url, {\n      ...fetchOptions,\n      signal: composedSignal,\n      method: method.toUpperCase(),\n      headers: headers.normalize().toJSON(),\n      body: data,\n      duplex: \"half\",\n      credentials: isCredentialsSupported ? withCredentials : undefined\n    });\n\n    let response = await fetch(request);\n\n    const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n    if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n      const options = {};\n\n      ['status', 'statusText', 'headers'].forEach(prop => {\n        options[prop] = response[prop];\n      });\n\n      const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n      const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n        responseContentLength,\n        progressEventReducer(asyncDecorator(onDownloadProgress), true)\n      ) || [];\n\n      response = new Response(\n        trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n          flush && flush();\n          unsubscribe && unsubscribe();\n        }),\n        options\n      );\n    }\n\n    responseType = responseType || 'text';\n\n    let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n    !isStreamResponse && unsubscribe && unsubscribe();\n\n    return await new Promise((resolve, reject) => {\n      settle(resolve, reject, {\n        data: responseData,\n        headers: AxiosHeaders.from(response.headers),\n        status: response.status,\n        statusText: response.statusText,\n        config,\n        request\n      })\n    })\n  } catch (err) {\n    unsubscribe && unsubscribe();\n\n    if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n      throw Object.assign(\n        new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n        {\n          cause: err.cause || err\n        }\n      )\n    }\n\n    throw AxiosError.from(err, err && err.code, config, request);\n  }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', {value});\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', {value});\n  }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n  getAdapter: (adapters) => {\n    adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n    const {length} = adapters;\n    let nameOrAdapter;\n    let adapter;\n\n    const rejectedReasons = {};\n\n    for (let i = 0; i < length; i++) {\n      nameOrAdapter = adapters[i];\n      let id;\n\n      adapter = nameOrAdapter;\n\n      if (!isResolvedHandle(nameOrAdapter)) {\n        adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n        if (adapter === undefined) {\n          throw new AxiosError(`Unknown adapter '${id}'`);\n        }\n      }\n\n      if (adapter) {\n        break;\n      }\n\n      rejectedReasons[id || '#' + i] = adapter;\n    }\n\n    if (!adapter) {\n\n      const reasons = Object.entries(rejectedReasons)\n        .map(([id, state]) => `adapter ${id} ` +\n          (state === false ? 'is not supported by the environment' : 'is not available in the build')\n        );\n\n      let s = length ?\n        (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n        'as no adapter specified';\n\n      throw new AxiosError(\n        `There is no suitable adapter to dispatch the request ` + s,\n        'ERR_NOT_SUPPORT'\n      );\n    }\n\n    return adapter;\n  },\n  adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.transformRequest\n  );\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      config.transformResponse,\n      response\n    );\n\n    response.headers = AxiosHeaders.from(response.headers);\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          config.transformResponse,\n          reason.response\n        );\n        reason.response.headers = AxiosHeaders.from(reason.response.headers);\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n}\n","export const VERSION = \"1.9.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager()\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n            err.stack += '\\n' + stack\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const {transitional, paramsSerializer, headers} = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(transitional, {\n        silentJSONParsing: validators.transitional(validators.boolean),\n        forcedJSONParsing: validators.transitional(validators.boolean),\n        clarifyTimeoutError: validators.transitional(validators.boolean)\n      }, false);\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer\n        }\n      } else {\n        validator.assertOptions(paramsSerializer, {\n          encode: validators.function,\n          serialize: validators.function\n        }, true);\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(config, {\n      baseUrl: validators.spelling('baseURL'),\n      withXsrfToken: validators.spelling('withXSRFToken')\n    }, true);\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(\n      headers.common,\n      headers[config.method]\n    );\n\n    headers && utils.forEach(\n      ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n      (method) => {\n        delete headers[method];\n      }\n    );\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift.apply(chain, requestInterceptorChain);\n      chain.push.apply(chain, responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    i = 0;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method,\n      url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url,\n        data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then(cancel => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = onfulfilled => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise(resolve => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel\n    };\n  }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n  // Copy context to instance\n  utils.extend(instance, context, null, {allOwnKeys: true});\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","// src/api/auth.js\r\nimport axios from 'axios';\r\n\r\n// 创建并导出 axios 实例\r\nexport const api = axios.create({\r\n  baseURL: 'http://localhost:8088',\r\n  timeout: 5000,\r\n});\r\n\r\n// 请求拦截器\r\napi.interceptors.request.use(config => {\r\n  const token = localStorage.getItem('token');\r\n  if (token) {\r\n    config.headers.Authorization = `Bearer ${token}`;\r\n  }\r\n  return config;\r\n});\r\n\r\nexport const login = async (username, password) => {\r\n  const response = await api.post('/user/login', null, {\r\n    params: { username, password }\r\n  });\r\n  if (response.data.code === 200 && response.data.data.token) {\r\n    localStorage.setItem('token', response.data.data.token);\r\n  }\r\n  return response;\r\n};\r\n\r\nexport const register = (username, password, code) => {\r\n  return api.post('/user/regist', null, {\r\n    params: { username, password, code }\r\n  });\r\n};\r\n\r\nexport const getUserInfo = async () => {\r\n  try {\r\n    const response = await api.get('/user/userInfo');\r\n    if (response.data.code === 200) {\r\n      return response.data.data; \r\n    }\r\n    throw new Error(response.data.message || '获取用户信息失败');\r\n  } catch (error) {\r\n    console.error('获取用户信息失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\nexport const isAdmin = async () => {\r\n  try {\r\n    const userInfo = await getUserInfo();\r\n    return userInfo.authority === 'ADMIN';\r\n  } catch (error) {\r\n    console.error('检查管理员权限失败:', error);\r\n    return false;\r\n  }\r\n};\r\n","// src/api/torrent.js\r\nimport { api } from './auth'; // 复用已有的axios实例\r\n\r\n/**\r\n * 创建并上传一个种子\r\n * @param {File} file 种子文件 (.torrent)\r\n * @param {Object} bodyObj 包含种子信息的对象，格式如下：\r\n * {\r\n *   torrentName: \"测试下载\",\r\n *   description: \"A high-quality 1080p version of Example Movie.\",\r\n *   category: \"电影\",\r\n *   region: \"USA\",\r\n *   resolution: \"1080p\",\r\n *   subtitle: \"English\",\r\n *   filePath: \"D:/大学/大三_下/torrentFrom/[电影天堂www.dytt89.com]两杆大烟枪BD中英双字.mp4.torrent\"\r\n * }\r\n */\r\nexport async function createTorrent(file, bodyObj) {\r\n  const formData = new FormData();\r\n  formData.append('file', file);\r\n\r\n  // 关键修改：将JSON字符串转换为Blob对象，并设置正确的Content-Type\r\n  formData.append('body', new Blob([JSON.stringify(bodyObj)], {\r\n    type: 'application/json'\r\n  }));\r\n\r\n  try {\r\n    const response = await api.post('/torrent', formData, {\r\n      headers: {\r\n      }\r\n    });\r\n    return response.data;\r\n  } catch (error) {\r\n    console.error('上传种子失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n/**\r\n * 下载种子文件\r\n * @param {number} torrentId 种子ID\r\n * @param {string} downloadPath 下载路径\r\n */\r\nexport async function downloadTorrent(torrentId, downloadPath) {\r\n  try {\r\n    const response = await api.get(`/torrent/downloadTorrent`, {\r\n      params: {\r\n        id: torrentId,\r\n        downloadPath: downloadPath\r\n      }\r\n    });\r\n    return response.data;\r\n  } catch (error) {\r\n    console.error('下载种子失败:', error);\r\n    throw error;\r\n  }\r\n}\r\n\r\n/**\r\n * 获取下载进度\r\n */\r\nexport async function getDownloadProgress() {\r\n  try {\r\n    const response = await api.get('/torrent/getProgress');\r\n    return response.data;\r\n  } catch (error) {\r\n    console.error('获取下载进度失败:', error);\r\n    throw error;\r\n  }\r\n}\r\n\r\nexport const getTorrents = (page = 1, size = 5) => {\r\n  return api.get('/torrent', {\r\n    params: { page, size }\r\n  });\r\n};\r\n\r\nexport const getTorrentDetail = (torrentId) => {\r\n  return api.get(`/torrent/${torrentId}`).then(response => {\r\n    // 确保数据结构一致\r\n    if (response.data && response.data.data) {\r\n      return {\r\n        ...response,\r\n        data: {\r\n          ...response.data,\r\n          data: {\r\n            torrent: response.data.data.torrent, // 直接使用后端返回的格式化数据\r\n            comments: response.data.data.comments || []\r\n          }\r\n        }\r\n      };\r\n    }\r\n    return response;\r\n  });\r\n};\r\n\r\nexport const likeTorrent = (torrentId) => {\r\n  return api.post(`/torrent/${torrentId}/like`);\r\n};\r\n\r\nexport const addTorrentComment = (torrentId, commentData) => {\r\n  return api.post(`/torrent/${torrentId}/comments`, commentData);\r\n};\r\n\r\nexport const deleteTorrent = (torrentId) => {\r\n  return api.delete(`/torrent/deleteTorrent/${torrentId}`);\r\n};\r\n\r\n// // 上传种子接口\r\n// export const uploadTorrent = async (torrentFile, torrentData, onProgress) => {\r\n//   // 1. 基础验证\r\n//   if (!torrentFile || !torrentFile.name.endsWith('.torrent')) {\r\n//     throw new Error('请选择有效的.torrent文件');\r\n//   }\r\n\r\n//   // 2. 构建FormData\r\n//   const formData = new FormData();\r\n//   formData.append('file', torrentFile);\r\n  \r\n//   // 确保JSON内容使用正确的Content-Type\r\n//   const metadataBlob = new Blob(\r\n//     [JSON.stringify(torrentData)], \r\n//     { type: 'application/json' }\r\n//   );\r\n//   formData.append('body', metadataBlob);\r\n\r\n//   // 3. 获取认证token（根据你的实际存储方式调整）\r\n//   const token = localStorage.getItem('token') || '';\r\n\r\n//   try {\r\n//     const response = await api.post('/api/torrents', formData, {\r\n//       headers: {\r\n//         'Authorization': `Bearer ${token}`,\r\n//       },\r\n//       onUploadProgress: (progressEvent) => {\r\n//         if (onProgress && progressEvent.total) {\r\n//           const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total);\r\n//           onProgress(percent);\r\n//         }\r\n//       }\r\n//     });\r\n\r\n//     return response.data;\r\n//   } catch (error) {\r\n//     console.error('上传失败:', error);\r\n    \r\n//     // 增强错误处理\r\n//     let errorMessage = '上传失败';\r\n//     if (error.response) {\r\n//       errorMessage = error.response.data?.message || \r\n//                      `服务器错误: ${error.response.status}`;\r\n//     } else if (error.request) {\r\n//       errorMessage = '网络错误，请检查连接';\r\n//     }\r\n\r\n//     throw new Error(errorMessage);\r\n//   }\r\n// };\r\n\r\nexport const searchTorrents = (keyword, page = 1, size = 5) => {\r\n  return api.get('/torrent/search', {\r\n    params: { keyword, page, size }\r\n  });\r\n};","// src/api/helpPost.js\r\nimport { api } from './auth'; // 复用已有的axios实例\r\n\r\nexport const createHelpPost = (title, content, authorId, selectedImage) => {\r\n  // 创建 FormData 对象\r\n  const formData = new FormData();\r\n  formData.append('title', title);\r\n  formData.append('content', content);\r\n  formData.append('authorId', authorId);\r\n  \r\n  // 如果有图片，添加到 FormData\r\n  if (selectedImage) {\r\n    formData.append('image', selectedImage);\r\n  }\r\n\r\n  return api.post('/help/posts', formData);\r\n};\r\n\r\nexport const getHelpPosts = (page = 1, size = 5) => {\r\n  return api.get('/help/posts', {\r\n    params: { page, size }\r\n  });\r\n};\r\n\r\nexport const getHelpPostDetail = (postId) => {\r\n  return api.get(`/help/posts/${postId}`);\r\n};\r\n\r\nexport const likeHelpPost = (postId, data) => {\r\n  return api.post(`/help/posts/${postId}/like`, null, {\r\n    params: data\r\n  });\r\n};\r\n\r\nexport const addHelpPostComment = (postId, commentData) => {\r\n  \r\n\r\n  return api.post(`/help/posts/${postId}/comments`, commentData);\r\n};\r\n\r\nexport const deleteHelpPost = (postId, authorId) => {\r\n  return api.delete(`/help/posts/${postId}`, {\r\n    params: { authorId }\r\n  });\r\n};\r\n\r\n\r\nexport const searchHelpPosts = (keyword, page = 1, size = 5) => {\r\n  return api.get('/help/posts/search', {\r\n    params: { keyword, page, size }\r\n  });\r\n};","// src/api/requestPost.js\r\nimport { api } from './auth'; // 复用已有的axios实例\r\n\r\nexport const createRequestPost = (title, content, authorId, selectedImage) => {\r\n  // 创建 FormData 对象\r\n  const formData = new FormData();\r\n  formData.append('title', title);\r\n  formData.append('content', content);\r\n  formData.append('authorId', authorId);\r\n  \r\n  // 如果有图片，添加到 FormData\r\n  if (selectedImage) {\r\n    formData.append('image', selectedImage);\r\n  }\r\n\r\n  return api.post('/request/posts', formData);\r\n};\r\n\r\nexport const getRequestPosts = (page = 1, size = 5) => {\r\n  return api.get('/request/posts', {\r\n    params: { page, size }\r\n  });\r\n};\r\n\r\nexport const getRequestPostDetail = (postId) => {\r\n  return api.get(`/request/posts/${postId}`);\r\n};\r\n\r\nexport const likeRequestPost = (postId, data) => {\r\n  return api.post(`/request/posts/${postId}/like`, null, {\r\n    params: data\r\n  });\r\n};\r\n\r\nexport const addRequestPostComment = (postId, commentData) => {\r\n  \r\n\r\n  return api.post(`/request/posts/${postId}/comments`, commentData);\r\n};\r\n\r\nexport const deleteRequestPost = (postId, authorId) => {\r\n  return api.delete(`/request/posts/${postId}`, {\r\n    params: { authorId }\r\n  });\r\n};\r\n\r\n\r\nexport const searchRequestPosts = (keyword, page = 1, size = 5) => {\r\n  return api.get('/request/posts/search', {\r\n    params: { keyword, page, size }\r\n  });\r\n};","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nexport { _arrayLikeToArray as default };","function _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n  }\n}\nexport { _unsupportedIterableToArray as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n  return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","import React from 'react';\nexport const AppConfigContext = /*#__PURE__*/React.createContext({});\nconst AppContext = /*#__PURE__*/React.createContext({\n  message: {},\n  notification: {},\n  modal: {}\n});\nexport default AppContext;","import * as React from 'react';\nexport const defaultPrefixCls = 'ant';\nexport const defaultIconPrefixCls = 'anticon';\nexport const Variants = ['outlined', 'borderless', 'filled', 'underlined'];\nconst defaultGetPrefixCls = (suffixCls, customizePrefixCls) => {\n  if (customizePrefixCls) {\n    return customizePrefixCls;\n  }\n  return suffixCls ? `${defaultPrefixCls}-${suffixCls}` : defaultPrefixCls;\n};\n// zombieJ: 🚨 Do not pass `defaultRenderEmpty` here since it will cause circular dependency.\nexport const ConfigContext = /*#__PURE__*/React.createContext({\n  // We provide a default function for Context without provider\n  getPrefixCls: defaultGetPrefixCls,\n  iconPrefixCls: defaultIconPrefixCls\n});\nexport const {\n  Consumer: ConfigConsumer\n} = ConfigContext;\nconst EMPTY_OBJECT = {};\n/**\n * Get ConfigProvider configured component props.\n * This help to reduce bundle size for saving `?.` operator.\n * Do not use as `useMemo` deps since we do not cache the object here.\n *\n * NOTE: not refactor this with `useMemo` since memo will cost another memory space,\n * which will waste both compare calculation & memory.\n */\nexport function useComponentConfig(propName) {\n  const context = React.useContext(ConfigContext);\n  const {\n    getPrefixCls,\n    direction,\n    getPopupContainer\n  } = context;\n  const propValue = context[propName];\n  return Object.assign(Object.assign({\n    classNames: EMPTY_OBJECT,\n    styles: EMPTY_OBJECT\n  }, propValue), {\n    getPrefixCls,\n    direction,\n    getPopupContainer\n  });\n}","function _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n  return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","function _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nexport { _iterableToArrayLimit as default };","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","export default function canUseDom() {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport canUseDom from \"./canUseDom\";\nimport contains from \"./contains\";\nvar APPEND_ORDER = 'data-rc-order';\nvar APPEND_PRIORITY = 'data-rc-priority';\nvar MARK_KEY = \"rc-util-key\";\nvar containerCache = new Map();\nfunction getMark() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n    mark = _ref.mark;\n  if (mark) {\n    return mark.startsWith('data-') ? mark : \"data-\".concat(mark);\n  }\n  return MARK_KEY;\n}\nfunction getContainer(option) {\n  if (option.attachTo) {\n    return option.attachTo;\n  }\n  var head = document.querySelector('head');\n  return head || document.body;\n}\nfunction getOrder(prepend) {\n  if (prepend === 'queue') {\n    return 'prependQueue';\n  }\n  return prepend ? 'prepend' : 'append';\n}\n\n/**\n * Find style which inject by rc-util\n */\nfunction findStyles(container) {\n  return Array.from((containerCache.get(container) || container).children).filter(function (node) {\n    return node.tagName === 'STYLE';\n  });\n}\nexport function injectCSS(css) {\n  var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (!canUseDom()) {\n    return null;\n  }\n  var csp = option.csp,\n    prepend = option.prepend,\n    _option$priority = option.priority,\n    priority = _option$priority === void 0 ? 0 : _option$priority;\n  var mergedOrder = getOrder(prepend);\n  var isPrependQueue = mergedOrder === 'prependQueue';\n  var styleNode = document.createElement('style');\n  styleNode.setAttribute(APPEND_ORDER, mergedOrder);\n  if (isPrependQueue && priority) {\n    styleNode.setAttribute(APPEND_PRIORITY, \"\".concat(priority));\n  }\n  if (csp !== null && csp !== void 0 && csp.nonce) {\n    styleNode.nonce = csp === null || csp === void 0 ? void 0 : csp.nonce;\n  }\n  styleNode.innerHTML = css;\n  var container = getContainer(option);\n  var firstChild = container.firstChild;\n  if (prepend) {\n    // If is queue `prepend`, it will prepend first style and then append rest style\n    if (isPrependQueue) {\n      var existStyle = (option.styles || findStyles(container)).filter(function (node) {\n        // Ignore style which not injected by rc-util with prepend\n        if (!['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER))) {\n          return false;\n        }\n\n        // Ignore style which priority less then new style\n        var nodePriority = Number(node.getAttribute(APPEND_PRIORITY) || 0);\n        return priority >= nodePriority;\n      });\n      if (existStyle.length) {\n        container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);\n        return styleNode;\n      }\n    }\n\n    // Use `insertBefore` as `prepend`\n    container.insertBefore(styleNode, firstChild);\n  } else {\n    container.appendChild(styleNode);\n  }\n  return styleNode;\n}\nfunction findExistNode(key) {\n  var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var container = getContainer(option);\n  return (option.styles || findStyles(container)).find(function (node) {\n    return node.getAttribute(getMark(option)) === key;\n  });\n}\nexport function removeCSS(key) {\n  var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var existNode = findExistNode(key, option);\n  if (existNode) {\n    var container = getContainer(option);\n    container.removeChild(existNode);\n  }\n}\n\n/**\n * qiankun will inject `appendChild` to insert into other\n */\nfunction syncRealContainer(container, option) {\n  var cachedRealContainer = containerCache.get(container);\n\n  // Find real container when not cached or cached container removed\n  if (!cachedRealContainer || !contains(document, cachedRealContainer)) {\n    var placeholderStyle = injectCSS('', option);\n    var parentNode = placeholderStyle.parentNode;\n    containerCache.set(container, parentNode);\n    container.removeChild(placeholderStyle);\n  }\n}\n\n/**\n * manually clear container cache to avoid global cache in unit testes\n */\nexport function clearContainerCache() {\n  containerCache.clear();\n}\nexport function updateCSS(css, key) {\n  var originOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var container = getContainer(originOption);\n  var styles = findStyles(container);\n  var option = _objectSpread(_objectSpread({}, originOption), {}, {\n    styles: styles\n  });\n\n  // Sync real parent\n  syncRealContainer(container, option);\n  var existNode = findExistNode(key, option);\n  if (existNode) {\n    var _option$csp, _option$csp2;\n    if ((_option$csp = option.csp) !== null && _option$csp !== void 0 && _option$csp.nonce && existNode.nonce !== ((_option$csp2 = option.csp) === null || _option$csp2 === void 0 ? void 0 : _option$csp2.nonce)) {\n      var _option$csp3;\n      existNode.nonce = (_option$csp3 = option.csp) === null || _option$csp3 === void 0 ? void 0 : _option$csp3.nonce;\n    }\n    if (existNode.innerHTML !== css) {\n      existNode.innerHTML = css;\n    }\n    return existNode;\n  }\n  var newNode = injectCSS(css, option);\n  newNode.setAttribute(getMark(option), key);\n  return newNode;\n}","export default function contains(root, n) {\n  if (!root) {\n    return false;\n  }\n\n  // Use native if support\n  if (root.contains) {\n    return root.contains(n);\n  }\n\n  // `document.contains` not support with IE11\n  var node = n;\n  while (node) {\n    if (node === root) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n  return false;\n}","import * as React from 'react';\nexport default function useMemo(getValue, condition, shouldUpdate) {\n  var cacheRef = React.useRef({});\n  if (!('value' in cacheRef.current) || shouldUpdate(cacheRef.current.condition, condition)) {\n    cacheRef.current.value = getValue();\n    cacheRef.current.condition = condition;\n  }\n  return cacheRef.current.value;\n}","/* eslint-disable no-console */\nvar warned = {};\nvar preWarningFns = [];\n\n/**\n * Pre warning enable you to parse content before console.error.\n * Modify to null will prevent warning.\n */\nexport var preMessage = function preMessage(fn) {\n  preWarningFns.push(fn);\n};\n\n/**\n * Warning if condition not match.\n * @param valid Condition\n * @param message Warning message\n * @example\n * ```js\n * warning(false, 'some error'); // print some error\n * warning(true, 'some error'); // print nothing\n * warning(1 === 2, 'some error'); // print some error\n * ```\n */\nexport function warning(valid, message) {\n  if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n    var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {\n      return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'warning');\n    }, message);\n    if (finalMessage) {\n      console.error(\"Warning: \".concat(finalMessage));\n    }\n  }\n}\n\n/** @see Similar to {@link warning} */\nexport function note(valid, message) {\n  if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n    var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {\n      return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'note');\n    }, message);\n    if (finalMessage) {\n      console.warn(\"Note: \".concat(finalMessage));\n    }\n  }\n}\nexport function resetWarned() {\n  warned = {};\n}\nexport function call(method, valid, message) {\n  if (!valid && !warned[message]) {\n    method(false, message);\n    warned[message] = true;\n  }\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nexport function warningOnce(valid, message) {\n  call(warning, valid, message);\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nexport function noteOnce(valid, message) {\n  call(note, valid, message);\n}\nwarningOnce.preMessage = preMessage;\nwarningOnce.resetWarned = resetWarned;\nwarningOnce.noteOnce = noteOnce;\nexport default warningOnce;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport warning from \"./warning\";\n\n/**\n * Deeply compares two object literals.\n * @param obj1 object 1\n * @param obj2 object 2\n * @param shallow shallow compare\n * @returns\n */\nfunction isEqual(obj1, obj2) {\n  var shallow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  // https://github.com/mapbox/mapbox-gl-js/pull/5979/files#diff-fde7145050c47cc3a306856efd5f9c3016e86e859de9afbd02c879be5067e58f\n  var refSet = new Set();\n  function deepEqual(a, b) {\n    var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n    var circular = refSet.has(a);\n    warning(!circular, 'Warning: There may be circular references');\n    if (circular) {\n      return false;\n    }\n    if (a === b) {\n      return true;\n    }\n    if (shallow && level > 1) {\n      return false;\n    }\n    refSet.add(a);\n    var newLevel = level + 1;\n    if (Array.isArray(a)) {\n      if (!Array.isArray(b) || a.length !== b.length) {\n        return false;\n      }\n      for (var i = 0; i < a.length; i++) {\n        if (!deepEqual(a[i], b[i], newLevel)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {\n      var keys = Object.keys(a);\n      if (keys.length !== Object.keys(b).length) {\n        return false;\n      }\n      return keys.every(function (key) {\n        return deepEqual(a[key], b[key], newLevel);\n      });\n    }\n    // other\n    return false;\n  }\n  return deepEqual(obj1, obj2);\n}\nexport default isEqual;","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nexport { _createClass as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// [times, realValue]\n\nvar SPLIT = '%';\n\n/** Connect key with `SPLIT` */\nexport function pathKey(keys) {\n  return keys.join(SPLIT);\n}\nvar Entity = /*#__PURE__*/function () {\n  function Entity(instanceId) {\n    _classCallCheck(this, Entity);\n    _defineProperty(this, \"instanceId\", void 0);\n    /** @private Internal cache map. Do not access this directly */\n    _defineProperty(this, \"cache\", new Map());\n    this.instanceId = instanceId;\n  }\n  _createClass(Entity, [{\n    key: \"get\",\n    value: function get(keys) {\n      return this.opGet(pathKey(keys));\n    }\n\n    /** A fast get cache with `get` concat. */\n  }, {\n    key: \"opGet\",\n    value: function opGet(keyPathStr) {\n      return this.cache.get(keyPathStr) || null;\n    }\n  }, {\n    key: \"update\",\n    value: function update(keys, valueFn) {\n      return this.opUpdate(pathKey(keys), valueFn);\n    }\n\n    /** A fast get cache with `get` concat. */\n  }, {\n    key: \"opUpdate\",\n    value: function opUpdate(keyPathStr, valueFn) {\n      var prevValue = this.cache.get(keyPathStr);\n      var nextValue = valueFn(prevValue);\n      if (nextValue === null) {\n        this.cache.delete(keyPathStr);\n      } else {\n        this.cache.set(keyPathStr, nextValue);\n      }\n    }\n  }]);\n  return Entity;\n}();\nexport default Entity;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport * as React from 'react';\nimport CacheEntity from \"./Cache\";\nexport var ATTR_TOKEN = 'data-token-hash';\nexport var ATTR_MARK = 'data-css-hash';\nexport var ATTR_CACHE_PATH = 'data-cache-path';\n\n// Mark css-in-js instance in style element\nexport var CSS_IN_JS_INSTANCE = '__cssinjs_instance__';\nexport function createCache() {\n  var cssinjsInstanceId = Math.random().toString(12).slice(2);\n\n  // Tricky SSR: Move all inline style to the head.\n  // PS: We do not recommend tricky mode.\n  if (typeof document !== 'undefined' && document.head && document.body) {\n    var styles = document.body.querySelectorAll(\"style[\".concat(ATTR_MARK, \"]\")) || [];\n    var firstChild = document.head.firstChild;\n    Array.from(styles).forEach(function (style) {\n      style[CSS_IN_JS_INSTANCE] = style[CSS_IN_JS_INSTANCE] || cssinjsInstanceId;\n\n      // Not force move if no head\n      if (style[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {\n        document.head.insertBefore(style, firstChild);\n      }\n    });\n\n    // Deduplicate of moved styles\n    var styleHash = {};\n    Array.from(document.querySelectorAll(\"style[\".concat(ATTR_MARK, \"]\"))).forEach(function (style) {\n      var hash = style.getAttribute(ATTR_MARK);\n      if (styleHash[hash]) {\n        if (style[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {\n          var _style$parentNode;\n          (_style$parentNode = style.parentNode) === null || _style$parentNode === void 0 || _style$parentNode.removeChild(style);\n        }\n      } else {\n        styleHash[hash] = true;\n      }\n    });\n  }\n  return new CacheEntity(cssinjsInstanceId);\n}\nvar StyleContext = /*#__PURE__*/React.createContext({\n  hashPriority: 'low',\n  cache: createCache(),\n  defaultCache: true\n});\nexport var StyleProvider = function StyleProvider(props) {\n  var children = props.children,\n    restProps = _objectWithoutProperties(props, _excluded);\n  var parentContext = React.useContext(StyleContext);\n  var context = useMemo(function () {\n    var mergedContext = _objectSpread({}, parentContext);\n    Object.keys(restProps).forEach(function (key) {\n      var value = restProps[key];\n      if (restProps[key] !== undefined) {\n        mergedContext[key] = value;\n      }\n    });\n    var cache = restProps.cache;\n    mergedContext.cache = mergedContext.cache || createCache();\n    mergedContext.defaultCache = !cache && parentContext.defaultCache;\n    return mergedContext;\n  }, [parentContext, restProps], function (prev, next) {\n    return !isEqual(prev[0], next[0], true) || !isEqual(prev[1], next[1], true);\n  });\n  return /*#__PURE__*/React.createElement(StyleContext.Provider, {\n    value: context\n  }, children);\n};\nexport default StyleContext;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar CALC_UNIT = 'CALC_UNIT';\nvar regexp = new RegExp(CALC_UNIT, 'g');\nfunction unit(value) {\n  if (typeof value === 'number') {\n    return \"\".concat(value).concat(CALC_UNIT);\n  }\n  return value;\n}\nvar CSSCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n  _inherits(CSSCalculator, _AbstractCalculator);\n  var _super = _createSuper(CSSCalculator);\n  function CSSCalculator(num, unitlessCssVar) {\n    var _this;\n    _classCallCheck(this, CSSCalculator);\n    _this = _super.call(this);\n    _defineProperty(_assertThisInitialized(_this), \"result\", '');\n    _defineProperty(_assertThisInitialized(_this), \"unitlessCssVar\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"lowPriority\", void 0);\n    var numType = _typeof(num);\n    _this.unitlessCssVar = unitlessCssVar;\n    if (num instanceof CSSCalculator) {\n      _this.result = \"(\".concat(num.result, \")\");\n    } else if (numType === 'number') {\n      _this.result = unit(num);\n    } else if (numType === 'string') {\n      _this.result = num;\n    }\n    return _this;\n  }\n  _createClass(CSSCalculator, [{\n    key: \"add\",\n    value: function add(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" + \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" + \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" - \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" - \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"mul\",\n    value: function mul(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" * \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" * \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"div\",\n    value: function div(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" / \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" / \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"getResult\",\n    value: function getResult(force) {\n      return this.lowPriority || force ? \"(\".concat(this.result, \")\") : this.result;\n    }\n  }, {\n    key: \"equal\",\n    value: function equal(options) {\n      var _this2 = this;\n      var _ref = options || {},\n        cssUnit = _ref.unit;\n      var mergedUnit = true;\n      if (typeof cssUnit === 'boolean') {\n        mergedUnit = cssUnit;\n      } else if (Array.from(this.unitlessCssVar).some(function (cssVar) {\n        return _this2.result.includes(cssVar);\n      })) {\n        mergedUnit = false;\n      }\n      this.result = this.result.replace(regexp, mergedUnit ? 'px' : '');\n      if (typeof this.lowPriority !== 'undefined') {\n        return \"calc(\".concat(this.result, \")\");\n      }\n      return this.result;\n    }\n  }]);\n  return CSSCalculator;\n}(AbstractCalculator);\nexport { CSSCalculator as default };","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// ================================== Cache ==================================\n\nexport function sameDerivativeOption(left, right) {\n  if (left.length !== right.length) {\n    return false;\n  }\n  for (var i = 0; i < left.length; i++) {\n    if (left[i] !== right[i]) {\n      return false;\n    }\n  }\n  return true;\n}\nvar ThemeCache = /*#__PURE__*/function () {\n  function ThemeCache() {\n    _classCallCheck(this, ThemeCache);\n    _defineProperty(this, \"cache\", void 0);\n    _defineProperty(this, \"keys\", void 0);\n    _defineProperty(this, \"cacheCallTimes\", void 0);\n    this.cache = new Map();\n    this.keys = [];\n    this.cacheCallTimes = 0;\n  }\n  _createClass(ThemeCache, [{\n    key: \"size\",\n    value: function size() {\n      return this.keys.length;\n    }\n  }, {\n    key: \"internalGet\",\n    value: function internalGet(derivativeOption) {\n      var _cache2, _cache3;\n      var updateCallTimes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var cache = {\n        map: this.cache\n      };\n      derivativeOption.forEach(function (derivative) {\n        if (!cache) {\n          cache = undefined;\n        } else {\n          var _cache;\n          cache = (_cache = cache) === null || _cache === void 0 || (_cache = _cache.map) === null || _cache === void 0 ? void 0 : _cache.get(derivative);\n        }\n      });\n      if ((_cache2 = cache) !== null && _cache2 !== void 0 && _cache2.value && updateCallTimes) {\n        cache.value[1] = this.cacheCallTimes++;\n      }\n      return (_cache3 = cache) === null || _cache3 === void 0 ? void 0 : _cache3.value;\n    }\n  }, {\n    key: \"get\",\n    value: function get(derivativeOption) {\n      var _this$internalGet;\n      return (_this$internalGet = this.internalGet(derivativeOption, true)) === null || _this$internalGet === void 0 ? void 0 : _this$internalGet[0];\n    }\n  }, {\n    key: \"has\",\n    value: function has(derivativeOption) {\n      return !!this.internalGet(derivativeOption);\n    }\n  }, {\n    key: \"set\",\n    value: function set(derivativeOption, value) {\n      var _this = this;\n      // New cache\n      if (!this.has(derivativeOption)) {\n        if (this.size() + 1 > ThemeCache.MAX_CACHE_SIZE + ThemeCache.MAX_CACHE_OFFSET) {\n          var _this$keys$reduce = this.keys.reduce(function (result, key) {\n              var _result = _slicedToArray(result, 2),\n                callTimes = _result[1];\n              if (_this.internalGet(key)[1] < callTimes) {\n                return [key, _this.internalGet(key)[1]];\n              }\n              return result;\n            }, [this.keys[0], this.cacheCallTimes]),\n            _this$keys$reduce2 = _slicedToArray(_this$keys$reduce, 1),\n            targetKey = _this$keys$reduce2[0];\n          this.delete(targetKey);\n        }\n        this.keys.push(derivativeOption);\n      }\n      var cache = this.cache;\n      derivativeOption.forEach(function (derivative, index) {\n        if (index === derivativeOption.length - 1) {\n          cache.set(derivative, {\n            value: [value, _this.cacheCallTimes++]\n          });\n        } else {\n          var cacheValue = cache.get(derivative);\n          if (!cacheValue) {\n            cache.set(derivative, {\n              map: new Map()\n            });\n          } else if (!cacheValue.map) {\n            cacheValue.map = new Map();\n          }\n          cache = cache.get(derivative).map;\n        }\n      });\n    }\n  }, {\n    key: \"deleteByPath\",\n    value: function deleteByPath(currentCache, derivatives) {\n      var cache = currentCache.get(derivatives[0]);\n      if (derivatives.length === 1) {\n        var _cache$value;\n        if (!cache.map) {\n          currentCache.delete(derivatives[0]);\n        } else {\n          currentCache.set(derivatives[0], {\n            map: cache.map\n          });\n        }\n        return (_cache$value = cache.value) === null || _cache$value === void 0 ? void 0 : _cache$value[0];\n      }\n      var result = this.deleteByPath(cache.map, derivatives.slice(1));\n      if ((!cache.map || cache.map.size === 0) && !cache.value) {\n        currentCache.delete(derivatives[0]);\n      }\n      return result;\n    }\n  }, {\n    key: \"delete\",\n    value: function _delete(derivativeOption) {\n      // If cache exists\n      if (this.has(derivativeOption)) {\n        this.keys = this.keys.filter(function (item) {\n          return !sameDerivativeOption(item, derivativeOption);\n        });\n        return this.deleteByPath(this.cache, derivativeOption);\n      }\n      return undefined;\n    }\n  }]);\n  return ThemeCache;\n}();\n_defineProperty(ThemeCache, \"MAX_CACHE_SIZE\", 20);\n_defineProperty(ThemeCache, \"MAX_CACHE_OFFSET\", 5);\nexport { ThemeCache as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { warning } from \"rc-util/es/warning\";\nvar uuid = 0;\n\n/**\n * Theme with algorithms to derive tokens from design tokens.\n * Use `createTheme` first which will help to manage the theme instance cache.\n */\nvar Theme = /*#__PURE__*/function () {\n  function Theme(derivatives) {\n    _classCallCheck(this, Theme);\n    _defineProperty(this, \"derivatives\", void 0);\n    _defineProperty(this, \"id\", void 0);\n    this.derivatives = Array.isArray(derivatives) ? derivatives : [derivatives];\n    this.id = uuid;\n    if (derivatives.length === 0) {\n      warning(derivatives.length > 0, '[Ant Design CSS-in-JS] Theme should have at least one derivative function.');\n    }\n    uuid += 1;\n  }\n  _createClass(Theme, [{\n    key: \"getDerivativeToken\",\n    value: function getDerivativeToken(token) {\n      return this.derivatives.reduce(function (result, derivative) {\n        return derivative(token, result);\n      }, undefined);\n    }\n  }]);\n  return Theme;\n}();\nexport { Theme as default };","import ThemeCache from \"./ThemeCache\";\nimport Theme from \"./Theme\";\nvar cacheThemes = new ThemeCache();\n\n/**\n * Same as new Theme, but will always return same one if `derivative` not changed.\n */\nexport default function createTheme(derivatives) {\n  var derivativeArr = Array.isArray(derivatives) ? derivatives : [derivatives];\n  // Create new theme if not exist\n  if (!cacheThemes.has(derivativeArr)) {\n    cacheThemes.set(derivativeArr, new Theme(derivativeArr));\n  }\n\n  // Get theme from cache and return\n  return cacheThemes.get(derivativeArr);\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport hash from '@emotion/hash';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { ATTR_MARK, ATTR_TOKEN } from \"../StyleContext\";\nimport { Theme } from \"../theme\";\n\n// Create a cache for memo concat\n\nvar resultCache = new WeakMap();\nvar RESULT_VALUE = {};\nexport function memoResult(callback, deps) {\n  var current = resultCache;\n  for (var i = 0; i < deps.length; i += 1) {\n    var dep = deps[i];\n    if (!current.has(dep)) {\n      current.set(dep, new WeakMap());\n    }\n    current = current.get(dep);\n  }\n  if (!current.has(RESULT_VALUE)) {\n    current.set(RESULT_VALUE, callback());\n  }\n  return current.get(RESULT_VALUE);\n}\n\n// Create a cache here to avoid always loop generate\nvar flattenTokenCache = new WeakMap();\n\n/**\n * Flatten token to string, this will auto cache the result when token not change\n */\nexport function flattenToken(token) {\n  var str = flattenTokenCache.get(token) || '';\n  if (!str) {\n    Object.keys(token).forEach(function (key) {\n      var value = token[key];\n      str += key;\n      if (value instanceof Theme) {\n        str += value.id;\n      } else if (value && _typeof(value) === 'object') {\n        str += flattenToken(value);\n      } else {\n        str += value;\n      }\n    });\n\n    // https://github.com/ant-design/ant-design/issues/48386\n    // Should hash the string to avoid style tag name too long\n    str = hash(str);\n\n    // Put in cache\n    flattenTokenCache.set(token, str);\n  }\n  return str;\n}\n\n/**\n * Convert derivative token to key string\n */\nexport function token2key(token, salt) {\n  return hash(\"\".concat(salt, \"_\").concat(flattenToken(token)));\n}\nvar randomSelectorKey = \"random-\".concat(Date.now(), \"-\").concat(Math.random()).replace(/\\./g, '');\n\n// Magic `content` for detect selector support\nvar checkContent = '_bAmBoO_';\nfunction supportSelector(styleStr, handleElement, supportCheck) {\n  if (canUseDom()) {\n    var _getComputedStyle$con, _ele$parentNode;\n    updateCSS(styleStr, randomSelectorKey);\n    var _ele = document.createElement('div');\n    _ele.style.position = 'fixed';\n    _ele.style.left = '0';\n    _ele.style.top = '0';\n    handleElement === null || handleElement === void 0 || handleElement(_ele);\n    document.body.appendChild(_ele);\n    if (process.env.NODE_ENV !== 'production') {\n      _ele.innerHTML = 'Test';\n      _ele.style.zIndex = '9999999';\n    }\n    var support = supportCheck ? supportCheck(_ele) : (_getComputedStyle$con = getComputedStyle(_ele).content) === null || _getComputedStyle$con === void 0 ? void 0 : _getComputedStyle$con.includes(checkContent);\n    (_ele$parentNode = _ele.parentNode) === null || _ele$parentNode === void 0 || _ele$parentNode.removeChild(_ele);\n    removeCSS(randomSelectorKey);\n    return support;\n  }\n  return false;\n}\nvar canLayer = undefined;\nexport function supportLayer() {\n  if (canLayer === undefined) {\n    canLayer = supportSelector(\"@layer \".concat(randomSelectorKey, \" { .\").concat(randomSelectorKey, \" { content: \\\"\").concat(checkContent, \"\\\"!important; } }\"), function (ele) {\n      ele.className = randomSelectorKey;\n    });\n  }\n  return canLayer;\n}\nvar canWhere = undefined;\nexport function supportWhere() {\n  if (canWhere === undefined) {\n    canWhere = supportSelector(\":where(.\".concat(randomSelectorKey, \") { content: \\\"\").concat(checkContent, \"\\\"!important; }\"), function (ele) {\n      ele.className = randomSelectorKey;\n    });\n  }\n  return canWhere;\n}\nvar canLogic = undefined;\nexport function supportLogicProps() {\n  if (canLogic === undefined) {\n    canLogic = supportSelector(\".\".concat(randomSelectorKey, \" { inset-block: 93px !important; }\"), function (ele) {\n      ele.className = randomSelectorKey;\n    }, function (ele) {\n      return getComputedStyle(ele).bottom === '93px';\n    });\n  }\n  return canLogic;\n}\nexport var isClientSide = canUseDom();\nexport function unit(num) {\n  if (typeof num === 'number') {\n    return \"\".concat(num, \"px\");\n  }\n  return num;\n}\nexport function toStyleStr(style, tokenKey, styleId) {\n  var _objectSpread2;\n  var customizeAttrs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var plain = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n  if (plain) {\n    return style;\n  }\n  var attrs = _objectSpread(_objectSpread({}, customizeAttrs), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, ATTR_TOKEN, tokenKey), _defineProperty(_objectSpread2, ATTR_MARK, styleId), _objectSpread2));\n  var attrStr = Object.keys(attrs).map(function (attr) {\n    var val = attrs[attr];\n    return val ? \"\".concat(attr, \"=\\\"\").concat(val, \"\\\"\") : null;\n  }).filter(function (v) {\n    return v;\n  }).join(' ');\n  return \"<style \".concat(attrStr, \">\").concat(style, \"</style>\");\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nexport var token2CSSVar = function token2CSSVar(token) {\n  var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  return \"--\".concat(prefix ? \"\".concat(prefix, \"-\") : '').concat(token).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();\n};\nexport var serializeCSSVar = function serializeCSSVar(cssVars, hashId, options) {\n  if (!Object.keys(cssVars).length) {\n    return '';\n  }\n  return \".\".concat(hashId).concat(options !== null && options !== void 0 && options.scope ? \".\".concat(options.scope) : '', \"{\").concat(Object.entries(cssVars).map(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n      key = _ref2[0],\n      value = _ref2[1];\n    return \"\".concat(key, \":\").concat(value, \";\");\n  }).join(''), \"}\");\n};\nexport var transformToken = function transformToken(token, themeKey, config) {\n  var cssVars = {};\n  var result = {};\n  Object.entries(token).forEach(function (_ref3) {\n    var _config$preserve, _config$ignore;\n    var _ref4 = _slicedToArray(_ref3, 2),\n      key = _ref4[0],\n      value = _ref4[1];\n    if (config !== null && config !== void 0 && (_config$preserve = config.preserve) !== null && _config$preserve !== void 0 && _config$preserve[key]) {\n      result[key] = value;\n    } else if ((typeof value === 'string' || typeof value === 'number') && !(config !== null && config !== void 0 && (_config$ignore = config.ignore) !== null && _config$ignore !== void 0 && _config$ignore[key])) {\n      var _config$unitless;\n      var cssVar = token2CSSVar(key, config === null || config === void 0 ? void 0 : config.prefix);\n      cssVars[cssVar] = typeof value === 'number' && !(config !== null && config !== void 0 && (_config$unitless = config.unitless) !== null && _config$unitless !== void 0 && _config$unitless[key]) ? \"\".concat(value, \"px\") : String(value);\n      result[key] = \"var(\".concat(cssVar, \")\");\n    }\n  });\n  return [result, serializeCSSVar(cssVars, themeKey, {\n    scope: config === null || config === void 0 ? void 0 : config.scope\n  })];\n};","import * as React from 'react';\nimport canUseDom from \"../Dom/canUseDom\";\n\n/**\n * Wrap `React.useLayoutEffect` which will not throw warning message in test env\n */\nvar useInternalLayoutEffect = process.env.NODE_ENV !== 'test' && canUseDom() ? React.useLayoutEffect : React.useEffect;\nvar useLayoutEffect = function useLayoutEffect(callback, deps) {\n  var firstMountRef = React.useRef(true);\n  useInternalLayoutEffect(function () {\n    return callback(firstMountRef.current);\n  }, deps);\n\n  // We tell react that first mount has passed\n  useInternalLayoutEffect(function () {\n    firstMountRef.current = false;\n    return function () {\n      firstMountRef.current = true;\n    };\n  }, []);\n};\nexport var useLayoutUpdateEffect = function useLayoutUpdateEffect(callback, deps) {\n  useLayoutEffect(function (firstMount) {\n    if (!firstMount) {\n      return callback();\n    }\n  }, deps);\n};\nexport default useLayoutEffect;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// import canUseDom from 'rc-util/lib/Dom/canUseDom';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport * as React from 'react';\n\n// We need fully clone React function here\n// to avoid webpack warning React 17 do not export `useId`\nvar fullClone = _objectSpread({}, React);\nvar useInsertionEffect = fullClone.useInsertionEffect;\n/**\n * Polyfill `useInsertionEffect` for React < 18\n * @param renderEffect will be executed in `useMemo`, and do not have callback\n * @param effect will be executed in `useLayoutEffect`\n * @param deps\n */\nvar useInsertionEffectPolyfill = function useInsertionEffectPolyfill(renderEffect, effect, deps) {\n  React.useMemo(renderEffect, deps);\n  useLayoutEffect(function () {\n    return effect(true);\n  }, deps);\n};\n\n/**\n * Compatible `useInsertionEffect`\n * will use `useInsertionEffect` if React version >= 18,\n * otherwise use `useInsertionEffectPolyfill`.\n */\nvar useCompatibleInsertionEffect = useInsertionEffect ? function (renderEffect, effect, deps) {\n  return useInsertionEffect(function () {\n    renderEffect();\n    return effect();\n  }, deps);\n} : useInsertionEffectPolyfill;\nexport default useCompatibleInsertionEffect;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { warning } from \"rc-util/es/warning\";\nimport * as React from 'react';\nvar fullClone = _objectSpread({}, React);\nvar useInsertionEffect = fullClone.useInsertionEffect;\n\n// DO NOT register functions in useEffect cleanup function, or functions that registered will never be called.\nvar useCleanupRegister = function useCleanupRegister(deps) {\n  var effectCleanups = [];\n  var cleanupFlag = false;\n  function register(fn) {\n    if (cleanupFlag) {\n      if (process.env.NODE_ENV !== 'production') {\n        warning(false, '[Ant Design CSS-in-JS] You are registering a cleanup function after unmount, which will not have any effect.');\n      }\n      return;\n    }\n    effectCleanups.push(fn);\n  }\n  React.useEffect(function () {\n    // Compatible with strict mode\n    cleanupFlag = false;\n    return function () {\n      cleanupFlag = true;\n      if (effectCleanups.length) {\n        effectCleanups.forEach(function (fn) {\n          return fn();\n        });\n      }\n    };\n  }, deps);\n  return register;\n};\nvar useRun = function useRun() {\n  return function (fn) {\n    fn();\n  };\n};\n\n// Only enable register in React 18\nvar useEffectCleanupRegister = typeof useInsertionEffect !== 'undefined' ? useCleanupRegister : useRun;\nexport default useEffectCleanupRegister;","function useProdHMR() {\n  return false;\n}\nvar webpackHMR = false;\nfunction useDevHMR() {\n  return webpackHMR;\n}\nexport default process.env.NODE_ENV === 'production' ? useProdHMR : useDevHMR;\n\n// Webpack `module.hot.accept` do not support any deps update trigger\n// We have to hack handler to force mark as HRM\nif (process.env.NODE_ENV !== 'production' && typeof module !== 'undefined' && module && module.hot && typeof window !== 'undefined') {\n  // Use `globalThis` first, and `window` for older browsers\n  // const win = globalThis as any;\n  var win = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : null;\n  if (win && typeof win.webpackHotUpdate === 'function') {\n    var originWebpackHotUpdate = win.webpackHotUpdate;\n    win.webpackHotUpdate = function () {\n      webpackHMR = true;\n      setTimeout(function () {\n        webpackHMR = false;\n      }, 0);\n      return originWebpackHotUpdate.apply(void 0, arguments);\n    };\n  }\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport { pathKey } from \"../Cache\";\nimport StyleContext from \"../StyleContext\";\nimport useCompatibleInsertionEffect from \"./useCompatibleInsertionEffect\";\nimport useEffectCleanupRegister from \"./useEffectCleanupRegister\";\nimport useHMR from \"./useHMR\";\nexport default function useGlobalCache(prefix, keyPath, cacheFn, onCacheRemove,\n// Add additional effect trigger by `useInsertionEffect`\nonCacheEffect) {\n  var _React$useContext = React.useContext(StyleContext),\n    globalCache = _React$useContext.cache;\n  var fullPath = [prefix].concat(_toConsumableArray(keyPath));\n  var fullPathStr = pathKey(fullPath);\n  var register = useEffectCleanupRegister([fullPathStr]);\n  var HMRUpdate = useHMR();\n  var buildCache = function buildCache(updater) {\n    globalCache.opUpdate(fullPathStr, function (prevCache) {\n      var _ref = prevCache || [undefined, undefined],\n        _ref2 = _slicedToArray(_ref, 2),\n        _ref2$ = _ref2[0],\n        times = _ref2$ === void 0 ? 0 : _ref2$,\n        cache = _ref2[1];\n\n      // HMR should always ignore cache since developer may change it\n      var tmpCache = cache;\n      if (process.env.NODE_ENV !== 'production' && cache && HMRUpdate) {\n        onCacheRemove === null || onCacheRemove === void 0 || onCacheRemove(tmpCache, HMRUpdate);\n        tmpCache = null;\n      }\n      var mergedCache = tmpCache || cacheFn();\n      var data = [times, mergedCache];\n\n      // Call updater if need additional logic\n      return updater ? updater(data) : data;\n    });\n  };\n\n  // Create cache\n  React.useMemo(function () {\n    buildCache();\n  }, /* eslint-disable react-hooks/exhaustive-deps */\n  [fullPathStr]\n  /* eslint-enable */);\n\n  var cacheEntity = globalCache.opGet(fullPathStr);\n\n  // HMR clean the cache but not trigger `useMemo` again\n  // Let's fallback of this\n  // ref https://github.com/ant-design/cssinjs/issues/127\n  if (process.env.NODE_ENV !== 'production' && !cacheEntity) {\n    buildCache();\n    cacheEntity = globalCache.opGet(fullPathStr);\n  }\n  var cacheContent = cacheEntity[1];\n\n  // Remove if no need anymore\n  useCompatibleInsertionEffect(function () {\n    onCacheEffect === null || onCacheEffect === void 0 || onCacheEffect(cacheContent);\n  }, function (polyfill) {\n    // It's bad to call build again in effect.\n    // But we have to do this since StrictMode will call effect twice\n    // which will clear cache on the first time.\n    buildCache(function (_ref3) {\n      var _ref4 = _slicedToArray(_ref3, 2),\n        times = _ref4[0],\n        cache = _ref4[1];\n      if (polyfill && times === 0) {\n        onCacheEffect === null || onCacheEffect === void 0 || onCacheEffect(cacheContent);\n      }\n      return [times + 1, cache];\n    });\n    return function () {\n      globalCache.opUpdate(fullPathStr, function (prevCache) {\n        var _ref5 = prevCache || [],\n          _ref6 = _slicedToArray(_ref5, 2),\n          _ref6$ = _ref6[0],\n          times = _ref6$ === void 0 ? 0 : _ref6$,\n          cache = _ref6[1];\n        var nextCount = times - 1;\n        if (nextCount === 0) {\n          // Always remove styles in useEffect callback\n          register(function () {\n            // With polyfill, registered callback will always be called synchronously\n            // But without polyfill, it will be called in effect clean up,\n            // And by that time this cache is cleaned up.\n            if (polyfill || !globalCache.opGet(fullPathStr)) {\n              onCacheRemove === null || onCacheRemove === void 0 || onCacheRemove(cache, false);\n            }\n          });\n          return null;\n        }\n        return [times - 1, cache];\n      });\n    };\n  }, [fullPathStr]);\n  return cacheContent;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport hash from '@emotion/hash';\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { useContext } from 'react';\nimport StyleContext, { ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { flattenToken, memoResult, token2key, toStyleStr } from \"../util\";\nimport { transformToken } from \"../util/css-variables\";\nimport useGlobalCache from \"./useGlobalCache\";\nvar EMPTY_OVERRIDE = {};\n\n// Generate different prefix to make user selector break in production env.\n// This helps developer not to do style override directly on the hash id.\nvar hashPrefix = process.env.NODE_ENV !== 'production' ? 'css-dev-only-do-not-override' : 'css';\nvar tokenKeys = new Map();\nfunction recordCleanToken(tokenKey) {\n  tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) + 1);\n}\nfunction removeStyleTags(key, instanceId) {\n  if (typeof document !== 'undefined') {\n    var styles = document.querySelectorAll(\"style[\".concat(ATTR_TOKEN, \"=\\\"\").concat(key, \"\\\"]\"));\n    styles.forEach(function (style) {\n      if (style[CSS_IN_JS_INSTANCE] === instanceId) {\n        var _style$parentNode;\n        (_style$parentNode = style.parentNode) === null || _style$parentNode === void 0 || _style$parentNode.removeChild(style);\n      }\n    });\n  }\n}\nvar TOKEN_THRESHOLD = 0;\n\n// Remove will check current keys first\nfunction cleanTokenStyle(tokenKey, instanceId) {\n  tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) - 1);\n  var tokenKeyList = Array.from(tokenKeys.keys());\n  var cleanableKeyList = tokenKeyList.filter(function (key) {\n    var count = tokenKeys.get(key) || 0;\n    return count <= 0;\n  });\n\n  // Should keep tokens under threshold for not to insert style too often\n  if (tokenKeyList.length - cleanableKeyList.length > TOKEN_THRESHOLD) {\n    cleanableKeyList.forEach(function (key) {\n      removeStyleTags(key, instanceId);\n      tokenKeys.delete(key);\n    });\n  }\n}\nexport var getComputedToken = function getComputedToken(originToken, overrideToken, theme, format) {\n  var derivativeToken = theme.getDerivativeToken(originToken);\n\n  // Merge with override\n  var mergedDerivativeToken = _objectSpread(_objectSpread({}, derivativeToken), overrideToken);\n\n  // Format if needed\n  if (format) {\n    mergedDerivativeToken = format(mergedDerivativeToken);\n  }\n  return mergedDerivativeToken;\n};\nexport var TOKEN_PREFIX = 'token';\n/**\n * Cache theme derivative token as global shared one\n * @param theme Theme entity\n * @param tokens List of tokens, used for cache. Please do not dynamic generate object directly\n * @param option Additional config\n * @returns Call Theme.getDerivativeToken(tokenObject) to get token\n */\nexport default function useCacheToken(theme, tokens) {\n  var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var _useContext = useContext(StyleContext),\n    instanceId = _useContext.cache.instanceId,\n    container = _useContext.container;\n  var _option$salt = option.salt,\n    salt = _option$salt === void 0 ? '' : _option$salt,\n    _option$override = option.override,\n    override = _option$override === void 0 ? EMPTY_OVERRIDE : _option$override,\n    formatToken = option.formatToken,\n    compute = option.getComputedToken,\n    cssVar = option.cssVar;\n\n  // Basic - We do basic cache here\n  var mergedToken = memoResult(function () {\n    return Object.assign.apply(Object, [{}].concat(_toConsumableArray(tokens)));\n  }, tokens);\n  var tokenStr = flattenToken(mergedToken);\n  var overrideTokenStr = flattenToken(override);\n  var cssVarStr = cssVar ? flattenToken(cssVar) : '';\n  var cachedToken = useGlobalCache(TOKEN_PREFIX, [salt, theme.id, tokenStr, overrideTokenStr, cssVarStr], function () {\n    var _cssVar$key;\n    var mergedDerivativeToken = compute ? compute(mergedToken, override, theme) : getComputedToken(mergedToken, override, theme, formatToken);\n\n    // Replace token value with css variables\n    var actualToken = _objectSpread({}, mergedDerivativeToken);\n    var cssVarsStr = '';\n    if (!!cssVar) {\n      var _transformToken = transformToken(mergedDerivativeToken, cssVar.key, {\n        prefix: cssVar.prefix,\n        ignore: cssVar.ignore,\n        unitless: cssVar.unitless,\n        preserve: cssVar.preserve\n      });\n      var _transformToken2 = _slicedToArray(_transformToken, 2);\n      mergedDerivativeToken = _transformToken2[0];\n      cssVarsStr = _transformToken2[1];\n    }\n\n    // Optimize for `useStyleRegister` performance\n    var tokenKey = token2key(mergedDerivativeToken, salt);\n    mergedDerivativeToken._tokenKey = tokenKey;\n    actualToken._tokenKey = token2key(actualToken, salt);\n    var themeKey = (_cssVar$key = cssVar === null || cssVar === void 0 ? void 0 : cssVar.key) !== null && _cssVar$key !== void 0 ? _cssVar$key : tokenKey;\n    mergedDerivativeToken._themeKey = themeKey;\n    recordCleanToken(themeKey);\n    var hashId = \"\".concat(hashPrefix, \"-\").concat(hash(tokenKey));\n    mergedDerivativeToken._hashId = hashId; // Not used\n\n    return [mergedDerivativeToken, hashId, actualToken, cssVarsStr, (cssVar === null || cssVar === void 0 ? void 0 : cssVar.key) || ''];\n  }, function (cache) {\n    // Remove token will remove all related style\n    cleanTokenStyle(cache[0]._themeKey, instanceId);\n  }, function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 4),\n      token = _ref2[0],\n      cssVarsStr = _ref2[3];\n    if (cssVar && cssVarsStr) {\n      var style = updateCSS(cssVarsStr, hash(\"css-variables-\".concat(token._themeKey)), {\n        mark: ATTR_MARK,\n        prepend: 'queue',\n        attachTo: container,\n        priority: -999\n      });\n      style[CSS_IN_JS_INSTANCE] = instanceId;\n\n      // Used for `useCacheToken` to remove on batch when token removed\n      style.setAttribute(ATTR_TOKEN, token._themeKey);\n    }\n  });\n  return cachedToken;\n}\nexport var extract = function extract(cache, effectStyles, options) {\n  var _cache = _slicedToArray(cache, 5),\n    realToken = _cache[2],\n    styleStr = _cache[3],\n    cssVarKey = _cache[4];\n  var _ref3 = options || {},\n    plain = _ref3.plain;\n  if (!styleStr) {\n    return null;\n  }\n  var styleId = realToken._tokenKey;\n  var order = -999;\n\n  // ====================== Style ======================\n  // Used for rc-util\n  var sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': \"\".concat(order)\n  };\n  var styleText = toStyleStr(styleStr, cssVarKey, styleId, sharedAttrs, plain);\n  return [order, styleId, styleText];\n};","function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","var unitlessKeys = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES, NAMESPACE} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case NAMESPACE: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, token, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tif ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== ' ') characters += ' '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length || (variable === 0 && previous === 47)))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// c(ontainer)\n\t\t\t\t\t\t\t\t\tcase 99:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 3) === 110) break\n\t\t\t\t\t\t\t\t\t// l(ayer)\n\t\t\t\t\t\t\t\t\tcase 108:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 2) === 97) break\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\toffset = 0\n\t\t\t\t\t\t\t\t\t// d(ocument) m(edia) s(upports)\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\telse parse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { ATTR_MARK } from \"../StyleContext\";\nexport var ATTR_CACHE_MAP = 'data-ant-cssinjs-cache-path';\n\n/**\n * This marks style from the css file.\n * Which means not exist in `<style />` tag.\n */\nexport var CSS_FILE_STYLE = '_FILE_STYLE__';\nexport function serialize(cachePathMap) {\n  return Object.keys(cachePathMap).map(function (path) {\n    var hash = cachePathMap[path];\n    return \"\".concat(path, \":\").concat(hash);\n  }).join(';');\n}\nvar cachePathMap;\nvar fromCSSFile = true;\n\n/**\n * @private Test usage only. Can save remove if no need.\n */\nexport function reset(mockCache) {\n  var fromFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  cachePathMap = mockCache;\n  fromCSSFile = fromFile;\n}\nexport function prepare() {\n  if (!cachePathMap) {\n    cachePathMap = {};\n    if (canUseDom()) {\n      var div = document.createElement('div');\n      div.className = ATTR_CACHE_MAP;\n      div.style.position = 'fixed';\n      div.style.visibility = 'hidden';\n      div.style.top = '-9999px';\n      document.body.appendChild(div);\n      var content = getComputedStyle(div).content || '';\n      content = content.replace(/^\"/, '').replace(/\"$/, '');\n\n      // Fill data\n      content.split(';').forEach(function (item) {\n        var _item$split = item.split(':'),\n          _item$split2 = _slicedToArray(_item$split, 2),\n          path = _item$split2[0],\n          hash = _item$split2[1];\n        cachePathMap[path] = hash;\n      });\n\n      // Remove inline record style\n      var inlineMapStyle = document.querySelector(\"style[\".concat(ATTR_CACHE_MAP, \"]\"));\n      if (inlineMapStyle) {\n        var _inlineMapStyle$paren;\n        fromCSSFile = false;\n        (_inlineMapStyle$paren = inlineMapStyle.parentNode) === null || _inlineMapStyle$paren === void 0 || _inlineMapStyle$paren.removeChild(inlineMapStyle);\n      }\n      document.body.removeChild(div);\n    }\n  }\n}\nexport function existPath(path) {\n  prepare();\n  return !!cachePathMap[path];\n}\nexport function getStyleAndHash(path) {\n  var hash = cachePathMap[path];\n  var styleStr = null;\n  if (hash && canUseDom()) {\n    if (fromCSSFile) {\n      styleStr = CSS_FILE_STYLE;\n    } else {\n      var _style = document.querySelector(\"style[\".concat(ATTR_MARK, \"=\\\"\").concat(cachePathMap[path], \"\\\"]\"));\n      if (_style) {\n        styleStr = _style.innerHTML;\n      } else {\n        // Clean up since not exist anymore\n        delete cachePathMap[path];\n      }\n    }\n  }\n  return [styleStr, hash];\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport hash from '@emotion/hash';\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport * as React from 'react';\n// @ts-ignore\nimport unitless from '@emotion/unitless';\nimport { compile, serialize, stringify } from 'stylis';\nimport { contentQuotesLinter, hashedAnimationLinter } from \"../linters\";\nimport StyleContext, { ATTR_CACHE_PATH, ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { isClientSide, toStyleStr } from \"../util\";\nimport { CSS_FILE_STYLE, existPath, getStyleAndHash } from \"../util/cacheMapUtil\";\nimport useGlobalCache from \"./useGlobalCache\";\nvar SKIP_CHECK = '_skip_check_';\nvar MULTI_VALUE = '_multi_value_';\n// ============================================================================\n// ==                                 Parser                                 ==\n// ============================================================================\n// Preprocessor style content to browser support one\nexport function normalizeStyle(styleStr) {\n  var serialized = serialize(compile(styleStr), stringify);\n  return serialized.replace(/\\{%%%\\:[^;];}/g, ';');\n}\nfunction isCompoundCSSProperty(value) {\n  return _typeof(value) === 'object' && value && (SKIP_CHECK in value || MULTI_VALUE in value);\n}\n\n// 注入 hash 值\nfunction injectSelectorHash(key, hashId, hashPriority) {\n  if (!hashId) {\n    return key;\n  }\n  var hashClassName = \".\".concat(hashId);\n  var hashSelector = hashPriority === 'low' ? \":where(\".concat(hashClassName, \")\") : hashClassName;\n\n  // 注入 hashId\n  var keys = key.split(',').map(function (k) {\n    var _firstPath$match;\n    var fullPath = k.trim().split(/\\s+/);\n\n    // 如果 Selector 第一个是 HTML Element，那我们就插到它的后面。反之，就插到最前面。\n    var firstPath = fullPath[0] || '';\n    var htmlElement = ((_firstPath$match = firstPath.match(/^\\w+/)) === null || _firstPath$match === void 0 ? void 0 : _firstPath$match[0]) || '';\n    firstPath = \"\".concat(htmlElement).concat(hashSelector).concat(firstPath.slice(htmlElement.length));\n    return [firstPath].concat(_toConsumableArray(fullPath.slice(1))).join(' ');\n  });\n  return keys.join(',');\n}\n// Parse CSSObject to style content\nexport var parseStyle = function parseStyle(interpolation) {\n  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n      root: true,\n      parentSelectors: []\n    },\n    root = _ref.root,\n    injectHash = _ref.injectHash,\n    parentSelectors = _ref.parentSelectors;\n  var hashId = config.hashId,\n    layer = config.layer,\n    path = config.path,\n    hashPriority = config.hashPriority,\n    _config$transformers = config.transformers,\n    transformers = _config$transformers === void 0 ? [] : _config$transformers,\n    _config$linters = config.linters,\n    linters = _config$linters === void 0 ? [] : _config$linters;\n  var styleStr = '';\n  var effectStyle = {};\n  function parseKeyframes(keyframes) {\n    var animationName = keyframes.getName(hashId);\n    if (!effectStyle[animationName]) {\n      var _parseStyle = parseStyle(keyframes.style, config, {\n          root: false,\n          parentSelectors: parentSelectors\n        }),\n        _parseStyle2 = _slicedToArray(_parseStyle, 1),\n        _parsedStr = _parseStyle2[0];\n      effectStyle[animationName] = \"@keyframes \".concat(keyframes.getName(hashId)).concat(_parsedStr);\n    }\n  }\n  function flattenList(list) {\n    var fullList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    list.forEach(function (item) {\n      if (Array.isArray(item)) {\n        flattenList(item, fullList);\n      } else if (item) {\n        fullList.push(item);\n      }\n    });\n    return fullList;\n  }\n  var flattenStyleList = flattenList(Array.isArray(interpolation) ? interpolation : [interpolation]);\n  flattenStyleList.forEach(function (originStyle) {\n    // Only root level can use raw string\n    var style = typeof originStyle === 'string' && !root ? {} : originStyle;\n    if (typeof style === 'string') {\n      styleStr += \"\".concat(style, \"\\n\");\n    } else if (style._keyframe) {\n      // Keyframe\n      parseKeyframes(style);\n    } else {\n      var mergedStyle = transformers.reduce(function (prev, trans) {\n        var _trans$visit;\n        return (trans === null || trans === void 0 || (_trans$visit = trans.visit) === null || _trans$visit === void 0 ? void 0 : _trans$visit.call(trans, prev)) || prev;\n      }, style);\n\n      // Normal CSSObject\n      Object.keys(mergedStyle).forEach(function (key) {\n        var value = mergedStyle[key];\n        if (_typeof(value) === 'object' && value && (key !== 'animationName' || !value._keyframe) && !isCompoundCSSProperty(value)) {\n          var subInjectHash = false;\n\n          // 当成嵌套对象来处理\n          var mergedKey = key.trim();\n          // Whether treat child as root. In most case it is false.\n          var nextRoot = false;\n\n          // 拆分多个选择器\n          if ((root || injectHash) && hashId) {\n            if (mergedKey.startsWith('@')) {\n              // 略过媒体查询，交给子节点继续插入 hashId\n              subInjectHash = true;\n            } else if (mergedKey === '&') {\n              // 抹掉 root selector 上的单个 &\n              mergedKey = injectSelectorHash('', hashId, hashPriority);\n            } else {\n              // 注入 hashId\n              mergedKey = injectSelectorHash(key, hashId, hashPriority);\n            }\n          } else if (root && !hashId && (mergedKey === '&' || mergedKey === '')) {\n            // In case of `{ '&': { a: { color: 'red' } } }` or `{ '': { a: { color: 'red' } } }` without hashId,\n            // we will get `&{a:{color:red;}}` or `{a:{color:red;}}` string for stylis to compile.\n            // But it does not conform to stylis syntax,\n            // and finally we will get `{color:red;}` as css, which is wrong.\n            // So we need to remove key in root, and treat child `{ a: { color: 'red' } }` as root.\n            mergedKey = '';\n            nextRoot = true;\n          }\n          var _parseStyle3 = parseStyle(value, config, {\n              root: nextRoot,\n              injectHash: subInjectHash,\n              parentSelectors: [].concat(_toConsumableArray(parentSelectors), [mergedKey])\n            }),\n            _parseStyle4 = _slicedToArray(_parseStyle3, 2),\n            _parsedStr2 = _parseStyle4[0],\n            childEffectStyle = _parseStyle4[1];\n          effectStyle = _objectSpread(_objectSpread({}, effectStyle), childEffectStyle);\n          styleStr += \"\".concat(mergedKey).concat(_parsedStr2);\n        } else {\n          var _value;\n          function appendStyle(cssKey, cssValue) {\n            if (process.env.NODE_ENV !== 'production' && (_typeof(value) !== 'object' || !(value !== null && value !== void 0 && value[SKIP_CHECK]))) {\n              [contentQuotesLinter, hashedAnimationLinter].concat(_toConsumableArray(linters)).forEach(function (linter) {\n                return linter(cssKey, cssValue, {\n                  path: path,\n                  hashId: hashId,\n                  parentSelectors: parentSelectors\n                });\n              });\n            }\n\n            // 如果是样式则直接插入\n            var styleName = cssKey.replace(/[A-Z]/g, function (match) {\n              return \"-\".concat(match.toLowerCase());\n            });\n\n            // Auto suffix with px\n            var formatValue = cssValue;\n            if (!unitless[cssKey] && typeof formatValue === 'number' && formatValue !== 0) {\n              formatValue = \"\".concat(formatValue, \"px\");\n            }\n\n            // handle animationName & Keyframe value\n            if (cssKey === 'animationName' && cssValue !== null && cssValue !== void 0 && cssValue._keyframe) {\n              parseKeyframes(cssValue);\n              formatValue = cssValue.getName(hashId);\n            }\n            styleStr += \"\".concat(styleName, \":\").concat(formatValue, \";\");\n          }\n          var actualValue = (_value = value === null || value === void 0 ? void 0 : value.value) !== null && _value !== void 0 ? _value : value;\n          if (_typeof(value) === 'object' && value !== null && value !== void 0 && value[MULTI_VALUE] && Array.isArray(actualValue)) {\n            actualValue.forEach(function (item) {\n              appendStyle(key, item);\n            });\n          } else {\n            appendStyle(key, actualValue);\n          }\n        }\n      });\n    }\n  });\n  if (!root) {\n    styleStr = \"{\".concat(styleStr, \"}\");\n  } else if (layer) {\n    // fixme: https://github.com/thysultan/stylis/pull/339\n    if (styleStr) {\n      styleStr = \"@layer \".concat(layer.name, \" {\").concat(styleStr, \"}\");\n    }\n    if (layer.dependencies) {\n      effectStyle[\"@layer \".concat(layer.name)] = layer.dependencies.map(function (deps) {\n        return \"@layer \".concat(deps, \", \").concat(layer.name, \";\");\n      }).join('\\n');\n    }\n  }\n  return [styleStr, effectStyle];\n};\n\n// ============================================================================\n// ==                                Register                                ==\n// ============================================================================\nexport function uniqueHash(path, styleStr) {\n  return hash(\"\".concat(path.join('%')).concat(styleStr));\n}\nfunction Empty() {\n  return null;\n}\nexport var STYLE_PREFIX = 'style';\n/**\n * Register a style to the global style sheet.\n */\nexport default function useStyleRegister(info, styleFn) {\n  var token = info.token,\n    path = info.path,\n    hashId = info.hashId,\n    layer = info.layer,\n    nonce = info.nonce,\n    clientOnly = info.clientOnly,\n    _info$order = info.order,\n    order = _info$order === void 0 ? 0 : _info$order;\n  var _React$useContext = React.useContext(StyleContext),\n    autoClear = _React$useContext.autoClear,\n    mock = _React$useContext.mock,\n    defaultCache = _React$useContext.defaultCache,\n    hashPriority = _React$useContext.hashPriority,\n    container = _React$useContext.container,\n    ssrInline = _React$useContext.ssrInline,\n    transformers = _React$useContext.transformers,\n    linters = _React$useContext.linters,\n    cache = _React$useContext.cache,\n    enableLayer = _React$useContext.layer;\n  var tokenKey = token._tokenKey;\n  var fullPath = [tokenKey];\n  if (enableLayer) {\n    fullPath.push('layer');\n  }\n  fullPath.push.apply(fullPath, _toConsumableArray(path));\n\n  // Check if need insert style\n  var isMergedClientSide = isClientSide;\n  if (process.env.NODE_ENV !== 'production' && mock !== undefined) {\n    isMergedClientSide = mock === 'client';\n  }\n  var _useGlobalCache = useGlobalCache(STYLE_PREFIX, fullPath,\n    // Create cache if needed\n    function () {\n      var cachePath = fullPath.join('|');\n\n      // Get style from SSR inline style directly\n      if (existPath(cachePath)) {\n        var _getStyleAndHash = getStyleAndHash(cachePath),\n          _getStyleAndHash2 = _slicedToArray(_getStyleAndHash, 2),\n          inlineCacheStyleStr = _getStyleAndHash2[0],\n          styleHash = _getStyleAndHash2[1];\n        if (inlineCacheStyleStr) {\n          return [inlineCacheStyleStr, tokenKey, styleHash, {}, clientOnly, order];\n        }\n      }\n\n      // Generate style\n      var styleObj = styleFn();\n      var _parseStyle5 = parseStyle(styleObj, {\n          hashId: hashId,\n          hashPriority: hashPriority,\n          layer: enableLayer ? layer : undefined,\n          path: path.join('-'),\n          transformers: transformers,\n          linters: linters\n        }),\n        _parseStyle6 = _slicedToArray(_parseStyle5, 2),\n        parsedStyle = _parseStyle6[0],\n        effectStyle = _parseStyle6[1];\n      var styleStr = normalizeStyle(parsedStyle);\n      var styleId = uniqueHash(fullPath, styleStr);\n      return [styleStr, tokenKey, styleId, effectStyle, clientOnly, order];\n    },\n    // Remove cache if no need\n    function (_ref2, fromHMR) {\n      var _ref3 = _slicedToArray(_ref2, 3),\n        styleId = _ref3[2];\n      if ((fromHMR || autoClear) && isClientSide) {\n        removeCSS(styleId, {\n          mark: ATTR_MARK\n        });\n      }\n    },\n    // Effect: Inject style here\n    function (_ref4) {\n      var _ref5 = _slicedToArray(_ref4, 4),\n        styleStr = _ref5[0],\n        _ = _ref5[1],\n        styleId = _ref5[2],\n        effectStyle = _ref5[3];\n      if (isMergedClientSide && styleStr !== CSS_FILE_STYLE) {\n        var mergedCSSConfig = {\n          mark: ATTR_MARK,\n          prepend: enableLayer ? false : 'queue',\n          attachTo: container,\n          priority: order\n        };\n        var nonceStr = typeof nonce === 'function' ? nonce() : nonce;\n        if (nonceStr) {\n          mergedCSSConfig.csp = {\n            nonce: nonceStr\n          };\n        }\n\n        // ================= Split Effect Style =================\n        // We will split effectStyle here since @layer should be at the top level\n        var effectLayerKeys = [];\n        var effectRestKeys = [];\n        Object.keys(effectStyle).forEach(function (key) {\n          if (key.startsWith('@layer')) {\n            effectLayerKeys.push(key);\n          } else {\n            effectRestKeys.push(key);\n          }\n        });\n\n        // ================= Inject Layer Style =================\n        // Inject layer style\n        effectLayerKeys.forEach(function (effectKey) {\n          updateCSS(normalizeStyle(effectStyle[effectKey]), \"_layer-\".concat(effectKey), _objectSpread(_objectSpread({}, mergedCSSConfig), {}, {\n            prepend: true\n          }));\n        });\n\n        // ==================== Inject Style ====================\n        // Inject style\n        var style = updateCSS(styleStr, styleId, mergedCSSConfig);\n        style[CSS_IN_JS_INSTANCE] = cache.instanceId;\n\n        // Used for `useCacheToken` to remove on batch when token removed\n        style.setAttribute(ATTR_TOKEN, tokenKey);\n\n        // Debug usage. Dev only\n        if (process.env.NODE_ENV !== 'production') {\n          style.setAttribute(ATTR_CACHE_PATH, fullPath.join('|'));\n        }\n\n        // ================ Inject Effect Style =================\n        // Inject client side effect style\n        effectRestKeys.forEach(function (effectKey) {\n          updateCSS(normalizeStyle(effectStyle[effectKey]), \"_effect-\".concat(effectKey), mergedCSSConfig);\n        });\n      }\n    }),\n    _useGlobalCache2 = _slicedToArray(_useGlobalCache, 3),\n    cachedStyleStr = _useGlobalCache2[0],\n    cachedTokenKey = _useGlobalCache2[1],\n    cachedStyleId = _useGlobalCache2[2];\n  return function (node) {\n    var styleNode;\n    if (!ssrInline || isMergedClientSide || !defaultCache) {\n      styleNode = /*#__PURE__*/React.createElement(Empty, null);\n    } else {\n      var _ref6;\n      styleNode = /*#__PURE__*/React.createElement(\"style\", _extends({}, (_ref6 = {}, _defineProperty(_ref6, ATTR_TOKEN, cachedTokenKey), _defineProperty(_ref6, ATTR_MARK, cachedStyleId), _ref6), {\n        dangerouslySetInnerHTML: {\n          __html: cachedStyleStr\n        }\n      }));\n    }\n    return /*#__PURE__*/React.createElement(React.Fragment, null, styleNode, node);\n  };\n}\nexport var extract = function extract(cache, effectStyles, options) {\n  var _cache = _slicedToArray(cache, 6),\n    styleStr = _cache[0],\n    tokenKey = _cache[1],\n    styleId = _cache[2],\n    effectStyle = _cache[3],\n    clientOnly = _cache[4],\n    order = _cache[5];\n  var _ref7 = options || {},\n    plain = _ref7.plain;\n\n  // Skip client only style\n  if (clientOnly) {\n    return null;\n  }\n  var keyStyleText = styleStr;\n\n  // ====================== Share ======================\n  // Used for rc-util\n  var sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': \"\".concat(order)\n  };\n\n  // ====================== Style ======================\n  keyStyleText = toStyleStr(styleStr, tokenKey, styleId, sharedAttrs, plain);\n\n  // =============== Create effect style ===============\n  if (effectStyle) {\n    Object.keys(effectStyle).forEach(function (effectKey) {\n      // Effect style can be reused\n      if (!effectStyles[effectKey]) {\n        effectStyles[effectKey] = true;\n        var effectStyleStr = normalizeStyle(effectStyle[effectKey]);\n        var effectStyleHTML = toStyleStr(effectStyleStr, tokenKey, \"_effect-\".concat(effectKey), sharedAttrs, plain);\n        if (effectKey.startsWith('@layer')) {\n          keyStyleText = effectStyleHTML + keyStyleText;\n        } else {\n          keyStyleText += effectStyleHTML;\n        }\n      }\n    });\n  }\n  return [order, styleId, keyStyleText];\n};","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { useContext } from 'react';\nimport StyleContext, { ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { isClientSide, toStyleStr } from \"../util\";\nimport { transformToken } from \"../util/css-variables\";\nimport useGlobalCache from \"./useGlobalCache\";\nimport { uniqueHash } from \"./useStyleRegister\";\nexport var CSS_VAR_PREFIX = 'cssVar';\nvar useCSSVarRegister = function useCSSVarRegister(config, fn) {\n  var key = config.key,\n    prefix = config.prefix,\n    unitless = config.unitless,\n    ignore = config.ignore,\n    token = config.token,\n    _config$scope = config.scope,\n    scope = _config$scope === void 0 ? '' : _config$scope;\n  var _useContext = useContext(StyleContext),\n    instanceId = _useContext.cache.instanceId,\n    container = _useContext.container;\n  var tokenKey = token._tokenKey;\n  var stylePath = [].concat(_toConsumableArray(config.path), [key, scope, tokenKey]);\n  var cache = useGlobalCache(CSS_VAR_PREFIX, stylePath, function () {\n    var originToken = fn();\n    var _transformToken = transformToken(originToken, key, {\n        prefix: prefix,\n        unitless: unitless,\n        ignore: ignore,\n        scope: scope\n      }),\n      _transformToken2 = _slicedToArray(_transformToken, 2),\n      mergedToken = _transformToken2[0],\n      cssVarsStr = _transformToken2[1];\n    var styleId = uniqueHash(stylePath, cssVarsStr);\n    return [mergedToken, cssVarsStr, styleId, key];\n  }, function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 3),\n      styleId = _ref2[2];\n    if (isClientSide) {\n      removeCSS(styleId, {\n        mark: ATTR_MARK\n      });\n    }\n  }, function (_ref3) {\n    var _ref4 = _slicedToArray(_ref3, 3),\n      cssVarsStr = _ref4[1],\n      styleId = _ref4[2];\n    if (!cssVarsStr) {\n      return;\n    }\n    var style = updateCSS(cssVarsStr, styleId, {\n      mark: ATTR_MARK,\n      prepend: 'queue',\n      attachTo: container,\n      priority: -999\n    });\n    style[CSS_IN_JS_INSTANCE] = instanceId;\n\n    // Used for `useCacheToken` to remove on batch when token removed\n    style.setAttribute(ATTR_TOKEN, key);\n  });\n  return cache;\n};\nexport var extract = function extract(cache, effectStyles, options) {\n  var _cache = _slicedToArray(cache, 4),\n    styleStr = _cache[1],\n    styleId = _cache[2],\n    cssVarKey = _cache[3];\n  var _ref5 = options || {},\n    plain = _ref5.plain;\n  if (!styleStr) {\n    return null;\n  }\n  var order = -999;\n\n  // ====================== Style ======================\n  // Used for rc-util\n  var sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': \"\".concat(order)\n  };\n  var styleText = toStyleStr(styleStr, cssVarKey, styleId, sharedAttrs, plain);\n  return [order, styleId, styleText];\n};\nexport default useCSSVarRegister;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _ExtractStyleFns;\nimport { extract as tokenExtractStyle, TOKEN_PREFIX } from \"./hooks/useCacheToken\";\nimport { CSS_VAR_PREFIX, extract as cssVarExtractStyle } from \"./hooks/useCSSVarRegister\";\nimport { extract as styleExtractStyle, STYLE_PREFIX } from \"./hooks/useStyleRegister\";\nimport { toStyleStr } from \"./util\";\nimport { ATTR_CACHE_MAP, serialize as serializeCacheMap } from \"./util/cacheMapUtil\";\nvar ExtractStyleFns = (_ExtractStyleFns = {}, _defineProperty(_ExtractStyleFns, STYLE_PREFIX, styleExtractStyle), _defineProperty(_ExtractStyleFns, TOKEN_PREFIX, tokenExtractStyle), _defineProperty(_ExtractStyleFns, CSS_VAR_PREFIX, cssVarExtractStyle), _ExtractStyleFns);\nfunction isNotNull(value) {\n  return value !== null;\n}\nexport default function extractStyle(cache, options) {\n  var _ref = typeof options === 'boolean' ? {\n      plain: options\n    } : options || {},\n    _ref$plain = _ref.plain,\n    plain = _ref$plain === void 0 ? false : _ref$plain,\n    _ref$types = _ref.types,\n    types = _ref$types === void 0 ? ['style', 'token', 'cssVar'] : _ref$types;\n  var matchPrefixRegexp = new RegExp(\"^(\".concat((typeof types === 'string' ? [types] : types).join('|'), \")%\"));\n\n  // prefix with `style` is used for `useStyleRegister` to cache style context\n  var styleKeys = Array.from(cache.cache.keys()).filter(function (key) {\n    return matchPrefixRegexp.test(key);\n  });\n\n  // Common effect styles like animation\n  var effectStyles = {};\n\n  // Mapping of cachePath to style hash\n  var cachePathMap = {};\n  var styleText = '';\n  styleKeys.map(function (key) {\n    var cachePath = key.replace(matchPrefixRegexp, '').replace(/%/g, '|');\n    var _key$split = key.split('%'),\n      _key$split2 = _slicedToArray(_key$split, 1),\n      prefix = _key$split2[0];\n    var extractFn = ExtractStyleFns[prefix];\n    var extractedStyle = extractFn(cache.cache.get(key)[1], effectStyles, {\n      plain: plain\n    });\n    if (!extractedStyle) {\n      return null;\n    }\n    var _extractedStyle = _slicedToArray(extractedStyle, 3),\n      order = _extractedStyle[0],\n      styleId = _extractedStyle[1],\n      styleStr = _extractedStyle[2];\n    if (key.startsWith('style')) {\n      cachePathMap[cachePath] = styleId;\n    }\n    return [order, styleStr];\n  }).filter(isNotNull).sort(function (_ref2, _ref3) {\n    var _ref4 = _slicedToArray(_ref2, 1),\n      o1 = _ref4[0];\n    var _ref5 = _slicedToArray(_ref3, 1),\n      o2 = _ref5[0];\n    return o1 - o2;\n  }).forEach(function (_ref6) {\n    var _ref7 = _slicedToArray(_ref6, 2),\n      style = _ref7[1];\n    styleText += style;\n  });\n\n  // ==================== Fill Cache Path ====================\n  styleText += toStyleStr(\".\".concat(ATTR_CACHE_MAP, \"{content:\\\"\").concat(serializeCacheMap(cachePathMap), \"\\\";}\"), undefined, undefined, _defineProperty({}, ATTR_CACHE_MAP, ATTR_CACHE_MAP), plain);\n  return styleText;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar Keyframe = /*#__PURE__*/function () {\n  function Keyframe(name, style) {\n    _classCallCheck(this, Keyframe);\n    _defineProperty(this, \"name\", void 0);\n    _defineProperty(this, \"style\", void 0);\n    _defineProperty(this, \"_keyframe\", true);\n    this.name = name;\n    this.style = style;\n  }\n  _createClass(Keyframe, [{\n    key: \"getName\",\n    value: function getName() {\n      var hashId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      return hashId ? \"\".concat(hashId, \"-\").concat(this.name) : this.name;\n    }\n  }]);\n  return Keyframe;\n}();\nexport default Keyframe;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nfunction splitValues(value) {\n  if (typeof value === 'number') {\n    return [[value], false];\n  }\n  var rawStyle = String(value).trim();\n  var importantCells = rawStyle.match(/(.*)(!important)/);\n  var splitStyle = (importantCells ? importantCells[1] : rawStyle).trim().split(/\\s+/);\n\n  // Combine styles split in brackets, like `calc(1px + 2px)`\n  var temp = [];\n  var brackets = 0;\n  return [splitStyle.reduce(function (list, item) {\n    if (item.includes('(') || item.includes(')')) {\n      var left = item.split('(').length - 1;\n      var right = item.split(')').length - 1;\n      brackets += left - right;\n    }\n    if (brackets >= 0) temp.push(item);\n    if (brackets === 0) {\n      list.push(temp.join(' '));\n      temp = [];\n    }\n    return list;\n  }, []), !!importantCells];\n}\nfunction noSplit(list) {\n  list.notSplit = true;\n  return list;\n}\nvar keyMap = {\n  // Inset\n  inset: ['top', 'right', 'bottom', 'left'],\n  insetBlock: ['top', 'bottom'],\n  insetBlockStart: ['top'],\n  insetBlockEnd: ['bottom'],\n  insetInline: ['left', 'right'],\n  insetInlineStart: ['left'],\n  insetInlineEnd: ['right'],\n  // Margin\n  marginBlock: ['marginTop', 'marginBottom'],\n  marginBlockStart: ['marginTop'],\n  marginBlockEnd: ['marginBottom'],\n  marginInline: ['marginLeft', 'marginRight'],\n  marginInlineStart: ['marginLeft'],\n  marginInlineEnd: ['marginRight'],\n  // Padding\n  paddingBlock: ['paddingTop', 'paddingBottom'],\n  paddingBlockStart: ['paddingTop'],\n  paddingBlockEnd: ['paddingBottom'],\n  paddingInline: ['paddingLeft', 'paddingRight'],\n  paddingInlineStart: ['paddingLeft'],\n  paddingInlineEnd: ['paddingRight'],\n  // Border\n  borderBlock: noSplit(['borderTop', 'borderBottom']),\n  borderBlockStart: noSplit(['borderTop']),\n  borderBlockEnd: noSplit(['borderBottom']),\n  borderInline: noSplit(['borderLeft', 'borderRight']),\n  borderInlineStart: noSplit(['borderLeft']),\n  borderInlineEnd: noSplit(['borderRight']),\n  // Border width\n  borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n  borderBlockStartWidth: ['borderTopWidth'],\n  borderBlockEndWidth: ['borderBottomWidth'],\n  borderInlineWidth: ['borderLeftWidth', 'borderRightWidth'],\n  borderInlineStartWidth: ['borderLeftWidth'],\n  borderInlineEndWidth: ['borderRightWidth'],\n  // Border style\n  borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n  borderBlockStartStyle: ['borderTopStyle'],\n  borderBlockEndStyle: ['borderBottomStyle'],\n  borderInlineStyle: ['borderLeftStyle', 'borderRightStyle'],\n  borderInlineStartStyle: ['borderLeftStyle'],\n  borderInlineEndStyle: ['borderRightStyle'],\n  // Border color\n  borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n  borderBlockStartColor: ['borderTopColor'],\n  borderBlockEndColor: ['borderBottomColor'],\n  borderInlineColor: ['borderLeftColor', 'borderRightColor'],\n  borderInlineStartColor: ['borderLeftColor'],\n  borderInlineEndColor: ['borderRightColor'],\n  // Border radius\n  borderStartStartRadius: ['borderTopLeftRadius'],\n  borderStartEndRadius: ['borderTopRightRadius'],\n  borderEndStartRadius: ['borderBottomLeftRadius'],\n  borderEndEndRadius: ['borderBottomRightRadius']\n};\nfunction wrapImportantAndSkipCheck(value, important) {\n  var parsedValue = value;\n  if (important) {\n    parsedValue = \"\".concat(parsedValue, \" !important\");\n  }\n  return {\n    _skip_check_: true,\n    value: parsedValue\n  };\n}\n\n/**\n * Convert css logical properties to legacy properties.\n * Such as: `margin-block-start` to `margin-top`.\n * Transform list:\n * - inset\n * - margin\n * - padding\n * - border\n */\nvar transform = {\n  visit: function visit(cssObj) {\n    var clone = {};\n    Object.keys(cssObj).forEach(function (key) {\n      var value = cssObj[key];\n      var matchValue = keyMap[key];\n      if (matchValue && (typeof value === 'number' || typeof value === 'string')) {\n        var _splitValues = splitValues(value),\n          _splitValues2 = _slicedToArray(_splitValues, 2),\n          _values = _splitValues2[0],\n          _important = _splitValues2[1];\n        if (matchValue.length && matchValue.notSplit) {\n          // not split means always give same value like border\n          matchValue.forEach(function (matchKey) {\n            clone[matchKey] = wrapImportantAndSkipCheck(value, _important);\n          });\n        } else if (matchValue.length === 1) {\n          // Handle like `marginBlockStart` => `marginTop`\n          clone[matchValue[0]] = wrapImportantAndSkipCheck(_values[0], _important);\n        } else if (matchValue.length === 2) {\n          // Handle like `marginBlock` => `marginTop` & `marginBottom`\n          matchValue.forEach(function (matchKey, index) {\n            var _values$index;\n            clone[matchKey] = wrapImportantAndSkipCheck((_values$index = _values[index]) !== null && _values$index !== void 0 ? _values$index : _values[0], _important);\n          });\n        } else if (matchValue.length === 4) {\n          // Handle like `inset` => `top` & `right` & `bottom` & `left`\n          matchValue.forEach(function (matchKey, index) {\n            var _ref, _values$index2;\n            clone[matchKey] = wrapImportantAndSkipCheck((_ref = (_values$index2 = _values[index]) !== null && _values$index2 !== void 0 ? _values$index2 : _values[index - 2]) !== null && _ref !== void 0 ? _ref : _values[0], _important);\n          });\n        } else {\n          clone[key] = value;\n        }\n      } else {\n        clone[key] = value;\n      }\n    });\n    return clone;\n  }\n};\nexport default transform;","import { createContext } from 'react';\nvar IconContext = /*#__PURE__*/createContext({});\nexport default IconContext;","export default function get(entity, path) {\n  var current = entity;\n  for (var i = 0; i < path.length; i += 1) {\n    if (current === null || current === undefined) {\n      return undefined;\n    }\n    current = current[path[i]];\n  }\n  return current;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _toArray from \"@babel/runtime/helpers/esm/toArray\";\nimport get from \"./get\";\nfunction internalSet(entity, paths, value, removeIfUndefined) {\n  if (!paths.length) {\n    return value;\n  }\n  var _paths = _toArray(paths),\n    path = _paths[0],\n    restPath = _paths.slice(1);\n  var clone;\n  if (!entity && typeof path === 'number') {\n    clone = [];\n  } else if (Array.isArray(entity)) {\n    clone = _toConsumableArray(entity);\n  } else {\n    clone = _objectSpread({}, entity);\n  }\n\n  // Delete prop if `removeIfUndefined` and value is undefined\n  if (removeIfUndefined && value === undefined && restPath.length === 1) {\n    delete clone[path][restPath[0]];\n  } else {\n    clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);\n  }\n  return clone;\n}\nexport default function set(entity, paths, value) {\n  var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  // Do nothing if `removeIfUndefined` and parent object not exist\n  if (paths.length && removeIfUndefined && value === undefined && !get(entity, paths.slice(0, -1))) {\n    return entity;\n  }\n  return internalSet(entity, paths, value, removeIfUndefined);\n}\nfunction isObject(obj) {\n  return _typeof(obj) === 'object' && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;\n}\nfunction createEmpty(source) {\n  return Array.isArray(source) ? [] : {};\n}\nvar keys = typeof Reflect === 'undefined' ? Object.keys : Reflect.ownKeys;\n\n/**\n * Merge objects which will create\n */\nexport function merge() {\n  for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n    sources[_key] = arguments[_key];\n  }\n  var clone = createEmpty(sources[0]);\n  sources.forEach(function (src) {\n    function internalMerge(path, parentLoopSet) {\n      var loopSet = new Set(parentLoopSet);\n      var value = get(src, path);\n      var isArr = Array.isArray(value);\n      if (isArr || isObject(value)) {\n        // Only add not loop obj\n        if (!loopSet.has(value)) {\n          loopSet.add(value);\n          var originValue = get(clone, path);\n          if (isArr) {\n            // Array will always be override\n            clone = set(clone, path, []);\n          } else if (!originValue || _typeof(originValue) !== 'object') {\n            // Init container if not exist\n            clone = set(clone, path, createEmpty(value));\n          }\n          keys(value).forEach(function (key) {\n            internalMerge([].concat(_toConsumableArray(path), [key]), loopSet);\n          });\n        }\n      } else {\n        clone = set(clone, path, value);\n      }\n    }\n    internalMerge([]);\n  });\n  return clone;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _toArray(r) {\n  return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();\n}\nexport { _toArray as default };","import * as React from 'react';\nimport rcWarning, { resetWarned as rcResetWarned } from \"rc-util/es/warning\";\nexport function noop() {}\nlet deprecatedWarnList = null;\nexport function resetWarned() {\n  deprecatedWarnList = null;\n  rcResetWarned();\n}\n// eslint-disable-next-line import/no-mutable-exports\nlet warning = noop;\nif (process.env.NODE_ENV !== 'production') {\n  warning = (valid, component, message) => {\n    rcWarning(valid, `[antd: ${component}] ${message}`);\n    // StrictMode will inject console which will not throw warning in React 17.\n    if (process.env.NODE_ENV === 'test') {\n      resetWarned();\n    }\n  };\n}\nexport const WarningContext = /*#__PURE__*/React.createContext({});\n/**\n * This is a hook but we not named as `useWarning`\n * since this is only used in development.\n * We should always wrap this in `if (process.env.NODE_ENV !== 'production')` condition\n */\nexport const devUseWarning = process.env.NODE_ENV !== 'production' ? component => {\n  const {\n    strict\n  } = React.useContext(WarningContext);\n  const typeWarning = (valid, type, message) => {\n    if (!valid) {\n      if (strict === false && type === 'deprecated') {\n        const existWarning = deprecatedWarnList;\n        if (!deprecatedWarnList) {\n          deprecatedWarnList = {};\n        }\n        deprecatedWarnList[component] = deprecatedWarnList[component] || [];\n        if (!deprecatedWarnList[component].includes(message || '')) {\n          deprecatedWarnList[component].push(message || '');\n        }\n        // Warning for the first time\n        if (!existWarning) {\n          console.warn('[antd] There exists deprecated usage in your code:', deprecatedWarnList);\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(valid, component, message) : void 0;\n      }\n    }\n  };\n  typeWarning.deprecated = (valid, oldProp, newProp, message) => {\n    typeWarning(valid, 'deprecated', `\\`${oldProp}\\` is deprecated. Please use \\`${newProp}\\` instead.${message ? ` ${message}` : ''}`);\n  };\n  return typeWarning;\n} : () => {\n  const noopWarning = () => {};\n  noopWarning.deprecated = noop;\n  return noopWarning;\n};\nexport default warning;","\"use client\";\n\nimport { createContext } from 'react';\n// ZombieJ: We export single file here since\n// ConfigProvider use this which will make loop deps\n// to import whole `rc-field-form`\nexport default /*#__PURE__*/createContext(undefined);","var locale = {\n  // Options\n  items_per_page: '/ page',\n  jump_to: 'Go to',\n  jump_to_confirm: 'confirm',\n  page: 'Page',\n  // Pagination\n  prev_page: 'Previous Page',\n  next_page: 'Next Page',\n  prev_5: 'Previous 5 Pages',\n  next_5: 'Next 5 Pages',\n  prev_3: 'Previous 3 Pages',\n  next_3: 'Next 3 Pages',\n  page_size: 'Page Size'\n};\nexport default locale;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { commonLocale } from \"./common\";\nvar locale = _objectSpread(_objectSpread({}, commonLocale), {}, {\n  locale: 'en_US',\n  today: 'Today',\n  now: 'Now',\n  backToToday: 'Back to today',\n  ok: 'OK',\n  clear: 'Clear',\n  week: 'Week',\n  month: 'Month',\n  year: 'Year',\n  timeSelect: 'select time',\n  dateSelect: 'select date',\n  weekSelect: 'Choose a week',\n  monthSelect: 'Choose a month',\n  yearSelect: 'Choose a year',\n  decadeSelect: 'Choose a decade',\n  dateFormat: 'M/D/YYYY',\n  dateTimeFormat: 'M/D/YYYY HH:mm:ss',\n  previousMonth: 'Previous month (PageUp)',\n  nextMonth: 'Next month (PageDown)',\n  previousYear: 'Last year (Control + left)',\n  nextYear: 'Next year (Control + right)',\n  previousDecade: 'Last decade',\n  nextDecade: 'Next decade',\n  previousCentury: 'Last century',\n  nextCentury: 'Next century'\n});\nexport default locale;","export var commonLocale = {\n  yearFormat: 'YYYY',\n  dayFormat: 'D',\n  cellMeridiemFormat: 'A',\n  monthBeforeYear: true\n};","const locale = {\n  placeholder: 'Select time',\n  rangePlaceholder: ['Start time', 'End time']\n};\nexport default locale;","import CalendarLocale from \"rc-picker/es/locale/en_US\";\nimport TimePickerLocale from '../../time-picker/locale/en_US';\n// Merge into a locale object\nconst locale = {\n  lang: Object.assign({\n    placeholder: 'Select date',\n    yearPlaceholder: 'Select year',\n    quarterPlaceholder: 'Select quarter',\n    monthPlaceholder: 'Select month',\n    weekPlaceholder: 'Select week',\n    rangePlaceholder: ['Start date', 'End date'],\n    rangeYearPlaceholder: ['Start year', 'End year'],\n    rangeQuarterPlaceholder: ['Start quarter', 'End quarter'],\n    rangeMonthPlaceholder: ['Start month', 'End month'],\n    rangeWeekPlaceholder: ['Start week', 'End week']\n  }, CalendarLocale),\n  timePickerLocale: Object.assign({}, TimePickerLocale)\n};\n// All settings at:\n// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json\nexport default locale;","import Pagination from \"rc-pagination/es/locale/en_US\";\nimport Calendar from '../calendar/locale/en_US';\nimport DatePicker from '../date-picker/locale/en_US';\nimport TimePicker from '../time-picker/locale/en_US';\nconst typeTemplate = '${label} is not a valid ${type}';\nconst localeValues = {\n  locale: 'en',\n  Pagination,\n  DatePicker,\n  TimePicker,\n  Calendar,\n  global: {\n    placeholder: 'Please select',\n    close: 'Close'\n  },\n  Table: {\n    filterTitle: 'Filter menu',\n    filterConfirm: 'OK',\n    filterReset: 'Reset',\n    filterEmptyText: 'No filters',\n    filterCheckAll: 'Select all items',\n    filterSearchPlaceholder: 'Search in filters',\n    emptyText: 'No data',\n    selectAll: 'Select current page',\n    selectInvert: 'Invert current page',\n    selectNone: 'Clear all data',\n    selectionAll: 'Select all data',\n    sortTitle: 'Sort',\n    expand: 'Expand row',\n    collapse: 'Collapse row',\n    triggerDesc: 'Click to sort descending',\n    triggerAsc: 'Click to sort ascending',\n    cancelSort: 'Click to cancel sorting'\n  },\n  Tour: {\n    Next: 'Next',\n    Previous: 'Previous',\n    Finish: 'Finish'\n  },\n  Modal: {\n    okText: 'OK',\n    cancelText: 'Cancel',\n    justOkText: 'OK'\n  },\n  Popconfirm: {\n    okText: 'OK',\n    cancelText: 'Cancel'\n  },\n  Transfer: {\n    titles: ['', ''],\n    searchPlaceholder: 'Search here',\n    itemUnit: 'item',\n    itemsUnit: 'items',\n    remove: 'Remove',\n    selectCurrent: 'Select current page',\n    removeCurrent: 'Remove current page',\n    selectAll: 'Select all data',\n    deselectAll: 'Deselect all data',\n    removeAll: 'Remove all data',\n    selectInvert: 'Invert current page'\n  },\n  Upload: {\n    uploading: 'Uploading...',\n    removeFile: 'Remove file',\n    uploadError: 'Upload error',\n    previewFile: 'Preview file',\n    downloadFile: 'Download file'\n  },\n  Empty: {\n    description: 'No data'\n  },\n  Icon: {\n    icon: 'icon'\n  },\n  Text: {\n    edit: 'Edit',\n    copy: 'Copy',\n    copied: 'Copied',\n    expand: 'Expand',\n    collapse: 'Collapse'\n  },\n  Form: {\n    optional: '(optional)',\n    defaultValidateMessages: {\n      default: 'Field validation error for ${label}',\n      required: 'Please enter ${label}',\n      enum: '${label} must be one of [${enum}]',\n      whitespace: '${label} cannot be a blank character',\n      date: {\n        format: '${label} date format is invalid',\n        parse: '${label} cannot be converted to a date',\n        invalid: '${label} is an invalid date'\n      },\n      types: {\n        string: typeTemplate,\n        method: typeTemplate,\n        array: typeTemplate,\n        object: typeTemplate,\n        number: typeTemplate,\n        date: typeTemplate,\n        boolean: typeTemplate,\n        integer: typeTemplate,\n        float: typeTemplate,\n        regexp: typeTemplate,\n        email: typeTemplate,\n        url: typeTemplate,\n        hex: typeTemplate\n      },\n      string: {\n        len: '${label} must be ${len} characters',\n        min: '${label} must be at least ${min} characters',\n        max: '${label} must be up to ${max} characters',\n        range: '${label} must be between ${min}-${max} characters'\n      },\n      number: {\n        len: '${label} must be equal to ${len}',\n        min: '${label} must be minimum ${min}',\n        max: '${label} must be maximum ${max}',\n        range: '${label} must be between ${min}-${max}'\n      },\n      array: {\n        len: 'Must be ${len} ${label}',\n        min: 'At least ${min} ${label}',\n        max: 'At most ${max} ${label}',\n        range: 'The amount of ${label} must be between ${min}-${max}'\n      },\n      pattern: {\n        mismatch: '${label} does not match the pattern ${pattern}'\n      }\n    }\n  },\n  Image: {\n    preview: 'Preview'\n  },\n  QRCode: {\n    expired: 'QR code expired',\n    refresh: 'Refresh',\n    scanned: 'Scanned'\n  },\n  ColorPicker: {\n    presetEmpty: 'Empty',\n    transparent: 'Transparent',\n    singleColor: 'Single',\n    gradientColor: 'Gradient'\n  }\n};\nexport default localeValues;","import defaultLocale from '../locale/en_US';\nlet runtimeLocale = Object.assign({}, defaultLocale.Modal);\nlet localeList = [];\nconst generateLocale = () => localeList.reduce((merged, locale) => Object.assign(Object.assign({}, merged), locale), defaultLocale.Modal);\nexport function changeConfirmLocale(newLocale) {\n  if (newLocale) {\n    const cloneLocale = Object.assign({}, newLocale);\n    localeList.push(cloneLocale);\n    runtimeLocale = generateLocale();\n    return () => {\n      localeList = localeList.filter(locale => locale !== cloneLocale);\n      runtimeLocale = generateLocale();\n    };\n  }\n  runtimeLocale = Object.assign({}, defaultLocale.Modal);\n}\nexport function getConfirmLocale() {\n  return runtimeLocale;\n}","import { createContext } from 'react';\nconst LocaleContext = /*#__PURE__*/createContext(undefined);\nexport default LocaleContext;","\"use client\";\n\nimport * as React from 'react';\nimport { devUseWarning } from '../_util/warning';\nimport { changeConfirmLocale } from '../modal/locale';\nimport LocaleContext from './context';\nexport { default as useLocale } from './useLocale';\nexport const ANT_MARK = 'internalMark';\nconst LocaleProvider = props => {\n  const {\n    locale = {},\n    children,\n    _ANT_MARK__\n  } = props;\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning('LocaleProvider');\n    process.env.NODE_ENV !== \"production\" ? warning(_ANT_MARK__ === ANT_MARK, 'deprecated', '`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead: http://u.ant.design/locale') : void 0;\n  }\n  React.useEffect(() => {\n    const clearLocale = changeConfirmLocale(locale === null || locale === void 0 ? void 0 : locale.Modal);\n    return clearLocale;\n  }, [locale]);\n  const getMemoizedContextValue = React.useMemo(() => Object.assign(Object.assign({}, locale), {\n    exist: true\n  }), [locale]);\n  return /*#__PURE__*/React.createElement(LocaleContext.Provider, {\n    value: getMemoizedContextValue\n  }, children);\n};\nif (process.env.NODE_ENV !== 'production') {\n  LocaleProvider.displayName = 'LocaleProvider';\n}\nexport default LocaleProvider;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nconst round = Math.round;\n\n/**\n * Support format, alpha unit will check the % mark:\n * - rgba(102, 204, 255, .5)      -> [102, 204, 255, 0.5]\n * - rgb(102 204 255 / .5)        -> [102, 204, 255, 0.5]\n * - rgb(100%, 50%, 0% / 50%)     -> [255, 128, 0, 0.5]\n * - hsl(270, 60, 40, .5)         -> [270, 60, 40, 0.5]\n * - hsl(270deg 60% 40% / 50%)   -> [270, 60, 40, 0.5]\n *\n * When `base` is provided, the percentage value will be divided by `base`.\n */\nfunction splitColorStr(str, parseNum) {\n  const match = str\n  // Remove str before `(`\n  .replace(/^[^(]*\\((.*)/, '$1')\n  // Remove str after `)`\n  .replace(/\\).*/, '').match(/\\d*\\.?\\d+%?/g) || [];\n  const numList = match.map(item => parseFloat(item));\n  for (let i = 0; i < 3; i += 1) {\n    numList[i] = parseNum(numList[i] || 0, match[i] || '', i);\n  }\n\n  // For alpha. 50% should be 0.5\n  if (match[3]) {\n    numList[3] = match[3].includes('%') ? numList[3] / 100 : numList[3];\n  } else {\n    // By default, alpha is 1\n    numList[3] = 1;\n  }\n  return numList;\n}\nconst parseHSVorHSL = (num, _, index) => index === 0 ? num : num / 100;\n\n/** round and limit number to integer between 0-255 */\nfunction limitRange(value, max) {\n  const mergedMax = max || 255;\n  if (value > mergedMax) {\n    return mergedMax;\n  }\n  if (value < 0) {\n    return 0;\n  }\n  return value;\n}\nexport class FastColor {\n  constructor(input) {\n    /**\n     * All FastColor objects are valid. So isValid is always true. This property is kept to be compatible with TinyColor.\n     */\n    _defineProperty(this, \"isValid\", true);\n    /**\n     * Red, R in RGB\n     */\n    _defineProperty(this, \"r\", 0);\n    /**\n     * Green, G in RGB\n     */\n    _defineProperty(this, \"g\", 0);\n    /**\n     * Blue, B in RGB\n     */\n    _defineProperty(this, \"b\", 0);\n    /**\n     * Alpha/Opacity, A in RGBA/HSLA\n     */\n    _defineProperty(this, \"a\", 1);\n    // HSV privates\n    _defineProperty(this, \"_h\", void 0);\n    _defineProperty(this, \"_s\", void 0);\n    _defineProperty(this, \"_l\", void 0);\n    _defineProperty(this, \"_v\", void 0);\n    // intermediate variables to calculate HSL/HSV\n    _defineProperty(this, \"_max\", void 0);\n    _defineProperty(this, \"_min\", void 0);\n    _defineProperty(this, \"_brightness\", void 0);\n    /**\n     * Always check 3 char in the object to determine the format.\n     * We not use function in check to save bundle size.\n     * e.g. 'rgb' -> { r: 0, g: 0, b: 0 }.\n     */\n    function matchFormat(str) {\n      return str[0] in input && str[1] in input && str[2] in input;\n    }\n    if (!input) {\n      // Do nothing since already initialized\n    } else if (typeof input === 'string') {\n      const trimStr = input.trim();\n      function matchPrefix(prefix) {\n        return trimStr.startsWith(prefix);\n      }\n      if (/^#?[A-F\\d]{3,8}$/i.test(trimStr)) {\n        this.fromHexString(trimStr);\n      } else if (matchPrefix('rgb')) {\n        this.fromRgbString(trimStr);\n      } else if (matchPrefix('hsl')) {\n        this.fromHslString(trimStr);\n      } else if (matchPrefix('hsv') || matchPrefix('hsb')) {\n        this.fromHsvString(trimStr);\n      }\n    } else if (input instanceof FastColor) {\n      this.r = input.r;\n      this.g = input.g;\n      this.b = input.b;\n      this.a = input.a;\n      this._h = input._h;\n      this._s = input._s;\n      this._l = input._l;\n      this._v = input._v;\n    } else if (matchFormat('rgb')) {\n      this.r = limitRange(input.r);\n      this.g = limitRange(input.g);\n      this.b = limitRange(input.b);\n      this.a = typeof input.a === 'number' ? limitRange(input.a, 1) : 1;\n    } else if (matchFormat('hsl')) {\n      this.fromHsl(input);\n    } else if (matchFormat('hsv')) {\n      this.fromHsv(input);\n    } else {\n      throw new Error('@ant-design/fast-color: unsupported input ' + JSON.stringify(input));\n    }\n  }\n\n  // ======================= Setter =======================\n\n  setR(value) {\n    return this._sc('r', value);\n  }\n  setG(value) {\n    return this._sc('g', value);\n  }\n  setB(value) {\n    return this._sc('b', value);\n  }\n  setA(value) {\n    return this._sc('a', value, 1);\n  }\n  setHue(value) {\n    const hsv = this.toHsv();\n    hsv.h = value;\n    return this._c(hsv);\n  }\n\n  // ======================= Getter =======================\n  /**\n   * Returns the perceived luminance of a color, from 0-1.\n   * @see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n   */\n  getLuminance() {\n    function adjustGamma(raw) {\n      const val = raw / 255;\n      return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n    }\n    const R = adjustGamma(this.r);\n    const G = adjustGamma(this.g);\n    const B = adjustGamma(this.b);\n    return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n  }\n  getHue() {\n    if (typeof this._h === 'undefined') {\n      const delta = this.getMax() - this.getMin();\n      if (delta === 0) {\n        this._h = 0;\n      } else {\n        this._h = round(60 * (this.r === this.getMax() ? (this.g - this.b) / delta + (this.g < this.b ? 6 : 0) : this.g === this.getMax() ? (this.b - this.r) / delta + 2 : (this.r - this.g) / delta + 4));\n      }\n    }\n    return this._h;\n  }\n  getSaturation() {\n    if (typeof this._s === 'undefined') {\n      const delta = this.getMax() - this.getMin();\n      if (delta === 0) {\n        this._s = 0;\n      } else {\n        this._s = delta / this.getMax();\n      }\n    }\n    return this._s;\n  }\n  getLightness() {\n    if (typeof this._l === 'undefined') {\n      this._l = (this.getMax() + this.getMin()) / 510;\n    }\n    return this._l;\n  }\n  getValue() {\n    if (typeof this._v === 'undefined') {\n      this._v = this.getMax() / 255;\n    }\n    return this._v;\n  }\n\n  /**\n   * Returns the perceived brightness of the color, from 0-255.\n   * Note: this is not the b of HSB\n   * @see http://www.w3.org/TR/AERT#color-contrast\n   */\n  getBrightness() {\n    if (typeof this._brightness === 'undefined') {\n      this._brightness = (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n    }\n    return this._brightness;\n  }\n\n  // ======================== Func ========================\n\n  darken(amount = 10) {\n    const h = this.getHue();\n    const s = this.getSaturation();\n    let l = this.getLightness() - amount / 100;\n    if (l < 0) {\n      l = 0;\n    }\n    return this._c({\n      h,\n      s,\n      l,\n      a: this.a\n    });\n  }\n  lighten(amount = 10) {\n    const h = this.getHue();\n    const s = this.getSaturation();\n    let l = this.getLightness() + amount / 100;\n    if (l > 1) {\n      l = 1;\n    }\n    return this._c({\n      h,\n      s,\n      l,\n      a: this.a\n    });\n  }\n\n  /**\n   * Mix the current color a given amount with another color, from 0 to 100.\n   * 0 means no mixing (return current color).\n   */\n  mix(input, amount = 50) {\n    const color = this._c(input);\n    const p = amount / 100;\n    const calc = key => (color[key] - this[key]) * p + this[key];\n    const rgba = {\n      r: round(calc('r')),\n      g: round(calc('g')),\n      b: round(calc('b')),\n      a: round(calc('a') * 100) / 100\n    };\n    return this._c(rgba);\n  }\n\n  /**\n   * Mix the color with pure white, from 0 to 100.\n   * Providing 0 will do nothing, providing 100 will always return white.\n   */\n  tint(amount = 10) {\n    return this.mix({\n      r: 255,\n      g: 255,\n      b: 255,\n      a: 1\n    }, amount);\n  }\n\n  /**\n   * Mix the color with pure black, from 0 to 100.\n   * Providing 0 will do nothing, providing 100 will always return black.\n   */\n  shade(amount = 10) {\n    return this.mix({\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 1\n    }, amount);\n  }\n  onBackground(background) {\n    const bg = this._c(background);\n    const alpha = this.a + bg.a * (1 - this.a);\n    const calc = key => {\n      return round((this[key] * this.a + bg[key] * bg.a * (1 - this.a)) / alpha);\n    };\n    return this._c({\n      r: calc('r'),\n      g: calc('g'),\n      b: calc('b'),\n      a: alpha\n    });\n  }\n\n  // ======================= Status =======================\n  isDark() {\n    return this.getBrightness() < 128;\n  }\n  isLight() {\n    return this.getBrightness() >= 128;\n  }\n\n  // ======================== MISC ========================\n  equals(other) {\n    return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a;\n  }\n  clone() {\n    return this._c(this);\n  }\n\n  // ======================= Format =======================\n  toHexString() {\n    let hex = '#';\n    const rHex = (this.r || 0).toString(16);\n    hex += rHex.length === 2 ? rHex : '0' + rHex;\n    const gHex = (this.g || 0).toString(16);\n    hex += gHex.length === 2 ? gHex : '0' + gHex;\n    const bHex = (this.b || 0).toString(16);\n    hex += bHex.length === 2 ? bHex : '0' + bHex;\n    if (typeof this.a === 'number' && this.a >= 0 && this.a < 1) {\n      const aHex = round(this.a * 255).toString(16);\n      hex += aHex.length === 2 ? aHex : '0' + aHex;\n    }\n    return hex;\n  }\n\n  /** CSS support color pattern */\n  toHsl() {\n    return {\n      h: this.getHue(),\n      s: this.getSaturation(),\n      l: this.getLightness(),\n      a: this.a\n    };\n  }\n\n  /** CSS support color pattern */\n  toHslString() {\n    const h = this.getHue();\n    const s = round(this.getSaturation() * 100);\n    const l = round(this.getLightness() * 100);\n    return this.a !== 1 ? `hsla(${h},${s}%,${l}%,${this.a})` : `hsl(${h},${s}%,${l}%)`;\n  }\n\n  /** Same as toHsb */\n  toHsv() {\n    return {\n      h: this.getHue(),\n      s: this.getSaturation(),\n      v: this.getValue(),\n      a: this.a\n    };\n  }\n  toRgb() {\n    return {\n      r: this.r,\n      g: this.g,\n      b: this.b,\n      a: this.a\n    };\n  }\n  toRgbString() {\n    return this.a !== 1 ? `rgba(${this.r},${this.g},${this.b},${this.a})` : `rgb(${this.r},${this.g},${this.b})`;\n  }\n  toString() {\n    return this.toRgbString();\n  }\n\n  // ====================== Privates ======================\n  /** Return a new FastColor object with one channel changed */\n  _sc(rgb, value, max) {\n    const clone = this.clone();\n    clone[rgb] = limitRange(value, max);\n    return clone;\n  }\n  _c(input) {\n    return new this.constructor(input);\n  }\n  getMax() {\n    if (typeof this._max === 'undefined') {\n      this._max = Math.max(this.r, this.g, this.b);\n    }\n    return this._max;\n  }\n  getMin() {\n    if (typeof this._min === 'undefined') {\n      this._min = Math.min(this.r, this.g, this.b);\n    }\n    return this._min;\n  }\n  fromHexString(trimStr) {\n    const withoutPrefix = trimStr.replace('#', '');\n    function connectNum(index1, index2) {\n      return parseInt(withoutPrefix[index1] + withoutPrefix[index2 || index1], 16);\n    }\n    if (withoutPrefix.length < 6) {\n      // #rgb or #rgba\n      this.r = connectNum(0);\n      this.g = connectNum(1);\n      this.b = connectNum(2);\n      this.a = withoutPrefix[3] ? connectNum(3) / 255 : 1;\n    } else {\n      // #rrggbb or #rrggbbaa\n      this.r = connectNum(0, 1);\n      this.g = connectNum(2, 3);\n      this.b = connectNum(4, 5);\n      this.a = withoutPrefix[6] ? connectNum(6, 7) / 255 : 1;\n    }\n  }\n  fromHsl({\n    h,\n    s,\n    l,\n    a\n  }) {\n    this._h = h % 360;\n    this._s = s;\n    this._l = l;\n    this.a = typeof a === 'number' ? a : 1;\n    if (s <= 0) {\n      const rgb = round(l * 255);\n      this.r = rgb;\n      this.g = rgb;\n      this.b = rgb;\n    }\n    let r = 0,\n      g = 0,\n      b = 0;\n    const huePrime = h / 60;\n    const chroma = (1 - Math.abs(2 * l - 1)) * s;\n    const secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n    if (huePrime >= 0 && huePrime < 1) {\n      r = chroma;\n      g = secondComponent;\n    } else if (huePrime >= 1 && huePrime < 2) {\n      r = secondComponent;\n      g = chroma;\n    } else if (huePrime >= 2 && huePrime < 3) {\n      g = chroma;\n      b = secondComponent;\n    } else if (huePrime >= 3 && huePrime < 4) {\n      g = secondComponent;\n      b = chroma;\n    } else if (huePrime >= 4 && huePrime < 5) {\n      r = secondComponent;\n      b = chroma;\n    } else if (huePrime >= 5 && huePrime < 6) {\n      r = chroma;\n      b = secondComponent;\n    }\n    const lightnessModification = l - chroma / 2;\n    this.r = round((r + lightnessModification) * 255);\n    this.g = round((g + lightnessModification) * 255);\n    this.b = round((b + lightnessModification) * 255);\n  }\n  fromHsv({\n    h,\n    s,\n    v,\n    a\n  }) {\n    this._h = h % 360;\n    this._s = s;\n    this._v = v;\n    this.a = typeof a === 'number' ? a : 1;\n    const vv = round(v * 255);\n    this.r = vv;\n    this.g = vv;\n    this.b = vv;\n    if (s <= 0) {\n      return;\n    }\n    const hh = h / 60;\n    const i = Math.floor(hh);\n    const ff = hh - i;\n    const p = round(v * (1.0 - s) * 255);\n    const q = round(v * (1.0 - s * ff) * 255);\n    const t = round(v * (1.0 - s * (1.0 - ff)) * 255);\n    switch (i) {\n      case 0:\n        this.g = t;\n        this.b = p;\n        break;\n      case 1:\n        this.r = q;\n        this.b = p;\n        break;\n      case 2:\n        this.r = p;\n        this.b = t;\n        break;\n      case 3:\n        this.r = p;\n        this.g = q;\n        break;\n      case 4:\n        this.r = t;\n        this.g = p;\n        break;\n      case 5:\n      default:\n        this.g = p;\n        this.b = q;\n        break;\n    }\n  }\n  fromHsvString(trimStr) {\n    const cells = splitColorStr(trimStr, parseHSVorHSL);\n    this.fromHsv({\n      h: cells[0],\n      s: cells[1],\n      v: cells[2],\n      a: cells[3]\n    });\n  }\n  fromHslString(trimStr) {\n    const cells = splitColorStr(trimStr, parseHSVorHSL);\n    this.fromHsl({\n      h: cells[0],\n      s: cells[1],\n      l: cells[2],\n      a: cells[3]\n    });\n  }\n  fromRgbString(trimStr) {\n    const cells = splitColorStr(trimStr, (num, txt) =>\n    // Convert percentage to number. e.g. 50% -> 128\n    txt.includes('%') ? round(num / 100 * 255) : num);\n    this.r = cells[0];\n    this.g = cells[1];\n    this.b = cells[2];\n    this.a = cells[3];\n  }\n}","import { FastColor } from '@ant-design/fast-color';\nvar hueStep = 2; // 色相阶梯\nvar saturationStep = 0.16; // 饱和度阶梯，浅色部分\nvar saturationStep2 = 0.05; // 饱和度阶梯，深色部分\nvar brightnessStep1 = 0.05; // 亮度阶梯，浅色部分\nvar brightnessStep2 = 0.15; // 亮度阶梯，深色部分\nvar lightColorCount = 5; // 浅色数量，主色上\nvar darkColorCount = 4; // 深色数量，主色下\n\n// 暗色主题颜色映射关系表\nvar darkColorMap = [{\n  index: 7,\n  amount: 15\n}, {\n  index: 6,\n  amount: 25\n}, {\n  index: 5,\n  amount: 30\n}, {\n  index: 5,\n  amount: 45\n}, {\n  index: 5,\n  amount: 65\n}, {\n  index: 5,\n  amount: 85\n}, {\n  index: 4,\n  amount: 90\n}, {\n  index: 3,\n  amount: 95\n}, {\n  index: 2,\n  amount: 97\n}, {\n  index: 1,\n  amount: 98\n}];\nfunction getHue(hsv, i, light) {\n  var hue;\n  // 根据色相不同，色相转向不同\n  if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) {\n    hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i;\n  } else {\n    hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i;\n  }\n  if (hue < 0) {\n    hue += 360;\n  } else if (hue >= 360) {\n    hue -= 360;\n  }\n  return hue;\n}\nfunction getSaturation(hsv, i, light) {\n  // grey color don't change saturation\n  if (hsv.h === 0 && hsv.s === 0) {\n    return hsv.s;\n  }\n  var saturation;\n  if (light) {\n    saturation = hsv.s - saturationStep * i;\n  } else if (i === darkColorCount) {\n    saturation = hsv.s + saturationStep;\n  } else {\n    saturation = hsv.s + saturationStep2 * i;\n  }\n  // 边界值修正\n  if (saturation > 1) {\n    saturation = 1;\n  }\n  // 第一格的 s 限制在 0.06-0.1 之间\n  if (light && i === lightColorCount && saturation > 0.1) {\n    saturation = 0.1;\n  }\n  if (saturation < 0.06) {\n    saturation = 0.06;\n  }\n  return Math.round(saturation * 100) / 100;\n}\nfunction getValue(hsv, i, light) {\n  var value;\n  if (light) {\n    value = hsv.v + brightnessStep1 * i;\n  } else {\n    value = hsv.v - brightnessStep2 * i;\n  }\n  // Clamp value between 0 and 1\n  value = Math.max(0, Math.min(1, value));\n  return Math.round(value * 100) / 100;\n}\nexport default function generate(color) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var patterns = [];\n  var pColor = new FastColor(color);\n  var hsv = pColor.toHsv();\n  for (var i = lightColorCount; i > 0; i -= 1) {\n    var c = new FastColor({\n      h: getHue(hsv, i, true),\n      s: getSaturation(hsv, i, true),\n      v: getValue(hsv, i, true)\n    });\n    patterns.push(c);\n  }\n  patterns.push(pColor);\n  for (var _i = 1; _i <= darkColorCount; _i += 1) {\n    var _c = new FastColor({\n      h: getHue(hsv, _i),\n      s: getSaturation(hsv, _i),\n      v: getValue(hsv, _i)\n    });\n    patterns.push(_c);\n  }\n\n  // dark theme patterns\n  if (opts.theme === 'dark') {\n    return darkColorMap.map(function (_ref) {\n      var index = _ref.index,\n        amount = _ref.amount;\n      return new FastColor(opts.backgroundColor || '#141414').mix(patterns[index], amount).toHexString();\n    });\n  }\n  return patterns.map(function (c) {\n    return c.toHexString();\n  });\n}","// Generated by script. Do NOT modify!\n\nexport var presetPrimaryColors = {\n  \"red\": \"#F5222D\",\n  \"volcano\": \"#FA541C\",\n  \"orange\": \"#FA8C16\",\n  \"gold\": \"#FAAD14\",\n  \"yellow\": \"#FADB14\",\n  \"lime\": \"#A0D911\",\n  \"green\": \"#52C41A\",\n  \"cyan\": \"#13C2C2\",\n  \"blue\": \"#1677FF\",\n  \"geekblue\": \"#2F54EB\",\n  \"purple\": \"#722ED1\",\n  \"magenta\": \"#EB2F96\",\n  \"grey\": \"#666666\"\n};\nexport var red = [\"#fff1f0\", \"#ffccc7\", \"#ffa39e\", \"#ff7875\", \"#ff4d4f\", \"#f5222d\", \"#cf1322\", \"#a8071a\", \"#820014\", \"#5c0011\"];\nred.primary = red[5];\nexport var volcano = [\"#fff2e8\", \"#ffd8bf\", \"#ffbb96\", \"#ff9c6e\", \"#ff7a45\", \"#fa541c\", \"#d4380d\", \"#ad2102\", \"#871400\", \"#610b00\"];\nvolcano.primary = volcano[5];\nexport var orange = [\"#fff7e6\", \"#ffe7ba\", \"#ffd591\", \"#ffc069\", \"#ffa940\", \"#fa8c16\", \"#d46b08\", \"#ad4e00\", \"#873800\", \"#612500\"];\norange.primary = orange[5];\nexport var gold = [\"#fffbe6\", \"#fff1b8\", \"#ffe58f\", \"#ffd666\", \"#ffc53d\", \"#faad14\", \"#d48806\", \"#ad6800\", \"#874d00\", \"#613400\"];\ngold.primary = gold[5];\nexport var yellow = [\"#feffe6\", \"#ffffb8\", \"#fffb8f\", \"#fff566\", \"#ffec3d\", \"#fadb14\", \"#d4b106\", \"#ad8b00\", \"#876800\", \"#614700\"];\nyellow.primary = yellow[5];\nexport var lime = [\"#fcffe6\", \"#f4ffb8\", \"#eaff8f\", \"#d3f261\", \"#bae637\", \"#a0d911\", \"#7cb305\", \"#5b8c00\", \"#3f6600\", \"#254000\"];\nlime.primary = lime[5];\nexport var green = [\"#f6ffed\", \"#d9f7be\", \"#b7eb8f\", \"#95de64\", \"#73d13d\", \"#52c41a\", \"#389e0d\", \"#237804\", \"#135200\", \"#092b00\"];\ngreen.primary = green[5];\nexport var cyan = [\"#e6fffb\", \"#b5f5ec\", \"#87e8de\", \"#5cdbd3\", \"#36cfc9\", \"#13c2c2\", \"#08979c\", \"#006d75\", \"#00474f\", \"#002329\"];\ncyan.primary = cyan[5];\nexport var blue = [\"#e6f4ff\", \"#bae0ff\", \"#91caff\", \"#69b1ff\", \"#4096ff\", \"#1677ff\", \"#0958d9\", \"#003eb3\", \"#002c8c\", \"#001d66\"];\nblue.primary = blue[5];\nexport var geekblue = [\"#f0f5ff\", \"#d6e4ff\", \"#adc6ff\", \"#85a5ff\", \"#597ef7\", \"#2f54eb\", \"#1d39c4\", \"#10239e\", \"#061178\", \"#030852\"];\ngeekblue.primary = geekblue[5];\nexport var purple = [\"#f9f0ff\", \"#efdbff\", \"#d3adf7\", \"#b37feb\", \"#9254de\", \"#722ed1\", \"#531dab\", \"#391085\", \"#22075e\", \"#120338\"];\npurple.primary = purple[5];\nexport var magenta = [\"#fff0f6\", \"#ffd6e7\", \"#ffadd2\", \"#ff85c0\", \"#f759ab\", \"#eb2f96\", \"#c41d7f\", \"#9e1068\", \"#780650\", \"#520339\"];\nmagenta.primary = magenta[5];\nexport var grey = [\"#a6a6a6\", \"#999999\", \"#8c8c8c\", \"#808080\", \"#737373\", \"#666666\", \"#404040\", \"#1a1a1a\", \"#000000\", \"#000000\"];\ngrey.primary = grey[5];\nexport var gray = grey;\nexport var presetPalettes = {\n  red: red,\n  volcano: volcano,\n  orange: orange,\n  gold: gold,\n  yellow: yellow,\n  lime: lime,\n  green: green,\n  cyan: cyan,\n  blue: blue,\n  geekblue: geekblue,\n  purple: purple,\n  magenta: magenta,\n  grey: grey\n};\nexport var redDark = [\"#2a1215\", \"#431418\", \"#58181c\", \"#791a1f\", \"#a61d24\", \"#d32029\", \"#e84749\", \"#f37370\", \"#f89f9a\", \"#fac8c3\"];\nredDark.primary = redDark[5];\nexport var volcanoDark = [\"#2b1611\", \"#441d12\", \"#592716\", \"#7c3118\", \"#aa3e19\", \"#d84a1b\", \"#e87040\", \"#f3956a\", \"#f8b692\", \"#fad4bc\"];\nvolcanoDark.primary = volcanoDark[5];\nexport var orangeDark = [\"#2b1d11\", \"#442a11\", \"#593815\", \"#7c4a15\", \"#aa6215\", \"#d87a16\", \"#e89a3c\", \"#f3b765\", \"#f8cf8d\", \"#fae3b7\"];\norangeDark.primary = orangeDark[5];\nexport var goldDark = [\"#2b2111\", \"#443111\", \"#594214\", \"#7c5914\", \"#aa7714\", \"#d89614\", \"#e8b339\", \"#f3cc62\", \"#f8df8b\", \"#faedb5\"];\ngoldDark.primary = goldDark[5];\nexport var yellowDark = [\"#2b2611\", \"#443b11\", \"#595014\", \"#7c6e14\", \"#aa9514\", \"#d8bd14\", \"#e8d639\", \"#f3ea62\", \"#f8f48b\", \"#fafab5\"];\nyellowDark.primary = yellowDark[5];\nexport var limeDark = [\"#1f2611\", \"#2e3c10\", \"#3e4f13\", \"#536d13\", \"#6f9412\", \"#8bbb11\", \"#a9d134\", \"#c9e75d\", \"#e4f88b\", \"#f0fab5\"];\nlimeDark.primary = limeDark[5];\nexport var greenDark = [\"#162312\", \"#1d3712\", \"#274916\", \"#306317\", \"#3c8618\", \"#49aa19\", \"#6abe39\", \"#8fd460\", \"#b2e58b\", \"#d5f2bb\"];\ngreenDark.primary = greenDark[5];\nexport var cyanDark = [\"#112123\", \"#113536\", \"#144848\", \"#146262\", \"#138585\", \"#13a8a8\", \"#33bcb7\", \"#58d1c9\", \"#84e2d8\", \"#b2f1e8\"];\ncyanDark.primary = cyanDark[5];\nexport var blueDark = [\"#111a2c\", \"#112545\", \"#15325b\", \"#15417e\", \"#1554ad\", \"#1668dc\", \"#3c89e8\", \"#65a9f3\", \"#8dc5f8\", \"#b7dcfa\"];\nblueDark.primary = blueDark[5];\nexport var geekblueDark = [\"#131629\", \"#161d40\", \"#1c2755\", \"#203175\", \"#263ea0\", \"#2b4acb\", \"#5273e0\", \"#7f9ef3\", \"#a8c1f8\", \"#d2e0fa\"];\ngeekblueDark.primary = geekblueDark[5];\nexport var purpleDark = [\"#1a1325\", \"#24163a\", \"#301c4d\", \"#3e2069\", \"#51258f\", \"#642ab5\", \"#854eca\", \"#ab7ae0\", \"#cda8f0\", \"#ebd7fa\"];\npurpleDark.primary = purpleDark[5];\nexport var magentaDark = [\"#291321\", \"#40162f\", \"#551c3b\", \"#75204f\", \"#a02669\", \"#cb2b83\", \"#e0529c\", \"#f37fb7\", \"#f8a8cc\", \"#fad2e3\"];\nmagentaDark.primary = magentaDark[5];\nexport var greyDark = [\"#151515\", \"#1f1f1f\", \"#2d2d2d\", \"#393939\", \"#494949\", \"#5a5a5a\", \"#6a6a6a\", \"#7b7b7b\", \"#888888\", \"#969696\"];\ngreyDark.primary = greyDark[5];\nexport var presetDarkPalettes = {\n  red: redDark,\n  volcano: volcanoDark,\n  orange: orangeDark,\n  gold: goldDark,\n  yellow: yellowDark,\n  lime: limeDark,\n  green: greenDark,\n  cyan: cyanDark,\n  blue: blueDark,\n  geekblue: geekblueDark,\n  purple: purpleDark,\n  magenta: magentaDark,\n  grey: greyDark\n};","export const defaultPresetColors = {\n  blue: '#1677FF',\n  purple: '#722ED1',\n  cyan: '#13C2C2',\n  green: '#52C41A',\n  magenta: '#EB2F96',\n  /**\n   * @deprecated Use magenta instead\n   */\n  pink: '#EB2F96',\n  red: '#F5222D',\n  orange: '#FA8C16',\n  yellow: '#FADB14',\n  volcano: '#FA541C',\n  geekblue: '#2F54EB',\n  gold: '#FAAD14',\n  lime: '#A0D911'\n};\nconst seedToken = Object.assign(Object.assign({}, defaultPresetColors), {\n  // Color\n  colorPrimary: '#1677ff',\n  colorSuccess: '#52c41a',\n  colorWarning: '#faad14',\n  colorError: '#ff4d4f',\n  colorInfo: '#1677ff',\n  colorLink: '',\n  colorTextBase: '',\n  colorBgBase: '',\n  // Font\n  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'`,\n  fontFamilyCode: `'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace`,\n  fontSize: 14,\n  // Line\n  lineWidth: 1,\n  lineType: 'solid',\n  // Motion\n  motionUnit: 0.1,\n  motionBase: 0,\n  motionEaseOutCirc: 'cubic-bezier(0.08, 0.82, 0.17, 1)',\n  motionEaseInOutCirc: 'cubic-bezier(0.78, 0.14, 0.15, 0.86)',\n  motionEaseOut: 'cubic-bezier(0.215, 0.61, 0.355, 1)',\n  motionEaseInOut: 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n  motionEaseOutBack: 'cubic-bezier(0.12, 0.4, 0.29, 1.46)',\n  motionEaseInBack: 'cubic-bezier(0.71, -0.46, 0.88, 0.6)',\n  motionEaseInQuint: 'cubic-bezier(0.755, 0.05, 0.855, 0.06)',\n  motionEaseOutQuint: 'cubic-bezier(0.23, 1, 0.32, 1)',\n  // Radius\n  borderRadius: 6,\n  // Size\n  sizeUnit: 4,\n  sizeStep: 4,\n  sizePopupArrow: 16,\n  // Control Base\n  controlHeight: 32,\n  // zIndex\n  zIndexBase: 0,\n  zIndexPopupBase: 1000,\n  // Image\n  opacityImage: 1,\n  // Wireframe\n  wireframe: false,\n  // Motion\n  motion: true\n});\nexport default seedToken;","const genRadius = radiusBase => {\n  let radiusLG = radiusBase;\n  let radiusSM = radiusBase;\n  let radiusXS = radiusBase;\n  let radiusOuter = radiusBase;\n  // radiusLG\n  if (radiusBase < 6 && radiusBase >= 5) {\n    radiusLG = radiusBase + 1;\n  } else if (radiusBase < 16 && radiusBase >= 6) {\n    radiusLG = radiusBase + 2;\n  } else if (radiusBase >= 16) {\n    radiusLG = 16;\n  }\n  // radiusSM\n  if (radiusBase < 7 && radiusBase >= 5) {\n    radiusSM = 4;\n  } else if (radiusBase < 8 && radiusBase >= 7) {\n    radiusSM = 5;\n  } else if (radiusBase < 14 && radiusBase >= 8) {\n    radiusSM = 6;\n  } else if (radiusBase < 16 && radiusBase >= 14) {\n    radiusSM = 7;\n  } else if (radiusBase >= 16) {\n    radiusSM = 8;\n  }\n  // radiusXS\n  if (radiusBase < 6 && radiusBase >= 2) {\n    radiusXS = 1;\n  } else if (radiusBase >= 6) {\n    radiusXS = 2;\n  }\n  // radiusOuter\n  if (radiusBase > 4 && radiusBase < 8) {\n    radiusOuter = 4;\n  } else if (radiusBase >= 8) {\n    radiusOuter = 6;\n  }\n  return {\n    borderRadius: radiusBase,\n    borderRadiusXS: radiusXS,\n    borderRadiusSM: radiusSM,\n    borderRadiusLG: radiusLG,\n    borderRadiusOuter: radiusOuter\n  };\n};\nexport default genRadius;","const genControlHeight = token => {\n  const {\n    controlHeight\n  } = token;\n  return {\n    controlHeightSM: controlHeight * 0.75,\n    controlHeightXS: controlHeight * 0.5,\n    controlHeightLG: controlHeight * 1.25\n  };\n};\nexport default genControlHeight;","import genFontSizes from './genFontSizes';\nconst genFontMapToken = fontSize => {\n  const fontSizePairs = genFontSizes(fontSize);\n  const fontSizes = fontSizePairs.map(pair => pair.size);\n  const lineHeights = fontSizePairs.map(pair => pair.lineHeight);\n  const fontSizeMD = fontSizes[1];\n  const fontSizeSM = fontSizes[0];\n  const fontSizeLG = fontSizes[2];\n  const lineHeight = lineHeights[1];\n  const lineHeightSM = lineHeights[0];\n  const lineHeightLG = lineHeights[2];\n  return {\n    fontSizeSM,\n    fontSize: fontSizeMD,\n    fontSizeLG,\n    fontSizeXL: fontSizes[3],\n    fontSizeHeading1: fontSizes[6],\n    fontSizeHeading2: fontSizes[5],\n    fontSizeHeading3: fontSizes[4],\n    fontSizeHeading4: fontSizes[3],\n    fontSizeHeading5: fontSizes[2],\n    lineHeight,\n    lineHeightLG,\n    lineHeightSM,\n    fontHeight: Math.round(lineHeight * fontSizeMD),\n    fontHeightLG: Math.round(lineHeightLG * fontSizeLG),\n    fontHeightSM: Math.round(lineHeightSM * fontSizeSM),\n    lineHeightHeading1: lineHeights[6],\n    lineHeightHeading2: lineHeights[5],\n    lineHeightHeading3: lineHeights[4],\n    lineHeightHeading4: lineHeights[3],\n    lineHeightHeading5: lineHeights[2]\n  };\n};\nexport default genFontMapToken;","export function getLineHeight(fontSize) {\n  return (fontSize + 8) / fontSize;\n}\n// https://zhuanlan.zhihu.com/p/32746810\nexport default function getFontSizes(base) {\n  const fontSizes = Array.from({\n    length: 10\n  }).map((_, index) => {\n    const i = index - 1;\n    const baseSize = base * Math.pow(Math.E, i / 5);\n    const intSize = index > 1 ? Math.floor(baseSize) : Math.ceil(baseSize);\n    // Convert to even\n    return Math.floor(intSize / 2) * 2;\n  });\n  fontSizes[1] = base;\n  return fontSizes.map(size => ({\n    size,\n    lineHeight: getLineHeight(size)\n  }));\n}","import { FastColor } from '@ant-design/fast-color';\nexport const getAlphaColor = (baseColor, alpha) => new FastColor(baseColor).setA(alpha).toRgbString();\nexport const getSolidColor = (baseColor, brightness) => {\n  const instance = new FastColor(baseColor);\n  return instance.darken(brightness).toHexString();\n};","import { generate } from '@ant-design/colors';\nimport { getAlphaColor, getSolidColor } from './colorAlgorithm';\nexport const generateColorPalettes = baseColor => {\n  const colors = generate(baseColor);\n  return {\n    1: colors[0],\n    2: colors[1],\n    3: colors[2],\n    4: colors[3],\n    5: colors[4],\n    6: colors[5],\n    7: colors[6],\n    8: colors[4],\n    9: colors[5],\n    10: colors[6]\n    // 8: colors[7],\n    // 9: colors[8],\n    // 10: colors[9],\n  };\n};\nexport const generateNeutralColorPalettes = (bgBaseColor, textBaseColor) => {\n  const colorBgBase = bgBaseColor || '#fff';\n  const colorTextBase = textBaseColor || '#000';\n  return {\n    colorBgBase,\n    colorTextBase,\n    colorText: getAlphaColor(colorTextBase, 0.88),\n    colorTextSecondary: getAlphaColor(colorTextBase, 0.65),\n    colorTextTertiary: getAlphaColor(colorTextBase, 0.45),\n    colorTextQuaternary: getAlphaColor(colorTextBase, 0.25),\n    colorFill: getAlphaColor(colorTextBase, 0.15),\n    colorFillSecondary: getAlphaColor(colorTextBase, 0.06),\n    colorFillTertiary: getAlphaColor(colorTextBase, 0.04),\n    colorFillQuaternary: getAlphaColor(colorTextBase, 0.02),\n    colorBgSolid: getAlphaColor(colorTextBase, 1),\n    colorBgSolidHover: getAlphaColor(colorTextBase, 0.75),\n    colorBgSolidActive: getAlphaColor(colorTextBase, 0.95),\n    colorBgLayout: getSolidColor(colorBgBase, 4),\n    colorBgContainer: getSolidColor(colorBgBase, 0),\n    colorBgElevated: getSolidColor(colorBgBase, 0),\n    colorBgSpotlight: getAlphaColor(colorTextBase, 0.85),\n    colorBgBlur: 'transparent',\n    colorBorder: getSolidColor(colorBgBase, 15),\n    colorBorderSecondary: getSolidColor(colorBgBase, 6)\n  };\n};","import { createTheme } from '@ant-design/cssinjs';\nimport defaultDerivative from './index';\nconst defaultTheme = createTheme(defaultDerivative);\nexport default defaultTheme;","import { generate, presetPalettes, presetPrimaryColors } from '@ant-design/colors';\nimport { defaultPresetColors } from '../seed';\nimport genColorMapToken from '../shared/genColorMapToken';\nimport genCommonMapToken from '../shared/genCommonMapToken';\nimport genControlHeight from '../shared/genControlHeight';\nimport genFontMapToken from '../shared/genFontMapToken';\nimport genSizeMapToken from '../shared/genSizeMapToken';\nimport { generateColorPalettes, generateNeutralColorPalettes } from './colors';\nexport default function derivative(token) {\n  // pink is deprecated name of magenta, keep this for backwards compatibility\n  presetPrimaryColors.pink = presetPrimaryColors.magenta;\n  presetPalettes.pink = presetPalettes.magenta;\n  const colorPalettes = Object.keys(defaultPresetColors).map(colorKey => {\n    const colors = token[colorKey] === presetPrimaryColors[colorKey] ? presetPalettes[colorKey] : generate(token[colorKey]);\n    return Array.from({\n      length: 10\n    }, () => 1).reduce((prev, _, i) => {\n      prev[`${colorKey}-${i + 1}`] = colors[i];\n      prev[`${colorKey}${i + 1}`] = colors[i];\n      return prev;\n    }, {});\n  }).reduce((prev, cur) => {\n    // biome-ignore lint/style/noParameterAssign: it is a reduce\n    prev = Object.assign(Object.assign({}, prev), cur);\n    return prev;\n  }, {});\n  return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, token), colorPalettes), genColorMapToken(token, {\n    generateColorPalettes,\n    generateNeutralColorPalettes\n  })), genFontMapToken(token.fontSize)), genSizeMapToken(token)), genControlHeight(token)), genCommonMapToken(token));\n}","import { FastColor } from '@ant-design/fast-color';\nexport default function genColorMapToken(seed, {\n  generateColorPalettes,\n  generateNeutralColorPalettes\n}) {\n  const {\n    colorSuccess: colorSuccessBase,\n    colorWarning: colorWarningBase,\n    colorError: colorErrorBase,\n    colorInfo: colorInfoBase,\n    colorPrimary: colorPrimaryBase,\n    colorBgBase,\n    colorTextBase\n  } = seed;\n  const primaryColors = generateColorPalettes(colorPrimaryBase);\n  const successColors = generateColorPalettes(colorSuccessBase);\n  const warningColors = generateColorPalettes(colorWarningBase);\n  const errorColors = generateColorPalettes(colorErrorBase);\n  const infoColors = generateColorPalettes(colorInfoBase);\n  const neutralColors = generateNeutralColorPalettes(colorBgBase, colorTextBase);\n  // Color Link\n  const colorLink = seed.colorLink || seed.colorInfo;\n  const linkColors = generateColorPalettes(colorLink);\n  const colorErrorBgFilledHover = new FastColor(errorColors[1]).mix(new FastColor(errorColors[3]), 50).toHexString();\n  return Object.assign(Object.assign({}, neutralColors), {\n    colorPrimaryBg: primaryColors[1],\n    colorPrimaryBgHover: primaryColors[2],\n    colorPrimaryBorder: primaryColors[3],\n    colorPrimaryBorderHover: primaryColors[4],\n    colorPrimaryHover: primaryColors[5],\n    colorPrimary: primaryColors[6],\n    colorPrimaryActive: primaryColors[7],\n    colorPrimaryTextHover: primaryColors[8],\n    colorPrimaryText: primaryColors[9],\n    colorPrimaryTextActive: primaryColors[10],\n    colorSuccessBg: successColors[1],\n    colorSuccessBgHover: successColors[2],\n    colorSuccessBorder: successColors[3],\n    colorSuccessBorderHover: successColors[4],\n    colorSuccessHover: successColors[4],\n    colorSuccess: successColors[6],\n    colorSuccessActive: successColors[7],\n    colorSuccessTextHover: successColors[8],\n    colorSuccessText: successColors[9],\n    colorSuccessTextActive: successColors[10],\n    colorErrorBg: errorColors[1],\n    colorErrorBgHover: errorColors[2],\n    colorErrorBgFilledHover,\n    colorErrorBgActive: errorColors[3],\n    colorErrorBorder: errorColors[3],\n    colorErrorBorderHover: errorColors[4],\n    colorErrorHover: errorColors[5],\n    colorError: errorColors[6],\n    colorErrorActive: errorColors[7],\n    colorErrorTextHover: errorColors[8],\n    colorErrorText: errorColors[9],\n    colorErrorTextActive: errorColors[10],\n    colorWarningBg: warningColors[1],\n    colorWarningBgHover: warningColors[2],\n    colorWarningBorder: warningColors[3],\n    colorWarningBorderHover: warningColors[4],\n    colorWarningHover: warningColors[4],\n    colorWarning: warningColors[6],\n    colorWarningActive: warningColors[7],\n    colorWarningTextHover: warningColors[8],\n    colorWarningText: warningColors[9],\n    colorWarningTextActive: warningColors[10],\n    colorInfoBg: infoColors[1],\n    colorInfoBgHover: infoColors[2],\n    colorInfoBorder: infoColors[3],\n    colorInfoBorderHover: infoColors[4],\n    colorInfoHover: infoColors[4],\n    colorInfo: infoColors[6],\n    colorInfoActive: infoColors[7],\n    colorInfoTextHover: infoColors[8],\n    colorInfoText: infoColors[9],\n    colorInfoTextActive: infoColors[10],\n    colorLinkHover: linkColors[4],\n    colorLink: linkColors[6],\n    colorLinkActive: linkColors[7],\n    colorBgMask: new FastColor('#000').setA(0.45).toRgbString(),\n    colorWhite: '#fff'\n  });\n}","export default function genSizeMapToken(token) {\n  const {\n    sizeUnit,\n    sizeStep\n  } = token;\n  return {\n    sizeXXL: sizeUnit * (sizeStep + 8),\n    // 48\n    sizeXL: sizeUnit * (sizeStep + 4),\n    // 32\n    sizeLG: sizeUnit * (sizeStep + 2),\n    // 24\n    sizeMD: sizeUnit * (sizeStep + 1),\n    // 20\n    sizeMS: sizeUnit * sizeStep,\n    // 16\n    size: sizeUnit * sizeStep,\n    // 16\n    sizeSM: sizeUnit * (sizeStep - 1),\n    // 12\n    sizeXS: sizeUnit * (sizeStep - 2),\n    // 8\n    sizeXXS: sizeUnit * (sizeStep - 3) // 4\n  };\n}","import genRadius from './genRadius';\nexport default function genCommonMapToken(token) {\n  const {\n    motionUnit,\n    motionBase,\n    borderRadius,\n    lineWidth\n  } = token;\n  return Object.assign({\n    // motion\n    motionDurationFast: `${(motionBase + motionUnit).toFixed(1)}s`,\n    motionDurationMid: `${(motionBase + motionUnit * 2).toFixed(1)}s`,\n    motionDurationSlow: `${(motionBase + motionUnit * 3).toFixed(1)}s`,\n    // line\n    lineWidthBold: lineWidth + 1\n  }, genRadius(borderRadius));\n}","import React from 'react';\nimport defaultSeedToken from './themes/seed';\nexport { default as defaultTheme } from './themes/default/theme';\n// ================================ Context =================================\n// To ensure snapshot stable. We disable hashed in test env.\nexport const defaultConfig = {\n  token: defaultSeedToken,\n  override: {\n    override: defaultSeedToken\n  },\n  hashed: true\n};\nexport const DesignTokenContext = /*#__PURE__*/React.createContext(defaultConfig);","import { generate } from '@ant-design/colors';\nimport { FastColor } from '@ant-design/fast-color';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport warning from '../_util/warning';\nconst dynamicStyleMark = `-ant-${Date.now()}-${Math.random()}`;\nexport function getStyle(globalPrefixCls, theme) {\n  const variables = {};\n  const formatColor = (color, updater) => {\n    let clone = color.clone();\n    clone = (updater === null || updater === void 0 ? void 0 : updater(clone)) || clone;\n    return clone.toRgbString();\n  };\n  const fillColor = (colorVal, type) => {\n    const baseColor = new FastColor(colorVal);\n    const colorPalettes = generate(baseColor.toRgbString());\n    variables[`${type}-color`] = formatColor(baseColor);\n    variables[`${type}-color-disabled`] = colorPalettes[1];\n    variables[`${type}-color-hover`] = colorPalettes[4];\n    variables[`${type}-color-active`] = colorPalettes[6];\n    variables[`${type}-color-outline`] = baseColor.clone().setA(0.2).toRgbString();\n    variables[`${type}-color-deprecated-bg`] = colorPalettes[0];\n    variables[`${type}-color-deprecated-border`] = colorPalettes[2];\n  };\n  // ================ Primary Color ================\n  if (theme.primaryColor) {\n    fillColor(theme.primaryColor, 'primary');\n    const primaryColor = new FastColor(theme.primaryColor);\n    const primaryColors = generate(primaryColor.toRgbString());\n    // Legacy - We should use semantic naming standard\n    primaryColors.forEach((color, index) => {\n      variables[`primary-${index + 1}`] = color;\n    });\n    // Deprecated\n    variables['primary-color-deprecated-l-35'] = formatColor(primaryColor, c => c.lighten(35));\n    variables['primary-color-deprecated-l-20'] = formatColor(primaryColor, c => c.lighten(20));\n    variables['primary-color-deprecated-t-20'] = formatColor(primaryColor, c => c.tint(20));\n    variables['primary-color-deprecated-t-50'] = formatColor(primaryColor, c => c.tint(50));\n    variables['primary-color-deprecated-f-12'] = formatColor(primaryColor, c => c.setA(c.a * 0.12));\n    const primaryActiveColor = new FastColor(primaryColors[0]);\n    variables['primary-color-active-deprecated-f-30'] = formatColor(primaryActiveColor, c => c.setA(c.a * 0.3));\n    variables['primary-color-active-deprecated-d-02'] = formatColor(primaryActiveColor, c => c.darken(2));\n  }\n  // ================ Success Color ================\n  if (theme.successColor) {\n    fillColor(theme.successColor, 'success');\n  }\n  // ================ Warning Color ================\n  if (theme.warningColor) {\n    fillColor(theme.warningColor, 'warning');\n  }\n  // ================= Error Color =================\n  if (theme.errorColor) {\n    fillColor(theme.errorColor, 'error');\n  }\n  // ================= Info Color ==================\n  if (theme.infoColor) {\n    fillColor(theme.infoColor, 'info');\n  }\n  // Convert to css variables\n  const cssList = Object.keys(variables).map(key => `--${globalPrefixCls}-${key}: ${variables[key]};`);\n  return `\n  :root {\n    ${cssList.join('\\n')}\n  }\n  `.trim();\n}\nexport function registerTheme(globalPrefixCls, theme) {\n  const style = getStyle(globalPrefixCls, theme);\n  if (canUseDom()) {\n    updateCSS(style, `${dynamicStyleMark}-dynamic-theme`);\n  } else {\n    process.env.NODE_ENV !== \"production\" ? warning(false, 'ConfigProvider', 'SSR do not support dynamic theme with css variables.') : void 0;\n  }\n}","\"use client\";\n\nimport * as React from 'react';\nconst DisabledContext = /*#__PURE__*/React.createContext(false);\nexport const DisabledContextProvider = ({\n  children,\n  disabled\n}) => {\n  const originDisabled = React.useContext(DisabledContext);\n  return /*#__PURE__*/React.createElement(DisabledContext.Provider, {\n    value: disabled !== null && disabled !== void 0 ? disabled : originDisabled\n  }, children);\n};\nexport default DisabledContext;","\"use client\";\n\nimport * as React from 'react';\nconst SizeContext = /*#__PURE__*/React.createContext(undefined);\nexport const SizeContextProvider = ({\n  children,\n  size\n}) => {\n  const originSize = React.useContext(SizeContext);\n  return /*#__PURE__*/React.createElement(SizeContext.Provider, {\n    value: size || originSize\n  }, children);\n};\nexport default SizeContext;","import { useContext } from 'react';\nimport DisabledContext from '../DisabledContext';\nimport SizeContext from '../SizeContext';\nfunction useConfig() {\n  const componentDisabled = useContext(DisabledContext);\n  const componentSize = useContext(SizeContext);\n  return {\n    componentDisabled,\n    componentSize\n  };\n}\nexport default useConfig;","import * as React from 'react';\nconst fullClone = Object.assign({}, React);\nconst {\n  useId\n} = fullClone;\nconst useEmptyId = () => '';\nconst useThemeKey = typeof useId === 'undefined' ? useEmptyId : useId;\nexport default useThemeKey;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nexport function isDOM(node) {\n  // https://developer.mozilla.org/en-US/docs/Web/API/Element\n  // Since XULElement is also subclass of Element, we only need HTMLElement and SVGElement\n  return node instanceof HTMLElement || node instanceof SVGElement;\n}\n\n/**\n * Retrieves a DOM node via a ref, and does not invoke `findDOMNode`.\n */\nexport function getDOM(node) {\n  if (node && _typeof(node) === 'object' && isDOM(node.nativeElement)) {\n    return node.nativeElement;\n  }\n  if (isDOM(node)) {\n    return node;\n  }\n  return null;\n}\n\n/**\n * Return if a node is a DOM node. Else will return by `findDOMNode`\n */\nexport default function findDOMNode(node) {\n  var domNode = getDOM(node);\n  if (domNode) {\n    return domNode;\n  }\n  if (node instanceof React.Component) {\n    var _ReactDOM$findDOMNode;\n    return (_ReactDOM$findDOMNode = ReactDOM.findDOMNode) === null || _ReactDOM$findDOMNode === void 0 ? void 0 : _ReactDOM$findDOMNode.call(ReactDOM, node);\n  }\n  return null;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar REACT_ELEMENT_TYPE_18 = Symbol.for('react.element');\nvar REACT_ELEMENT_TYPE_19 = Symbol.for('react.transitional.element');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\n\n/**\n * Compatible with React 18 or 19 to check if node is a Fragment.\n */\nexport default function isFragment(object) {\n  return (\n    // Base object type\n    object && _typeof(object) === 'object' && (\n    // React Element type\n    object.$$typeof === REACT_ELEMENT_TYPE_18 || object.$$typeof === REACT_ELEMENT_TYPE_19) &&\n    // React Fragment type\n    object.type === REACT_FRAGMENT_TYPE\n  );\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { isValidElement, version } from 'react';\nimport { ForwardRef, isMemo } from 'react-is';\nimport useMemo from \"./hooks/useMemo\";\nimport isFragment from \"./React/isFragment\";\nvar ReactMajorVersion = Number(version.split('.')[0]);\nexport var fillRef = function fillRef(ref, node) {\n  if (typeof ref === 'function') {\n    ref(node);\n  } else if (_typeof(ref) === 'object' && ref && 'current' in ref) {\n    ref.current = node;\n  }\n};\n\n/**\n * Merge refs into one ref function to support ref passing.\n */\nexport var composeRef = function composeRef() {\n  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n    refs[_key] = arguments[_key];\n  }\n  var refList = refs.filter(Boolean);\n  if (refList.length <= 1) {\n    return refList[0];\n  }\n  return function (node) {\n    refs.forEach(function (ref) {\n      fillRef(ref, node);\n    });\n  };\n};\nexport var useComposeRef = function useComposeRef() {\n  for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    refs[_key2] = arguments[_key2];\n  }\n  return useMemo(function () {\n    return composeRef.apply(void 0, refs);\n  }, refs, function (prev, next) {\n    return prev.length !== next.length || prev.every(function (ref, i) {\n      return ref !== next[i];\n    });\n  });\n};\nexport var supportRef = function supportRef(nodeOrComponent) {\n  var _type$prototype, _nodeOrComponent$prot;\n  if (!nodeOrComponent) {\n    return false;\n  }\n\n  // React 19 no need `forwardRef` anymore. So just pass if is a React element.\n  if (isReactElement(nodeOrComponent) && ReactMajorVersion >= 19) {\n    return true;\n  }\n  var type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type;\n\n  // Function component node\n  if (typeof type === 'function' && !((_type$prototype = type.prototype) !== null && _type$prototype !== void 0 && _type$prototype.render) && type.$$typeof !== ForwardRef) {\n    return false;\n  }\n\n  // Class component\n  if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) !== null && _nodeOrComponent$prot !== void 0 && _nodeOrComponent$prot.render) && nodeOrComponent.$$typeof !== ForwardRef) {\n    return false;\n  }\n  return true;\n};\nfunction isReactElement(node) {\n  return /*#__PURE__*/isValidElement(node) && !isFragment(node);\n}\nexport var supportNodeRef = function supportNodeRef(node) {\n  return isReactElement(node) && supportRef(node);\n};\n\n/**\n * In React 19. `ref` is not a property from node.\n * But a property from `props.ref`.\n * To check if `props.ref` exist or fallback to `ref`.\n */\nexport var getNodeRef = function getNodeRef(node) {\n  if (node && isReactElement(node)) {\n    var ele = node;\n\n    // Source from:\n    // https://github.com/mui/material-ui/blob/master/packages/mui-utils/src/getReactNodeRef/getReactNodeRef.ts\n    return ele.props.propertyIsEnumerable('ref') ? ele.props.ref : ele.ref;\n  }\n  return null;\n};","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport * as React from 'react';\nexport var Context = /*#__PURE__*/React.createContext({});\nexport default function MotionProvider(_ref) {\n  var children = _ref.children,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: props\n  }, children);\n}","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}\nexport { _isNativeReflectConstruct as default };","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n  var r = isNativeReflectConstruct();\n  return function () {\n    var e,\n      o = getPrototypeOf(t);\n    if (r) {\n      var s = getPrototypeOf(this).constructor;\n      e = Reflect.construct(o, arguments, s);\n    } else e = o.apply(this, arguments);\n    return possibleConstructorReturn(this, e);\n  };\n}\nexport { _createSuper as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nvar DomWrapper = /*#__PURE__*/function (_React$Component) {\n  _inherits(DomWrapper, _React$Component);\n  var _super = _createSuper(DomWrapper);\n  function DomWrapper() {\n    _classCallCheck(this, DomWrapper);\n    return _super.apply(this, arguments);\n  }\n  _createClass(DomWrapper, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n  return DomWrapper;\n}(React.Component);\nexport default DomWrapper;","import * as React from 'react';\nexport default function useEvent(callback) {\n  var fnRef = React.useRef();\n  fnRef.current = callback;\n  var memoFn = React.useCallback(function () {\n    var _fnRef$current;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return (_fnRef$current = fnRef.current) === null || _fnRef$current === void 0 ? void 0 : _fnRef$current.call.apply(_fnRef$current, [fnRef].concat(args));\n  }, []);\n  return memoFn;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\n/**\n * Same as React.useState but `setState` accept `ignoreDestroy` param to not to setState after destroyed.\n * We do not make this auto is to avoid real memory leak.\n * Developer should confirm it's safe to ignore themselves.\n */\nexport default function useSafeState(defaultValue) {\n  var destroyRef = React.useRef(false);\n  var _React$useState = React.useState(defaultValue),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    value = _React$useState2[0],\n    setValue = _React$useState2[1];\n  React.useEffect(function () {\n    destroyRef.current = false;\n    return function () {\n      destroyRef.current = true;\n    };\n  }, []);\n  function safeSetState(updater, ignoreDestroy) {\n    if (ignoreDestroy && destroyRef.current) {\n      return;\n    }\n    setValue(updater);\n  }\n  return [value, safeSetState];\n}","export var STATUS_NONE = 'none';\nexport var STATUS_APPEAR = 'appear';\nexport var STATUS_ENTER = 'enter';\nexport var STATUS_LEAVE = 'leave';\nexport var STEP_NONE = 'none';\nexport var STEP_PREPARE = 'prepare';\nexport var STEP_START = 'start';\nexport var STEP_ACTIVE = 'active';\nexport var STEP_ACTIVATED = 'end';\n/**\n * Used for disabled motion case.\n * Prepare stage will still work but start & active will be skipped.\n */\nexport var STEP_PREPARED = 'prepared';","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport canUseDOM from \"rc-util/es/Dom/canUseDom\";\n// ================= Transition =================\n// Event wrapper. Copy from react source code\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\".concat(styleProp)] = \"webkit\".concat(eventName);\n  prefixes[\"Moz\".concat(styleProp)] = \"moz\".concat(eventName);\n  prefixes[\"ms\".concat(styleProp)] = \"MS\".concat(eventName);\n  prefixes[\"O\".concat(styleProp)] = \"o\".concat(eventName.toLowerCase());\n  return prefixes;\n}\nexport function getVendorPrefixes(domSupport, win) {\n  var prefixes = {\n    animationend: makePrefixMap('Animation', 'AnimationEnd'),\n    transitionend: makePrefixMap('Transition', 'TransitionEnd')\n  };\n  if (domSupport) {\n    if (!('AnimationEvent' in win)) {\n      delete prefixes.animationend.animation;\n    }\n    if (!('TransitionEvent' in win)) {\n      delete prefixes.transitionend.transition;\n    }\n  }\n  return prefixes;\n}\nvar vendorPrefixes = getVendorPrefixes(canUseDOM(), typeof window !== 'undefined' ? window : {});\nvar style = {};\nif (canUseDOM()) {\n  var _document$createEleme = document.createElement('div');\n  style = _document$createEleme.style;\n}\nvar prefixedEventNames = {};\nexport function getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  }\n  var prefixMap = vendorPrefixes[eventName];\n  if (prefixMap) {\n    var stylePropList = Object.keys(prefixMap);\n    var len = stylePropList.length;\n    for (var i = 0; i < len; i += 1) {\n      var styleProp = stylePropList[i];\n      if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {\n        prefixedEventNames[eventName] = prefixMap[styleProp];\n        return prefixedEventNames[eventName];\n      }\n    }\n  }\n  return '';\n}\nvar internalAnimationEndName = getVendorPrefixedEventName('animationend');\nvar internalTransitionEndName = getVendorPrefixedEventName('transitionend');\nexport var supportTransition = !!(internalAnimationEndName && internalTransitionEndName);\nexport var animationEndName = internalAnimationEndName || 'animationend';\nexport var transitionEndName = internalTransitionEndName || 'transitionend';\nexport function getTransitionName(transitionName, transitionType) {\n  if (!transitionName) return null;\n  if (_typeof(transitionName) === 'object') {\n    var type = transitionType.replace(/-\\w/g, function (match) {\n      return match[1].toUpperCase();\n    });\n    return transitionName[type];\n  }\n  return \"\".concat(transitionName, \"-\").concat(transitionType);\n}","import canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { useEffect, useLayoutEffect } from 'react';\n\n// It's safe to use `useLayoutEffect` but the warning is annoying\nvar useIsomorphicLayoutEffect = canUseDom() ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;","var raf = function raf(callback) {\n  return +setTimeout(callback, 16);\n};\nvar caf = function caf(num) {\n  return clearTimeout(num);\n};\nif (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {\n  raf = function raf(callback) {\n    return window.requestAnimationFrame(callback);\n  };\n  caf = function caf(handle) {\n    return window.cancelAnimationFrame(handle);\n  };\n}\nvar rafUUID = 0;\nvar rafIds = new Map();\nfunction cleanup(id) {\n  rafIds.delete(id);\n}\nvar wrapperRaf = function wrapperRaf(callback) {\n  var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  rafUUID += 1;\n  var id = rafUUID;\n  function callRef(leftTimes) {\n    if (leftTimes === 0) {\n      // Clean up\n      cleanup(id);\n\n      // Trigger\n      callback();\n    } else {\n      // Next raf\n      var realId = raf(function () {\n        callRef(leftTimes - 1);\n      });\n\n      // Bind real raf id\n      rafIds.set(id, realId);\n    }\n  }\n  callRef(times);\n  return id;\n};\nwrapperRaf.cancel = function (id) {\n  var realId = rafIds.get(id);\n  cleanup(id);\n  return caf(realId);\n};\nif (process.env.NODE_ENV !== 'production') {\n  wrapperRaf.ids = function () {\n    return rafIds;\n  };\n}\nexport default wrapperRaf;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport useState from \"rc-util/es/hooks/useState\";\nimport * as React from 'react';\nimport { STEP_ACTIVATED, STEP_ACTIVE, STEP_NONE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useNextFrame from \"./useNextFrame\";\nvar FULL_STEP_QUEUE = [STEP_PREPARE, STEP_START, STEP_ACTIVE, STEP_ACTIVATED];\nvar SIMPLE_STEP_QUEUE = [STEP_PREPARE, STEP_PREPARED];\n\n/** Skip current step */\nexport var SkipStep = false;\n/** Current step should be update in */\nexport var DoStep = true;\nexport function isActive(step) {\n  return step === STEP_ACTIVE || step === STEP_ACTIVATED;\n}\nexport default (function (status, prepareOnly, callback) {\n  var _useState = useState(STEP_NONE),\n    _useState2 = _slicedToArray(_useState, 2),\n    step = _useState2[0],\n    setStep = _useState2[1];\n  var _useNextFrame = useNextFrame(),\n    _useNextFrame2 = _slicedToArray(_useNextFrame, 2),\n    nextFrame = _useNextFrame2[0],\n    cancelNextFrame = _useNextFrame2[1];\n  function startQueue() {\n    setStep(STEP_PREPARE, true);\n  }\n  var STEP_QUEUE = prepareOnly ? SIMPLE_STEP_QUEUE : FULL_STEP_QUEUE;\n  useIsomorphicLayoutEffect(function () {\n    if (step !== STEP_NONE && step !== STEP_ACTIVATED) {\n      var index = STEP_QUEUE.indexOf(step);\n      var nextStep = STEP_QUEUE[index + 1];\n      var result = callback(step);\n      if (result === SkipStep) {\n        // Skip when no needed\n        setStep(nextStep, true);\n      } else if (nextStep) {\n        // Do as frame for step update\n        nextFrame(function (info) {\n          function doNext() {\n            // Skip since current queue is ood\n            if (info.isCanceled()) return;\n            setStep(nextStep, true);\n          }\n          if (result === true) {\n            doNext();\n          } else {\n            // Only promise should be async\n            Promise.resolve(result).then(doNext);\n          }\n        });\n      }\n    }\n  }, [status, step]);\n  React.useEffect(function () {\n    return function () {\n      cancelNextFrame();\n    };\n  }, []);\n  return [startQueue, step];\n});","import raf from \"rc-util/es/raf\";\nimport * as React from 'react';\nexport default (function () {\n  var nextFrameRef = React.useRef(null);\n  function cancelNextFrame() {\n    raf.cancel(nextFrameRef.current);\n  }\n  function nextFrame(callback) {\n    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n    cancelNextFrame();\n    var nextFrameId = raf(function () {\n      if (delay <= 1) {\n        callback({\n          isCanceled: function isCanceled() {\n            return nextFrameId !== nextFrameRef.current;\n          }\n        });\n      } else {\n        nextFrame(callback, delay - 1);\n      }\n    });\n    nextFrameRef.current = nextFrameId;\n  }\n  React.useEffect(function () {\n    return function () {\n      cancelNextFrame();\n    };\n  }, []);\n  return [nextFrame, cancelNextFrame];\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useEvent } from 'rc-util';\nimport useState from \"rc-util/es/hooks/useState\";\nimport useSyncState from \"rc-util/es/hooks/useSyncState\";\nimport * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { STATUS_APPEAR, STATUS_ENTER, STATUS_LEAVE, STATUS_NONE, STEP_ACTIVE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useDomMotionEvents from \"./useDomMotionEvents\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useStepQueue, { DoStep, isActive, SkipStep } from \"./useStepQueue\";\nexport default function useStatus(supportMotion, visible, getElement, _ref) {\n  var _ref$motionEnter = _ref.motionEnter,\n    motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter,\n    _ref$motionAppear = _ref.motionAppear,\n    motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear,\n    _ref$motionLeave = _ref.motionLeave,\n    motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave,\n    motionDeadline = _ref.motionDeadline,\n    motionLeaveImmediately = _ref.motionLeaveImmediately,\n    onAppearPrepare = _ref.onAppearPrepare,\n    onEnterPrepare = _ref.onEnterPrepare,\n    onLeavePrepare = _ref.onLeavePrepare,\n    onAppearStart = _ref.onAppearStart,\n    onEnterStart = _ref.onEnterStart,\n    onLeaveStart = _ref.onLeaveStart,\n    onAppearActive = _ref.onAppearActive,\n    onEnterActive = _ref.onEnterActive,\n    onLeaveActive = _ref.onLeaveActive,\n    onAppearEnd = _ref.onAppearEnd,\n    onEnterEnd = _ref.onEnterEnd,\n    onLeaveEnd = _ref.onLeaveEnd,\n    onVisibleChanged = _ref.onVisibleChanged;\n  // Used for outer render usage to avoid `visible: false & status: none` to render nothing\n  var _useState = useState(),\n    _useState2 = _slicedToArray(_useState, 2),\n    asyncVisible = _useState2[0],\n    setAsyncVisible = _useState2[1];\n  var _useSyncState = useSyncState(STATUS_NONE),\n    _useSyncState2 = _slicedToArray(_useSyncState, 2),\n    getStatus = _useSyncState2[0],\n    setStatus = _useSyncState2[1];\n  var _useState3 = useState(null),\n    _useState4 = _slicedToArray(_useState3, 2),\n    style = _useState4[0],\n    setStyle = _useState4[1];\n  var currentStatus = getStatus();\n  var mountedRef = useRef(false);\n  var deadlineRef = useRef(null);\n\n  // =========================== Dom Node ===========================\n  function getDomElement() {\n    return getElement();\n  }\n\n  // ========================== Motion End ==========================\n  var activeRef = useRef(false);\n\n  /**\n   * Clean up status & style\n   */\n  function updateMotionEndStatus() {\n    setStatus(STATUS_NONE);\n    setStyle(null, true);\n  }\n  var onInternalMotionEnd = useEvent(function (event) {\n    var status = getStatus();\n    // Do nothing since not in any transition status.\n    // This may happen when `motionDeadline` trigger.\n    if (status === STATUS_NONE) {\n      return;\n    }\n    var element = getDomElement();\n    if (event && !event.deadline && event.target !== element) {\n      // event exists\n      // not initiated by deadline\n      // transitionEnd not fired by inner elements\n      return;\n    }\n    var currentActive = activeRef.current;\n    var canEnd;\n    if (status === STATUS_APPEAR && currentActive) {\n      canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event);\n    } else if (status === STATUS_ENTER && currentActive) {\n      canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event);\n    } else if (status === STATUS_LEAVE && currentActive) {\n      canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event);\n    }\n\n    // Only update status when `canEnd` and not destroyed\n    if (currentActive && canEnd !== false) {\n      updateMotionEndStatus();\n    }\n  });\n  var _useDomMotionEvents = useDomMotionEvents(onInternalMotionEnd),\n    _useDomMotionEvents2 = _slicedToArray(_useDomMotionEvents, 1),\n    patchMotionEvents = _useDomMotionEvents2[0];\n\n  // ============================= Step =============================\n  var getEventHandlers = function getEventHandlers(targetStatus) {\n    switch (targetStatus) {\n      case STATUS_APPEAR:\n        return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onAppearPrepare), STEP_START, onAppearStart), STEP_ACTIVE, onAppearActive);\n      case STATUS_ENTER:\n        return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onEnterPrepare), STEP_START, onEnterStart), STEP_ACTIVE, onEnterActive);\n      case STATUS_LEAVE:\n        return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onLeavePrepare), STEP_START, onLeaveStart), STEP_ACTIVE, onLeaveActive);\n      default:\n        return {};\n    }\n  };\n  var eventHandlers = React.useMemo(function () {\n    return getEventHandlers(currentStatus);\n  }, [currentStatus]);\n  var _useStepQueue = useStepQueue(currentStatus, !supportMotion, function (newStep) {\n      // Only prepare step can be skip\n      if (newStep === STEP_PREPARE) {\n        var onPrepare = eventHandlers[STEP_PREPARE];\n        if (!onPrepare) {\n          return SkipStep;\n        }\n        return onPrepare(getDomElement());\n      }\n\n      // Rest step is sync update\n      if (step in eventHandlers) {\n        var _eventHandlers$step;\n        setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null);\n      }\n      if (step === STEP_ACTIVE && currentStatus !== STATUS_NONE) {\n        // Patch events when motion needed\n        patchMotionEvents(getDomElement());\n        if (motionDeadline > 0) {\n          clearTimeout(deadlineRef.current);\n          deadlineRef.current = setTimeout(function () {\n            onInternalMotionEnd({\n              deadline: true\n            });\n          }, motionDeadline);\n        }\n      }\n      if (step === STEP_PREPARED) {\n        updateMotionEndStatus();\n      }\n      return DoStep;\n    }),\n    _useStepQueue2 = _slicedToArray(_useStepQueue, 2),\n    startStep = _useStepQueue2[0],\n    step = _useStepQueue2[1];\n  var active = isActive(step);\n  activeRef.current = active;\n\n  // ============================ Status ============================\n  var visibleRef = useRef(null);\n\n  // Update with new status\n  useIsomorphicLayoutEffect(function () {\n    // When use Suspense, the `visible` will repeat trigger,\n    // But not real change of the `visible`, we need to skip it.\n    // https://github.com/ant-design/ant-design/issues/44379\n    if (mountedRef.current && visibleRef.current === visible) {\n      return;\n    }\n    setAsyncVisible(visible);\n    var isMounted = mountedRef.current;\n    mountedRef.current = true;\n\n    // if (!supportMotion) {\n    //   return;\n    // }\n\n    var nextStatus;\n\n    // Appear\n    if (!isMounted && visible && motionAppear) {\n      nextStatus = STATUS_APPEAR;\n    }\n\n    // Enter\n    if (isMounted && visible && motionEnter) {\n      nextStatus = STATUS_ENTER;\n    }\n\n    // Leave\n    if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {\n      nextStatus = STATUS_LEAVE;\n    }\n    var nextEventHandlers = getEventHandlers(nextStatus);\n\n    // Update to next status\n    if (nextStatus && (supportMotion || nextEventHandlers[STEP_PREPARE])) {\n      setStatus(nextStatus);\n      startStep();\n    } else {\n      // Set back in case no motion but prev status has prepare step\n      setStatus(STATUS_NONE);\n    }\n    visibleRef.current = visible;\n  }, [visible]);\n\n  // ============================ Effect ============================\n  // Reset when motion changed\n  useEffect(function () {\n    if (\n    // Cancel appear\n    currentStatus === STATUS_APPEAR && !motionAppear ||\n    // Cancel enter\n    currentStatus === STATUS_ENTER && !motionEnter ||\n    // Cancel leave\n    currentStatus === STATUS_LEAVE && !motionLeave) {\n      setStatus(STATUS_NONE);\n    }\n  }, [motionAppear, motionEnter, motionLeave]);\n  useEffect(function () {\n    return function () {\n      mountedRef.current = false;\n      clearTimeout(deadlineRef.current);\n    };\n  }, []);\n\n  // Trigger `onVisibleChanged`\n  var firstMountChangeRef = React.useRef(false);\n  useEffect(function () {\n    // [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged\n    if (asyncVisible) {\n      firstMountChangeRef.current = true;\n    }\n    if (asyncVisible !== undefined && currentStatus === STATUS_NONE) {\n      // Skip first render is invisible since it's nothing changed\n      if (firstMountChangeRef.current || asyncVisible) {\n        onVisibleChanged === null || onVisibleChanged === void 0 || onVisibleChanged(asyncVisible);\n      }\n      firstMountChangeRef.current = true;\n    }\n  }, [asyncVisible, currentStatus]);\n\n  // ============================ Styles ============================\n  var mergedStyle = style;\n  if (eventHandlers[STEP_PREPARE] && step === STEP_START) {\n    mergedStyle = _objectSpread({\n      transition: 'none'\n    }, mergedStyle);\n  }\n  return [currentStatus, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible];\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useEvent from \"./useEvent\";\n/**\n * Same as React.useState but will always get latest state.\n * This is useful when React merge multiple state updates into one.\n * e.g. onTransitionEnd trigger multiple event at once will be merged state update in React.\n */\nexport default function useSyncState(defaultValue) {\n  var _React$useReducer = React.useReducer(function (x) {\n      return x + 1;\n    }, 0),\n    _React$useReducer2 = _slicedToArray(_React$useReducer, 2),\n    forceUpdate = _React$useReducer2[1];\n  var currentValueRef = React.useRef(defaultValue);\n  var getValue = useEvent(function () {\n    return currentValueRef.current;\n  });\n  var setValue = useEvent(function (updater) {\n    currentValueRef.current = typeof updater === 'function' ? updater(currentValueRef.current) : updater;\n    forceUpdate();\n  });\n  return [getValue, setValue];\n}","import * as React from 'react';\nimport { useRef } from 'react';\nimport { animationEndName, transitionEndName } from \"../util/motion\";\nexport default (function (onInternalMotionEnd) {\n  var cacheElementRef = useRef();\n\n  // Remove events\n  function removeMotionEvents(element) {\n    if (element) {\n      element.removeEventListener(transitionEndName, onInternalMotionEnd);\n      element.removeEventListener(animationEndName, onInternalMotionEnd);\n    }\n  }\n\n  // Patch events\n  function patchMotionEvents(element) {\n    if (cacheElementRef.current && cacheElementRef.current !== element) {\n      removeMotionEvents(cacheElementRef.current);\n    }\n    if (element && element !== cacheElementRef.current) {\n      element.addEventListener(transitionEndName, onInternalMotionEnd);\n      element.addEventListener(animationEndName, onInternalMotionEnd);\n\n      // Save as cache in case dom removed trigger by `motionDeadline`\n      cacheElementRef.current = element;\n    }\n  }\n\n  // Clean up when removed\n  React.useEffect(function () {\n    return function () {\n      removeMotionEvents(cacheElementRef.current);\n    };\n  }, []);\n  return [patchMotionEvents, removeMotionEvents];\n});","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */\nimport classNames from 'classnames';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { fillRef, getNodeRef, supportRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport { Context } from \"./context\";\nimport DomWrapper from \"./DomWrapper\";\nimport useStatus from \"./hooks/useStatus\";\nimport { isActive } from \"./hooks/useStepQueue\";\nimport { STATUS_NONE, STEP_PREPARE, STEP_START } from \"./interface\";\nimport { getTransitionName, supportTransition } from \"./util/motion\";\n/**\n * `transitionSupport` is used for none transition test case.\n * Default we use browser transition event support check.\n */\nexport function genCSSMotion(config) {\n  var transitionSupport = config;\n  if (_typeof(config) === 'object') {\n    transitionSupport = config.transitionSupport;\n  }\n  function isSupportTransition(props, contextMotion) {\n    return !!(props.motionName && transitionSupport && contextMotion !== false);\n  }\n  var CSSMotion = /*#__PURE__*/React.forwardRef(function (props, ref) {\n    var _props$visible = props.visible,\n      visible = _props$visible === void 0 ? true : _props$visible,\n      _props$removeOnLeave = props.removeOnLeave,\n      removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave,\n      forceRender = props.forceRender,\n      children = props.children,\n      motionName = props.motionName,\n      leavedClassName = props.leavedClassName,\n      eventProps = props.eventProps;\n    var _React$useContext = React.useContext(Context),\n      contextMotion = _React$useContext.motion;\n    var supportMotion = isSupportTransition(props, contextMotion);\n\n    // Ref to the react node, it may be a HTMLElement\n    var nodeRef = useRef();\n    // Ref to the dom wrapper in case ref can not pass to HTMLElement\n    var wrapperNodeRef = useRef();\n    function getDomElement() {\n      try {\n        // Here we're avoiding call for findDOMNode since it's deprecated\n        // in strict mode. We're calling it only when node ref is not\n        // an instance of DOM HTMLElement. Otherwise use\n        // findDOMNode as a final resort\n        return nodeRef.current instanceof HTMLElement ? nodeRef.current : findDOMNode(wrapperNodeRef.current);\n      } catch (e) {\n        // Only happen when `motionDeadline` trigger but element removed.\n        return null;\n      }\n    }\n    var _useStatus = useStatus(supportMotion, visible, getDomElement, props),\n      _useStatus2 = _slicedToArray(_useStatus, 4),\n      status = _useStatus2[0],\n      statusStep = _useStatus2[1],\n      statusStyle = _useStatus2[2],\n      mergedVisible = _useStatus2[3];\n\n    // Record whether content has rendered\n    // Will return null for un-rendered even when `removeOnLeave={false}`\n    var renderedRef = React.useRef(mergedVisible);\n    if (mergedVisible) {\n      renderedRef.current = true;\n    }\n\n    // ====================== Refs ======================\n    var setNodeRef = React.useCallback(function (node) {\n      nodeRef.current = node;\n      fillRef(ref, node);\n    }, [ref]);\n\n    // ===================== Render =====================\n    var motionChildren;\n    var mergedProps = _objectSpread(_objectSpread({}, eventProps), {}, {\n      visible: visible\n    });\n    if (!children) {\n      // No children\n      motionChildren = null;\n    } else if (status === STATUS_NONE) {\n      // Stable children\n      if (mergedVisible) {\n        motionChildren = children(_objectSpread({}, mergedProps), setNodeRef);\n      } else if (!removeOnLeave && renderedRef.current && leavedClassName) {\n        motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n          className: leavedClassName\n        }), setNodeRef);\n      } else if (forceRender || !removeOnLeave && !leavedClassName) {\n        motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n          style: {\n            display: 'none'\n          }\n        }), setNodeRef);\n      } else {\n        motionChildren = null;\n      }\n    } else {\n      // In motion\n      var statusSuffix;\n      if (statusStep === STEP_PREPARE) {\n        statusSuffix = 'prepare';\n      } else if (isActive(statusStep)) {\n        statusSuffix = 'active';\n      } else if (statusStep === STEP_START) {\n        statusSuffix = 'start';\n      }\n      var motionCls = getTransitionName(motionName, \"\".concat(status, \"-\").concat(statusSuffix));\n      motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n        className: classNames(getTransitionName(motionName, status), _defineProperty(_defineProperty({}, motionCls, motionCls && statusSuffix), motionName, typeof motionName === 'string')),\n        style: statusStyle\n      }), setNodeRef);\n    }\n\n    // Auto inject ref if child node not have `ref` props\n    if ( /*#__PURE__*/React.isValidElement(motionChildren) && supportRef(motionChildren)) {\n      var originNodeRef = getNodeRef(motionChildren);\n      if (!originNodeRef) {\n        motionChildren = /*#__PURE__*/React.cloneElement(motionChildren, {\n          ref: setNodeRef\n        });\n      }\n    }\n    return /*#__PURE__*/React.createElement(DomWrapper, {\n      ref: wrapperNodeRef\n    }, motionChildren);\n  });\n  CSSMotion.displayName = 'CSSMotion';\n  return CSSMotion;\n}\nexport default genCSSMotion(supportTransition);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport var STATUS_ADD = 'add';\nexport var STATUS_KEEP = 'keep';\nexport var STATUS_REMOVE = 'remove';\nexport var STATUS_REMOVED = 'removed';\nexport function wrapKeyToObject(key) {\n  var keyObj;\n  if (key && _typeof(key) === 'object' && 'key' in key) {\n    keyObj = key;\n  } else {\n    keyObj = {\n      key: key\n    };\n  }\n  return _objectSpread(_objectSpread({}, keyObj), {}, {\n    key: String(keyObj.key)\n  });\n}\nexport function parseKeys() {\n  var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  return keys.map(wrapKeyToObject);\n}\nexport function diffKeys() {\n  var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var list = [];\n  var currentIndex = 0;\n  var currentLen = currentKeys.length;\n  var prevKeyObjects = parseKeys(prevKeys);\n  var currentKeyObjects = parseKeys(currentKeys);\n\n  // Check prev keys to insert or keep\n  prevKeyObjects.forEach(function (keyObj) {\n    var hit = false;\n    for (var i = currentIndex; i < currentLen; i += 1) {\n      var currentKeyObj = currentKeyObjects[i];\n      if (currentKeyObj.key === keyObj.key) {\n        // New added keys should add before current key\n        if (currentIndex < i) {\n          list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {\n            return _objectSpread(_objectSpread({}, obj), {}, {\n              status: STATUS_ADD\n            });\n          }));\n          currentIndex = i;\n        }\n        list.push(_objectSpread(_objectSpread({}, currentKeyObj), {}, {\n          status: STATUS_KEEP\n        }));\n        currentIndex += 1;\n        hit = true;\n        break;\n      }\n    }\n\n    // If not hit, it means key is removed\n    if (!hit) {\n      list.push(_objectSpread(_objectSpread({}, keyObj), {}, {\n        status: STATUS_REMOVE\n      }));\n    }\n  });\n\n  // Add rest to the list\n  if (currentIndex < currentLen) {\n    list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {\n      return _objectSpread(_objectSpread({}, obj), {}, {\n        status: STATUS_ADD\n      });\n    }));\n  }\n\n  /**\n   * Merge same key when it remove and add again:\n   *    [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]\n   */\n  var keys = {};\n  list.forEach(function (_ref) {\n    var key = _ref.key;\n    keys[key] = (keys[key] || 0) + 1;\n  });\n  var duplicatedKeys = Object.keys(keys).filter(function (key) {\n    return keys[key] > 1;\n  });\n  duplicatedKeys.forEach(function (matchKey) {\n    // Remove `STATUS_REMOVE` node.\n    list = list.filter(function (_ref2) {\n      var key = _ref2.key,\n        status = _ref2.status;\n      return key !== matchKey || status !== STATUS_REMOVE;\n    });\n\n    // Update `STATUS_ADD` to `STATUS_KEEP`\n    list.forEach(function (node) {\n      if (node.key === matchKey) {\n        // eslint-disable-next-line no-param-reassign\n        node.status = STATUS_KEEP;\n      }\n    });\n  });\n  return list;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"component\", \"children\", \"onVisibleChanged\", \"onAllRemoved\"],\n  _excluded2 = [\"status\"];\n/* eslint react/prop-types: 0 */\nimport * as React from 'react';\nimport OriginCSSMotion from \"./CSSMotion\";\nimport { diffKeys, parseKeys, STATUS_ADD, STATUS_KEEP, STATUS_REMOVE, STATUS_REMOVED } from \"./util/diff\";\nimport { supportTransition } from \"./util/motion\";\nvar MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearPrepare', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];\n/**\n * Generate a CSSMotionList component with config\n * @param transitionSupport No need since CSSMotionList no longer depends on transition support\n * @param CSSMotion CSSMotion component\n */\nexport function genCSSMotionList(transitionSupport) {\n  var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : OriginCSSMotion;\n  var CSSMotionList = /*#__PURE__*/function (_React$Component) {\n    _inherits(CSSMotionList, _React$Component);\n    var _super = _createSuper(CSSMotionList);\n    function CSSMotionList() {\n      var _this;\n      _classCallCheck(this, CSSMotionList);\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      _this = _super.call.apply(_super, [this].concat(args));\n      _defineProperty(_assertThisInitialized(_this), \"state\", {\n        keyEntities: []\n      });\n      // ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.\n      _defineProperty(_assertThisInitialized(_this), \"removeKey\", function (removeKey) {\n        _this.setState(function (prevState) {\n          var nextKeyEntities = prevState.keyEntities.map(function (entity) {\n            if (entity.key !== removeKey) return entity;\n            return _objectSpread(_objectSpread({}, entity), {}, {\n              status: STATUS_REMOVED\n            });\n          });\n          return {\n            keyEntities: nextKeyEntities\n          };\n        }, function () {\n          var keyEntities = _this.state.keyEntities;\n          var restKeysCount = keyEntities.filter(function (_ref) {\n            var status = _ref.status;\n            return status !== STATUS_REMOVED;\n          }).length;\n          if (restKeysCount === 0 && _this.props.onAllRemoved) {\n            _this.props.onAllRemoved();\n          }\n        });\n      });\n      return _this;\n    }\n    _createClass(CSSMotionList, [{\n      key: \"render\",\n      value: function render() {\n        var _this2 = this;\n        var keyEntities = this.state.keyEntities;\n        var _this$props = this.props,\n          component = _this$props.component,\n          children = _this$props.children,\n          _onVisibleChanged = _this$props.onVisibleChanged,\n          onAllRemoved = _this$props.onAllRemoved,\n          restProps = _objectWithoutProperties(_this$props, _excluded);\n        var Component = component || React.Fragment;\n        var motionProps = {};\n        MOTION_PROP_NAMES.forEach(function (prop) {\n          motionProps[prop] = restProps[prop];\n          delete restProps[prop];\n        });\n        delete restProps.keys;\n        return /*#__PURE__*/React.createElement(Component, restProps, keyEntities.map(function (_ref2, index) {\n          var status = _ref2.status,\n            eventProps = _objectWithoutProperties(_ref2, _excluded2);\n          var visible = status === STATUS_ADD || status === STATUS_KEEP;\n          return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motionProps, {\n            key: eventProps.key,\n            visible: visible,\n            eventProps: eventProps,\n            onVisibleChanged: function onVisibleChanged(changedVisible) {\n              _onVisibleChanged === null || _onVisibleChanged === void 0 || _onVisibleChanged(changedVisible, {\n                key: eventProps.key\n              });\n              if (!changedVisible) {\n                _this2.removeKey(eventProps.key);\n              }\n            }\n          }), function (props, ref) {\n            return children(_objectSpread(_objectSpread({}, props), {}, {\n              index: index\n            }), ref);\n          });\n        }));\n      }\n    }], [{\n      key: \"getDerivedStateFromProps\",\n      value: function getDerivedStateFromProps(_ref3, _ref4) {\n        var keys = _ref3.keys;\n        var keyEntities = _ref4.keyEntities;\n        var parsedKeyObjects = parseKeys(keys);\n        var mixedKeyEntities = diffKeys(keyEntities, parsedKeyObjects);\n        return {\n          keyEntities: mixedKeyEntities.filter(function (entity) {\n            var prevEntity = keyEntities.find(function (_ref5) {\n              var key = _ref5.key;\n              return entity.key === key;\n            });\n\n            // Remove if already mark as removed\n            if (prevEntity && prevEntity.status === STATUS_REMOVED && entity.status === STATUS_REMOVE) {\n              return false;\n            }\n            return true;\n          })\n        };\n      }\n    }]);\n    return CSSMotionList;\n  }(React.Component);\n  _defineProperty(CSSMotionList, \"defaultProps\", {\n    component: 'div'\n  });\n  return CSSMotionList;\n}\nexport default genCSSMotionList(supportTransition);","import { FastColor } from '@ant-design/fast-color';\nfunction isStableColor(color) {\n  return color >= 0 && color <= 255;\n}\nfunction getAlphaColor(frontColor, backgroundColor) {\n  const {\n    r: fR,\n    g: fG,\n    b: fB,\n    a: originAlpha\n  } = new FastColor(frontColor).toRgb();\n  if (originAlpha < 1) {\n    return frontColor;\n  }\n  const {\n    r: bR,\n    g: bG,\n    b: bB\n  } = new FastColor(backgroundColor).toRgb();\n  for (let fA = 0.01; fA <= 1; fA += 0.01) {\n    const r = Math.round((fR - bR * (1 - fA)) / fA);\n    const g = Math.round((fG - bG * (1 - fA)) / fA);\n    const b = Math.round((fB - bB * (1 - fA)) / fA);\n    if (isStableColor(r) && isStableColor(g) && isStableColor(b)) {\n      return new FastColor({\n        r,\n        g,\n        b,\n        a: Math.round(fA * 100) / 100\n      }).toRgbString();\n    }\n  }\n  // fallback\n  /* istanbul ignore next */\n  return new FastColor({\n    r: fR,\n    g: fG,\n    b: fB,\n    a: 1\n  }).toRgbString();\n}\nexport default getAlphaColor;","var __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport { FastColor } from '@ant-design/fast-color';\nimport seedToken from '../themes/seed';\nimport getAlphaColor from './getAlphaColor';\n/**\n * Seed (designer) > Derivative (designer) > Alias (developer).\n *\n * Merge seed & derivative & override token and generate alias token for developer.\n */\nexport default function formatToken(derivativeToken) {\n  const {\n      override\n    } = derivativeToken,\n    restToken = __rest(derivativeToken, [\"override\"]);\n  const overrideTokens = Object.assign({}, override);\n  Object.keys(seedToken).forEach(token => {\n    delete overrideTokens[token];\n  });\n  const mergedToken = Object.assign(Object.assign({}, restToken), overrideTokens);\n  const screenXS = 480;\n  const screenSM = 576;\n  const screenMD = 768;\n  const screenLG = 992;\n  const screenXL = 1200;\n  const screenXXL = 1600;\n  // Motion\n  if (mergedToken.motion === false) {\n    const fastDuration = '0s';\n    mergedToken.motionDurationFast = fastDuration;\n    mergedToken.motionDurationMid = fastDuration;\n    mergedToken.motionDurationSlow = fastDuration;\n  }\n  // Generate alias token\n  const aliasToken = Object.assign(Object.assign(Object.assign({}, mergedToken), {\n    // ============== Background ============== //\n    colorFillContent: mergedToken.colorFillSecondary,\n    colorFillContentHover: mergedToken.colorFill,\n    colorFillAlter: mergedToken.colorFillQuaternary,\n    colorBgContainerDisabled: mergedToken.colorFillTertiary,\n    // ============== Split ============== //\n    colorBorderBg: mergedToken.colorBgContainer,\n    colorSplit: getAlphaColor(mergedToken.colorBorderSecondary, mergedToken.colorBgContainer),\n    // ============== Text ============== //\n    colorTextPlaceholder: mergedToken.colorTextQuaternary,\n    colorTextDisabled: mergedToken.colorTextQuaternary,\n    colorTextHeading: mergedToken.colorText,\n    colorTextLabel: mergedToken.colorTextSecondary,\n    colorTextDescription: mergedToken.colorTextTertiary,\n    colorTextLightSolid: mergedToken.colorWhite,\n    colorHighlight: mergedToken.colorError,\n    colorBgTextHover: mergedToken.colorFillSecondary,\n    colorBgTextActive: mergedToken.colorFill,\n    colorIcon: mergedToken.colorTextTertiary,\n    colorIconHover: mergedToken.colorText,\n    colorErrorOutline: getAlphaColor(mergedToken.colorErrorBg, mergedToken.colorBgContainer),\n    colorWarningOutline: getAlphaColor(mergedToken.colorWarningBg, mergedToken.colorBgContainer),\n    // Font\n    fontSizeIcon: mergedToken.fontSizeSM,\n    // Line\n    lineWidthFocus: mergedToken.lineWidth * 3,\n    // Control\n    lineWidth: mergedToken.lineWidth,\n    controlOutlineWidth: mergedToken.lineWidth * 2,\n    // Checkbox size and expand icon size\n    controlInteractiveSize: mergedToken.controlHeight / 2,\n    controlItemBgHover: mergedToken.colorFillTertiary,\n    controlItemBgActive: mergedToken.colorPrimaryBg,\n    controlItemBgActiveHover: mergedToken.colorPrimaryBgHover,\n    controlItemBgActiveDisabled: mergedToken.colorFill,\n    controlTmpOutline: mergedToken.colorFillQuaternary,\n    controlOutline: getAlphaColor(mergedToken.colorPrimaryBg, mergedToken.colorBgContainer),\n    lineType: mergedToken.lineType,\n    borderRadius: mergedToken.borderRadius,\n    borderRadiusXS: mergedToken.borderRadiusXS,\n    borderRadiusSM: mergedToken.borderRadiusSM,\n    borderRadiusLG: mergedToken.borderRadiusLG,\n    fontWeightStrong: 600,\n    opacityLoading: 0.65,\n    linkDecoration: 'none',\n    linkHoverDecoration: 'none',\n    linkFocusDecoration: 'none',\n    controlPaddingHorizontal: 12,\n    controlPaddingHorizontalSM: 8,\n    paddingXXS: mergedToken.sizeXXS,\n    paddingXS: mergedToken.sizeXS,\n    paddingSM: mergedToken.sizeSM,\n    padding: mergedToken.size,\n    paddingMD: mergedToken.sizeMD,\n    paddingLG: mergedToken.sizeLG,\n    paddingXL: mergedToken.sizeXL,\n    paddingContentHorizontalLG: mergedToken.sizeLG,\n    paddingContentVerticalLG: mergedToken.sizeMS,\n    paddingContentHorizontal: mergedToken.sizeMS,\n    paddingContentVertical: mergedToken.sizeSM,\n    paddingContentHorizontalSM: mergedToken.size,\n    paddingContentVerticalSM: mergedToken.sizeXS,\n    marginXXS: mergedToken.sizeXXS,\n    marginXS: mergedToken.sizeXS,\n    marginSM: mergedToken.sizeSM,\n    margin: mergedToken.size,\n    marginMD: mergedToken.sizeMD,\n    marginLG: mergedToken.sizeLG,\n    marginXL: mergedToken.sizeXL,\n    marginXXL: mergedToken.sizeXXL,\n    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    `,\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    `,\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    `,\n    screenXS,\n    screenXSMin: screenXS,\n    screenXSMax: screenSM - 1,\n    screenSM,\n    screenSMMin: screenSM,\n    screenSMMax: screenMD - 1,\n    screenMD,\n    screenMDMin: screenMD,\n    screenMDMax: screenLG - 1,\n    screenLG,\n    screenLGMin: screenLG,\n    screenLGMax: screenXL - 1,\n    screenXL,\n    screenXLMin: screenXL,\n    screenXLMax: screenXXL - 1,\n    screenXXL,\n    screenXXLMin: screenXXL,\n    boxShadowPopoverArrow: '2px 2px 5px rgba(0, 0, 0, 0.05)',\n    boxShadowCard: `\n      0 1px 2px -2px ${new FastColor('rgba(0, 0, 0, 0.16)').toRgbString()},\n      0 3px 6px 0 ${new FastColor('rgba(0, 0, 0, 0.12)').toRgbString()},\n      0 5px 12px 4px ${new FastColor('rgba(0, 0, 0, 0.09)').toRgbString()}\n    `,\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    `,\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    `,\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    `,\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    `,\n    boxShadowTabsOverflowLeft: 'inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)',\n    boxShadowTabsOverflowRight: 'inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)',\n    boxShadowTabsOverflowTop: 'inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)',\n    boxShadowTabsOverflowBottom: 'inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)'\n  }), overrideTokens);\n  return aliasToken;\n}","var __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport React from 'react';\nimport { useCacheToken } from '@ant-design/cssinjs';\nimport version from '../version';\nimport { defaultTheme, DesignTokenContext } from './context';\nimport defaultSeedToken from './themes/seed';\nimport formatToken from './util/alias';\nexport const unitless = {\n  lineHeight: true,\n  lineHeightSM: true,\n  lineHeightLG: true,\n  lineHeightHeading1: true,\n  lineHeightHeading2: true,\n  lineHeightHeading3: true,\n  lineHeightHeading4: true,\n  lineHeightHeading5: true,\n  opacityLoading: true,\n  fontWeightStrong: true,\n  zIndexPopupBase: true,\n  zIndexBase: true,\n  opacityImage: true\n};\nexport const ignore = {\n  size: true,\n  sizeSM: true,\n  sizeLG: true,\n  sizeMD: true,\n  sizeXS: true,\n  sizeXXS: true,\n  sizeMS: true,\n  sizeXL: true,\n  sizeXXL: true,\n  sizeUnit: true,\n  sizeStep: true,\n  motionBase: true,\n  motionUnit: true\n};\nconst preserve = {\n  screenXS: true,\n  screenXSMin: true,\n  screenXSMax: true,\n  screenSM: true,\n  screenSMMin: true,\n  screenSMMax: true,\n  screenMD: true,\n  screenMDMin: true,\n  screenMDMax: true,\n  screenLG: true,\n  screenLGMin: true,\n  screenLGMax: true,\n  screenXL: true,\n  screenXLMin: true,\n  screenXLMax: true,\n  screenXXL: true,\n  screenXXLMin: true\n};\nexport const getComputedToken = (originToken, overrideToken, theme) => {\n  const derivativeToken = theme.getDerivativeToken(originToken);\n  const {\n      override\n    } = overrideToken,\n    components = __rest(overrideToken, [\"override\"]);\n  // Merge with override\n  let mergedDerivativeToken = Object.assign(Object.assign({}, derivativeToken), {\n    override\n  });\n  // Format if needed\n  mergedDerivativeToken = formatToken(mergedDerivativeToken);\n  if (components) {\n    Object.entries(components).forEach(([key, value]) => {\n      const {\n          theme: componentTheme\n        } = value,\n        componentTokens = __rest(value, [\"theme\"]);\n      let mergedComponentToken = componentTokens;\n      if (componentTheme) {\n        mergedComponentToken = getComputedToken(Object.assign(Object.assign({}, mergedDerivativeToken), componentTokens), {\n          override: componentTokens\n        }, componentTheme);\n      }\n      mergedDerivativeToken[key] = mergedComponentToken;\n    });\n  }\n  return mergedDerivativeToken;\n};\n// ================================== Hook ==================================\nexport default function useToken() {\n  const {\n    token: rootDesignToken,\n    hashed,\n    theme,\n    override,\n    cssVar\n  } = React.useContext(DesignTokenContext);\n  const salt = `${version}-${hashed || ''}`;\n  const mergedTheme = theme || defaultTheme;\n  const [token, hashId, realToken] = useCacheToken(mergedTheme, [defaultSeedToken, rootDesignToken], {\n    salt,\n    override,\n    getComputedToken,\n    // formatToken will not be consumed after 1.15.0 with getComputedToken.\n    // But token will break if @ant-design/cssinjs is under 1.15.0 without it\n    formatToken,\n    cssVar: cssVar && {\n      prefix: cssVar.prefix,\n      key: cssVar.key,\n      unitless,\n      ignore,\n      preserve\n    }\n  });\n  return [mergedTheme, realToken, hashed ? hashId : '', token, cssVar];\n}","export default '5.25.4';","\"use client\";\n\nimport * as React from 'react';\nimport { Provider as MotionProvider } from 'rc-motion';\nimport { useToken } from '../theme/internal';\nexport default function MotionWrapper(props) {\n  const {\n    children\n  } = props;\n  const [, token] = useToken();\n  const {\n    motion\n  } = token;\n  const needWrapMotionProviderRef = React.useRef(false);\n  needWrapMotionProviderRef.current = needWrapMotionProviderRef.current || motion === false;\n  if (needWrapMotionProviderRef.current) {\n    return /*#__PURE__*/React.createElement(MotionProvider, {\n      motion: motion\n    }, children);\n  }\n  return children;\n}","\"use client\";\n\nimport * as React from 'react';\nimport { devUseWarning } from '../_util/warning';\n/**\n * Warning for ConfigProviderProps.\n * This will be empty function in production.\n */\nconst PropWarning = /*#__PURE__*/React.memo(({\n  dropdownMatchSelectWidth\n}) => {\n  const warning = devUseWarning('ConfigProvider');\n  warning.deprecated(dropdownMatchSelectWidth === undefined, 'dropdownMatchSelectWidth', 'popupMatchSelectWidth');\n  return null;\n});\nif (process.env.NODE_ENV !== 'production') {\n  PropWarning.displayName = 'PropWarning';\n}\nexport default process.env.NODE_ENV !== 'production' ? PropWarning : () => null;","\"use client\";\n\nimport { unit } from '@ant-design/cssinjs';\nexport const textEllipsis = {\n  overflow: 'hidden',\n  whiteSpace: 'nowrap',\n  textOverflow: 'ellipsis'\n};\nexport const resetComponent = (token, needInheritFontFamily = false) => ({\n  boxSizing: 'border-box',\n  margin: 0,\n  padding: 0,\n  color: token.colorText,\n  fontSize: token.fontSize,\n  // font-variant: @font-variant-base;\n  lineHeight: token.lineHeight,\n  listStyle: 'none',\n  // font-feature-settings: @font-feature-settings-base;\n  fontFamily: needInheritFontFamily ? 'inherit' : token.fontFamily\n});\nexport const resetIcon = () => ({\n  display: 'inline-flex',\n  alignItems: 'center',\n  color: 'inherit',\n  fontStyle: 'normal',\n  lineHeight: 0,\n  textAlign: 'center',\n  textTransform: 'none',\n  // for SVG icon, see https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\n  verticalAlign: '-0.125em',\n  textRendering: 'optimizeLegibility',\n  '-webkit-font-smoothing': 'antialiased',\n  '-moz-osx-font-smoothing': 'grayscale',\n  '> *': {\n    lineHeight: 1\n  },\n  svg: {\n    display: 'inline-block'\n  }\n});\nexport const clearFix = () => ({\n  // https://github.com/ant-design/ant-design/issues/21301#issuecomment-583955229\n  '&::before': {\n    display: 'table',\n    content: '\"\"'\n  },\n  '&::after': {\n    // https://github.com/ant-design/ant-design/issues/21864\n    display: 'table',\n    clear: 'both',\n    content: '\"\"'\n  }\n});\nexport const genLinkStyle = token => ({\n  a: {\n    color: token.colorLink,\n    textDecoration: token.linkDecoration,\n    backgroundColor: 'transparent',\n    // remove the gray background on active links in IE 10.\n    outline: 'none',\n    cursor: 'pointer',\n    transition: `color ${token.motionDurationSlow}`,\n    '-webkit-text-decoration-skip': 'objects',\n    // remove gaps in links underline in iOS 8+ and Safari 8+.\n    '&:hover': {\n      color: token.colorLinkHover\n    },\n    '&:active': {\n      color: token.colorLinkActive\n    },\n    '&:active, &:hover': {\n      textDecoration: token.linkHoverDecoration,\n      outline: 0\n    },\n    // https://github.com/ant-design/ant-design/issues/22503\n    '&:focus': {\n      textDecoration: token.linkFocusDecoration,\n      outline: 0\n    },\n    '&[disabled]': {\n      color: token.colorTextDisabled,\n      cursor: 'not-allowed'\n    }\n  }\n});\nexport const genCommonStyle = (token, componentPrefixCls, rootCls, resetFont) => {\n  const prefixSelector = `[class^=\"${componentPrefixCls}\"], [class*=\" ${componentPrefixCls}\"]`;\n  const rootPrefixSelector = rootCls ? `.${rootCls}` : prefixSelector;\n  const resetStyle = {\n    boxSizing: 'border-box',\n    '&::before, &::after': {\n      boxSizing: 'border-box'\n    }\n  };\n  let resetFontStyle = {};\n  if (resetFont !== false) {\n    resetFontStyle = {\n      fontFamily: token.fontFamily,\n      fontSize: token.fontSize\n    };\n  }\n  return {\n    [rootPrefixSelector]: Object.assign(Object.assign(Object.assign({}, resetFontStyle), resetStyle), {\n      [prefixSelector]: resetStyle\n    })\n  };\n};\nexport const genFocusOutline = (token, offset) => ({\n  outline: `${unit(token.lineWidthFocus)} solid ${token.colorPrimaryBorder}`,\n  outlineOffset: offset !== null && offset !== void 0 ? offset : 1,\n  transition: 'outline-offset 0s, outline 0s'\n});\nexport const genFocusStyle = (token, offset) => ({\n  '&:focus-visible': Object.assign({}, genFocusOutline(token, offset))\n});\nexport const genIconStyle = iconPrefixCls => ({\n  [`.${iconPrefixCls}`]: Object.assign(Object.assign({}, resetIcon()), {\n    [`.${iconPrefixCls} .${iconPrefixCls}-icon`]: {\n      display: 'block'\n    }\n  })\n});\nexport const operationUnit = token => Object.assign(Object.assign({\n  // FIXME: This use link but is a operation unit. Seems should be a colorPrimary.\n  // And Typography use this to generate link style which should not do this.\n  color: token.colorLink,\n  textDecoration: token.linkDecoration,\n  outline: 'none',\n  cursor: 'pointer',\n  transition: `all ${token.motionDurationSlow}`,\n  border: 0,\n  padding: 0,\n  background: 'none',\n  userSelect: 'none'\n}, genFocusStyle(token)), {\n  '&:focus, &:hover': {\n    color: token.colorLinkHover\n  },\n  '&:active': {\n    color: token.colorLinkActive\n  }\n});","import { useStyleRegister } from '@ant-design/cssinjs';\nimport { genIconStyle } from '../../style';\nimport useToken from '../useToken';\nconst useResetIconStyle = (iconPrefixCls, csp) => {\n  const [theme, token] = useToken();\n  // Generate style for icons\n  return useStyleRegister({\n    theme,\n    token,\n    hashId: '',\n    path: ['ant-design-icons', iconPrefixCls],\n    nonce: () => csp === null || csp === void 0 ? void 0 : csp.nonce,\n    layer: {\n      name: 'antd'\n    }\n  }, () => [genIconStyle(iconPrefixCls)]);\n};\nexport default useResetIconStyle;","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport * as React from 'react';\nimport { createTheme, StyleContext as CssInJsStyleContext } from '@ant-design/cssinjs';\nimport IconContext from \"@ant-design/icons/es/components/Context\";\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport { merge } from \"rc-util/es/utils/set\";\nimport warning, { devUseWarning, WarningContext } from '../_util/warning';\nimport ValidateMessagesContext from '../form/validateMessagesContext';\nimport LocaleProvider, { ANT_MARK } from '../locale';\nimport LocaleContext from '../locale/context';\nimport defaultLocale from '../locale/en_US';\nimport { defaultTheme, DesignTokenContext } from '../theme/context';\nimport defaultSeedToken from '../theme/themes/seed';\nimport { ConfigConsumer, ConfigContext, defaultIconPrefixCls, defaultPrefixCls, Variants } from './context';\nimport { registerTheme } from './cssVariables';\nimport { DisabledContextProvider } from './DisabledContext';\nimport useConfig from './hooks/useConfig';\nimport useTheme from './hooks/useTheme';\nimport MotionWrapper from './MotionWrapper';\nimport PropWarning from './PropWarning';\nimport SizeContext, { SizeContextProvider } from './SizeContext';\nimport useStyle from './style';\nexport { Variants };\n/**\n * Since too many feedback using static method like `Modal.confirm` not getting theme, we record the\n * theme register info here to help developer get warning info.\n */\nlet existThemeConfig = false;\nexport const warnContext = process.env.NODE_ENV !== 'production' ? componentName => {\n  process.env.NODE_ENV !== \"production\" ? warning(!existThemeConfig, componentName, `Static function can not consume context like dynamic theme. Please use 'App' component instead.`) : void 0;\n} : /* istanbul ignore next */\nnull;\nexport { ConfigConsumer, ConfigContext, defaultPrefixCls, defaultIconPrefixCls };\nexport const configConsumerProps = ['getTargetContainer', 'getPopupContainer', 'rootPrefixCls', 'getPrefixCls', 'renderEmpty', 'csp', 'autoInsertSpaceInButton', 'locale'];\n// These props is used by `useContext` directly in sub component\nconst PASSED_PROPS = ['getTargetContainer', 'getPopupContainer', 'renderEmpty', 'input', 'pagination', 'form', 'select', 'button'];\nlet globalPrefixCls;\nlet globalIconPrefixCls;\nlet globalTheme;\nlet globalHolderRender;\nfunction getGlobalPrefixCls() {\n  return globalPrefixCls || defaultPrefixCls;\n}\nfunction getGlobalIconPrefixCls() {\n  return globalIconPrefixCls || defaultIconPrefixCls;\n}\nfunction isLegacyTheme(theme) {\n  return Object.keys(theme).some(key => key.endsWith('Color'));\n}\nconst setGlobalConfig = props => {\n  const {\n    prefixCls,\n    iconPrefixCls,\n    theme,\n    holderRender\n  } = props;\n  if (prefixCls !== undefined) {\n    globalPrefixCls = prefixCls;\n  }\n  if (iconPrefixCls !== undefined) {\n    globalIconPrefixCls = iconPrefixCls;\n  }\n  if ('holderRender' in props) {\n    globalHolderRender = holderRender;\n  }\n  if (theme) {\n    if (isLegacyTheme(theme)) {\n      process.env.NODE_ENV !== \"production\" ? warning(false, 'ConfigProvider', '`config` of css variable theme is not work in v5. Please use new `theme` config instead.') : void 0;\n      registerTheme(getGlobalPrefixCls(), theme);\n    } else {\n      globalTheme = theme;\n    }\n  }\n};\nexport const globalConfig = () => ({\n  getPrefixCls: (suffixCls, customizePrefixCls) => {\n    if (customizePrefixCls) {\n      return customizePrefixCls;\n    }\n    return suffixCls ? `${getGlobalPrefixCls()}-${suffixCls}` : getGlobalPrefixCls();\n  },\n  getIconPrefixCls: getGlobalIconPrefixCls,\n  getRootPrefixCls: () => {\n    // If Global prefixCls provided, use this\n    if (globalPrefixCls) {\n      return globalPrefixCls;\n    }\n    // Fallback to default prefixCls\n    return getGlobalPrefixCls();\n  },\n  getTheme: () => globalTheme,\n  holderRender: globalHolderRender\n});\nconst ProviderChildren = props => {\n  const {\n    children,\n    csp: customCsp,\n    autoInsertSpaceInButton,\n    alert,\n    anchor,\n    form,\n    locale,\n    componentSize,\n    direction,\n    space,\n    splitter,\n    virtual,\n    dropdownMatchSelectWidth,\n    popupMatchSelectWidth,\n    popupOverflow,\n    legacyLocale,\n    parentContext,\n    iconPrefixCls: customIconPrefixCls,\n    theme,\n    componentDisabled,\n    segmented,\n    statistic,\n    spin,\n    calendar,\n    carousel,\n    cascader,\n    collapse,\n    typography,\n    checkbox,\n    descriptions,\n    divider,\n    drawer,\n    skeleton,\n    steps,\n    image,\n    layout,\n    list,\n    mentions,\n    modal,\n    progress,\n    result,\n    slider,\n    breadcrumb,\n    menu,\n    pagination,\n    input,\n    textArea,\n    empty,\n    badge,\n    radio,\n    rate,\n    switch: SWITCH,\n    transfer,\n    avatar,\n    message,\n    tag,\n    table,\n    card,\n    tabs,\n    timeline,\n    timePicker,\n    upload,\n    notification,\n    tree,\n    colorPicker,\n    datePicker,\n    rangePicker,\n    flex,\n    wave,\n    dropdown,\n    warning: warningConfig,\n    tour,\n    tooltip,\n    popover,\n    popconfirm,\n    floatButtonGroup,\n    variant,\n    inputNumber,\n    treeSelect\n  } = props;\n  // =================================== Context ===================================\n  const getPrefixCls = React.useCallback((suffixCls, customizePrefixCls) => {\n    const {\n      prefixCls\n    } = props;\n    if (customizePrefixCls) {\n      return customizePrefixCls;\n    }\n    const mergedPrefixCls = prefixCls || parentContext.getPrefixCls('');\n    return suffixCls ? `${mergedPrefixCls}-${suffixCls}` : mergedPrefixCls;\n  }, [parentContext.getPrefixCls, props.prefixCls]);\n  const iconPrefixCls = customIconPrefixCls || parentContext.iconPrefixCls || defaultIconPrefixCls;\n  const csp = customCsp || parentContext.csp;\n  useStyle(iconPrefixCls, csp);\n  const mergedTheme = useTheme(theme, parentContext.theme, {\n    prefixCls: getPrefixCls('')\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    existThemeConfig = existThemeConfig || !!mergedTheme;\n  }\n  const baseConfig = {\n    csp,\n    autoInsertSpaceInButton,\n    alert,\n    anchor,\n    locale: locale || legacyLocale,\n    direction,\n    space,\n    splitter,\n    virtual,\n    popupMatchSelectWidth: popupMatchSelectWidth !== null && popupMatchSelectWidth !== void 0 ? popupMatchSelectWidth : dropdownMatchSelectWidth,\n    popupOverflow,\n    getPrefixCls,\n    iconPrefixCls,\n    theme: mergedTheme,\n    segmented,\n    statistic,\n    spin,\n    calendar,\n    carousel,\n    cascader,\n    collapse,\n    typography,\n    checkbox,\n    descriptions,\n    divider,\n    drawer,\n    skeleton,\n    steps,\n    image,\n    input,\n    textArea,\n    layout,\n    list,\n    mentions,\n    modal,\n    progress,\n    result,\n    slider,\n    breadcrumb,\n    menu,\n    pagination,\n    empty,\n    badge,\n    radio,\n    rate,\n    switch: SWITCH,\n    transfer,\n    avatar,\n    message,\n    tag,\n    table,\n    card,\n    tabs,\n    timeline,\n    timePicker,\n    upload,\n    notification,\n    tree,\n    colorPicker,\n    datePicker,\n    rangePicker,\n    flex,\n    wave,\n    dropdown,\n    warning: warningConfig,\n    tour,\n    tooltip,\n    popover,\n    popconfirm,\n    floatButtonGroup,\n    variant,\n    inputNumber,\n    treeSelect\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    const warningFn = devUseWarning('ConfigProvider');\n    warningFn(!('autoInsertSpaceInButton' in props), 'deprecated', '`autoInsertSpaceInButton` is deprecated. Please use `{ button: { autoInsertSpace: boolean }}` instead.');\n  }\n  const config = Object.assign({}, parentContext);\n  Object.keys(baseConfig).forEach(key => {\n    if (baseConfig[key] !== undefined) {\n      config[key] = baseConfig[key];\n    }\n  });\n  // Pass the props used by `useContext` directly with child component.\n  // These props should merged into `config`.\n  PASSED_PROPS.forEach(propName => {\n    const propValue = props[propName];\n    if (propValue) {\n      config[propName] = propValue;\n    }\n  });\n  if (typeof autoInsertSpaceInButton !== 'undefined') {\n    // merge deprecated api\n    config.button = Object.assign({\n      autoInsertSpace: autoInsertSpaceInButton\n    }, config.button);\n  }\n  // https://github.com/ant-design/ant-design/issues/27617\n  const memoedConfig = useMemo(() => config, config, (prevConfig, currentConfig) => {\n    const prevKeys = Object.keys(prevConfig);\n    const currentKeys = Object.keys(currentConfig);\n    return prevKeys.length !== currentKeys.length || prevKeys.some(key => prevConfig[key] !== currentConfig[key]);\n  });\n  const {\n    layer\n  } = React.useContext(CssInJsStyleContext);\n  const memoIconContextValue = React.useMemo(() => ({\n    prefixCls: iconPrefixCls,\n    csp,\n    layer: layer ? 'antd' : undefined\n  }), [iconPrefixCls, csp, layer]);\n  let childNode = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(PropWarning, {\n    dropdownMatchSelectWidth: dropdownMatchSelectWidth\n  }), children);\n  const validateMessages = React.useMemo(() => {\n    var _a, _b, _c, _d;\n    return merge(((_a = defaultLocale.Form) === null || _a === void 0 ? void 0 : _a.defaultValidateMessages) || {}, ((_c = (_b = memoedConfig.locale) === null || _b === void 0 ? void 0 : _b.Form) === null || _c === void 0 ? void 0 : _c.defaultValidateMessages) || {}, ((_d = memoedConfig.form) === null || _d === void 0 ? void 0 : _d.validateMessages) || {}, (form === null || form === void 0 ? void 0 : form.validateMessages) || {});\n  }, [memoedConfig, form === null || form === void 0 ? void 0 : form.validateMessages]);\n  if (Object.keys(validateMessages).length > 0) {\n    childNode = /*#__PURE__*/React.createElement(ValidateMessagesContext.Provider, {\n      value: validateMessages\n    }, childNode);\n  }\n  if (locale) {\n    childNode = /*#__PURE__*/React.createElement(LocaleProvider, {\n      locale: locale,\n      _ANT_MARK__: ANT_MARK\n    }, childNode);\n  }\n  if (iconPrefixCls || csp) {\n    childNode = /*#__PURE__*/React.createElement(IconContext.Provider, {\n      value: memoIconContextValue\n    }, childNode);\n  }\n  if (componentSize) {\n    childNode = /*#__PURE__*/React.createElement(SizeContextProvider, {\n      size: componentSize\n    }, childNode);\n  }\n  // =================================== Motion ===================================\n  childNode = /*#__PURE__*/React.createElement(MotionWrapper, null, childNode);\n  // ================================ Dynamic theme ================================\n  const memoTheme = React.useMemo(() => {\n    const _a = mergedTheme || {},\n      {\n        algorithm,\n        token,\n        components,\n        cssVar\n      } = _a,\n      rest = __rest(_a, [\"algorithm\", \"token\", \"components\", \"cssVar\"]);\n    const themeObj = algorithm && (!Array.isArray(algorithm) || algorithm.length > 0) ? createTheme(algorithm) : defaultTheme;\n    const parsedComponents = {};\n    Object.entries(components || {}).forEach(([componentName, componentToken]) => {\n      const parsedToken = Object.assign({}, componentToken);\n      if ('algorithm' in parsedToken) {\n        if (parsedToken.algorithm === true) {\n          parsedToken.theme = themeObj;\n        } else if (Array.isArray(parsedToken.algorithm) || typeof parsedToken.algorithm === 'function') {\n          parsedToken.theme = createTheme(parsedToken.algorithm);\n        }\n        delete parsedToken.algorithm;\n      }\n      parsedComponents[componentName] = parsedToken;\n    });\n    const mergedToken = Object.assign(Object.assign({}, defaultSeedToken), token);\n    return Object.assign(Object.assign({}, rest), {\n      theme: themeObj,\n      token: mergedToken,\n      components: parsedComponents,\n      override: Object.assign({\n        override: mergedToken\n      }, parsedComponents),\n      cssVar: cssVar\n    });\n  }, [mergedTheme]);\n  if (theme) {\n    childNode = /*#__PURE__*/React.createElement(DesignTokenContext.Provider, {\n      value: memoTheme\n    }, childNode);\n  }\n  // ================================== Warning ===================================\n  if (memoedConfig.warning) {\n    childNode = /*#__PURE__*/React.createElement(WarningContext.Provider, {\n      value: memoedConfig.warning\n    }, childNode);\n  }\n  // =================================== Render ===================================\n  if (componentDisabled !== undefined) {\n    childNode = /*#__PURE__*/React.createElement(DisabledContextProvider, {\n      disabled: componentDisabled\n    }, childNode);\n  }\n  return /*#__PURE__*/React.createElement(ConfigContext.Provider, {\n    value: memoedConfig\n  }, childNode);\n};\nconst ConfigProvider = props => {\n  const context = React.useContext(ConfigContext);\n  const antLocale = React.useContext(LocaleContext);\n  return /*#__PURE__*/React.createElement(ProviderChildren, Object.assign({\n    parentContext: context,\n    legacyLocale: antLocale\n  }, props));\n};\nConfigProvider.ConfigContext = ConfigContext;\nConfigProvider.SizeContext = SizeContext;\nConfigProvider.config = setGlobalConfig;\nConfigProvider.useConfig = useConfig;\nObject.defineProperty(ConfigProvider, 'SizeContext', {\n  get: () => {\n    process.env.NODE_ENV !== \"production\" ? warning(false, 'ConfigProvider', 'ConfigProvider.SizeContext is deprecated. Please use `ConfigProvider.useConfig().componentSize` instead.') : void 0;\n    return SizeContext;\n  }\n});\nif (process.env.NODE_ENV !== 'production') {\n  ConfigProvider.displayName = 'ConfigProvider';\n}\nexport default ConfigProvider;","import useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport { devUseWarning } from '../../_util/warning';\nimport { defaultConfig } from '../../theme/internal';\nimport useThemeKey from './useThemeKey';\nexport default function useTheme(theme, parentTheme, config) {\n  var _a, _b;\n  const warning = devUseWarning('ConfigProvider');\n  const themeConfig = theme || {};\n  const parentThemeConfig = themeConfig.inherit === false || !parentTheme ? Object.assign(Object.assign({}, defaultConfig), {\n    hashed: (_a = parentTheme === null || parentTheme === void 0 ? void 0 : parentTheme.hashed) !== null && _a !== void 0 ? _a : defaultConfig.hashed,\n    cssVar: parentTheme === null || parentTheme === void 0 ? void 0 : parentTheme.cssVar\n  }) : parentTheme;\n  const themeKey = useThemeKey();\n  if (process.env.NODE_ENV !== 'production') {\n    const cssVarEnabled = themeConfig.cssVar || parentThemeConfig.cssVar;\n    const validKey = !!(typeof themeConfig.cssVar === 'object' && ((_b = themeConfig.cssVar) === null || _b === void 0 ? void 0 : _b.key) || themeKey);\n    process.env.NODE_ENV !== \"production\" ? warning(!cssVarEnabled || validKey, 'breaking', 'Missing key in `cssVar` config. Please upgrade to React 18 or set `cssVar.key` manually in each ConfigProvider inside `cssVar` enabled ConfigProvider.') : void 0;\n  }\n  return useMemo(() => {\n    var _a, _b;\n    if (!theme) {\n      return parentTheme;\n    }\n    // Override\n    const mergedComponents = Object.assign({}, parentThemeConfig.components);\n    Object.keys(theme.components || {}).forEach(componentName => {\n      mergedComponents[componentName] = Object.assign(Object.assign({}, mergedComponents[componentName]), theme.components[componentName]);\n    });\n    const cssVarKey = `css-var-${themeKey.replace(/:/g, '')}`;\n    const mergedCssVar = ((_a = themeConfig.cssVar) !== null && _a !== void 0 ? _a : parentThemeConfig.cssVar) && Object.assign(Object.assign(Object.assign({\n      prefix: config === null || config === void 0 ? void 0 : config.prefixCls\n    }, typeof parentThemeConfig.cssVar === 'object' ? parentThemeConfig.cssVar : {}), typeof themeConfig.cssVar === 'object' ? themeConfig.cssVar : {}), {\n      key: typeof themeConfig.cssVar === 'object' && ((_b = themeConfig.cssVar) === null || _b === void 0 ? void 0 : _b.key) || cssVarKey\n    });\n    // Base token\n    return Object.assign(Object.assign(Object.assign({}, parentThemeConfig), themeConfig), {\n      token: Object.assign(Object.assign({}, parentThemeConfig.token), themeConfig.token),\n      components: mergedComponents,\n      cssVar: mergedCssVar\n    });\n  }, [themeConfig, parentThemeConfig], (prev, next) => prev.some((prevTheme, index) => {\n    const nextTheme = next[index];\n    return !isEqual(prevTheme, nextTheme, true);\n  }));\n}","import _typeof from \"./typeof.js\";\nfunction _regeneratorRuntime() {\n  \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */\n  _regeneratorRuntime = function _regeneratorRuntime() {\n    return r;\n  };\n  var t,\n    r = {},\n    e = Object.prototype,\n    n = e.hasOwnProperty,\n    o = \"function\" == typeof Symbol ? Symbol : {},\n    i = o.iterator || \"@@iterator\",\n    a = o.asyncIterator || \"@@asyncIterator\",\n    u = o.toStringTag || \"@@toStringTag\";\n  function c(t, r, e, n) {\n    return Object.defineProperty(t, r, {\n      value: e,\n      enumerable: !n,\n      configurable: !n,\n      writable: !n\n    });\n  }\n  try {\n    c({}, \"\");\n  } catch (t) {\n    c = function c(t, r, e) {\n      return t[r] = e;\n    };\n  }\n  function h(r, e, n, o) {\n    var i = e && e.prototype instanceof Generator ? e : Generator,\n      a = Object.create(i.prototype);\n    return c(a, \"_invoke\", function (r, e, n) {\n      var o = 1;\n      return function (i, a) {\n        if (3 === o) throw Error(\"Generator is already running\");\n        if (4 === o) {\n          if (\"throw\" === i) throw a;\n          return {\n            value: t,\n            done: !0\n          };\n        }\n        for (n.method = i, n.arg = a;;) {\n          var u = n.delegate;\n          if (u) {\n            var c = d(u, n);\n            if (c) {\n              if (c === f) continue;\n              return c;\n            }\n          }\n          if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n            if (1 === o) throw o = 4, n.arg;\n            n.dispatchException(n.arg);\n          } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n          o = 3;\n          var h = s(r, e, n);\n          if (\"normal\" === h.type) {\n            if (o = n.done ? 4 : 2, h.arg === f) continue;\n            return {\n              value: h.arg,\n              done: n.done\n            };\n          }\n          \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg);\n        }\n      };\n    }(r, n, new Context(o || [])), !0), a;\n  }\n  function s(t, r, e) {\n    try {\n      return {\n        type: \"normal\",\n        arg: t.call(r, e)\n      };\n    } catch (t) {\n      return {\n        type: \"throw\",\n        arg: t\n      };\n    }\n  }\n  r.wrap = h;\n  var f = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  var l = {};\n  c(l, i, function () {\n    return this;\n  });\n  var p = Object.getPrototypeOf,\n    y = p && p(p(x([])));\n  y && y !== e && n.call(y, i) && (l = y);\n  var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l);\n  function g(t) {\n    [\"next\", \"throw\", \"return\"].forEach(function (r) {\n      c(t, r, function (t) {\n        return this._invoke(r, t);\n      });\n    });\n  }\n  function AsyncIterator(t, r) {\n    function e(o, i, a, u) {\n      var c = s(t[o], t, i);\n      if (\"throw\" !== c.type) {\n        var h = c.arg,\n          f = h.value;\n        return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) {\n          e(\"next\", t, a, u);\n        }, function (t) {\n          e(\"throw\", t, a, u);\n        }) : r.resolve(f).then(function (t) {\n          h.value = t, a(h);\n        }, function (t) {\n          return e(\"throw\", t, a, u);\n        });\n      }\n      u(c.arg);\n    }\n    var o;\n    c(this, \"_invoke\", function (t, n) {\n      function i() {\n        return new r(function (r, o) {\n          e(t, n, r, o);\n        });\n      }\n      return o = o ? o.then(i, i) : i();\n    }, !0);\n  }\n  function d(r, e) {\n    var n = e.method,\n      o = r.i[n];\n    if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f;\n    var i = s(o, r.i, e.arg);\n    if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f;\n    var a = i.arg;\n    return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f);\n  }\n  function w(t) {\n    this.tryEntries.push(t);\n  }\n  function m(r) {\n    var e = r[4] || {};\n    e.type = \"normal\", e.arg = t, r[4] = e;\n  }\n  function Context(t) {\n    this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0);\n  }\n  function x(r) {\n    if (null != r) {\n      var e = r[i];\n      if (e) return e.call(r);\n      if (\"function\" == typeof r.next) return r;\n      if (!isNaN(r.length)) {\n        var o = -1,\n          a = function e() {\n            for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e;\n            return e.value = t, e.done = !0, e;\n          };\n        return a.next = a;\n      }\n    }\n    throw new TypeError(_typeof(r) + \" is not iterable\");\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) {\n    var r = \"function\" == typeof t && t.constructor;\n    return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name));\n  }, r.mark = function (t) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t;\n  }, r.awrap = function (t) {\n    return {\n      __await: t\n    };\n  }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () {\n    return this;\n  }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) {\n    void 0 === i && (i = Promise);\n    var a = new AsyncIterator(h(t, e, n, o), i);\n    return r.isGeneratorFunction(e) ? a : a.next().then(function (t) {\n      return t.done ? t.value : a.next();\n    });\n  }, g(v), c(v, u, \"Generator\"), c(v, i, function () {\n    return this;\n  }), c(v, \"toString\", function () {\n    return \"[object Generator]\";\n  }), r.keys = function (t) {\n    var r = Object(t),\n      e = [];\n    for (var n in r) e.unshift(n);\n    return function t() {\n      for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t;\n      return t.done = !0, t;\n    };\n  }, r.values = x, Context.prototype = {\n    constructor: Context,\n    reset: function reset(r) {\n      if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t);\n    },\n    stop: function stop() {\n      this.done = !0;\n      var t = this.tryEntries[0][4];\n      if (\"throw\" === t.type) throw t.arg;\n      return this.rval;\n    },\n    dispatchException: function dispatchException(r) {\n      if (this.done) throw r;\n      var e = this;\n      function n(t) {\n        a.type = \"throw\", a.arg = r, e.next = t;\n      }\n      for (var o = e.tryEntries.length - 1; o >= 0; --o) {\n        var i = this.tryEntries[o],\n          a = i[4],\n          u = this.prev,\n          c = i[1],\n          h = i[2];\n        if (-1 === i[0]) return n(\"end\"), !1;\n        if (!c && !h) throw Error(\"try statement without catch or finally\");\n        if (null != i[0] && i[0] <= u) {\n          if (u < c) return this.method = \"next\", this.arg = t, n(c), !0;\n          if (u < h) return n(h), !1;\n        }\n      }\n    },\n    abrupt: function abrupt(t, r) {\n      for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n        var n = this.tryEntries[e];\n        if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) {\n          var o = n;\n          break;\n        }\n      }\n      o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null);\n      var i = o ? o[4] : {};\n      return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i);\n    },\n    complete: function complete(t, r) {\n      if (\"throw\" === t.type) throw t.arg;\n      return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f;\n    },\n    finish: function finish(t) {\n      for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n        var e = this.tryEntries[r];\n        if (e[2] === t) return this.complete(e[4], e[3]), m(e), f;\n      }\n    },\n    \"catch\": function _catch(t) {\n      for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n        var e = this.tryEntries[r];\n        if (e[0] === t) {\n          var n = e[4];\n          if (\"throw\" === n.type) {\n            var o = n.arg;\n            m(e);\n          }\n          return o;\n        }\n      }\n      throw Error(\"illegal catch attempt\");\n    },\n    delegateYield: function delegateYield(r, e, n) {\n      return this.delegate = {\n        i: x(r),\n        r: e,\n        n: n\n      }, \"next\" === this.method && (this.arg = t), f;\n    }\n  }, r;\n}\nexport { _regeneratorRuntime as default };","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n  try {\n    var i = n[a](c),\n      u = i.value;\n  } catch (n) {\n    return void e(n);\n  }\n  i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n  return function () {\n    var t = this,\n      e = arguments;\n    return new Promise(function (r, o) {\n      var a = n.apply(t, e);\n      function _next(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n      }\n      function _throw(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n      }\n      _next(void 0);\n    });\n  };\n}\nexport { _asyncToGenerator as default };","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as ReactDOM from 'react-dom';\n// Let compiler not to search module usage\nvar fullClone = _objectSpread({}, ReactDOM);\nvar version = fullClone.version,\n  reactRender = fullClone.render,\n  unmountComponentAtNode = fullClone.unmountComponentAtNode;\nvar createRoot;\ntry {\n  var mainVersion = Number((version || '').split('.')[0]);\n  if (mainVersion >= 18) {\n    createRoot = fullClone.createRoot;\n  }\n} catch (e) {\n  // Do nothing;\n}\nfunction toggleWarning(skip) {\n  var __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = fullClone.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  if (__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED && _typeof(__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === 'object') {\n    __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint = skip;\n  }\n}\nvar MARK = '__rc_react_root__';\n\n// ========================== Render ==========================\n\nfunction modernRender(node, container) {\n  toggleWarning(true);\n  var root = container[MARK] || createRoot(container);\n  toggleWarning(false);\n  root.render(node);\n  container[MARK] = root;\n}\nfunction legacyRender(node, container) {\n  reactRender === null || reactRender === void 0 || reactRender(node, container);\n}\n\n/** @private Test usage. Not work in prod */\nexport function _r(node, container) {\n  if (process.env.NODE_ENV !== 'production') {\n    return legacyRender(node, container);\n  }\n}\nexport function render(node, container) {\n  if (createRoot) {\n    modernRender(node, container);\n    return;\n  }\n  legacyRender(node, container);\n}\n\n// ========================= Unmount ==========================\nfunction modernUnmount(_x) {\n  return _modernUnmount.apply(this, arguments);\n}\nfunction _modernUnmount() {\n  _modernUnmount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(container) {\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          return _context.abrupt(\"return\", Promise.resolve().then(function () {\n            var _container$MARK;\n            (_container$MARK = container[MARK]) === null || _container$MARK === void 0 || _container$MARK.unmount();\n            delete container[MARK];\n          }));\n        case 1:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  return _modernUnmount.apply(this, arguments);\n}\nfunction legacyUnmount(container) {\n  unmountComponentAtNode(container);\n}\n\n/** @private Test usage. Not work in prod */\nexport function _u(container) {\n  if (process.env.NODE_ENV !== 'production') {\n    return legacyUnmount(container);\n  }\n}\nexport function unmount(_x2) {\n  return _unmount.apply(this, arguments);\n}\nfunction _unmount() {\n  _unmount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(container) {\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          if (!(createRoot !== undefined)) {\n            _context2.next = 2;\n            break;\n          }\n          return _context2.abrupt(\"return\", modernUnmount(container));\n        case 2:\n          legacyUnmount(container);\n        case 3:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2);\n  }));\n  return _unmount.apply(this, arguments);\n}","\"use client\";\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { render, unmount } from \"rc-util/es/React/render\";\nimport warning from '../_util/warning';\nconst defaultReactRender = (node, container) => {\n  // TODO: Remove in v6\n  // Warning for React 19\n  if (process.env.NODE_ENV !== 'production') {\n    const majorVersion = parseInt(React.version.split('.')[0], 10);\n    const fullKeys = Object.keys(ReactDOM);\n    process.env.NODE_ENV !== \"production\" ? warning(majorVersion < 19 || fullKeys.includes('createRoot'), 'compatible', 'antd v5 support React is 16 ~ 18. see https://u.ant.design/v5-for-19 for compatible.') : void 0;\n  }\n  render(node, container);\n  return () => {\n    return unmount(container);\n  };\n};\nlet unstableRender = defaultReactRender;\n/**\n * @deprecated Set React render function for compatible usage.\n * This is internal usage only compatible with React 19.\n * And will be removed in next major version.\n */\nexport function unstableSetRender(render) {\n  if (render) {\n    unstableRender = render;\n  }\n  return unstableRender;\n}","// This icon file is generated automatically.\nvar CheckCircleFilled = { \"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\" };\nexport default CheckCircleFilled;\n","function getRoot(ele) {\n  var _ele$getRootNode;\n  return ele === null || ele === void 0 || (_ele$getRootNode = ele.getRootNode) === null || _ele$getRootNode === void 0 ? void 0 : _ele$getRootNode.call(ele);\n}\n\n/**\n * Check if is in shadowRoot\n */\nexport function inShadow(ele) {\n  return getRoot(ele) instanceof ShadowRoot;\n}\n\n/**\n * Return shadowRoot if possible\n */\nexport function getShadowRoot(ele) {\n  return inShadow(ele) ? getRoot(ele) : null;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { generate as generateColor } from '@ant-design/colors';\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { getShadowRoot } from \"rc-util/es/Dom/shadow\";\nimport warn from \"rc-util/es/warning\";\nimport React, { useContext, useEffect } from 'react';\nimport IconContext from \"./components/Context\";\nfunction camelCase(input) {\n  return input.replace(/-(.)/g, function (match, g) {\n    return g.toUpperCase();\n  });\n}\nexport function warning(valid, message) {\n  warn(valid, \"[@ant-design/icons] \".concat(message));\n}\nexport function isIconDefinition(target) {\n  return _typeof(target) === 'object' && typeof target.name === 'string' && typeof target.theme === 'string' && (_typeof(target.icon) === 'object' || typeof target.icon === 'function');\n}\nexport function normalizeAttrs() {\n  var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return Object.keys(attrs).reduce(function (acc, key) {\n    var val = attrs[key];\n    switch (key) {\n      case 'class':\n        acc.className = val;\n        delete acc.class;\n        break;\n      default:\n        delete acc[key];\n        acc[camelCase(key)] = val;\n    }\n    return acc;\n  }, {});\n}\nexport function generate(node, key, rootProps) {\n  if (!rootProps) {\n    return /*#__PURE__*/React.createElement(node.tag, _objectSpread({\n      key: key\n    }, normalizeAttrs(node.attrs)), (node.children || []).map(function (child, index) {\n      return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n    }));\n  }\n  return /*#__PURE__*/React.createElement(node.tag, _objectSpread(_objectSpread({\n    key: key\n  }, normalizeAttrs(node.attrs)), rootProps), (node.children || []).map(function (child, index) {\n    return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n  }));\n}\nexport function getSecondaryColor(primaryColor) {\n  // choose the second color\n  return generateColor(primaryColor)[0];\n}\nexport function normalizeTwoToneColors(twoToneColor) {\n  if (!twoToneColor) {\n    return [];\n  }\n  return Array.isArray(twoToneColor) ? twoToneColor : [twoToneColor];\n}\n\n// These props make sure that the SVG behaviours like general text.\n// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\nexport var svgBaseProps = {\n  width: '1em',\n  height: '1em',\n  fill: 'currentColor',\n  'aria-hidden': 'true',\n  focusable: 'false'\n};\nexport var iconStyles = \"\\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\";\nexport var useInsertStyles = function useInsertStyles(eleRef) {\n  var _useContext = useContext(IconContext),\n    csp = _useContext.csp,\n    prefixCls = _useContext.prefixCls,\n    layer = _useContext.layer;\n  var mergedStyleStr = iconStyles;\n  if (prefixCls) {\n    mergedStyleStr = mergedStyleStr.replace(/anticon/g, prefixCls);\n  }\n  if (layer) {\n    mergedStyleStr = \"@layer \".concat(layer, \" {\\n\").concat(mergedStyleStr, \"\\n}\");\n  }\n  useEffect(function () {\n    var ele = eleRef.current;\n    var shadowRoot = getShadowRoot(ele);\n    updateCSS(mergedStyleStr, '@ant-design-icons', {\n      prepend: !layer,\n      csp: csp,\n      attachTo: shadowRoot\n    });\n  }, []);\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"icon\", \"className\", \"onClick\", \"style\", \"primaryColor\", \"secondaryColor\"];\nimport * as React from 'react';\nimport { generate, getSecondaryColor, isIconDefinition, warning, useInsertStyles } from \"../utils\";\nvar twoToneColorPalette = {\n  primaryColor: '#333',\n  secondaryColor: '#E6E6E6',\n  calculated: false\n};\nfunction setTwoToneColors(_ref) {\n  var primaryColor = _ref.primaryColor,\n    secondaryColor = _ref.secondaryColor;\n  twoToneColorPalette.primaryColor = primaryColor;\n  twoToneColorPalette.secondaryColor = secondaryColor || getSecondaryColor(primaryColor);\n  twoToneColorPalette.calculated = !!secondaryColor;\n}\nfunction getTwoToneColors() {\n  return _objectSpread({}, twoToneColorPalette);\n}\nvar IconBase = function IconBase(props) {\n  var icon = props.icon,\n    className = props.className,\n    onClick = props.onClick,\n    style = props.style,\n    primaryColor = props.primaryColor,\n    secondaryColor = props.secondaryColor,\n    restProps = _objectWithoutProperties(props, _excluded);\n  var svgRef = React.useRef();\n  var colors = twoToneColorPalette;\n  if (primaryColor) {\n    colors = {\n      primaryColor: primaryColor,\n      secondaryColor: secondaryColor || getSecondaryColor(primaryColor)\n    };\n  }\n  useInsertStyles(svgRef);\n  warning(isIconDefinition(icon), \"icon should be icon definiton, but got \".concat(icon));\n  if (!isIconDefinition(icon)) {\n    return null;\n  }\n  var target = icon;\n  if (target && typeof target.icon === 'function') {\n    target = _objectSpread(_objectSpread({}, target), {}, {\n      icon: target.icon(colors.primaryColor, colors.secondaryColor)\n    });\n  }\n  return generate(target.icon, \"svg-\".concat(target.name), _objectSpread(_objectSpread({\n    className: className,\n    onClick: onClick,\n    style: style,\n    'data-icon': target.name,\n    width: '1em',\n    height: '1em',\n    fill: 'currentColor',\n    'aria-hidden': 'true'\n  }, restProps), {}, {\n    ref: svgRef\n  }));\n};\nIconBase.displayName = 'IconReact';\nIconBase.getTwoToneColors = getTwoToneColors;\nIconBase.setTwoToneColors = setTwoToneColors;\nexport default IconBase;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport ReactIcon from \"./IconBase\";\nimport { normalizeTwoToneColors } from \"../utils\";\nexport function setTwoToneColor(twoToneColor) {\n  var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor),\n    _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2),\n    primaryColor = _normalizeTwoToneColo2[0],\n    secondaryColor = _normalizeTwoToneColo2[1];\n  return ReactIcon.setTwoToneColors({\n    primaryColor: primaryColor,\n    secondaryColor: secondaryColor\n  });\n}\nexport function getTwoToneColor() {\n  var colors = ReactIcon.getTwoToneColors();\n  if (!colors.calculated) {\n    return colors.primaryColor;\n  }\n  return [colors.primaryColor, colors.secondaryColor];\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"icon\", \"spin\", \"rotate\", \"tabIndex\", \"onClick\", \"twoToneColor\"];\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { blue } from '@ant-design/colors';\nimport Context from \"./Context\";\nimport ReactIcon from \"./IconBase\";\nimport { getTwoToneColor, setTwoToneColor } from \"./twoTonePrimaryColor\";\nimport { normalizeTwoToneColors } from \"../utils\";\n// Initial setting\n// should move it to antd main repo?\nsetTwoToneColor(blue.primary);\n\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34757#issuecomment-488848720\n\nvar Icon = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var className = props.className,\n    icon = props.icon,\n    spin = props.spin,\n    rotate = props.rotate,\n    tabIndex = props.tabIndex,\n    onClick = props.onClick,\n    twoToneColor = props.twoToneColor,\n    restProps = _objectWithoutProperties(props, _excluded);\n  var _React$useContext = React.useContext(Context),\n    _React$useContext$pre = _React$useContext.prefixCls,\n    prefixCls = _React$useContext$pre === void 0 ? 'anticon' : _React$useContext$pre,\n    rootClassName = _React$useContext.rootClassName;\n  var classString = classNames(rootClassName, prefixCls, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-\").concat(icon.name), !!icon.name), \"\".concat(prefixCls, \"-spin\"), !!spin || icon.name === 'loading'), className);\n  var iconTabIndex = tabIndex;\n  if (iconTabIndex === undefined && onClick) {\n    iconTabIndex = -1;\n  }\n  var svgStyle = rotate ? {\n    msTransform: \"rotate(\".concat(rotate, \"deg)\"),\n    transform: \"rotate(\".concat(rotate, \"deg)\")\n  } : undefined;\n  var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor),\n    _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2),\n    primaryColor = _normalizeTwoToneColo2[0],\n    secondaryColor = _normalizeTwoToneColo2[1];\n  return /*#__PURE__*/React.createElement(\"span\", _extends({\n    role: \"img\",\n    \"aria-label\": icon.name\n  }, restProps, {\n    ref: ref,\n    tabIndex: iconTabIndex,\n    onClick: onClick,\n    className: classString\n  }), /*#__PURE__*/React.createElement(ReactIcon, {\n    icon: icon,\n    primaryColor: primaryColor,\n    secondaryColor: secondaryColor,\n    style: svgStyle\n  }));\n});\nIcon.displayName = 'AntdIcon';\nIcon.getTwoToneColor = getTwoToneColor;\nIcon.setTwoToneColor = setTwoToneColor;\nexport default Icon;","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CheckCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CheckCircleFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar CheckCircleFilled = function CheckCircleFilled(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: CheckCircleFilledSvg\n  }));\n};\n\n/**![check-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0xOTMuNSAzMDEuN2wtMjEwLjYgMjkyYTMxLjggMzEuOCAwIDAxLTUxLjcgMEwzMTguNSA0ODQuOWMtMy44LTUuMyAwLTEyLjcgNi41LTEyLjdoNDYuOWMxMC4yIDAgMTkuOSA0LjkgMjUuOSAxMy4zbDcxLjIgOTguOCAxNTcuMi0yMThjNi04LjMgMTUuNi0xMy4zIDI1LjktMTMuM0g2OTljNi41IDAgMTAuMyA3LjQgNi41IDEyLjd6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(CheckCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CheckCircleFilled';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar CloseCircleFilled = { \"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\" };\nexport default CloseCircleFilled;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CloseCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CloseCircleFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar CloseCircleFilled = function CloseCircleFilled(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: CloseCircleFilledSvg\n  }));\n};\n\n/**![close-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNTEyIDY0YzI0Ny40IDAgNDQ4IDIwMC42IDQ0OCA0NDhTNzU5LjQgOTYwIDUxMiA5NjAgNjQgNzU5LjQgNjQgNTEyIDI2NC42IDY0IDUxMiA2NHptMTI3Ljk4IDI3NC44MmgtLjA0bC0uMDguMDZMNTEyIDQ2Ni43NSAzODQuMTQgMzM4Ljg4Yy0uMDQtLjA1LS4wNi0uMDYtLjA4LS4wNmEuMTIuMTIgMCAwMC0uMDcgMGMtLjAzIDAtLjA1LjAxLS4wOS4wNWwtNDUuMDIgNDUuMDJhLjIuMiAwIDAwLS4wNS4wOS4xMi4xMiAwIDAwMCAuMDd2LjAyYS4yNy4yNyAwIDAwLjA2LjA2TDQ2Ni43NSA1MTIgMzM4Ljg4IDYzOS44NmMtLjA1LjA0LS4wNi4wNi0uMDYuMDhhLjEyLjEyIDAgMDAwIC4wN2MwIC4wMy4wMS4wNS4wNS4wOWw0NS4wMiA0NS4wMmEuMi4yIDAgMDAuMDkuMDUuMTIuMTIgMCAwMC4wNyAwYy4wMiAwIC4wNC0uMDEuMDgtLjA1TDUxMiA1NTcuMjVsMTI3Ljg2IDEyNy44N2MuMDQuMDQuMDYuMDUuMDguMDVhLjEyLjEyIDAgMDAuMDcgMGMuMDMgMCAuMDUtLjAxLjA5LS4wNWw0NS4wMi00NS4wMmEuMi4yIDAgMDAuMDUtLjA5LjEyLjEyIDAgMDAwLS4wN3YtLjAyYS4yNy4yNyAwIDAwLS4wNS0uMDZMNTU3LjI1IDUxMmwxMjcuODctMTI3Ljg2Yy4wNC0uMDQuMDUtLjA2LjA1LS4wOGEuMTIuMTIgMCAwMDAtLjA3YzAtLjAzLS4wMS0uMDUtLjA1LS4wOWwtNDUuMDItNDUuMDJhLjIuMiAwIDAwLS4wOS0uMDUuMTIuMTIgMCAwMC0uMDcgMHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(CloseCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CloseCircleFilled';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar ExclamationCircleFilled = { \"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\" };\nexport default ExclamationCircleFilled;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ExclamationCircleFilledSvg from \"@ant-design/icons-svg/es/asn/ExclamationCircleFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ExclamationCircleFilled = function ExclamationCircleFilled(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: ExclamationCircleFilledSvg\n  }));\n};\n\n/**![exclamation-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0tMzIgMjMyYzAtNC40IDMuNi04IDgtOGg0OGM0LjQgMCA4IDMuNiA4IDh2MjcyYzAgNC40LTMuNiA4LTggOGgtNDhjLTQuNCAwLTgtMy42LTgtOFYyOTZ6bTMyIDQ0MGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ExclamationCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'ExclamationCircleFilled';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar InfoCircleFilled = { \"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\" };\nexport default InfoCircleFilled;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport InfoCircleFilledSvg from \"@ant-design/icons-svg/es/asn/InfoCircleFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar InfoCircleFilled = function InfoCircleFilled(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: InfoCircleFilledSvg\n  }));\n};\n\n/**![info-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0zMiA2NjRjMCA0LjQtMy42IDgtOCA4aC00OGMtNC40IDAtOC0zLjYtOC04VjQ1NmMwLTQuNCAzLjYtOCA4LThoNDhjNC40IDAgOCAzLjYgOCA4djI3MnptLTMyLTM0NGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(InfoCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'InfoCircleFilled';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar LoadingOutlined = { \"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\" };\nexport default LoadingOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport LoadingOutlinedSvg from \"@ant-design/icons-svg/es/asn/LoadingOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar LoadingOutlined = function LoadingOutlined(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: LoadingOutlinedSvg\n  }));\n};\n\n/**![loading](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk4OCA1NDhjLTE5LjkgMC0zNi0xNi4xLTM2LTM2IDAtNTkuNC0xMS42LTExNy0zNC42LTE3MS4zYTQ0MC40NSA0NDAuNDUgMCAwMC05NC4zLTEzOS45IDQzNy43MSA0MzcuNzEgMCAwMC0xMzkuOS05NC4zQzYyOSA4My42IDU3MS40IDcyIDUxMiA3MmMtMTkuOSAwLTM2LTE2LjEtMzYtMzZzMTYuMS0zNiAzNi0zNmM2OS4xIDAgMTM2LjIgMTMuNSAxOTkuMyA0MC4zQzc3Mi4zIDY2IDgyNyAxMDMgODc0IDE1MGM0NyA0NyA4My45IDEwMS44IDEwOS43IDE2Mi43IDI2LjcgNjMuMSA0MC4yIDEzMC4yIDQwLjIgMTk5LjMuMSAxOS45LTE2IDM2LTM1LjkgMzZ6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(LoadingOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'LoadingOutlined';\n}\nexport default RefIcon;","/**\n * @ignore\n * some key-codes definition and utils from closure-library\n * @author yiminghe@gmail.com\n */\n\nvar KeyCode = {\n  /**\n   * MAC_ENTER\n   */\n  MAC_ENTER: 3,\n  /**\n   * BACKSPACE\n   */\n  BACKSPACE: 8,\n  /**\n   * TAB\n   */\n  TAB: 9,\n  /**\n   * NUMLOCK on FF/Safari Mac\n   */\n  NUM_CENTER: 12,\n  // NUMLOCK on FF/Safari Mac\n  /**\n   * ENTER\n   */\n  ENTER: 13,\n  /**\n   * SHIFT\n   */\n  SHIFT: 16,\n  /**\n   * CTRL\n   */\n  CTRL: 17,\n  /**\n   * ALT\n   */\n  ALT: 18,\n  /**\n   * PAUSE\n   */\n  PAUSE: 19,\n  /**\n   * CAPS_LOCK\n   */\n  CAPS_LOCK: 20,\n  /**\n   * ESC\n   */\n  ESC: 27,\n  /**\n   * SPACE\n   */\n  SPACE: 32,\n  /**\n   * PAGE_UP\n   */\n  PAGE_UP: 33,\n  // also NUM_NORTH_EAST\n  /**\n   * PAGE_DOWN\n   */\n  PAGE_DOWN: 34,\n  // also NUM_SOUTH_EAST\n  /**\n   * END\n   */\n  END: 35,\n  // also NUM_SOUTH_WEST\n  /**\n   * HOME\n   */\n  HOME: 36,\n  // also NUM_NORTH_WEST\n  /**\n   * LEFT\n   */\n  LEFT: 37,\n  // also NUM_WEST\n  /**\n   * UP\n   */\n  UP: 38,\n  // also NUM_NORTH\n  /**\n   * RIGHT\n   */\n  RIGHT: 39,\n  // also NUM_EAST\n  /**\n   * DOWN\n   */\n  DOWN: 40,\n  // also NUM_SOUTH\n  /**\n   * PRINT_SCREEN\n   */\n  PRINT_SCREEN: 44,\n  /**\n   * INSERT\n   */\n  INSERT: 45,\n  // also NUM_INSERT\n  /**\n   * DELETE\n   */\n  DELETE: 46,\n  // also NUM_DELETE\n  /**\n   * ZERO\n   */\n  ZERO: 48,\n  /**\n   * ONE\n   */\n  ONE: 49,\n  /**\n   * TWO\n   */\n  TWO: 50,\n  /**\n   * THREE\n   */\n  THREE: 51,\n  /**\n   * FOUR\n   */\n  FOUR: 52,\n  /**\n   * FIVE\n   */\n  FIVE: 53,\n  /**\n   * SIX\n   */\n  SIX: 54,\n  /**\n   * SEVEN\n   */\n  SEVEN: 55,\n  /**\n   * EIGHT\n   */\n  EIGHT: 56,\n  /**\n   * NINE\n   */\n  NINE: 57,\n  /**\n   * QUESTION_MARK\n   */\n  QUESTION_MARK: 63,\n  // needs localization\n  /**\n   * A\n   */\n  A: 65,\n  /**\n   * B\n   */\n  B: 66,\n  /**\n   * C\n   */\n  C: 67,\n  /**\n   * D\n   */\n  D: 68,\n  /**\n   * E\n   */\n  E: 69,\n  /**\n   * F\n   */\n  F: 70,\n  /**\n   * G\n   */\n  G: 71,\n  /**\n   * H\n   */\n  H: 72,\n  /**\n   * I\n   */\n  I: 73,\n  /**\n   * J\n   */\n  J: 74,\n  /**\n   * K\n   */\n  K: 75,\n  /**\n   * L\n   */\n  L: 76,\n  /**\n   * M\n   */\n  M: 77,\n  /**\n   * N\n   */\n  N: 78,\n  /**\n   * O\n   */\n  O: 79,\n  /**\n   * P\n   */\n  P: 80,\n  /**\n   * Q\n   */\n  Q: 81,\n  /**\n   * R\n   */\n  R: 82,\n  /**\n   * S\n   */\n  S: 83,\n  /**\n   * T\n   */\n  T: 84,\n  /**\n   * U\n   */\n  U: 85,\n  /**\n   * V\n   */\n  V: 86,\n  /**\n   * W\n   */\n  W: 87,\n  /**\n   * X\n   */\n  X: 88,\n  /**\n   * Y\n   */\n  Y: 89,\n  /**\n   * Z\n   */\n  Z: 90,\n  /**\n   * META\n   */\n  META: 91,\n  // WIN_KEY_LEFT\n  /**\n   * WIN_KEY_RIGHT\n   */\n  WIN_KEY_RIGHT: 92,\n  /**\n   * CONTEXT_MENU\n   */\n  CONTEXT_MENU: 93,\n  /**\n   * NUM_ZERO\n   */\n  NUM_ZERO: 96,\n  /**\n   * NUM_ONE\n   */\n  NUM_ONE: 97,\n  /**\n   * NUM_TWO\n   */\n  NUM_TWO: 98,\n  /**\n   * NUM_THREE\n   */\n  NUM_THREE: 99,\n  /**\n   * NUM_FOUR\n   */\n  NUM_FOUR: 100,\n  /**\n   * NUM_FIVE\n   */\n  NUM_FIVE: 101,\n  /**\n   * NUM_SIX\n   */\n  NUM_SIX: 102,\n  /**\n   * NUM_SEVEN\n   */\n  NUM_SEVEN: 103,\n  /**\n   * NUM_EIGHT\n   */\n  NUM_EIGHT: 104,\n  /**\n   * NUM_NINE\n   */\n  NUM_NINE: 105,\n  /**\n   * NUM_MULTIPLY\n   */\n  NUM_MULTIPLY: 106,\n  /**\n   * NUM_PLUS\n   */\n  NUM_PLUS: 107,\n  /**\n   * NUM_MINUS\n   */\n  NUM_MINUS: 109,\n  /**\n   * NUM_PERIOD\n   */\n  NUM_PERIOD: 110,\n  /**\n   * NUM_DIVISION\n   */\n  NUM_DIVISION: 111,\n  /**\n   * F1\n   */\n  F1: 112,\n  /**\n   * F2\n   */\n  F2: 113,\n  /**\n   * F3\n   */\n  F3: 114,\n  /**\n   * F4\n   */\n  F4: 115,\n  /**\n   * F5\n   */\n  F5: 116,\n  /**\n   * F6\n   */\n  F6: 117,\n  /**\n   * F7\n   */\n  F7: 118,\n  /**\n   * F8\n   */\n  F8: 119,\n  /**\n   * F9\n   */\n  F9: 120,\n  /**\n   * F10\n   */\n  F10: 121,\n  /**\n   * F11\n   */\n  F11: 122,\n  /**\n   * F12\n   */\n  F12: 123,\n  /**\n   * NUMLOCK\n   */\n  NUMLOCK: 144,\n  /**\n   * SEMICOLON\n   */\n  SEMICOLON: 186,\n  // needs localization\n  /**\n   * DASH\n   */\n  DASH: 189,\n  // needs localization\n  /**\n   * EQUALS\n   */\n  EQUALS: 187,\n  // needs localization\n  /**\n   * COMMA\n   */\n  COMMA: 188,\n  // needs localization\n  /**\n   * PERIOD\n   */\n  PERIOD: 190,\n  // needs localization\n  /**\n   * SLASH\n   */\n  SLASH: 191,\n  // needs localization\n  /**\n   * APOSTROPHE\n   */\n  APOSTROPHE: 192,\n  // needs localization\n  /**\n   * SINGLE_QUOTE\n   */\n  SINGLE_QUOTE: 222,\n  // needs localization\n  /**\n   * OPEN_SQUARE_BRACKET\n   */\n  OPEN_SQUARE_BRACKET: 219,\n  // needs localization\n  /**\n   * BACKSLASH\n   */\n  BACKSLASH: 220,\n  // needs localization\n  /**\n   * CLOSE_SQUARE_BRACKET\n   */\n  CLOSE_SQUARE_BRACKET: 221,\n  // needs localization\n  /**\n   * WIN_KEY\n   */\n  WIN_KEY: 224,\n  /**\n   * MAC_FF_META\n   */\n  MAC_FF_META: 224,\n  // Firefox (Gecko) fires this for the meta key instead of 91\n  /**\n   * WIN_IME\n   */\n  WIN_IME: 229,\n  // ======================== Function ========================\n  /**\n   * whether text and modified key is entered at the same time.\n   */\n  isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e) {\n    var keyCode = e.keyCode;\n    if (e.altKey && !e.ctrlKey || e.metaKey ||\n    // Function keys don't generate text\n    keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {\n      return false;\n    }\n\n    // The following keys are quite harmless, even in combination with\n    // CTRL, ALT or SHIFT.\n    switch (keyCode) {\n      case KeyCode.ALT:\n      case KeyCode.CAPS_LOCK:\n      case KeyCode.CONTEXT_MENU:\n      case KeyCode.CTRL:\n      case KeyCode.DOWN:\n      case KeyCode.END:\n      case KeyCode.ESC:\n      case KeyCode.HOME:\n      case KeyCode.INSERT:\n      case KeyCode.LEFT:\n      case KeyCode.MAC_FF_META:\n      case KeyCode.META:\n      case KeyCode.NUMLOCK:\n      case KeyCode.NUM_CENTER:\n      case KeyCode.PAGE_DOWN:\n      case KeyCode.PAGE_UP:\n      case KeyCode.PAUSE:\n      case KeyCode.PRINT_SCREEN:\n      case KeyCode.RIGHT:\n      case KeyCode.SHIFT:\n      case KeyCode.UP:\n      case KeyCode.WIN_KEY:\n      case KeyCode.WIN_KEY_RIGHT:\n        return false;\n      default:\n        return true;\n    }\n  },\n  /**\n   * whether character is entered.\n   */\n  isCharacterKey: function isCharacterKey(keyCode) {\n    if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {\n      return true;\n    }\n    if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {\n      return true;\n    }\n    if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {\n      return true;\n    }\n\n    // Safari sends zero key code for non-latin characters.\n    if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {\n      return true;\n    }\n    switch (keyCode) {\n      case KeyCode.SPACE:\n      case KeyCode.QUESTION_MARK:\n      case KeyCode.NUM_PLUS:\n      case KeyCode.NUM_MINUS:\n      case KeyCode.NUM_PERIOD:\n      case KeyCode.NUM_DIVISION:\n      case KeyCode.SEMICOLON:\n      case KeyCode.DASH:\n      case KeyCode.EQUALS:\n      case KeyCode.COMMA:\n      case KeyCode.PERIOD:\n      case KeyCode.SLASH:\n      case KeyCode.APOSTROPHE:\n      case KeyCode.SINGLE_QUOTE:\n      case KeyCode.OPEN_SQUARE_BRACKET:\n      case KeyCode.BACKSLASH:\n      case KeyCode.CLOSE_SQUARE_BRACKET:\n        return true;\n      default:\n        return false;\n    }\n  }\n};\nexport default KeyCode;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar attributes = \"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\";\nvar eventsName = \"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\";\nvar propList = \"\".concat(attributes, \" \").concat(eventsName).split(/[\\s\\n]+/);\n\n/* eslint-enable max-len */\nvar ariaPrefix = 'aria-';\nvar dataPrefix = 'data-';\nfunction match(key, prefix) {\n  return key.indexOf(prefix) === 0;\n}\n/**\n * Picker props from exist props with filter\n * @param props Passed props\n * @param ariaOnly boolean | { aria?: boolean; data?: boolean; attr?: boolean; } filter config\n */\nexport default function pickAttrs(props) {\n  var ariaOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var mergedConfig;\n  if (ariaOnly === false) {\n    mergedConfig = {\n      aria: true,\n      data: true,\n      attr: true\n    };\n  } else if (ariaOnly === true) {\n    mergedConfig = {\n      aria: true\n    };\n  } else {\n    mergedConfig = _objectSpread({}, ariaOnly);\n  }\n  var attrs = {};\n  Object.keys(props).forEach(function (key) {\n    if (\n    // Aria\n    mergedConfig.aria && (key === 'role' || match(key, ariaPrefix)) ||\n    // Data\n    mergedConfig.data && match(key, dataPrefix) ||\n    // Attr\n    mergedConfig.attr && propList.includes(key)) {\n      attrs[key] = props[key];\n    }\n  });\n  return attrs;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport classNames from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport * as React from 'react';\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nvar Notify = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var prefixCls = props.prefixCls,\n    style = props.style,\n    className = props.className,\n    _props$duration = props.duration,\n    duration = _props$duration === void 0 ? 4.5 : _props$duration,\n    showProgress = props.showProgress,\n    _props$pauseOnHover = props.pauseOnHover,\n    pauseOnHover = _props$pauseOnHover === void 0 ? true : _props$pauseOnHover,\n    eventKey = props.eventKey,\n    content = props.content,\n    closable = props.closable,\n    _props$closeIcon = props.closeIcon,\n    closeIcon = _props$closeIcon === void 0 ? 'x' : _props$closeIcon,\n    divProps = props.props,\n    onClick = props.onClick,\n    onNoticeClose = props.onNoticeClose,\n    times = props.times,\n    forcedHovering = props.hovering;\n  var _React$useState = React.useState(false),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    hovering = _React$useState2[0],\n    setHovering = _React$useState2[1];\n  var _React$useState3 = React.useState(0),\n    _React$useState4 = _slicedToArray(_React$useState3, 2),\n    percent = _React$useState4[0],\n    setPercent = _React$useState4[1];\n  var _React$useState5 = React.useState(0),\n    _React$useState6 = _slicedToArray(_React$useState5, 2),\n    spentTime = _React$useState6[0],\n    setSpentTime = _React$useState6[1];\n  var mergedHovering = forcedHovering || hovering;\n  var mergedShowProgress = duration > 0 && showProgress;\n\n  // ======================== Close =========================\n  var onInternalClose = function onInternalClose() {\n    onNoticeClose(eventKey);\n  };\n  var onCloseKeyDown = function onCloseKeyDown(e) {\n    if (e.key === 'Enter' || e.code === 'Enter' || e.keyCode === KeyCode.ENTER) {\n      onInternalClose();\n    }\n  };\n\n  // ======================== Effect ========================\n  React.useEffect(function () {\n    if (!mergedHovering && duration > 0) {\n      var start = Date.now() - spentTime;\n      var timeout = setTimeout(function () {\n        onInternalClose();\n      }, duration * 1000 - spentTime);\n      return function () {\n        if (pauseOnHover) {\n          clearTimeout(timeout);\n        }\n        setSpentTime(Date.now() - start);\n      };\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [duration, mergedHovering, times]);\n  React.useEffect(function () {\n    if (!mergedHovering && mergedShowProgress && (pauseOnHover || spentTime === 0)) {\n      var start = performance.now();\n      var animationFrame;\n      var calculate = function calculate() {\n        cancelAnimationFrame(animationFrame);\n        animationFrame = requestAnimationFrame(function (timestamp) {\n          var runtime = timestamp + spentTime - start;\n          var progress = Math.min(runtime / (duration * 1000), 1);\n          setPercent(progress * 100);\n          if (progress < 1) {\n            calculate();\n          }\n        });\n      };\n      calculate();\n      return function () {\n        if (pauseOnHover) {\n          cancelAnimationFrame(animationFrame);\n        }\n      };\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [duration, spentTime, mergedHovering, mergedShowProgress, times]);\n\n  // ======================== Closable ========================\n  var closableObj = React.useMemo(function () {\n    if (_typeof(closable) === 'object' && closable !== null) {\n      return closable;\n    }\n    if (closable) {\n      return {\n        closeIcon: closeIcon\n      };\n    }\n    return {};\n  }, [closable, closeIcon]);\n  var ariaProps = pickAttrs(closableObj, true);\n\n  // ======================== Progress ========================\n  var validPercent = 100 - (!percent || percent < 0 ? 0 : percent > 100 ? 100 : percent);\n\n  // ======================== Render ========================\n  var noticePrefixCls = \"\".concat(prefixCls, \"-notice\");\n  return /*#__PURE__*/React.createElement(\"div\", _extends({}, divProps, {\n    ref: ref,\n    className: classNames(noticePrefixCls, className, _defineProperty({}, \"\".concat(noticePrefixCls, \"-closable\"), closable)),\n    style: style,\n    onMouseEnter: function onMouseEnter(e) {\n      var _divProps$onMouseEnte;\n      setHovering(true);\n      divProps === null || divProps === void 0 || (_divProps$onMouseEnte = divProps.onMouseEnter) === null || _divProps$onMouseEnte === void 0 || _divProps$onMouseEnte.call(divProps, e);\n    },\n    onMouseLeave: function onMouseLeave(e) {\n      var _divProps$onMouseLeav;\n      setHovering(false);\n      divProps === null || divProps === void 0 || (_divProps$onMouseLeav = divProps.onMouseLeave) === null || _divProps$onMouseLeav === void 0 || _divProps$onMouseLeav.call(divProps, e);\n    },\n    onClick: onClick\n  }), /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(noticePrefixCls, \"-content\")\n  }, content), closable && /*#__PURE__*/React.createElement(\"a\", _extends({\n    tabIndex: 0,\n    className: \"\".concat(noticePrefixCls, \"-close\"),\n    onKeyDown: onCloseKeyDown,\n    \"aria-label\": \"Close\"\n  }, ariaProps, {\n    onClick: function onClick(e) {\n      e.preventDefault();\n      e.stopPropagation();\n      onInternalClose();\n    }\n  }), closableObj.closeIcon), mergedShowProgress && /*#__PURE__*/React.createElement(\"progress\", {\n    className: \"\".concat(noticePrefixCls, \"-progress\"),\n    max: \"100\",\n    value: validPercent\n  }, validPercent + '%'));\n});\nexport default Notify;","import React from 'react';\nexport var NotificationContext = /*#__PURE__*/React.createContext({});\nvar NotificationProvider = function NotificationProvider(_ref) {\n  var children = _ref.children,\n    classNames = _ref.classNames;\n  return /*#__PURE__*/React.createElement(NotificationContext.Provider, {\n    value: {\n      classNames: classNames\n    }\n  }, children);\n};\nexport default NotificationProvider;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar DEFAULT_OFFSET = 8;\nvar DEFAULT_THRESHOLD = 3;\nvar DEFAULT_GAP = 16;\nvar useStack = function useStack(config) {\n  var result = {\n    offset: DEFAULT_OFFSET,\n    threshold: DEFAULT_THRESHOLD,\n    gap: DEFAULT_GAP\n  };\n  if (config && _typeof(config) === 'object') {\n    var _config$offset, _config$threshold, _config$gap;\n    result.offset = (_config$offset = config.offset) !== null && _config$offset !== void 0 ? _config$offset : DEFAULT_OFFSET;\n    result.threshold = (_config$threshold = config.threshold) !== null && _config$threshold !== void 0 ? _config$threshold : DEFAULT_THRESHOLD;\n    result.gap = (_config$gap = config.gap) !== null && _config$gap !== void 0 ? _config$gap : DEFAULT_GAP;\n  }\n  return [!!config, result];\n};\nexport default useStack;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nvar _excluded = [\"className\", \"style\", \"classNames\", \"styles\"];\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport clsx from 'classnames';\nimport { CSSMotionList } from 'rc-motion';\nimport Notice from \"./Notice\";\nimport { NotificationContext } from \"./NotificationProvider\";\nimport useStack from \"./hooks/useStack\";\nvar NoticeList = function NoticeList(props) {\n  var configList = props.configList,\n    placement = props.placement,\n    prefixCls = props.prefixCls,\n    className = props.className,\n    style = props.style,\n    motion = props.motion,\n    onAllNoticeRemoved = props.onAllNoticeRemoved,\n    onNoticeClose = props.onNoticeClose,\n    stackConfig = props.stack;\n  var _useContext = useContext(NotificationContext),\n    ctxCls = _useContext.classNames;\n  var dictRef = useRef({});\n  var _useState = useState(null),\n    _useState2 = _slicedToArray(_useState, 2),\n    latestNotice = _useState2[0],\n    setLatestNotice = _useState2[1];\n  var _useState3 = useState([]),\n    _useState4 = _slicedToArray(_useState3, 2),\n    hoverKeys = _useState4[0],\n    setHoverKeys = _useState4[1];\n  var keys = configList.map(function (config) {\n    return {\n      config: config,\n      key: String(config.key)\n    };\n  });\n  var _useStack = useStack(stackConfig),\n    _useStack2 = _slicedToArray(_useStack, 2),\n    stack = _useStack2[0],\n    _useStack2$ = _useStack2[1],\n    offset = _useStack2$.offset,\n    threshold = _useStack2$.threshold,\n    gap = _useStack2$.gap;\n  var expanded = stack && (hoverKeys.length > 0 || keys.length <= threshold);\n  var placementMotion = typeof motion === 'function' ? motion(placement) : motion;\n\n  // Clean hover key\n  useEffect(function () {\n    if (stack && hoverKeys.length > 1) {\n      setHoverKeys(function (prev) {\n        return prev.filter(function (key) {\n          return keys.some(function (_ref) {\n            var dataKey = _ref.key;\n            return key === dataKey;\n          });\n        });\n      });\n    }\n  }, [hoverKeys, keys, stack]);\n\n  // Force update latest notice\n  useEffect(function () {\n    var _keys;\n    if (stack && dictRef.current[(_keys = keys[keys.length - 1]) === null || _keys === void 0 ? void 0 : _keys.key]) {\n      var _keys2;\n      setLatestNotice(dictRef.current[(_keys2 = keys[keys.length - 1]) === null || _keys2 === void 0 ? void 0 : _keys2.key]);\n    }\n  }, [keys, stack]);\n  return /*#__PURE__*/React.createElement(CSSMotionList, _extends({\n    key: placement,\n    className: clsx(prefixCls, \"\".concat(prefixCls, \"-\").concat(placement), ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.list, className, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-stack\"), !!stack), \"\".concat(prefixCls, \"-stack-expanded\"), expanded)),\n    style: style,\n    keys: keys,\n    motionAppear: true\n  }, placementMotion, {\n    onAllRemoved: function onAllRemoved() {\n      onAllNoticeRemoved(placement);\n    }\n  }), function (_ref2, nodeRef) {\n    var config = _ref2.config,\n      motionClassName = _ref2.className,\n      motionStyle = _ref2.style,\n      motionIndex = _ref2.index;\n    var _ref3 = config,\n      key = _ref3.key,\n      times = _ref3.times;\n    var strKey = String(key);\n    var _ref4 = config,\n      configClassName = _ref4.className,\n      configStyle = _ref4.style,\n      configClassNames = _ref4.classNames,\n      configStyles = _ref4.styles,\n      restConfig = _objectWithoutProperties(_ref4, _excluded);\n    var dataIndex = keys.findIndex(function (item) {\n      return item.key === strKey;\n    });\n\n    // If dataIndex is -1, that means this notice has been removed in data, but still in dom\n    // Should minus (motionIndex - 1) to get the correct index because keys.length is not the same as dom length\n    var stackStyle = {};\n    if (stack) {\n      var index = keys.length - 1 - (dataIndex > -1 ? dataIndex : motionIndex - 1);\n      var transformX = placement === 'top' || placement === 'bottom' ? '-50%' : '0';\n      if (index > 0) {\n        var _dictRef$current$strK, _dictRef$current$strK2, _dictRef$current$strK3;\n        stackStyle.height = expanded ? (_dictRef$current$strK = dictRef.current[strKey]) === null || _dictRef$current$strK === void 0 ? void 0 : _dictRef$current$strK.offsetHeight : latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetHeight;\n\n        // Transform\n        var verticalOffset = 0;\n        for (var i = 0; i < index; i++) {\n          var _dictRef$current$keys;\n          verticalOffset += ((_dictRef$current$keys = dictRef.current[keys[keys.length - 1 - i].key]) === null || _dictRef$current$keys === void 0 ? void 0 : _dictRef$current$keys.offsetHeight) + gap;\n        }\n        var transformY = (expanded ? verticalOffset : index * offset) * (placement.startsWith('top') ? 1 : -1);\n        var scaleX = !expanded && latestNotice !== null && latestNotice !== void 0 && latestNotice.offsetWidth && (_dictRef$current$strK2 = dictRef.current[strKey]) !== null && _dictRef$current$strK2 !== void 0 && _dictRef$current$strK2.offsetWidth ? ((latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetWidth) - offset * 2 * (index < 3 ? index : 3)) / ((_dictRef$current$strK3 = dictRef.current[strKey]) === null || _dictRef$current$strK3 === void 0 ? void 0 : _dictRef$current$strK3.offsetWidth) : 1;\n        stackStyle.transform = \"translate3d(\".concat(transformX, \", \").concat(transformY, \"px, 0) scaleX(\").concat(scaleX, \")\");\n      } else {\n        stackStyle.transform = \"translate3d(\".concat(transformX, \", 0, 0)\");\n      }\n    }\n    return /*#__PURE__*/React.createElement(\"div\", {\n      ref: nodeRef,\n      className: clsx(\"\".concat(prefixCls, \"-notice-wrapper\"), motionClassName, configClassNames === null || configClassNames === void 0 ? void 0 : configClassNames.wrapper),\n      style: _objectSpread(_objectSpread(_objectSpread({}, motionStyle), stackStyle), configStyles === null || configStyles === void 0 ? void 0 : configStyles.wrapper),\n      onMouseEnter: function onMouseEnter() {\n        return setHoverKeys(function (prev) {\n          return prev.includes(strKey) ? prev : [].concat(_toConsumableArray(prev), [strKey]);\n        });\n      },\n      onMouseLeave: function onMouseLeave() {\n        return setHoverKeys(function (prev) {\n          return prev.filter(function (k) {\n            return k !== strKey;\n          });\n        });\n      }\n    }, /*#__PURE__*/React.createElement(Notice, _extends({}, restConfig, {\n      ref: function ref(node) {\n        if (dataIndex > -1) {\n          dictRef.current[strKey] = node;\n        } else {\n          delete dictRef.current[strKey];\n        }\n      },\n      prefixCls: prefixCls,\n      classNames: configClassNames,\n      styles: configStyles,\n      className: clsx(configClassName, ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.notice),\n      style: configStyle,\n      times: times,\n      key: key,\n      eventKey: key,\n      onNoticeClose: onNoticeClose,\n      hovering: stack && hoverKeys.length > 0\n    })));\n  });\n};\nif (process.env.NODE_ENV !== 'production') {\n  NoticeList.displayName = 'NoticeList';\n}\nexport default NoticeList;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport NoticeList from \"./NoticeList\";\n// ant-notification ant-notification-topRight\nvar Notifications = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var _props$prefixCls = props.prefixCls,\n    prefixCls = _props$prefixCls === void 0 ? 'rc-notification' : _props$prefixCls,\n    container = props.container,\n    motion = props.motion,\n    maxCount = props.maxCount,\n    className = props.className,\n    style = props.style,\n    onAllRemoved = props.onAllRemoved,\n    stack = props.stack,\n    renderNotifications = props.renderNotifications;\n  var _React$useState = React.useState([]),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    configList = _React$useState2[0],\n    setConfigList = _React$useState2[1];\n\n  // ======================== Close =========================\n  var onNoticeClose = function onNoticeClose(key) {\n    var _config$onClose;\n    // Trigger close event\n    var config = configList.find(function (item) {\n      return item.key === key;\n    });\n    config === null || config === void 0 || (_config$onClose = config.onClose) === null || _config$onClose === void 0 || _config$onClose.call(config);\n    setConfigList(function (list) {\n      return list.filter(function (item) {\n        return item.key !== key;\n      });\n    });\n  };\n\n  // ========================= Refs =========================\n  React.useImperativeHandle(ref, function () {\n    return {\n      open: function open(config) {\n        setConfigList(function (list) {\n          var clone = _toConsumableArray(list);\n\n          // Replace if exist\n          var index = clone.findIndex(function (item) {\n            return item.key === config.key;\n          });\n          var innerConfig = _objectSpread({}, config);\n          if (index >= 0) {\n            var _list$index;\n            innerConfig.times = (((_list$index = list[index]) === null || _list$index === void 0 ? void 0 : _list$index.times) || 0) + 1;\n            clone[index] = innerConfig;\n          } else {\n            innerConfig.times = 0;\n            clone.push(innerConfig);\n          }\n          if (maxCount > 0 && clone.length > maxCount) {\n            clone = clone.slice(-maxCount);\n          }\n          return clone;\n        });\n      },\n      close: function close(key) {\n        onNoticeClose(key);\n      },\n      destroy: function destroy() {\n        setConfigList([]);\n      }\n    };\n  });\n\n  // ====================== Placements ======================\n  var _React$useState3 = React.useState({}),\n    _React$useState4 = _slicedToArray(_React$useState3, 2),\n    placements = _React$useState4[0],\n    setPlacements = _React$useState4[1];\n  React.useEffect(function () {\n    var nextPlacements = {};\n    configList.forEach(function (config) {\n      var _config$placement = config.placement,\n        placement = _config$placement === void 0 ? 'topRight' : _config$placement;\n      if (placement) {\n        nextPlacements[placement] = nextPlacements[placement] || [];\n        nextPlacements[placement].push(config);\n      }\n    });\n\n    // Fill exist placements to avoid empty list causing remove without motion\n    Object.keys(placements).forEach(function (placement) {\n      nextPlacements[placement] = nextPlacements[placement] || [];\n    });\n    setPlacements(nextPlacements);\n  }, [configList]);\n\n  // Clean up container if all notices fade out\n  var onAllNoticeRemoved = function onAllNoticeRemoved(placement) {\n    setPlacements(function (originPlacements) {\n      var clone = _objectSpread({}, originPlacements);\n      var list = clone[placement] || [];\n      if (!list.length) {\n        delete clone[placement];\n      }\n      return clone;\n    });\n  };\n\n  // Effect tell that placements is empty now\n  var emptyRef = React.useRef(false);\n  React.useEffect(function () {\n    if (Object.keys(placements).length > 0) {\n      emptyRef.current = true;\n    } else if (emptyRef.current) {\n      // Trigger only when from exist to empty\n      onAllRemoved === null || onAllRemoved === void 0 || onAllRemoved();\n      emptyRef.current = false;\n    }\n  }, [placements]);\n  // ======================== Render ========================\n  if (!container) {\n    return null;\n  }\n  var placementList = Object.keys(placements);\n  return /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(React.Fragment, null, placementList.map(function (placement) {\n    var placementConfigList = placements[placement];\n    var list = /*#__PURE__*/React.createElement(NoticeList, {\n      key: placement,\n      configList: placementConfigList,\n      placement: placement,\n      prefixCls: prefixCls,\n      className: className === null || className === void 0 ? void 0 : className(placement),\n      style: style === null || style === void 0 ? void 0 : style(placement),\n      motion: motion,\n      onNoticeClose: onNoticeClose,\n      onAllNoticeRemoved: onAllNoticeRemoved,\n      stack: stack\n    });\n    return renderNotifications ? renderNotifications(list, {\n      prefixCls: prefixCls,\n      key: placement\n    }) : list;\n  })), container);\n});\nif (process.env.NODE_ENV !== 'production') {\n  Notifications.displayName = 'Notifications';\n}\nexport default Notifications;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"getContainer\", \"motion\", \"prefixCls\", \"maxCount\", \"className\", \"style\", \"onAllRemoved\", \"stack\", \"renderNotifications\"];\nimport * as React from 'react';\nimport Notifications from \"../Notifications\";\nimport { useEvent } from 'rc-util';\nvar defaultGetContainer = function defaultGetContainer() {\n  return document.body;\n};\nvar uniqueKey = 0;\nfunction mergeConfig() {\n  var clone = {};\n  for (var _len = arguments.length, objList = new Array(_len), _key = 0; _key < _len; _key++) {\n    objList[_key] = arguments[_key];\n  }\n  objList.forEach(function (obj) {\n    if (obj) {\n      Object.keys(obj).forEach(function (key) {\n        var val = obj[key];\n        if (val !== undefined) {\n          clone[key] = val;\n        }\n      });\n    }\n  });\n  return clone;\n}\nexport default function useNotification() {\n  var rootConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _rootConfig$getContai = rootConfig.getContainer,\n    getContainer = _rootConfig$getContai === void 0 ? defaultGetContainer : _rootConfig$getContai,\n    motion = rootConfig.motion,\n    prefixCls = rootConfig.prefixCls,\n    maxCount = rootConfig.maxCount,\n    className = rootConfig.className,\n    style = rootConfig.style,\n    onAllRemoved = rootConfig.onAllRemoved,\n    stack = rootConfig.stack,\n    renderNotifications = rootConfig.renderNotifications,\n    shareConfig = _objectWithoutProperties(rootConfig, _excluded);\n  var _React$useState = React.useState(),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    container = _React$useState2[0],\n    setContainer = _React$useState2[1];\n  var notificationsRef = React.useRef();\n  var contextHolder = /*#__PURE__*/React.createElement(Notifications, {\n    container: container,\n    ref: notificationsRef,\n    prefixCls: prefixCls,\n    motion: motion,\n    maxCount: maxCount,\n    className: className,\n    style: style,\n    onAllRemoved: onAllRemoved,\n    stack: stack,\n    renderNotifications: renderNotifications\n  });\n  var _React$useState3 = React.useState([]),\n    _React$useState4 = _slicedToArray(_React$useState3, 2),\n    taskQueue = _React$useState4[0],\n    setTaskQueue = _React$useState4[1];\n  var open = useEvent(function (config) {\n    var mergedConfig = mergeConfig(shareConfig, config);\n    if (mergedConfig.key === null || mergedConfig.key === undefined) {\n      mergedConfig.key = \"rc-notification-\".concat(uniqueKey);\n      uniqueKey += 1;\n    }\n    setTaskQueue(function (queue) {\n      return [].concat(_toConsumableArray(queue), [{\n        type: 'open',\n        config: mergedConfig\n      }]);\n    });\n  });\n\n  // ========================= Refs =========================\n  var api = React.useMemo(function () {\n    return {\n      open: open,\n      close: function close(key) {\n        setTaskQueue(function (queue) {\n          return [].concat(_toConsumableArray(queue), [{\n            type: 'close',\n            key: key\n          }]);\n        });\n      },\n      destroy: function destroy() {\n        setTaskQueue(function (queue) {\n          return [].concat(_toConsumableArray(queue), [{\n            type: 'destroy'\n          }]);\n        });\n      }\n    };\n  }, []);\n\n  // ======================= Container ======================\n  // React 18 should all in effect that we will check container in each render\n  // Which means getContainer should be stable.\n  React.useEffect(function () {\n    setContainer(getContainer());\n  });\n\n  // ======================== Effect ========================\n  React.useEffect(function () {\n    // Flush task when node ready\n    if (notificationsRef.current && taskQueue.length) {\n      taskQueue.forEach(function (task) {\n        switch (task.type) {\n          case 'open':\n            notificationsRef.current.open(task.config);\n            break;\n          case 'close':\n            notificationsRef.current.close(task.key);\n            break;\n          case 'destroy':\n            notificationsRef.current.destroy();\n            break;\n        }\n      });\n\n      // https://github.com/ant-design/ant-design/issues/52590\n      // React `startTransition` will run once `useEffect` but many times `setState`,\n      // So `setTaskQueue` with filtered array will cause infinite loop.\n      // We cache the first match queue instead.\n      var oriTaskQueue;\n      var tgtTaskQueue;\n\n      // React 17 will mix order of effect & setState in async\n      // - open: setState[0]\n      // - effect[0]\n      // - open: setState[1]\n      // - effect setState([]) * here will clean up [0, 1] in React 17\n      setTaskQueue(function (oriQueue) {\n        if (oriTaskQueue !== oriQueue || !tgtTaskQueue) {\n          oriTaskQueue = oriQueue;\n          tgtTaskQueue = oriQueue.filter(function (task) {\n            return !taskQueue.includes(task);\n          });\n        }\n        return tgtTaskQueue;\n      });\n    }\n  }, [taskQueue]);\n\n  // ======================== Return ========================\n  return [api, contextHolder];\n}","import { useToken } from '../../theme/internal';\n/**\n * This hook is only for cssVar to add root className for components.\n * If root ClassName is needed, this hook could be refactored with `-root`\n * @param prefixCls\n */\nconst useCSSVarCls = prefixCls => {\n  const [,,,, cssVar] = useToken();\n  return cssVar ? `${prefixCls}-css-var` : '';\n};\nexport default useCSSVarCls;","import _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nvar AbstractCalculator = /*#__PURE__*/_createClass(function AbstractCalculator() {\n  _classCallCheck(this, AbstractCalculator);\n});\nexport default AbstractCalculator;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar CALC_UNIT = 'CALC_UNIT';\nvar regexp = new RegExp(CALC_UNIT, 'g');\nfunction unit(value) {\n  if (typeof value === 'number') {\n    return \"\".concat(value).concat(CALC_UNIT);\n  }\n  return value;\n}\nvar CSSCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n  _inherits(CSSCalculator, _AbstractCalculator);\n  var _super = _createSuper(CSSCalculator);\n  function CSSCalculator(num, unitlessCssVar) {\n    var _this;\n    _classCallCheck(this, CSSCalculator);\n    _this = _super.call(this);\n    _defineProperty(_assertThisInitialized(_this), \"result\", '');\n    _defineProperty(_assertThisInitialized(_this), \"unitlessCssVar\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"lowPriority\", void 0);\n    var numType = _typeof(num);\n    _this.unitlessCssVar = unitlessCssVar;\n    if (num instanceof CSSCalculator) {\n      _this.result = \"(\".concat(num.result, \")\");\n    } else if (numType === 'number') {\n      _this.result = unit(num);\n    } else if (numType === 'string') {\n      _this.result = num;\n    }\n    return _this;\n  }\n  _createClass(CSSCalculator, [{\n    key: \"add\",\n    value: function add(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" + \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" + \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" - \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" - \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"mul\",\n    value: function mul(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" * \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" * \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"div\",\n    value: function div(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" / \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" / \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"getResult\",\n    value: function getResult(force) {\n      return this.lowPriority || force ? \"(\".concat(this.result, \")\") : this.result;\n    }\n  }, {\n    key: \"equal\",\n    value: function equal(options) {\n      var _this2 = this;\n      var _ref = options || {},\n        cssUnit = _ref.unit;\n      var mergedUnit = true;\n      if (typeof cssUnit === 'boolean') {\n        mergedUnit = cssUnit;\n      } else if (Array.from(this.unitlessCssVar).some(function (cssVar) {\n        return _this2.result.includes(cssVar);\n      })) {\n        mergedUnit = false;\n      }\n      this.result = this.result.replace(regexp, mergedUnit ? 'px' : '');\n      if (typeof this.lowPriority !== 'undefined') {\n        return \"calc(\".concat(this.result, \")\");\n      }\n      return this.result;\n    }\n  }]);\n  return CSSCalculator;\n}(AbstractCalculator);\nexport { CSSCalculator as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar NumCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n  _inherits(NumCalculator, _AbstractCalculator);\n  var _super = _createSuper(NumCalculator);\n  function NumCalculator(num) {\n    var _this;\n    _classCallCheck(this, NumCalculator);\n    _this = _super.call(this);\n    _defineProperty(_assertThisInitialized(_this), \"result\", 0);\n    if (num instanceof NumCalculator) {\n      _this.result = num.result;\n    } else if (typeof num === 'number') {\n      _this.result = num;\n    }\n    return _this;\n  }\n  _createClass(NumCalculator, [{\n    key: \"add\",\n    value: function add(num) {\n      if (num instanceof NumCalculator) {\n        this.result += num.result;\n      } else if (typeof num === 'number') {\n        this.result += num;\n      }\n      return this;\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(num) {\n      if (num instanceof NumCalculator) {\n        this.result -= num.result;\n      } else if (typeof num === 'number') {\n        this.result -= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"mul\",\n    value: function mul(num) {\n      if (num instanceof NumCalculator) {\n        this.result *= num.result;\n      } else if (typeof num === 'number') {\n        this.result *= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"div\",\n    value: function div(num) {\n      if (num instanceof NumCalculator) {\n        this.result /= num.result;\n      } else if (typeof num === 'number') {\n        this.result /= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"equal\",\n    value: function equal() {\n      return this.result;\n    }\n  }]);\n  return NumCalculator;\n}(AbstractCalculator);\nexport default NumCalculator;","import CSSCalculator from \"./CSSCalculator\";\nimport NumCalculator from \"./NumCalculator\";\nvar genCalc = function genCalc(type, unitlessCssVar) {\n  var Calculator = type === 'css' ? CSSCalculator : NumCalculator;\n  return function (num) {\n    return new Calculator(num, unitlessCssVar);\n  };\n};\nexport default genCalc;","var getCompVarPrefix = function getCompVarPrefix(component, prefix) {\n  return \"\".concat([prefix, component.replace(/([A-Z]+)([A-Z][a-z]+)/g, '$1-$2').replace(/([a-z])([A-Z])/g, '$1-$2')].filter(Boolean).join('-'));\n};\nexport default getCompVarPrefix;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { warning } from 'rc-util';\nfunction getComponentToken(component, token, defaultToken, options) {\n  var customToken = _objectSpread({}, token[component]);\n  if (options !== null && options !== void 0 && options.deprecatedTokens) {\n    var deprecatedTokens = options.deprecatedTokens;\n    deprecatedTokens.forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n        oldTokenKey = _ref2[0],\n        newTokenKey = _ref2[1];\n      if (process.env.NODE_ENV !== 'production') {\n        warning(!(customToken !== null && customToken !== void 0 && customToken[oldTokenKey]), \"Component Token `\".concat(String(oldTokenKey), \"` of \").concat(String(component), \" is deprecated. Please use `\").concat(String(newTokenKey), \"` instead.\"));\n      }\n\n      // Should wrap with `if` clause, or there will be `undefined` in object.\n      if (customToken !== null && customToken !== void 0 && customToken[oldTokenKey] || customToken !== null && customToken !== void 0 && customToken[newTokenKey]) {\n        var _customToken$newToken;\n        (_customToken$newToken = customToken[newTokenKey]) !== null && _customToken$newToken !== void 0 ? _customToken$newToken : customToken[newTokenKey] = customToken === null || customToken === void 0 ? void 0 : customToken[oldTokenKey];\n      }\n    });\n  }\n  var mergedToken = _objectSpread(_objectSpread({}, defaultToken), customToken);\n\n  // Remove same value as global token to minimize size\n  Object.keys(mergedToken).forEach(function (key) {\n    if (mergedToken[key] === token[key]) {\n      delete mergedToken[key];\n    }\n  });\n  return mergedToken;\n}\nexport default getComponentToken;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar enableStatistic = process.env.NODE_ENV !== 'production' || typeof CSSINJS_STATISTIC !== 'undefined';\nvar recording = true;\n\n/**\n * This function will do as `Object.assign` in production. But will use Object.defineProperty:get to\n * pass all value access in development. To support statistic field usage with alias token.\n */\nexport function merge() {\n  for (var _len = arguments.length, objs = new Array(_len), _key = 0; _key < _len; _key++) {\n    objs[_key] = arguments[_key];\n  }\n  /* istanbul ignore next */\n  if (!enableStatistic) {\n    return Object.assign.apply(Object, [{}].concat(objs));\n  }\n  recording = false;\n  var ret = {};\n  objs.forEach(function (obj) {\n    if (_typeof(obj) !== 'object') {\n      return;\n    }\n    var keys = Object.keys(obj);\n    keys.forEach(function (key) {\n      Object.defineProperty(ret, key, {\n        configurable: true,\n        enumerable: true,\n        get: function get() {\n          return obj[key];\n        }\n      });\n    });\n  });\n  recording = true;\n  return ret;\n}\n\n/** @internal Internal Usage. Not use in your production. */\nexport var statistic = {};\n\n/** @internal Internal Usage. Not use in your production. */\nexport var _statistic_build_ = {};\n\n/* istanbul ignore next */\nfunction noop() {}\n\n/** Statistic token usage case. Should use `merge` function if you do not want spread record. */\nvar statisticToken = function statisticToken(token) {\n  var tokenKeys;\n  var proxy = token;\n  var flush = noop;\n  if (enableStatistic && typeof Proxy !== 'undefined') {\n    tokenKeys = new Set();\n    proxy = new Proxy(token, {\n      get: function get(obj, prop) {\n        if (recording) {\n          var _tokenKeys;\n          (_tokenKeys = tokenKeys) === null || _tokenKeys === void 0 || _tokenKeys.add(prop);\n        }\n        return obj[prop];\n      }\n    });\n    flush = function flush(componentName, componentToken) {\n      var _statistic$componentN;\n      statistic[componentName] = {\n        global: Array.from(tokenKeys),\n        component: _objectSpread(_objectSpread({}, (_statistic$componentN = statistic[componentName]) === null || _statistic$componentN === void 0 ? void 0 : _statistic$componentN.component), componentToken)\n      };\n    };\n  }\n  return {\n    token: proxy,\n    keys: tokenKeys,\n    flush: flush\n  };\n};\nexport default statisticToken;","import { merge as mergeToken } from \"./statistic\";\nfunction getDefaultComponentToken(component, token, getDefaultToken) {\n  if (typeof getDefaultToken === 'function') {\n    var _token$component;\n    return getDefaultToken(mergeToken(token, (_token$component = token[component]) !== null && _token$component !== void 0 ? _token$component : {}));\n  }\n  return getDefaultToken !== null && getDefaultToken !== void 0 ? getDefaultToken : {};\n}\nexport default getDefaultComponentToken;","import { unit } from '@ant-design/cssinjs';\nfunction genMaxMin(type) {\n  if (type === 'js') {\n    return {\n      max: Math.max,\n      min: Math.min\n    };\n  }\n  return {\n    max: function max() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      return \"max(\".concat(args.map(function (value) {\n        return unit(value);\n      }).join(','), \")\");\n    },\n    min: function min() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n      return \"min(\".concat(args.map(function (value) {\n        return unit(value);\n      }).join(','), \")\");\n    }\n  };\n}\nexport default genMaxMin;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport React from 'react';\nvar BEAT_LIMIT = 1000 * 60 * 10;\n\n/**\n * A helper class to map keys to values.\n * It supports both primitive keys and object keys.\n */\nvar ArrayKeyMap = /*#__PURE__*/function () {\n  function ArrayKeyMap() {\n    _classCallCheck(this, ArrayKeyMap);\n    _defineProperty(this, \"map\", new Map());\n    // Use WeakMap to avoid memory leak\n    _defineProperty(this, \"objectIDMap\", new WeakMap());\n    _defineProperty(this, \"nextID\", 0);\n    _defineProperty(this, \"lastAccessBeat\", new Map());\n    // We will clean up the cache when reach the limit\n    _defineProperty(this, \"accessBeat\", 0);\n  }\n  _createClass(ArrayKeyMap, [{\n    key: \"set\",\n    value: function set(keys, value) {\n      // New set will trigger clear\n      this.clear();\n\n      // Set logic\n      var compositeKey = this.getCompositeKey(keys);\n      this.map.set(compositeKey, value);\n      this.lastAccessBeat.set(compositeKey, Date.now());\n    }\n  }, {\n    key: \"get\",\n    value: function get(keys) {\n      var compositeKey = this.getCompositeKey(keys);\n      var cache = this.map.get(compositeKey);\n      this.lastAccessBeat.set(compositeKey, Date.now());\n      this.accessBeat += 1;\n      return cache;\n    }\n  }, {\n    key: \"getCompositeKey\",\n    value: function getCompositeKey(keys) {\n      var _this = this;\n      var ids = keys.map(function (key) {\n        if (key && _typeof(key) === 'object') {\n          return \"obj_\".concat(_this.getObjectID(key));\n        }\n        return \"\".concat(_typeof(key), \"_\").concat(key);\n      });\n      return ids.join('|');\n    }\n  }, {\n    key: \"getObjectID\",\n    value: function getObjectID(obj) {\n      if (this.objectIDMap.has(obj)) {\n        return this.objectIDMap.get(obj);\n      }\n      var id = this.nextID;\n      this.objectIDMap.set(obj, id);\n      this.nextID += 1;\n      return id;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var _this2 = this;\n      if (this.accessBeat > 10000) {\n        var now = Date.now();\n        this.lastAccessBeat.forEach(function (beat, key) {\n          if (now - beat > BEAT_LIMIT) {\n            _this2.map.delete(key);\n            _this2.lastAccessBeat.delete(key);\n          }\n        });\n        this.accessBeat = 0;\n      }\n    }\n  }]);\n  return ArrayKeyMap;\n}();\nvar uniqueMap = new ArrayKeyMap();\n\n/**\n * Like `useMemo`, but this hook result will be shared across all instances.\n */\nfunction useUniqueMemo(memoFn, deps) {\n  return React.useMemo(function () {\n    var cachedValue = uniqueMap.get(deps);\n    if (cachedValue) {\n      return cachedValue;\n    }\n    var newValue = memoFn();\n    uniqueMap.set(deps, newValue);\n    return newValue;\n  }, deps);\n}\nexport default useUniqueMemo;","/**\n * Provide a default hook since not everyone needs to config this.\n */\nvar useDefaultCSP = function useDefaultCSP() {\n  return {};\n};\nexport default useDefaultCSP;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport React from 'react';\nimport { token2CSSVar, useCSSVarRegister, useStyleRegister } from '@ant-design/cssinjs';\nimport genCalc from \"./calc\";\nimport getCompVarPrefix from \"./getCompVarPrefix\";\nimport getComponentToken from \"./getComponentToken\";\nimport getDefaultComponentToken from \"./getDefaultComponentToken\";\nimport genMaxMin from \"./maxmin\";\nimport statisticToken, { merge as mergeToken } from \"./statistic\";\nimport useUniqueMemo from \"../_util/hooks/useUniqueMemo\";\nimport useDefaultCSP from \"../hooks/useCSP\";\nfunction genStyleUtils(config) {\n  // Dependency inversion for preparing basic config.\n  var _config$useCSP = config.useCSP,\n    useCSP = _config$useCSP === void 0 ? useDefaultCSP : _config$useCSP,\n    useToken = config.useToken,\n    usePrefix = config.usePrefix,\n    getResetStyles = config.getResetStyles,\n    getCommonStyle = config.getCommonStyle,\n    getCompUnitless = config.getCompUnitless;\n  function genStyleHooks(component, styleFn, getDefaultToken, options) {\n    var componentName = Array.isArray(component) ? component[0] : component;\n    function prefixToken(key) {\n      return \"\".concat(String(componentName)).concat(key.slice(0, 1).toUpperCase()).concat(key.slice(1));\n    }\n\n    // Fill unitless\n    var originUnitless = (options === null || options === void 0 ? void 0 : options.unitless) || {};\n    var originCompUnitless = typeof getCompUnitless === 'function' ? getCompUnitless(component) : {};\n    var compUnitless = _objectSpread(_objectSpread({}, originCompUnitless), {}, _defineProperty({}, prefixToken('zIndexPopup'), true));\n    Object.keys(originUnitless).forEach(function (key) {\n      compUnitless[prefixToken(key)] = originUnitless[key];\n    });\n\n    // Options\n    var mergedOptions = _objectSpread(_objectSpread({}, options), {}, {\n      unitless: compUnitless,\n      prefixToken: prefixToken\n    });\n\n    // Hooks\n    var useStyle = genComponentStyleHook(component, styleFn, getDefaultToken, mergedOptions);\n    var useCSSVar = genCSSVarRegister(componentName, getDefaultToken, mergedOptions);\n    return function (prefixCls) {\n      var rootCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prefixCls;\n      var _useStyle = useStyle(prefixCls, rootCls),\n        _useStyle2 = _slicedToArray(_useStyle, 2),\n        hashId = _useStyle2[1];\n      var _useCSSVar = useCSSVar(rootCls),\n        _useCSSVar2 = _slicedToArray(_useCSSVar, 2),\n        wrapCSSVar = _useCSSVar2[0],\n        cssVarCls = _useCSSVar2[1];\n      return [wrapCSSVar, hashId, cssVarCls];\n    };\n  }\n  function genCSSVarRegister(component, getDefaultToken, options) {\n    var compUnitless = options.unitless,\n      _options$injectStyle = options.injectStyle,\n      injectStyle = _options$injectStyle === void 0 ? true : _options$injectStyle,\n      prefixToken = options.prefixToken,\n      ignore = options.ignore;\n    var CSSVarRegister = function CSSVarRegister(_ref) {\n      var rootCls = _ref.rootCls,\n        _ref$cssVar = _ref.cssVar,\n        cssVar = _ref$cssVar === void 0 ? {} : _ref$cssVar;\n      var _useToken = useToken(),\n        realToken = _useToken.realToken;\n      useCSSVarRegister({\n        path: [component],\n        prefix: cssVar.prefix,\n        key: cssVar.key,\n        unitless: compUnitless,\n        ignore: ignore,\n        token: realToken,\n        scope: rootCls\n      }, function () {\n        var defaultToken = getDefaultComponentToken(component, realToken, getDefaultToken);\n        var componentToken = getComponentToken(component, realToken, defaultToken, {\n          deprecatedTokens: options === null || options === void 0 ? void 0 : options.deprecatedTokens\n        });\n        Object.keys(defaultToken).forEach(function (key) {\n          componentToken[prefixToken(key)] = componentToken[key];\n          delete componentToken[key];\n        });\n        return componentToken;\n      });\n      return null;\n    };\n    var useCSSVar = function useCSSVar(rootCls) {\n      var _useToken2 = useToken(),\n        cssVar = _useToken2.cssVar;\n      return [function (node) {\n        return injectStyle && cssVar ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CSSVarRegister, {\n          rootCls: rootCls,\n          cssVar: cssVar,\n          component: component\n        }), node) : node;\n      }, cssVar === null || cssVar === void 0 ? void 0 : cssVar.key];\n    };\n    return useCSSVar;\n  }\n  function genComponentStyleHook(componentName, styleFn, getDefaultToken) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var cells = Array.isArray(componentName) ? componentName : [componentName, componentName];\n    var _cells = _slicedToArray(cells, 1),\n      component = _cells[0];\n    var concatComponent = cells.join('-');\n    var mergedLayer = config.layer || {\n      name: 'antd'\n    };\n\n    // Return new style hook\n    return function (prefixCls) {\n      var rootCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prefixCls;\n      var _useToken3 = useToken(),\n        theme = _useToken3.theme,\n        realToken = _useToken3.realToken,\n        hashId = _useToken3.hashId,\n        token = _useToken3.token,\n        cssVar = _useToken3.cssVar;\n      var _usePrefix = usePrefix(),\n        rootPrefixCls = _usePrefix.rootPrefixCls,\n        iconPrefixCls = _usePrefix.iconPrefixCls;\n      var csp = useCSP();\n      var type = cssVar ? 'css' : 'js';\n\n      // Use unique memo to share the result across all instances\n      var calc = useUniqueMemo(function () {\n        var unitlessCssVar = new Set();\n        if (cssVar) {\n          Object.keys(options.unitless || {}).forEach(function (key) {\n            // Some component proxy the AliasToken (e.g. Image) and some not (e.g. Modal)\n            // We should both pass in `unitlessCssVar` to make sure the CSSVar can be unitless.\n            unitlessCssVar.add(token2CSSVar(key, cssVar.prefix));\n            unitlessCssVar.add(token2CSSVar(key, getCompVarPrefix(component, cssVar.prefix)));\n          });\n        }\n        return genCalc(type, unitlessCssVar);\n      }, [type, component, cssVar === null || cssVar === void 0 ? void 0 : cssVar.prefix]);\n      var _genMaxMin = genMaxMin(type),\n        max = _genMaxMin.max,\n        min = _genMaxMin.min;\n\n      // Shared config\n      var sharedConfig = {\n        theme: theme,\n        token: token,\n        hashId: hashId,\n        nonce: function nonce() {\n          return csp.nonce;\n        },\n        clientOnly: options.clientOnly,\n        layer: mergedLayer,\n        // antd is always at top of styles\n        order: options.order || -999\n      };\n\n      // This if statement is safe, as it will only be used if the generator has the function. It's not dynamic.\n      if (typeof getResetStyles === 'function') {\n        // Generate style for all need reset tags.\n        useStyleRegister(_objectSpread(_objectSpread({}, sharedConfig), {}, {\n          clientOnly: false,\n          path: ['Shared', rootPrefixCls]\n        }), function () {\n          return getResetStyles(token, {\n            prefix: {\n              rootPrefixCls: rootPrefixCls,\n              iconPrefixCls: iconPrefixCls\n            },\n            csp: csp\n          });\n        });\n      }\n      var wrapSSR = useStyleRegister(_objectSpread(_objectSpread({}, sharedConfig), {}, {\n        path: [concatComponent, prefixCls, iconPrefixCls]\n      }), function () {\n        if (options.injectStyle === false) {\n          return [];\n        }\n        var _statisticToken = statisticToken(token),\n          proxyToken = _statisticToken.token,\n          flush = _statisticToken.flush;\n        var defaultComponentToken = getDefaultComponentToken(component, realToken, getDefaultToken);\n        var componentCls = \".\".concat(prefixCls);\n        var componentToken = getComponentToken(component, realToken, defaultComponentToken, {\n          deprecatedTokens: options.deprecatedTokens\n        });\n        if (cssVar && defaultComponentToken && _typeof(defaultComponentToken) === 'object') {\n          Object.keys(defaultComponentToken).forEach(function (key) {\n            defaultComponentToken[key] = \"var(\".concat(token2CSSVar(key, getCompVarPrefix(component, cssVar.prefix)), \")\");\n          });\n        }\n        var mergedToken = mergeToken(proxyToken, {\n          componentCls: componentCls,\n          prefixCls: prefixCls,\n          iconCls: \".\".concat(iconPrefixCls),\n          antCls: \".\".concat(rootPrefixCls),\n          calc: calc,\n          // @ts-ignore\n          max: max,\n          // @ts-ignore\n          min: min\n        }, cssVar ? defaultComponentToken : componentToken);\n        var styleInterpolation = styleFn(mergedToken, {\n          hashId: hashId,\n          prefixCls: prefixCls,\n          rootPrefixCls: rootPrefixCls,\n          iconPrefixCls: iconPrefixCls\n        });\n        flush(component, componentToken);\n        var commonStyle = typeof getCommonStyle === 'function' ? getCommonStyle(mergedToken, prefixCls, rootCls, options.resetFont) : null;\n        return [options.resetStyle === false ? null : commonStyle, styleInterpolation];\n      });\n      return [wrapSSR, hashId];\n    };\n  }\n  function genSubStyleComponent(componentName, styleFn, getDefaultToken) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var useStyle = genComponentStyleHook(componentName, styleFn, getDefaultToken, _objectSpread({\n      resetStyle: false,\n      // Sub Style should default after root one\n      order: -998\n    }, options));\n    var StyledComponent = function StyledComponent(_ref2) {\n      var prefixCls = _ref2.prefixCls,\n        _ref2$rootCls = _ref2.rootCls,\n        rootCls = _ref2$rootCls === void 0 ? prefixCls : _ref2$rootCls;\n      useStyle(prefixCls, rootCls);\n      return null;\n    };\n    if (process.env.NODE_ENV !== 'production') {\n      StyledComponent.displayName = \"SubStyle_\".concat(String(Array.isArray(componentName) ? componentName.join('.') : componentName));\n    }\n    return StyledComponent;\n  }\n  return {\n    genStyleHooks: genStyleHooks,\n    genSubStyleComponent: genSubStyleComponent,\n    genComponentStyleHook: genComponentStyleHook\n  };\n}\nexport default genStyleUtils;","import { useContext } from 'react';\nimport { genStyleUtils } from '@ant-design/cssinjs-utils';\nimport { ConfigContext, defaultIconPrefixCls } from '../../config-provider/context';\nimport { genCommonStyle, genIconStyle, genLinkStyle } from '../../style';\nimport useLocalToken, { unitless } from '../useToken';\nexport const {\n  genStyleHooks,\n  genComponentStyleHook,\n  genSubStyleComponent\n} = genStyleUtils({\n  usePrefix: () => {\n    const {\n      getPrefixCls,\n      iconPrefixCls\n    } = useContext(ConfigContext);\n    const rootPrefixCls = getPrefixCls();\n    return {\n      rootPrefixCls,\n      iconPrefixCls\n    };\n  },\n  useToken: () => {\n    const [theme, realToken, hashId, token, cssVar] = useLocalToken();\n    return {\n      theme,\n      realToken,\n      hashId,\n      token,\n      cssVar\n    };\n  },\n  useCSP: () => {\n    const {\n      csp\n    } = useContext(ConfigContext);\n    return csp !== null && csp !== void 0 ? csp : {};\n  },\n  getResetStyles: (token, config) => {\n    var _a;\n    const linkStyle = genLinkStyle(token);\n    return [linkStyle, {\n      '&': linkStyle\n    }, genIconStyle((_a = config === null || config === void 0 ? void 0 : config.prefix.iconPrefixCls) !== null && _a !== void 0 ? _a : defaultIconPrefixCls)];\n  },\n  getCommonStyle: genCommonStyle,\n  getCompUnitless: () => unitless\n});","import { Keyframes } from '@ant-design/cssinjs';\nimport { CONTAINER_MAX_OFFSET } from '../../_util/hooks/useZIndex';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genMessageStyle = token => {\n  const {\n    componentCls,\n    iconCls,\n    boxShadow,\n    colorText,\n    colorSuccess,\n    colorError,\n    colorWarning,\n    colorInfo,\n    fontSizeLG,\n    motionEaseInOutCirc,\n    motionDurationSlow,\n    marginXS,\n    paddingXS,\n    borderRadiusLG,\n    zIndexPopup,\n    // Custom token\n    contentPadding,\n    contentBg\n  } = token;\n  const noticeCls = `${componentCls}-notice`;\n  const messageMoveIn = new Keyframes('MessageMoveIn', {\n    '0%': {\n      padding: 0,\n      transform: 'translateY(-100%)',\n      opacity: 0\n    },\n    '100%': {\n      padding: paddingXS,\n      transform: 'translateY(0)',\n      opacity: 1\n    }\n  });\n  const messageMoveOut = new Keyframes('MessageMoveOut', {\n    '0%': {\n      maxHeight: token.height,\n      padding: paddingXS,\n      opacity: 1\n    },\n    '100%': {\n      maxHeight: 0,\n      padding: 0,\n      opacity: 0\n    }\n  });\n  const noticeStyle = {\n    padding: paddingXS,\n    textAlign: 'center',\n    [`${componentCls}-custom-content`]: {\n      display: 'flex',\n      alignItems: 'center'\n    },\n    [`${componentCls}-custom-content > ${iconCls}`]: {\n      marginInlineEnd: marginXS,\n      // affected by ltr or rtl\n      fontSize: fontSizeLG\n    },\n    [`${noticeCls}-content`]: {\n      display: 'inline-block',\n      padding: contentPadding,\n      background: contentBg,\n      borderRadius: borderRadiusLG,\n      boxShadow,\n      pointerEvents: 'all'\n    },\n    [`${componentCls}-success > ${iconCls}`]: {\n      color: colorSuccess\n    },\n    [`${componentCls}-error > ${iconCls}`]: {\n      color: colorError\n    },\n    [`${componentCls}-warning > ${iconCls}`]: {\n      color: colorWarning\n    },\n    [`${componentCls}-info > ${iconCls},\n      ${componentCls}-loading > ${iconCls}`]: {\n      color: colorInfo\n    }\n  };\n  return [\n  // ============================ Holder ============================\n  {\n    [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), {\n      color: colorText,\n      position: 'fixed',\n      top: marginXS,\n      width: '100%',\n      pointerEvents: 'none',\n      zIndex: zIndexPopup,\n      [`${componentCls}-move-up`]: {\n        animationFillMode: 'forwards'\n      },\n      [`\n        ${componentCls}-move-up-appear,\n        ${componentCls}-move-up-enter\n      `]: {\n        animationName: messageMoveIn,\n        animationDuration: motionDurationSlow,\n        animationPlayState: 'paused',\n        animationTimingFunction: motionEaseInOutCirc\n      },\n      [`\n        ${componentCls}-move-up-appear${componentCls}-move-up-appear-active,\n        ${componentCls}-move-up-enter${componentCls}-move-up-enter-active\n      `]: {\n        animationPlayState: 'running'\n      },\n      [`${componentCls}-move-up-leave`]: {\n        animationName: messageMoveOut,\n        animationDuration: motionDurationSlow,\n        animationPlayState: 'paused',\n        animationTimingFunction: motionEaseInOutCirc\n      },\n      [`${componentCls}-move-up-leave${componentCls}-move-up-leave-active`]: {\n        animationPlayState: 'running'\n      },\n      '&-rtl': {\n        direction: 'rtl',\n        span: {\n          direction: 'rtl'\n        }\n      }\n    })\n  },\n  // ============================ Notice ============================\n  {\n    [componentCls]: {\n      [`${noticeCls}-wrapper`]: Object.assign({}, noticeStyle)\n    }\n  },\n  // ============================= Pure =============================\n  {\n    [`${componentCls}-notice-pure-panel`]: Object.assign(Object.assign({}, noticeStyle), {\n      padding: 0,\n      textAlign: 'start'\n    })\n  }];\n};\nexport const prepareComponentToken = token => ({\n  zIndexPopup: token.zIndexPopupBase + CONTAINER_MAX_OFFSET + 10,\n  contentBg: token.colorBgElevated,\n  contentPadding: `${(token.controlHeightLG - token.fontSize * token.lineHeight) / 2}px ${token.paddingSM}px`\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Message', token => {\n  // Gen-style functions here\n  const combinedToken = mergeToken(token, {\n    height: 150\n  });\n  return [genMessageStyle(combinedToken)];\n}, prepareComponentToken);","import React from 'react';\nimport useToken from '../../theme/useToken';\nimport { devUseWarning } from '../warning';\nimport zIndexContext from '../zindexContext';\n// Z-Index control range\n// Container: 1000 + offset 100 (max base + 10 * offset = 2000)\n// Popover: offset 50\n// Notification: Container Max zIndex + componentOffset\nconst CONTAINER_OFFSET = 100;\nconst CONTAINER_OFFSET_MAX_COUNT = 10;\nexport const CONTAINER_MAX_OFFSET = CONTAINER_OFFSET * CONTAINER_OFFSET_MAX_COUNT;\n/**\n * Static function will default be the `CONTAINER_MAX_OFFSET`.\n * But it still may have children component like Select, Dropdown.\n * So the warning zIndex should exceed the `CONTAINER_MAX_OFFSET`.\n */\nconst CONTAINER_MAX_OFFSET_WITH_CHILDREN = CONTAINER_MAX_OFFSET + CONTAINER_OFFSET;\nexport const containerBaseZIndexOffset = {\n  Modal: CONTAINER_OFFSET,\n  Drawer: CONTAINER_OFFSET,\n  Popover: CONTAINER_OFFSET,\n  Popconfirm: CONTAINER_OFFSET,\n  Tooltip: CONTAINER_OFFSET,\n  Tour: CONTAINER_OFFSET,\n  FloatButton: CONTAINER_OFFSET\n};\nexport const consumerBaseZIndexOffset = {\n  SelectLike: 50,\n  Dropdown: 50,\n  DatePicker: 50,\n  Menu: 50,\n  ImagePreview: 1\n};\nfunction isContainerType(type) {\n  return type in containerBaseZIndexOffset;\n}\nexport const useZIndex = (componentType, customZIndex) => {\n  const [, token] = useToken();\n  const parentZIndex = React.useContext(zIndexContext);\n  const isContainer = isContainerType(componentType);\n  let result;\n  if (customZIndex !== undefined) {\n    result = [customZIndex, customZIndex];\n  } else {\n    let zIndex = parentZIndex !== null && parentZIndex !== void 0 ? parentZIndex : 0;\n    if (isContainer) {\n      zIndex +=\n      // Use preset token zIndex by default but not stack when has parent container\n      (parentZIndex ? 0 : token.zIndexPopupBase) +\n      // Container offset\n      containerBaseZIndexOffset[componentType];\n    } else {\n      zIndex += consumerBaseZIndexOffset[componentType];\n    }\n    result = [parentZIndex === undefined ? customZIndex : zIndex, zIndex];\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning(componentType);\n    const maxZIndex = token.zIndexPopupBase + CONTAINER_MAX_OFFSET_WITH_CHILDREN;\n    const currentZIndex = result[0] || 0;\n    process.env.NODE_ENV !== \"production\" ? warning(customZIndex !== undefined || currentZIndex <= maxZIndex, 'usage', '`zIndex` is over design token `zIndexPopupBase` too much. It may cause unexpected override.') : void 0;\n  }\n  return result;\n};","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport * as React from 'react';\nimport CheckCircleFilled from \"@ant-design/icons/es/icons/CheckCircleFilled\";\nimport CloseCircleFilled from \"@ant-design/icons/es/icons/CloseCircleFilled\";\nimport ExclamationCircleFilled from \"@ant-design/icons/es/icons/ExclamationCircleFilled\";\nimport InfoCircleFilled from \"@ant-design/icons/es/icons/InfoCircleFilled\";\nimport LoadingOutlined from \"@ant-design/icons/es/icons/LoadingOutlined\";\nimport classNames from 'classnames';\nimport { Notice } from 'rc-notification';\nimport { ConfigContext } from '../config-provider';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useStyle from './style';\nexport const TypeIcon = {\n  info: /*#__PURE__*/React.createElement(InfoCircleFilled, null),\n  success: /*#__PURE__*/React.createElement(CheckCircleFilled, null),\n  error: /*#__PURE__*/React.createElement(CloseCircleFilled, null),\n  warning: /*#__PURE__*/React.createElement(ExclamationCircleFilled, null),\n  loading: /*#__PURE__*/React.createElement(LoadingOutlined, null)\n};\nexport const PureContent = ({\n  prefixCls,\n  type,\n  icon,\n  children\n}) => (/*#__PURE__*/React.createElement(\"div\", {\n  className: classNames(`${prefixCls}-custom-content`, `${prefixCls}-${type}`)\n}, icon || TypeIcon[type], /*#__PURE__*/React.createElement(\"span\", null, children)));\n/** @private Internal Component. Do not use in your production. */\nconst PurePanel = props => {\n  const {\n      prefixCls: staticPrefixCls,\n      className,\n      type,\n      icon,\n      content\n    } = props,\n    restProps = __rest(props, [\"prefixCls\", \"className\", \"type\", \"icon\", \"content\"]);\n  const {\n    getPrefixCls\n  } = React.useContext(ConfigContext);\n  const prefixCls = staticPrefixCls || getPrefixCls('message');\n  const rootCls = useCSSVarCls(prefixCls);\n  const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n  return wrapCSSVar(/*#__PURE__*/React.createElement(Notice, Object.assign({}, restProps, {\n    prefixCls: prefixCls,\n    className: classNames(className, hashId, `${prefixCls}-notice-pure-panel`, cssVarCls, rootCls),\n    eventKey: \"pure\",\n    duration: null,\n    content: /*#__PURE__*/React.createElement(PureContent, {\n      prefixCls: prefixCls,\n      type: type,\n      icon: icon\n    }, content)\n  })));\n};\nexport default PurePanel;","// This icon file is generated automatically.\nvar CloseOutlined = { \"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\" };\nexport default CloseOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CloseOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar CloseOutlined = function CloseOutlined(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: CloseOutlinedSvg\n  }));\n};\n\n/**![close](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNzk5Ljg2IDE2Ni4zMWMuMDIgMCAuMDQuMDIuMDguMDZsNTcuNjkgNTcuN2MuMDQuMDMuMDUuMDUuMDYuMDhhLjEyLjEyIDAgMDEwIC4wNmMwIC4wMy0uMDIuMDUtLjA2LjA5TDU2OS45MyA1MTJsMjg3LjcgMjg3LjdjLjA0LjA0LjA1LjA2LjA2LjA5YS4xMi4xMiAwIDAxMCAuMDdjMCAuMDItLjAyLjA0LS4wNi4wOGwtNTcuNyA1Ny42OWMtLjAzLjA0LS4wNS4wNS0uMDcuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMyAwLS4wNS0uMDItLjA5LS4wNkw1MTIgNTY5LjkzbC0yODcuNyAyODcuN2MtLjA0LjA0LS4wNi4wNS0uMDkuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMiAwLS4wNC0uMDItLjA4LS4wNmwtNTcuNjktNTcuN2MtLjA0LS4wMy0uMDUtLjA1LS4wNi0uMDdhLjEyLjEyIDAgMDEwLS4wN2MwLS4wMy4wMi0uMDUuMDYtLjA5TDQ1NC4wNyA1MTJsLTI4Ny43LTI4Ny43Yy0uMDQtLjA0LS4wNS0uMDYtLjA2LS4wOWEuMTIuMTIgMCAwMTAtLjA3YzAtLjAyLjAyLS4wNC4wNi0uMDhsNTcuNy01Ny42OWMuMDMtLjA0LjA1LS4wNS4wNy0uMDZhLjEyLjEyIDAgMDEuMDcgMGMuMDMgMCAuMDUuMDIuMDkuMDZMNTEyIDQ1NC4wN2wyODcuNy0yODcuN2MuMDQtLjA0LjA2LS4wNS4wOS0uMDZhLjEyLjEyIDAgMDEuMDcgMHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(CloseOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CloseOutlined';\n}\nexport default RefIcon;","export function getMotion(prefixCls, transitionName) {\n  return {\n    motionName: transitionName !== null && transitionName !== void 0 ? transitionName : `${prefixCls}-move-up`\n  };\n}\n/** Wrap message open with promise like function */\nexport function wrapPromiseFn(openFn) {\n  let closeFn;\n  const closePromise = new Promise(resolve => {\n    closeFn = openFn(() => {\n      resolve(true);\n    });\n  });\n  const result = () => {\n    closeFn === null || closeFn === void 0 ? void 0 : closeFn();\n  };\n  result.then = (filled, rejected) => closePromise.then(filled, rejected);\n  result.promise = closePromise;\n  return result;\n}","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport * as React from 'react';\nimport CloseOutlined from \"@ant-design/icons/es/icons/CloseOutlined\";\nimport classNames from 'classnames';\nimport { NotificationProvider, useNotification as useRcNotification } from 'rc-notification';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport { PureContent } from './PurePanel';\nimport useStyle from './style';\nimport { getMotion, wrapPromiseFn } from './util';\nconst DEFAULT_OFFSET = 8;\nconst DEFAULT_DURATION = 3;\nconst Wrapper = ({\n  children,\n  prefixCls\n}) => {\n  const rootCls = useCSSVarCls(prefixCls);\n  const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n  return wrapCSSVar(/*#__PURE__*/React.createElement(NotificationProvider, {\n    classNames: {\n      list: classNames(hashId, cssVarCls, rootCls)\n    }\n  }, children));\n};\nconst renderNotifications = (node, {\n  prefixCls,\n  key\n}) => (/*#__PURE__*/React.createElement(Wrapper, {\n  prefixCls: prefixCls,\n  key: key\n}, node));\nconst Holder = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    top,\n    prefixCls: staticPrefixCls,\n    getContainer: staticGetContainer,\n    maxCount,\n    duration = DEFAULT_DURATION,\n    rtl,\n    transitionName,\n    onAllRemoved\n  } = props;\n  const {\n    getPrefixCls,\n    getPopupContainer,\n    message,\n    direction\n  } = React.useContext(ConfigContext);\n  const prefixCls = staticPrefixCls || getPrefixCls('message');\n  // =============================== Style ===============================\n  const getStyle = () => ({\n    left: '50%',\n    transform: 'translateX(-50%)',\n    top: top !== null && top !== void 0 ? top : DEFAULT_OFFSET\n  });\n  const getClassName = () => classNames({\n    [`${prefixCls}-rtl`]: rtl !== null && rtl !== void 0 ? rtl : direction === 'rtl'\n  });\n  // ============================== Motion ===============================\n  const getNotificationMotion = () => getMotion(prefixCls, transitionName);\n  // ============================ Close Icon =============================\n  const mergedCloseIcon = /*#__PURE__*/React.createElement(\"span\", {\n    className: `${prefixCls}-close-x`\n  }, /*#__PURE__*/React.createElement(CloseOutlined, {\n    className: `${prefixCls}-close-icon`\n  }));\n  // ============================== Origin ===============================\n  const [api, holder] = useRcNotification({\n    prefixCls,\n    style: getStyle,\n    className: getClassName,\n    motion: getNotificationMotion,\n    closable: false,\n    closeIcon: mergedCloseIcon,\n    duration,\n    getContainer: () => (staticGetContainer === null || staticGetContainer === void 0 ? void 0 : staticGetContainer()) || (getPopupContainer === null || getPopupContainer === void 0 ? void 0 : getPopupContainer()) || document.body,\n    maxCount,\n    onAllRemoved,\n    renderNotifications\n  });\n  // ================================ Ref ================================\n  React.useImperativeHandle(ref, () => Object.assign(Object.assign({}, api), {\n    prefixCls,\n    message\n  }));\n  return holder;\n});\n// ==============================================================================\n// ==                                   Hook                                   ==\n// ==============================================================================\nlet keyIndex = 0;\nexport function useInternalMessage(messageConfig) {\n  const holderRef = React.useRef(null);\n  const warning = devUseWarning('Message');\n  // ================================ API ================================\n  const wrapAPI = React.useMemo(() => {\n    // Wrap with notification content\n    // >>> close\n    const close = key => {\n      var _a;\n      (_a = holderRef.current) === null || _a === void 0 ? void 0 : _a.close(key);\n    };\n    // >>> Open\n    const open = config => {\n      if (!holderRef.current) {\n        process.env.NODE_ENV !== \"production\" ? warning(false, 'usage', 'You are calling notice in render which will break in React 18 concurrent mode. Please trigger in effect instead.') : void 0;\n        const fakeResult = () => {};\n        fakeResult.then = () => {};\n        return fakeResult;\n      }\n      const {\n        open: originOpen,\n        prefixCls,\n        message\n      } = holderRef.current;\n      const noticePrefixCls = `${prefixCls}-notice`;\n      const {\n          content,\n          icon,\n          type,\n          key,\n          className,\n          style,\n          onClose\n        } = config,\n        restConfig = __rest(config, [\"content\", \"icon\", \"type\", \"key\", \"className\", \"style\", \"onClose\"]);\n      let mergedKey = key;\n      if (mergedKey === undefined || mergedKey === null) {\n        keyIndex += 1;\n        mergedKey = `antd-message-${keyIndex}`;\n      }\n      return wrapPromiseFn(resolve => {\n        originOpen(Object.assign(Object.assign({}, restConfig), {\n          key: mergedKey,\n          content: (/*#__PURE__*/React.createElement(PureContent, {\n            prefixCls: prefixCls,\n            type: type,\n            icon: icon\n          }, content)),\n          placement: 'top',\n          className: classNames(type && `${noticePrefixCls}-${type}`, className, message === null || message === void 0 ? void 0 : message.className),\n          style: Object.assign(Object.assign({}, message === null || message === void 0 ? void 0 : message.style), style),\n          onClose: () => {\n            onClose === null || onClose === void 0 ? void 0 : onClose();\n            resolve();\n          }\n        }));\n        // Return close function\n        return () => {\n          close(mergedKey);\n        };\n      });\n    };\n    // >>> destroy\n    const destroy = key => {\n      var _a;\n      if (key !== undefined) {\n        close(key);\n      } else {\n        (_a = holderRef.current) === null || _a === void 0 ? void 0 : _a.destroy();\n      }\n    };\n    const clone = {\n      open,\n      destroy\n    };\n    const keys = ['info', 'success', 'warning', 'error', 'loading'];\n    keys.forEach(type => {\n      const typeOpen = (jointContent, duration, onClose) => {\n        let config;\n        if (jointContent && typeof jointContent === 'object' && 'content' in jointContent) {\n          config = jointContent;\n        } else {\n          config = {\n            content: jointContent\n          };\n        }\n        // Params\n        let mergedDuration;\n        let mergedOnClose;\n        if (typeof duration === 'function') {\n          mergedOnClose = duration;\n        } else {\n          mergedDuration = duration;\n          mergedOnClose = onClose;\n        }\n        const mergedConfig = Object.assign(Object.assign({\n          onClose: mergedOnClose,\n          duration: mergedDuration\n        }, config), {\n          type\n        });\n        return open(mergedConfig);\n      };\n      clone[type] = typeOpen;\n    });\n    return clone;\n  }, []);\n  // ============================== Return ===============================\n  return [wrapAPI, /*#__PURE__*/React.createElement(Holder, Object.assign({\n    key: \"message-holder\"\n  }, messageConfig, {\n    ref: holderRef\n  }))];\n}\nexport default function useMessage(messageConfig) {\n  return useInternalMessage(messageConfig);\n}","\"use client\";\n\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport React, { useContext } from 'react';\nimport { AppConfigContext } from '../app/context';\nimport ConfigProvider, { ConfigContext, globalConfig, warnContext } from '../config-provider';\nimport { unstableSetRender } from '../config-provider/UnstableContext';\nimport PurePanel from './PurePanel';\nimport useMessage, { useInternalMessage } from './useMessage';\nimport { wrapPromiseFn } from './util';\nlet message = null;\nlet act = callback => callback();\nlet taskQueue = [];\nlet defaultGlobalConfig = {};\nfunction getGlobalContext() {\n  const {\n    getContainer,\n    duration,\n    rtl,\n    maxCount,\n    top\n  } = defaultGlobalConfig;\n  const mergedContainer = (getContainer === null || getContainer === void 0 ? void 0 : getContainer()) || document.body;\n  return {\n    getContainer: () => mergedContainer,\n    duration,\n    rtl,\n    maxCount,\n    top\n  };\n}\nconst GlobalHolder = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    messageConfig,\n    sync\n  } = props;\n  const {\n    getPrefixCls\n  } = useContext(ConfigContext);\n  const prefixCls = defaultGlobalConfig.prefixCls || getPrefixCls('message');\n  const appConfig = useContext(AppConfigContext);\n  const [api, holder] = useInternalMessage(Object.assign(Object.assign(Object.assign({}, messageConfig), {\n    prefixCls\n  }), appConfig.message));\n  React.useImperativeHandle(ref, () => {\n    const instance = Object.assign({}, api);\n    Object.keys(instance).forEach(method => {\n      instance[method] = (...args) => {\n        sync();\n        return api[method].apply(api, args);\n      };\n    });\n    return {\n      instance,\n      sync\n    };\n  });\n  return holder;\n});\nconst GlobalHolderWrapper = /*#__PURE__*/React.forwardRef((_, ref) => {\n  const [messageConfig, setMessageConfig] = React.useState(getGlobalContext);\n  const sync = () => {\n    setMessageConfig(getGlobalContext);\n  };\n  React.useEffect(sync, []);\n  const global = globalConfig();\n  const rootPrefixCls = global.getRootPrefixCls();\n  const rootIconPrefixCls = global.getIconPrefixCls();\n  const theme = global.getTheme();\n  const dom = /*#__PURE__*/React.createElement(GlobalHolder, {\n    ref: ref,\n    sync: sync,\n    messageConfig: messageConfig\n  });\n  return /*#__PURE__*/React.createElement(ConfigProvider, {\n    prefixCls: rootPrefixCls,\n    iconPrefixCls: rootIconPrefixCls,\n    theme: theme\n  }, global.holderRender ? global.holderRender(dom) : dom);\n});\nfunction flushNotice() {\n  if (!message) {\n    const holderFragment = document.createDocumentFragment();\n    const newMessage = {\n      fragment: holderFragment\n    };\n    message = newMessage;\n    // Delay render to avoid sync issue\n    act(() => {\n      const reactRender = unstableSetRender();\n      reactRender(/*#__PURE__*/React.createElement(GlobalHolderWrapper, {\n        ref: node => {\n          const {\n            instance,\n            sync\n          } = node || {};\n          // React 18 test env will throw if call immediately in ref\n          Promise.resolve().then(() => {\n            if (!newMessage.instance && instance) {\n              newMessage.instance = instance;\n              newMessage.sync = sync;\n              flushNotice();\n            }\n          });\n        }\n      }), holderFragment);\n    });\n    return;\n  }\n  // Notification not ready\n  if (!message.instance) {\n    return;\n  }\n  // >>> Execute task\n  taskQueue.forEach(task => {\n    const {\n      type,\n      skipped\n    } = task;\n    // Only `skipped` when user call notice but cancel it immediately\n    // and instance not ready\n    if (!skipped) {\n      switch (type) {\n        case 'open':\n          {\n            act(() => {\n              const closeFn = message.instance.open(Object.assign(Object.assign({}, defaultGlobalConfig), task.config));\n              closeFn === null || closeFn === void 0 ? void 0 : closeFn.then(task.resolve);\n              task.setCloseFn(closeFn);\n            });\n            break;\n          }\n        case 'destroy':\n          act(() => {\n            message === null || message === void 0 ? void 0 : message.instance.destroy(task.key);\n          });\n          break;\n        // Other type open\n        default:\n          {\n            act(() => {\n              var _message$instance;\n              const closeFn = (_message$instance = message.instance)[type].apply(_message$instance, _toConsumableArray(task.args));\n              closeFn === null || closeFn === void 0 ? void 0 : closeFn.then(task.resolve);\n              task.setCloseFn(closeFn);\n            });\n          }\n      }\n    }\n  });\n  // Clean up\n  taskQueue = [];\n}\n// ==============================================================================\n// ==                                  Export                                  ==\n// ==============================================================================\nfunction setMessageGlobalConfig(config) {\n  defaultGlobalConfig = Object.assign(Object.assign({}, defaultGlobalConfig), config);\n  // Trigger sync for it\n  act(() => {\n    var _a;\n    (_a = message === null || message === void 0 ? void 0 : message.sync) === null || _a === void 0 ? void 0 : _a.call(message);\n  });\n}\nfunction open(config) {\n  const result = wrapPromiseFn(resolve => {\n    let closeFn;\n    const task = {\n      type: 'open',\n      config,\n      resolve,\n      setCloseFn: fn => {\n        closeFn = fn;\n      }\n    };\n    taskQueue.push(task);\n    return () => {\n      if (closeFn) {\n        act(() => {\n          closeFn();\n        });\n      } else {\n        task.skipped = true;\n      }\n    };\n  });\n  flushNotice();\n  return result;\n}\nfunction typeOpen(type, args) {\n  const global = globalConfig();\n  if (process.env.NODE_ENV !== 'production' && !global.holderRender) {\n    warnContext('message');\n  }\n  const result = wrapPromiseFn(resolve => {\n    let closeFn;\n    const task = {\n      type,\n      args,\n      resolve,\n      setCloseFn: fn => {\n        closeFn = fn;\n      }\n    };\n    taskQueue.push(task);\n    return () => {\n      if (closeFn) {\n        act(() => {\n          closeFn();\n        });\n      } else {\n        task.skipped = true;\n      }\n    };\n  });\n  flushNotice();\n  return result;\n}\nconst destroy = key => {\n  taskQueue.push({\n    type: 'destroy',\n    key\n  });\n  flushNotice();\n};\nconst methods = ['success', 'info', 'warning', 'error', 'loading'];\nconst baseStaticMethods = {\n  open,\n  destroy,\n  config: setMessageGlobalConfig,\n  useMessage,\n  _InternalPanelDoNotUseOrYouWillBeFired: PurePanel\n};\nconst staticMethods = baseStaticMethods;\nmethods.forEach(type => {\n  staticMethods[type] = (...args) => typeOpen(type, args);\n});\n// ==============================================================================\n// ==                                   Test                                   ==\n// ==============================================================================\nconst noop = () => {};\n/** @internal Only Work in test env */\n// eslint-disable-next-line import/no-mutable-exports\nexport let actWrapper = noop;\nif (process.env.NODE_ENV === 'test') {\n  actWrapper = wrapper => {\n    act = wrapper;\n  };\n}\n/** @internal Only Work in test env */\n// eslint-disable-next-line import/no-mutable-exports\nexport let actDestroy = noop;\nif (process.env.NODE_ENV === 'test') {\n  actDestroy = () => {\n    message = null;\n  };\n}\nexport default staticMethods;","import axios from 'axios';\r\n\r\nconst API_BASE_URL = 'http://localhost:8088'; // 替换为你的后端API基础URL\r\n\r\nexport const getAllUsers = async () => {\r\n  try {\r\n    const response = await axios.get(`${API_BASE_URL}/user/allUser`, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    console.log(\"API Response:\", response.data); // 打印完整响应\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      // 修正这里：response.data.data.data 才是用户数组\r\n      const data = response.data.data.data;\r\n      return Array.isArray(data) ? data : [data];\r\n    } else {\r\n      throw new Error(response.data?.message || \"未知错误\");\r\n    }\r\n  } catch (error) {\r\n    console.error('获取用户列表失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\nexport const searchUsers = async (key) => {\r\n  try {\r\n    const response = await axios.get(`${API_BASE_URL}/user/searchUser`, {\r\n      params: { key },\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n\r\n    if (response.data?.code === 200) {\r\n      // 提取正确的用户数组：response.data.data.data\r\n      const users = response.data.data.data;\r\n      return Array.isArray(users) ? users : [users];\r\n    } else {\r\n      throw new Error(response.data?.message || \"搜索失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('搜索用户失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n// 修改用户权限\r\nexport const updateUserAuthority = async (username, authority) => {\r\n  try {\r\n    const response = await axios.put(`${API_BASE_URL}/user/changeAuthority`, \r\n      { \r\n        changeUsername: username, \r\n        authority: authority \r\n      },\r\n      {\r\n        headers: {\r\n          Authorization: localStorage.getItem('token')\r\n        }\r\n      }\r\n    );\r\n    return response.data;\r\n  } catch (error) {\r\n    console.error('修改用户权限失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n\r\n// // 获取所有折扣\r\n// export const getAllDiscounts = async () => {\r\n//   try {\r\n//     const response = await axios.get(`${API_BASE_URL}/discount/all`, {\r\n//       headers: {\r\n//         Authorization: localStorage.getItem('token')\r\n//       }\r\n//     });\r\n    \r\n//     if (response.data && response.data.code === 200) {\r\n//       // 确保返回的是数组格式\r\n//       const data = response.data.data.data || response.data.data;\r\n//       return Array.isArray(data) ? data : [data];\r\n//     } else {\r\n//       throw new Error(response.data?.message || \"获取折扣信息失败\");\r\n//     }\r\n//   } catch (error) {\r\n//     console.error('获取折扣列表失败:', error);\r\n//     throw error;\r\n//   }\r\n// };\r\n\r\n// // 获取当前折扣\r\n// export const getCurrentDiscount = async () => {\r\n//   try {\r\n//     const response = await axios.get(`${API_BASE_URL}/discount/current`, {\r\n//       headers: {\r\n//         Authorization: localStorage.getItem('token')\r\n//       }\r\n//     });\r\n    \r\n//     if (response.data && response.data.code === 200) {\r\n//       return response.data.data.data || response.data.data;\r\n//     } else {\r\n//       throw new Error(response.data?.message || \"获取当前折扣失败\");\r\n//     }\r\n//   } catch (error) {\r\n//     console.error('获取当前折扣失败:', error);\r\n//     throw error;\r\n//   }\r\n// };\r\n// 修改 getAllDiscounts 和 getCurrentDiscount 方法\r\nexport const getAllDiscounts = async () => {\r\n  try {\r\n    const response = await axios.get(`${API_BASE_URL}/discount/all`, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      // 更健壮的数据提取方式\r\n      return response.data.data?.data || response.data.data || [];\r\n    } else {\r\n      throw new Error(response.data?.message || \"获取折扣信息失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('获取折扣列表失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\nexport const getCurrentDiscount = async () => {\r\n  try {\r\n    const response = await axios.get(`${API_BASE_URL}/discount/current`, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      // 更健壮的数据提取方式\r\n      return response.data.data?.data || response.data.data || null;\r\n    } else if (response.data?.message === \"目前没有进行中的折扣\") {\r\n      return null;\r\n    } else {\r\n      throw new Error(response.data?.message || \"获取当前折扣失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('获取当前折扣失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n// 添加折扣\r\nexport const addDiscount = async (discountData) => {\r\n  try {\r\n    const response = await axios.post(`${API_BASE_URL}/discount/add`, discountData, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      return response.data.data.data || response.data.data;\r\n    } else {\r\n      throw new Error(response.data?.message || \"添加折扣失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('添加折扣失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n// 删除折扣\r\nexport const deleteDiscount = async (id) => {\r\n  try {\r\n    const response = await axios.delete(`${API_BASE_URL}/discount/delete/${id}`, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      return true;\r\n    } else {\r\n      throw new Error(response.data?.message || \"删除折扣失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('删除折扣失败:', error);\r\n    throw error;\r\n  }\r\n};","import React, {useEffect, useState} from 'react';\r\nimport {useNavigate, useLocation, useParams} from 'react-router-dom';  \r\nimport {createTorrent, getTorrents, downloadTorrent, getDownloadProgress, deleteTorrent, searchTorrents} from '../api/torrent';\r\nimport './Dashboard.css';\r\nimport {createHelpPost, getHelpPosts, getHelpPostDetail, searchHelpPosts} from '../api/helpPost';\r\nimport {createRequestPost, getRequestPosts, getRequestPostDetail, searchRequestPosts} from '../api/requestPost';\r\nimport { message } from 'antd'; // 用于显示提示消息\r\nimport { getAnnouncements,getLatestAnnouncements,getAnnouncementDetail } from '../api/announcement'; \r\nimport { getAllDiscounts } from '../api/administer'; \r\n   import { getUserInfo, isAdmin } from '../api/auth';\r\nimport { api } from '../api/auth'; \r\n\r\n\r\nconst Dashboard = ({onLogout}) => {\r\n    const location = useLocation();\r\n    const [userInfo, setUserInfo] = useState(null);\r\n    const [loading, setLoading] = useState(false);\r\n    const [error, setError] = useState('');\r\n    const [currentSlide, setCurrentSlide] = useState(0);\r\n    const navigate = useNavigate();\r\n    const {tab} = useParams();\r\n    const [showUploadModal, setShowUploadModal] = useState(false);\r\n    const [isUploading, setIsUploading] = useState(false);\r\n    const [uploadData, setUploadData] = useState({\r\n        name: '',\r\n        type: '',\r\n        region: '',\r\n        subtitle: '',\r\n        resolution: '', // 新增分辨率字段\r\n        file: null,\r\n        description: ''\r\n    });\r\n    const [showPostModal, setShowPostModal] = useState(false);\r\n    const [postTitle, setPostTitle] = useState('');\r\n    const [postContent, setPostContent] = useState('');\r\n    const [selectedImage, setSelectedImage] = useState(null);\r\n    const [helpPosts, setHelpPosts] = useState([]);\r\n    const [helpLoading, setHelpLoading] = useState(false);\r\n    const [helpError, setHelpError] = useState(null);\r\n    const [currentPage, setCurrentPage] = useState(1);\r\n    const [totalPages, setTotalPages] = useState(1);\r\n    const [likedPosts,setLikedPosts] = useState({});\r\n    const [announcements, setAnnouncements] = useState([]);\r\n    const [carouselDiscounts, setCarouselDiscounts] = useState([]);\r\n    const [requestLoading, setRequestLoading] = useState(false);\r\n    const [requestError, setRequestError] = useState(null);\r\n    const [requestPosts, setRequestPosts] = useState([]);\r\n\r\n\r\n    // 添加状态\r\n    const [torrentPosts, setTorrentPosts] = useState([]);\r\n    const [torrentLoading, setTorrentLoading] = useState(false);\r\n    const [torrentError, setTorrentError] = useState(null);\r\n\r\n    const [filteredResources, setFilteredResources] = useState(torrentPosts);\r\n    const [isAdmin, setIsAdmin] = useState(false);\r\n\r\n    // 在组件状态中添加\r\n    const [showDownloadModal, setShowDownloadModal] = useState(false);\r\n    const [selectedTorrent, setSelectedTorrent] = useState(null);\r\n    const [downloadProgress, setDownloadProgress] = useState(0);\r\n    const [isDownloading, setIsDownloading] = useState(false);\r\n    const [downloadPath, setDownloadPath] = useState('D:/studies/ptPlatform/torrent');\r\n\r\n    // 新增搜索状态\r\n    const [announcementSearch, setAnnouncementSearch] = useState('');\r\n    const [shareSearch, setShareSearch] = useState('');\r\n    const [requestSearch, setRequestSearch] = useState('');\r\n    const [helpSearch, setHelpSearch] = useState('');\r\n\r\n\r\n    const activeTab = tab || 'announcement'; // 如果没有tab参数，则默认为announcement\r\n    // 从location.state中初始化状态\r\n\r\n\r\n    const handleTabChange = (tabName) => {\r\n        navigate(`/dashboard/${tabName}`, {\r\n            state: {\r\n                savedFilters: selectedFilters, // 使用新的筛选状态 // 保留现有状态\r\n                activeTab: tabName // 可选，如果其他组件依赖这个 state\r\n            }\r\n        });\r\n    };\r\n\r\n    \r\n\r\n    //公告区\r\n    // 添加获取公告的方法\r\n    const fetchAnnouncements = async () => {\r\n    try {\r\n        const response = await getLatestAnnouncements();\r\n        setAnnouncements(response.data.data.announcements || []);\r\n    } catch (error) {\r\n        console.error('获取公告失败:', error);\r\n    }\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (activeTab === 'announcement') {\r\n            fetchAnnouncements();\r\n            fetchDiscountsForCarousel();\r\n        }\r\n    }, [activeTab]);\r\n\r\n    const fetchDiscountsForCarousel = async () => {\r\n        try {\r\n            const all = await getAllDiscounts();\r\n            console.log(\"返回的折扣数据：\", all);\r\n            const now = new Date();\r\n\r\n            // ⚠️ 使用 Date.parse 确保兼容 ISO 格式\r\n            const ongoing = all.filter(d =>\r\n            Date.parse(d.startTime) <= now.getTime() && Date.parse(d.endTime) >= now.getTime()\r\n            );\r\n\r\n            const upcoming = all\r\n            .filter(d => Date.parse(d.startTime) > now.getTime())\r\n            .sort((a, b) => Date.parse(a.startTime) - Date.parse(b.startTime));\r\n\r\n            const selected = [...ongoing.slice(0, 3)];\r\n\r\n            while (selected.length < 3 && upcoming.length > 0) {\r\n            selected.push(upcoming.shift());\r\n            }\r\n\r\n            setCarouselDiscounts(selected);\r\n        } catch (e) {\r\n            console.error(\"获取折扣失败:\", e);\r\n        }\r\n    };\r\n\r\n    // 修改handleAnnouncementClick函数中的state传递，移除不必要的字段\r\n    const handleAnnouncementClick = (announcement, e) => {\r\n        if (!e.target.closest('.exclude-click')) {\r\n            navigate(`/announcement/${announcement.id}`, {\r\n                state: {\r\n                    announcement,\r\n                    returnPath: `/dashboard/${activeTab}`,\r\n                    scrollPosition: window.scrollY,\r\n                    activeTab\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    \r\n   // 公告区搜索处理\r\n    const handleSearchAnnouncement = (e) => {\r\n        setAnnouncementSearch(e.target.value);\r\n    };\r\n\r\n    // 修改后的搜索函数\r\n    const handleSearchShare = async () => {\r\n        try {\r\n            setTorrentLoading(true);\r\n            const response = await searchTorrents(shareSearch, 1);\r\n            if (response.data.code === 200) {\r\n                setTorrentPosts(response.data.data.records);\r\n                const total = response.data.data.total;\r\n                setTotalPages(Math.ceil(total / 5));\r\n                setCurrentPage(1);\r\n            } else {\r\n                setTorrentError(response.data.message || '搜索失败');\r\n            }\r\n        } catch (err) {\r\n            setTorrentError(err.message || '搜索失败');\r\n        } finally {\r\n            setTorrentLoading(false);\r\n        }\r\n    };\r\n\r\n    const handleResetShareSearch = async () => {\r\n        setShareSearch('');\r\n        setSelectedFilters(\r\n            Object.keys(filterCategories).reduce((acc, category) => {\r\n                acc[category] = 'all';\r\n                return acc;\r\n            }, {})\r\n        );\r\n        await fetchTorrentPosts(1, true);\r\n    };\r\n\r\n    // 添加搜索函数\r\n    const handleSearchRequest = async () => {\r\n        try {\r\n        setRequestLoading(true);\r\n        const response = await searchRequestPosts(requestSearch, currentPage);\r\n        if (response.data.code === 200) {\r\n            const postsWithCounts = await Promise.all(\r\n            response.data.data.records.map(async (post) => {\r\n                try {\r\n                const detailResponse = await getRequestPostDetail(post.id);\r\n                if (detailResponse.data.code === 200) {\r\n                    return {\r\n                    ...post,\r\n                    replyCount: detailResponse.data.data.post.replyCount || 0,\r\n                    isLiked: false\r\n                    };\r\n                }\r\n                return post;\r\n                } catch (err) {\r\n                console.error(`获取帖子${post.id}详情失败:`, err);\r\n                return post;\r\n                }\r\n            })\r\n            );\r\n            setRequestPosts(postsWithCounts);\r\n            setTotalPages(Math.ceil(response.data.data.total / 5));\r\n        } else {\r\n            setRequestError(response.data.message || '搜索失败');\r\n        }\r\n        } catch (err) {\r\n        setRequestError(err.message || '搜索失败');\r\n        } finally {\r\n        setRequestLoading(false);\r\n        }\r\n    };\r\n    \r\n    // 添加重置搜索函数\r\n    const handleResetRequestSearch = async () => {\r\n        setRequestSearch('');\r\n        await fetchRequestPosts(1); // 重置到第一页\r\n };\r\n\r\n   // 添加搜索函数\r\n    const handleSearchHelp = async () => {\r\n        try {\r\n        setHelpLoading(true);\r\n        const response = await searchHelpPosts(helpSearch, currentPage);\r\n        if (response.data.code === 200) {\r\n            const postsWithCounts = await Promise.all(\r\n            response.data.data.records.map(async (post) => {\r\n                try {\r\n                const detailResponse = await getHelpPostDetail(post.id);\r\n                if (detailResponse.data.code === 200) {\r\n                    return {\r\n                    ...post,\r\n                    replyCount: detailResponse.data.data.post.replyCount || 0,\r\n                    isLiked: false\r\n                    };\r\n                }\r\n                return post;\r\n                } catch (err) {\r\n                console.error(`获取帖子${post.id}详情失败:`, err);\r\n                return post;\r\n                }\r\n            })\r\n            );\r\n            setHelpPosts(postsWithCounts);\r\n            setTotalPages(Math.ceil(response.data.data.total / 5));\r\n        } else {\r\n            setHelpError(response.data.message || '搜索失败');\r\n        }\r\n        } catch (err) {\r\n        setHelpError(err.message || '搜索失败');\r\n        } finally {\r\n        setHelpLoading(false);\r\n        }\r\n    };\r\n    \r\n    // 添加重置搜索函数\r\n    const handleResetHelpSearch = async () => {\r\n        setHelpSearch('');\r\n        await fetchHelpPosts(1); // 重置到第一页\r\n };\r\n\r\n\r\n\r\n\r\n    //资源区\r\n    const handleFileChange = (e) => {\r\n        setUploadData({...uploadData, file: e.target.files[0]});\r\n    };\r\n\r\n    const handleUploadSubmit = async (e) => {\r\n        e.preventDefault();\r\n        try {\r\n            setIsUploading(true);\r\n\r\n            const torrentData = {\r\n                torrentName: uploadData.name,\r\n                description: uploadData.description,\r\n                category: uploadData.type,\r\n                region: uploadData.region,\r\n                resolution: uploadData.resolution,\r\n                subtitle: uploadData.subtitle\r\n            };\r\n\r\n            await createTorrent(uploadData.file, torrentData, (progress) => {\r\n                console.log(`上传进度: ${progress}%`);\r\n                // 这里可以添加进度条更新逻辑\r\n                });\r\n\r\n            // 上传成功处理\r\n            setShowUploadModal(false);\r\n            setUploadData({\r\n                name: '',\r\n                type: '',\r\n                region: '',\r\n                subtitle: '',\r\n                resolution: '',\r\n                file: null,\r\n                description: ''\r\n            });\r\n            alert('种子创建成功！');\r\n\r\n            // 刷新列表\r\n            await fetchTorrentPosts(currentPage);\r\n\r\n        } catch (error) {\r\n            console.error('创建失败:', error);\r\n            alert('创建失败: ' + (error.response?.data?.message || error.message));\r\n        } finally {\r\n            setIsUploading(false);\r\n        }\r\n    };\r\n\r\n    // 处理下载按钮点击\r\n    const handleDownloadClick = (torrent, e) => {\r\n        e.stopPropagation();\r\n        setSelectedTorrent(torrent);\r\n        setShowDownloadModal(true);\r\n    };\r\n\r\n    // 执行下载\r\n    const handleDownload = async () => {\r\n    if (!selectedTorrent || !downloadPath) return;\r\n\r\n    setIsDownloading(true);\r\n    setDownloadProgress(0);\r\n\r\n    try {\r\n        // 标准化路径\r\n        const cleanPath = downloadPath\r\n        .replace(/\\\\/g, '/')  // 统一使用正斜杠\r\n        .replace(/\\/+/g, '/') // 去除多余斜杠\r\n        .trim();\r\n\r\n        // 确保路径以斜杠结尾\r\n        const finalPath = cleanPath.endsWith('/') ? cleanPath : cleanPath + '/';\r\n\r\n        // 发起下载请求\r\n        await downloadTorrent(selectedTorrent.id, finalPath);\r\n        \r\n        // 开始轮询进度\r\n        const interval = setInterval(async () => {\r\n            try {\r\n                const res = await getDownloadProgress();\r\n                const progresses = res.data.progresses;\r\n                \r\n                if (progresses) {\r\n                    // 使用完整的 torrent 文件路径作为键\r\n                    const torrentPath = selectedTorrent.filePath.replace(/\\\\/g, '/');\r\n                    const torrentHash = selectedTorrent.hash;\r\n                    // 查找匹配的进度\r\n                    let foundProgress = null;\r\n                    for (const [key, value] of Object.entries(progresses)) {\r\n                        const normalizedKey = key.replace(/\\\\/g, '/');\r\n                        if (normalizedKey.includes(selectedTorrent.hash) || \r\n                            normalizedKey.includes(selectedTorrent.torrentName)) {\r\n                            foundProgress = value;\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (foundProgress !== null) {\r\n                        const newProgress = Math.round(foundProgress * 100);\r\n                        setDownloadProgress(newProgress);\r\n                        \r\n                        // 检查是否下载完成\r\n                        if (newProgress >= 100) {\r\n                        clearInterval(interval);\r\n                        setIsDownloading(false);\r\n                        message.success('下载完成！');\r\n                        setTimeout(() => setShowDownloadModal(false), 2000);\r\n                        }\r\n                    } else {\r\n                        console.log('当前下载进度:', progresses); // 添加日志\r\n                    }\r\n                    }\r\n                } catch (error) {\r\n                    console.error('获取进度失败:', error);\r\n                    // 如果获取进度失败但文件已存在，也视为完成\r\n                    const filePath = `${finalPath}${selectedTorrent.torrentName || 'downloaded_file'}`;\r\n                    try {\r\n                    const exists = await checkFileExists(filePath);\r\n                    if (exists) {\r\n                        clearInterval(interval);\r\n                        setDownloadProgress(100);\r\n                        setIsDownloading(false);\r\n                        message.success('下载完成！');\r\n                        setTimeout(() => setShowDownloadModal(false), 2000);\r\n                    }\r\n                    } catch (e) {\r\n                    console.error('文件检查失败:', e);\r\n                    }\r\n                }\r\n                }, 2000);\r\n\r\n        return () => clearInterval(interval);\r\n    } catch (error) {\r\n        setIsDownloading(false);\r\n        if (error.response && error.response.status === 409) {\r\n        message.error('分享率不足，无法下载此资源');\r\n        } else {\r\n        message.error('下载失败: ' + (error.message || '未知错误'));\r\n        }\r\n    }\r\n    };\r\n\r\n    const checkFileExists = async (filePath) => {\r\n        try {\r\n            // 这里需要根据您的实际环境实现文件存在性检查\r\n            // 如果是Electron应用，可以使用Node.js的fs模块\r\n            // 如果是纯前端，可能需要通过API请求后端检查\r\n            return true; // 暂时返回true，实际实现需要修改\r\n        } catch (e) {\r\n            console.error('检查文件存在性失败:', e);\r\n            return false;\r\n        }\r\n    };\r\n\r\n    const handleDeleteTorrent = async (torrentId, e) => {\r\n        e.stopPropagation(); // 阻止事件冒泡，避免触发资源项的点击事件\r\n        \r\n        try {\r\n            // 确认删除\r\n            if (!window.confirm('确定要删除这个种子吗？此操作不可撤销！')) {\r\n            return;\r\n            }\r\n            \r\n            // 调用删除API\r\n            await deleteTorrent(torrentId);\r\n            \r\n            // 删除成功后刷新列表\r\n            message.success('种子删除成功');\r\n            await fetchTorrentPosts(currentPage);\r\n        } catch (error) {\r\n            console.error('删除种子失败:', error);\r\n            message.error('删除种子失败: ' + (error.response?.data?.message || error.message));\r\n        }\r\n        };\r\n\r\n        const handleRequestPostSubmit = async (e) => {\r\n        e.preventDefault();\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          const response = await createRequestPost(\r\n            postTitle,\r\n            postContent,\r\n            username,\r\n            selectedImage\r\n          );\r\n          \r\n          if (response.data.code === 200) {\r\n            // 刷新帖子列表\r\n           \r\n            await fetchRequestPosts(currentPage);\r\n            // 重置表单\r\n            setShowPostModal(false);\r\n            setPostTitle('');\r\n            setPostContent('');\r\n            setSelectedImage(null);\r\n          } else {\r\n            setHelpError(response.data.message || '发帖失败');\r\n          }\r\n        } catch (err) {\r\n          setHelpError(err.message || '发帖失败');\r\n        }\r\n      };\r\n\r\n    const handleHelpPostSubmit = async (e) => {\r\n        e.preventDefault();\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          const response = await createHelpPost(\r\n            postTitle,\r\n            postContent,\r\n            username,\r\n            selectedImage\r\n          );\r\n          \r\n          if (response.data.code === 200) {\r\n            // 刷新帖子列表\r\n            await fetchHelpPosts(currentPage);\r\n            \r\n            // 重置表单\r\n            setShowPostModal(false);\r\n            setPostTitle('');\r\n            setPostContent('');\r\n            setSelectedImage(null);\r\n          } else {\r\n            setHelpError(response.data.message || '发帖失败');\r\n          }\r\n        } catch (err) {\r\n          setHelpError(err.message || '发帖失败');\r\n        }\r\n      };\r\n\r\n\r\nconst fetchTorrentPosts = async (page = 1, isReset = false) => {\r\n    setTorrentLoading(true);\r\n    try {\r\n        const params = {\r\n            page,\r\n            size: 5\r\n        };\r\n        \r\n        // 如果有筛选条件且不是重置操作\r\n        if (!isReset && Object.values(selectedFilters).some(v => v !== 'all')) {\r\n            if (selectedFilters.type !== 'all') params.category = selectedFilters.type;\r\n            if (selectedFilters.subtitle !== 'all') params.subtitle = selectedFilters.subtitle;\r\n            if (selectedFilters.region !== 'all') params.region = selectedFilters.region;\r\n            if (selectedFilters.resolution !== 'all') params.resolution = selectedFilters.resolution;\r\n        }\r\n        \r\n        const response = (shareSearch && !isReset) \r\n            ? await searchTorrents(shareSearch, page)\r\n            : await api.get('http://localhost:8088/torrent', { params });\r\n            \r\n        if (response.data.code === 200) {\r\n            setTorrentPosts(response.data.data.records);\r\n            const total = response.data.data.total;\r\n            setTotalPages(Math.ceil(total / 5));\r\n            setCurrentPage(page);\r\n        } else {\r\n            setTorrentError(response.data.message);\r\n        }\r\n    } catch (err) {\r\n        setTorrentError(err.message);\r\n    } finally {\r\n        setTorrentLoading(false);\r\n    }\r\n};\r\n\r\n    // 在useEffect中调用\r\n    useEffect(() => {\r\n        if (activeTab === 'share') {\r\n            fetchTorrentPosts();\r\n        }\r\n    }, [activeTab]);\r\n\r\nconst fetchRequestPosts = async (page = 1) => {\r\n        setRequestLoading(true);\r\n        try {\r\n          const response = await getRequestPosts(page);\r\n          if (response.data.code === 200) {\r\n            const postsWithCounts = await Promise.all(\r\n              response.data.data.records.map(async (post) => {\r\n                try {\r\n                  const detailResponse = await getRequestPostDetail(post.id);\r\n                  if (detailResponse.data.code === 200) {\r\n                    return {\r\n                      ...post,\r\n                      replyCount: detailResponse.data.data.post.replyCount || 0,\r\n                      isLiked: false // 根据需要添加其他字段\r\n                    };\r\n                  }\r\n                  return post; // 如果获取详情失败，返回原始帖子数据\r\n                } catch (err) {\r\n                  console.error(`获取帖子${post.id}详情失败:`, err);\r\n                  return post;\r\n                }\r\n              })\r\n            );\r\n            setRequestPosts(postsWithCounts);\r\n            setTotalPages(Math.ceil(response.data.data.total / 5)); // 假设每页5条\r\n            setCurrentPage(page);\r\n          } else {\r\n            setRequestError(response.data.message || '获取求助帖失败');\r\n          }\r\n        } catch (err) {\r\n          setRequestError(err.message || '获取求助帖失败');\r\n        } finally {\r\n          setRequestLoading(false);\r\n        }\r\n      };\r\n\r\n    const handleImageUpload = (e) => {\r\n        setSelectedImage(e.target.files[0]);\r\n    };\r\n\r\n\r\n    const fetchHelpPosts = async (page = 1) => {\r\n        setHelpLoading(true);\r\n        try {\r\n          const response = await getHelpPosts(page);\r\n          if (response.data.code === 200) {\r\n            const postsWithCounts = await Promise.all(\r\n              response.data.data.records.map(async (post) => {\r\n                try {\r\n                  const detailResponse = await getHelpPostDetail(post.id);\r\n                  if (detailResponse.data.code === 200) {\r\n                    return {\r\n                      ...post,\r\n                      replyCount: detailResponse.data.data.post.replyCount || 0,\r\n                      isLiked: false // 根据需要添加其他字段\r\n                    };\r\n                  }\r\n                  return post; // 如果获取详情失败，返回原始帖子数据\r\n                } catch (err) {\r\n                  console.error(`获取帖子${post.id}详情失败:`, err);\r\n                  return post;\r\n                }\r\n              })\r\n            );\r\n            setHelpPosts(postsWithCounts);\r\n            setTotalPages(Math.ceil(response.data.data.total / 5)); // 假设每页5条\r\n            setCurrentPage(page);\r\n          } else {\r\n            setHelpError(response.data.message || '获取求助帖失败');\r\n          }\r\n        } catch (err) {\r\n          setHelpError(err.message || '获取求助帖失败');\r\n        } finally {\r\n          setHelpLoading(false);\r\n        }\r\n      };\r\n\r\n\r\n    useEffect(() => {\r\n        if (activeTab === 'request') {\r\n            fetchRequestPosts(currentPage);\r\n        }\r\n    }, [activeTab, currentPage]); // 添加 currentPage 作为依赖\r\n\r\n\r\n        // 分类维度配置\r\n    const filterCategories = {\r\n        type: {\r\n            label: '类型',\r\n            options: {\r\n                'all': '全部',\r\n                '电影': '电影',\r\n                '电视剧': '电视剧',\r\n                '动漫': '动漫',\r\n                '综艺': '综艺',\r\n                '音乐': '音乐',\r\n                '其他': '其他'\r\n            }\r\n        },\r\n        subtitle: {\r\n            label: '字幕',\r\n            options: {\r\n                'all': '全部',\r\n                '无需字幕': '无需字幕',\r\n                '暂无字幕': '暂无字幕',\r\n                '自带中文字幕': '自带中文字幕',\r\n                '自带双语字幕(含中文)': '自带双语字幕(含中文)',\r\n                '附件中文字幕': '附件中文字幕',\r\n                '附件双语字幕': '附件双语字幕'\r\n            }\r\n        },\r\n        region: {\r\n            label: '地区',\r\n            options: {\r\n                'all': '全部',\r\n                '中国': '中国',\r\n                '英国': '英国',\r\n                '美国': '美国',\r\n                '日本': '日本',\r\n                '韩国': '韩国',\r\n                '其他': '其他'\r\n            }\r\n        },\r\n        resolution: {\r\n            label: '分辨率',\r\n            options: {\r\n                'all': '全部',\r\n                '4K': '4K',\r\n                '2K': '2K',\r\n                '1080P': '1080P',\r\n                '720P': '720P',\r\n                'SD': 'SD',\r\n                '无损音源': '无损音源',\r\n                '杜比全景声': '杜比全景声',\r\n                '其他': '其他'\r\n            }\r\n        }\r\n    };\r\n    const [selectedFilters, setSelectedFilters] = useState(\r\n        location.state?.savedFilters ||\r\n        Object.keys(filterCategories).reduce((acc, category) => {\r\n            acc[category] = 'all';\r\n            return acc;\r\n        }, {})\r\n    );\r\n\r\n    // 处理筛选条件变更\r\n    const handleFilterSelect = (category, value) => {\r\n        setSelectedFilters(prev => ({\r\n            ...prev,\r\n            [category]: prev[category] === value ? 'all' : value\r\n        }));\r\n    };\r\n\r\n    // 应用筛选条件\r\n    const applyFilters = async () => {\r\n        try {\r\n            setTorrentLoading(true);\r\n            \r\n            // 构建查询参数\r\n            const params = {\r\n                page: 1, // 从第一页开始\r\n                size: 5 \r\n            };\r\n            \r\n            // 添加筛选条件\r\n            if (selectedFilters.type !== 'all') {\r\n                params.category = selectedFilters.type;\r\n            }\r\n            if (selectedFilters.subtitle !== 'all') {\r\n                params.subtitle = selectedFilters.subtitle;\r\n            }\r\n            if (selectedFilters.region !== 'all') {\r\n                params.region = selectedFilters.region;\r\n            }\r\n            if (selectedFilters.resolution !== 'all') {\r\n                params.resolution = selectedFilters.resolution;\r\n            }\r\n            \r\n            // 调用API获取筛选结果\r\n            const response = await api.get('http://localhost:8088/torrent', { params });\r\n            \r\n            if (response.data.code === 200) {\r\n                setTorrentPosts(response.data.data.records);\r\n                setTotalPages(Math.ceil(response.data.data.total / 5));\r\n                setCurrentPage(1);\r\n            } else {\r\n                setTorrentError(response.data.message || '筛选失败');\r\n            }\r\n        } catch (err) {\r\n            setTorrentError(err.message || '筛选失败');\r\n        } finally {\r\n            setTorrentLoading(false);\r\n        }\r\n    };\r\n\r\n\r\n    // 恢复滚动位置\r\n    useEffect(() => {\r\n        if (location.state?.scrollPosition) {\r\n            window.scrollTo(0, location.state.scrollPosition);\r\n        }\r\n    }, [location.state]);\r\n\r\n    // 在Dashboard.jsx中修改useEffect\r\nuseEffect(() => {\r\n    const token = localStorage.getItem('token');\r\n    if (!token) {\r\n        navigate('/login');\r\n        return;\r\n    }\r\n    \r\n    const fetchUserInfo = async () => {\r\n        try {\r\n          setLoading(true);\r\n          const backendData = await getUserInfo(); // 调用修改后的方法\r\n          console.log('后端返回的用户数据:', backendData); // 调试用\r\n          \r\n          setUserInfo({\r\n            name: backendData.username || '演示用户',\r\n            avatar: 'https://via.placeholder.com/40',\r\n            isAdmin: backendData.authority === 'ADMIN' // 检查 authority 是否为 \"ADMIN\"\r\n          });\r\n        } catch (error) {\r\n          console.error('获取用户信息失败:', error);\r\n          setError('获取用户信息失败');\r\n        } finally {\r\n          setLoading(false);\r\n        }\r\n      };\r\n    \r\n    fetchUserInfo();\r\n}, [navigate]);\r\n\r\n\r\n    useEffect(() => {\r\n        if (activeTab === 'announcement') {\r\n            const timer = setInterval(() => {\r\n                setCurrentSlide(prev => {\r\n                    const count = carouselDiscounts.length || 1;\r\n                    return (prev + 1) % count;\r\n                });\r\n            }, 3000);\r\n            return () => clearInterval(timer);\r\n        }\r\n    }, [activeTab]);\r\n\r\n    useEffect(() => {\r\n        if (activeTab === 'help') {\r\n            fetchHelpPosts();\r\n        }\r\n    }, [activeTab, currentPage]); // 添加 currentPage 作为依赖\r\n\r\n    \r\n\r\n    const renderContent = () => {\r\n        switch (activeTab) {\r\n            case 'announcement':\r\n                return (\r\n                    <div className=\"content-area\" data-testid=\"announcement-section\">\r\n                        <div className=\"section-search-container\">\r\n                            <input\r\n                                type=\"text\"\r\n                                placeholder=\"搜索公告...\"\r\n                                value={announcementSearch}\r\n                                onChange={(e) => setAnnouncementSearch(e.target.value)}\r\n                                className=\"section-search-input\"\r\n                                onKeyPress={(e) => e.key === 'Enter' && handleSearchAnnouncement()}\r\n                            />\r\n                            <button \r\n                                className=\"search-button\"\r\n                                onClick={handleSearchAnnouncement}\r\n                            >\r\n                                搜索\r\n                            </button>\r\n                        </div>\r\n                        {/* 轮播图区域 */}\r\n                       <div className=\"carousel-container\">\r\n                        {carouselDiscounts.length === 0 ? (\r\n                            <div className=\"carousel-slide active\">\r\n                            <div className=\"carousel-image gray-bg\">暂无折扣活动</div>\r\n                            </div>\r\n                        ) : (\r\n                            carouselDiscounts.map((discount, index) => (\r\n                            <div key={index} className={`carousel-slide ${currentSlide === index ? 'active' : ''}`}>\r\n                                <div className=\"carousel-image gray-bg\">\r\n                                <h3>{discount.type}</h3>\r\n                                <p>{discount.name}</p>\r\n                                <p>{new Date(discount.startTime).toLocaleDateString()} ~ {new Date(discount.endTime).toLocaleDateString()}</p>\r\n                                </div>\r\n                            </div>\r\n                            ))\r\n                        )}\r\n                        <div className=\"carousel-dots\">\r\n                            {carouselDiscounts.map((_, index) => (\r\n                            <span key={index} className={`dot ${currentSlide === index ? 'active' : ''}`}></span>\r\n                            ))}\r\n                        </div>\r\n                        </div>\r\n\r\n\r\n\r\n                        {/* 公告区块区域 */}\r\n                        <div className=\"announcement-grid\">\r\n                            {announcements.map(announcement => (\r\n                                <div\r\n                                    key={announcement.id}\r\n                                    className=\"announcement-card\"\r\n                                    onClick={(e) => handleAnnouncementClick(announcement, e)}\r\n                                >\r\n                                    <h3>{announcement.title}</h3>\r\n                                    <p>{announcement.content.substring(0, 100)}...</p>\r\n                                    <div className=\"announcement-footer exclude-click\">\r\n                                        <span>{announcement.date}</span>\r\n                                    </div>\r\n                                </div>\r\n                            ))}\r\n                        </div>\r\n                    </div>\r\n                );\r\n            case 'share':\r\n                return (\r\n                    <div className=\"content-area\" data-testid=\"share-section\">\r\n                        {/* 分享区搜索框 */}\r\n                        <div className=\"section-search-container\">\r\n                            <input\r\n                                type=\"text\"\r\n                                placeholder=\"搜索资源...\"\r\n                                value={shareSearch}\r\n                                onChange={(e) => setShareSearch(e.target.value)}\r\n                                className=\"section-search-input\"\r\n                                onKeyPress={(e) => e.key === 'Enter' && handleSearchShare()}\r\n                            />\r\n                            <button \r\n                                className=\"search-button\"\r\n                                onClick={handleSearchShare}\r\n                            >\r\n                                搜索\r\n                            </button>\r\n                            <button \r\n                                className=\"reset-button\"\r\n                                onClick={handleResetShareSearch}  // 使用新的重置函数\r\n                                style={{marginLeft: '10px'}}\r\n                            >\r\n                                重置\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 上传按钮 - 添加在筛选区上方 */}\r\n                        <div className=\"upload-header\">\r\n                            <button\r\n                                className=\"upload-btn\"\r\n                                onClick={() => setShowUploadModal(true)}\r\n                            >\r\n                                ＋ 上传种子\r\n                            </button>\r\n                        </div>\r\n                        {/* 分类筛选区 */}\r\n                        <div className=\"filter-section\">\r\n                            {Object.entries(filterCategories).map(([category, config]) => (\r\n                                <div key={category} className=\"filter-group\">\r\n                                    <h4>{config.label}：</h4>\r\n                                    <div className=\"filter-options\">\r\n                                        {Object.entries(config.options).map(([value, label]) => (\r\n                                            <button\r\n                                                key={value}\r\n                                                className={`filter-btn ${\r\n                                                    selectedFilters[category] === value ? 'active' : ''\r\n                                                }`}\r\n                                                onClick={() => handleFilterSelect(category, value)}\r\n                                            >\r\n                                                {label}\r\n                                            </button>\r\n                                        ))}\r\n                                    </div>\r\n                                </div>\r\n                            ))}\r\n\r\n                            <button\r\n                                className=\"confirm-btn\"\r\n                                onClick={applyFilters}\r\n                            >\r\n                                确认筛选\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 上传弹窗 */}\r\n                        {showUploadModal && (\r\n                            <div className=\"modal-overlay\">\r\n                                <div className=\"upload-modal\">\r\n                                    <h3>上传新种子</h3>\r\n                                    <button\r\n                                        className=\"close-btn\"\r\n                                        onClick={() => setShowUploadModal(false)}\r\n                                    >\r\n                                        ×\r\n                                    </button>\r\n\r\n                                    <form onSubmit={handleUploadSubmit}>\r\n                                        <div className=\"form-group\">\r\n                                            <label>种子名称</label>\r\n                                            <input\r\n                                                type=\"text\"\r\n                                                value={uploadData.name}\r\n                                                onChange={(e) => setUploadData({...uploadData, name: e.target.value})}\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>资源类型</label>\r\n                                            <select\r\n                                                value={uploadData.type}\r\n                                                onChange={(e) => setUploadData({...uploadData, type: e.target.value})}\r\n                                                required\r\n                                            >\r\n                                                <option value=\"\">请选择</option>\r\n                                                <option value=\"电影\">电影</option>\r\n                                                <option value=\"电视剧\">电视剧</option>\r\n                                                <option value=\"动漫\">动漫</option>\r\n                                                <option value=\"综艺\">综艺</option>\r\n                                                <option value=\"音乐\">音乐</option>\r\n                                                <option value=\"其他\">其他</option>\r\n                                            </select>\r\n                                        </div>\r\n\r\n                                        {/* 修改后的地区下拉框 */}\r\n                                        <div className=\"form-group\">\r\n                                            <label>地区</label>\r\n                                            <select\r\n                                                value={uploadData.region || ''}\r\n                                                onChange={(e) => setUploadData({...uploadData, region: e.target.value})}\r\n                                                required\r\n                                            >\r\n                                                <option value=\"\">请选择</option>\r\n                                                <option value=\"中国\">中国</option>\r\n                                                <option value=\"英国\">英国</option>\r\n                                                <option value=\"美国\">美国</option>\r\n                                                <option value=\"日本\">日本</option>\r\n                                                <option value=\"韩国\">韩国</option>\r\n                                                <option value=\"其他\">其他</option>\r\n                                            </select>\r\n                                        </div>\r\n\r\n                                        {/* 添加分辨率下拉框 */}\r\n                                        <div className=\"form-group\">\r\n                                            <label>分辨率</label>\r\n                                            <select\r\n                                                value={uploadData.resolution || ''}\r\n                                                onChange={(e) => setUploadData({\r\n                                                    ...uploadData,\r\n                                                    resolution: e.target.value\r\n                                                })}\r\n                                                required\r\n                                            >\r\n                                                <option value=\"\">请选择</option>\r\n                                                <option value=\"4K\">4K</option>\r\n                                                <option value=\"2K\">2K</option>\r\n                                                <option value=\"1080P\">1080P</option>\r\n                                                <option value=\"720P\">720P</option>\r\n                                                <option value=\"SD\">SD</option>\r\n                                                <option value=\"无损音源\">无损音源</option>\r\n                                                <option value=\"杜比全景声\">杜比全景声</option>\r\n                                                <option value=\"其他\">其他</option>\r\n                                            </select>\r\n                                        </div>\r\n\r\n\r\n                                        {/* 新增字幕语言下拉框 */}\r\n                                        <div className=\"form-group\">\r\n                                            <label>字幕语言</label>\r\n                                            <select\r\n                                                value={uploadData.subtitle || ''}\r\n                                                onChange={(e) => setUploadData({\r\n                                                    ...uploadData,\r\n                                                    subtitle: e.target.value\r\n                                                })}\r\n                                                required\r\n                                            >\r\n                                                <option value=\"\">请选择</option>\r\n                                                <option value=\"无需字幕\">无需字幕</option>\r\n                                                <option value=\"暂无字幕\">暂无字幕</option>\r\n                                                <option value=\"自带中文字幕\">自带中文字幕</option>\r\n                                                <option value=\"自带双语字幕(含中文)\">自带双语字幕(含中文)</option>\r\n                                                <option value=\"附件中文字幕\">附件中文字幕</option>\r\n                                                <option value=\"附件双语字幕\">附件双语字幕</option>\r\n                                            </select>\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>种子文件</label>\r\n                                            <input\r\n                                                type=\"file\"\r\n                                                accept=\".torrent\"\r\n                                                onChange={handleFileChange}\r\n\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>简介</label>\r\n                                            <textarea\r\n                                                value={uploadData.description}\r\n                                                onChange={(e) => setUploadData({\r\n                                                    ...uploadData,\r\n                                                    description: e.target.value\r\n                                                })}\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-actions\">\r\n                                            <button\r\n                                                type=\"button\"\r\n                                                className=\"cancel-btn\"\r\n                                                onClick={() => setShowUploadModal(false)}\r\n                                            >\r\n                                                取消\r\n                                            </button>\r\n                                            <button\r\n                                                type=\"submit\"\r\n                                                className=\"confirm-btn\"\r\n                                                disabled={isUploading}\r\n                                            >\r\n                                                {isUploading ? '上传中...' : '确认上传'}\r\n                                            </button>\r\n                                        </div>\r\n                                    </form>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n\r\n                        <div className=\"resource-list\">\r\n                            {torrentPosts.map(torrent => (\r\n                                <div\r\n                                    key={torrent.id}\r\n                                    className=\"resource-item\"\r\n                                    onClick={() => navigate(`/torrent/${torrent.id}`)}\r\n                                >\r\n                                    <div className=\"resource-poster\">\r\n                                        <div className=\"poster-image gray-bg\">{torrent.torrentName.charAt(0)}</div>\r\n                                    </div>\r\n                                    <div className=\"resource-info\">\r\n                                        <h3 className=\"resource-title\">{torrent.torrentName}</h3>\r\n                                        <p className=\"resource-meta\">\r\n                                            {torrent.resolution} | {torrent.region} | {torrent.category}\r\n                                        </p>\r\n                                        <p className=\"resource-subtitle\">字幕: {torrent.subtitle}</p>\r\n                                    </div>\r\n                                    <div className=\"resource-stats\">\r\n                                    <span className=\"stat\">{torrent.size}</span>\r\n                                        <span className=\"stat\">发布者: {torrent.username}</span>\r\n                                    </div>\r\n                                    <button\r\n                                        className=\"download-btn\"\r\n                                        onClick={(e) => handleDownloadClick(torrent, e)}\r\n                                    >\r\n                                        立即下载\r\n                                    </button>\r\n                                    {/* 添加删除按钮 - 只有管理员或发布者可见 */}\r\n                                    {(userInfo?.isAdmin || userInfo?.name === torrent.username) && (\r\n                                        <button\r\n                                        className=\"delete-btn\"\r\n                                        onClick={(e) => handleDeleteTorrent(torrent.id, e)}\r\n                                        >\r\n                                        删除\r\n                                        </button>\r\n                                    )}\r\n                                </div>\r\n                            ))}\r\n                        </div>\r\n\r\n                    {totalPages > 1 && (\r\n                        <div className=\"pagination\">\r\n                            <button\r\n                                onClick={() => fetchTorrentPosts(currentPage - 1)}\r\n                                disabled={currentPage === 1}\r\n                            >\r\n                                上一页\r\n                            </button>\r\n\r\n                            {Array.from({length: totalPages}, (_, i) => i + 1).map(page => (\r\n                                <button\r\n                                    key={page}\r\n                                    onClick={() => fetchTorrentPosts(page)}\r\n                                    className={currentPage === page ? 'active' : ''}\r\n                                >\r\n                                    {page}\r\n                                </button>\r\n                            ))}\r\n\r\n                            <button\r\n                                onClick={() => fetchTorrentPosts(currentPage + 1)}\r\n                                disabled={currentPage === totalPages}\r\n                            >\r\n                                下一页\r\n                            </button>\r\n                        </div>\r\n                        )}\r\n                    </div>\r\n                );\r\n            // 在Dashboard.jsx的renderContent函数中修改case 'request'部分\r\n            case 'request':\r\n                return (\r\n                    <div className=\"content-area\" data-testid=\"request-section\">\r\n                        {/* 求助区搜索框 */}\r\n                        <div className=\"section-search-container\">\r\n                            <input\r\n                                type=\"text\"\r\n                                placeholder=\"搜索求助...\"\r\n                                value={requestSearch}\r\n                                onChange={(e) => setRequestSearch(e.target.value)}\r\n                                className=\"section-search-input\"\r\n                                onKeyPress={(e) => e.key === 'Enter' && handleSearchRequest()}\r\n                            />\r\n                            <button \r\n                                className=\"search-button\"\r\n                                onClick={handleSearchRequest}\r\n                            >\r\n                                搜索\r\n                            </button>\r\n                            <button \r\n                                className=\"reset-button\"\r\n                                onClick={handleResetRequestSearch}\r\n                                style={{marginLeft: '10px'}}\r\n                            >\r\n                                重置\r\n                            </button>\r\n                        </div>\r\n\r\n                         {/* 新增发帖按钮 */}\r\n                        <div className=\"post-header\">\r\n                            <button\r\n                                className=\"create-post-btn\"\r\n                                onClick={() => setShowPostModal(true)}\r\n                            >\r\n                                ＋ 发帖求助\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 加载状态和错误提示 */}\r\n                        {requestLoading && <div className=\"loading\">加载中...</div>}\r\n                        {requestError && <div className=\"error\">{helpError}</div>}\r\n                        {/* 求种区帖子列表 */}\r\n                        <div className=\"request-list\">\r\n                            {requestPosts.map(post => (\r\n                                <div\r\n                                    key={post.id}\r\n                                    className={`request-post ${post.isSolved ? 'solved' : ''}`}\r\n                                    onClick={() => navigate(`/request/${post.id}`)}\r\n                                >\r\n                                    <div className=\"post-header\">\r\n                                        <img\r\n                                            src={post.authorAvatar || 'https://via.placeholder.com/40'}\r\n                                            alt={post.authorId}\r\n                                            className=\"post-avatar\"\r\n                                        />\r\n                                        <div className=\"post-author\">{post.authorId}</div>\r\n                                        <div className=\"post-date\">\r\n                                            {new Date(post.createTime).toLocaleDateString()}\r\n                                        </div>\r\n                                        {post.isSolved && <span className=\"solved-badge\">已解决</span>}\r\n                                    </div>\r\n                                    <h3 className=\"post-title\">{post.title}</h3>\r\n                                    <p className=\"post-content\">{post.content}</p>\r\n                                    <div className=\"post-stats\">\r\n                                        <span className=\"post-likes\">👍 {post.likeCount || 0}</span>\r\n                                        <span className=\"post-comments\">💬 {post.replyCount || 0}</span>\r\n                                    </div>\r\n                                </div>\r\n                            ))}\r\n                        </div>\r\n                        {/* 在帖子列表后添加分页控件 */}\r\n                        <div className=\"pagination\">\r\n                            <button\r\n                                onClick={() => fetchRequestPosts(currentPage - 1)}\r\n                                disabled={currentPage === 1}\r\n                            >\r\n                                上一页\r\n                            </button>\r\n\r\n                            {Array.from({length: totalPages}, (_, i) => i + 1).map(page => (\r\n                                <button\r\n                                    key={page}\r\n                                    onClick={() => fetchRequestPosts(page)}\r\n                                    className={currentPage === page ? 'active' : ''}\r\n                                >\r\n                                    {page}\r\n                                </button>\r\n                            ))}\r\n\r\n                            <button\r\n                                onClick={() => fetchRequestPosts(currentPage + 1)}\r\n                                disabled={currentPage === totalPages}\r\n                            >\r\n                                下一页\r\n                            </button>\r\n                        </div>\r\n                        {/* 新增发帖弹窗 */}\r\n                        {showPostModal && (\r\n                            <div className=\"post-modal-overlay\">\r\n                                <div className=\"post-modal\">\r\n                                    <h3>发布求种帖</h3>\r\n                                    <button\r\n                                        className=\"modal-close-btn\"\r\n                                        onClick={() => setShowPostModal(false)}\r\n                                    >\r\n                                        ×\r\n                                    </button>\r\n\r\n                                    <form onSubmit={handleRequestPostSubmit}>\r\n                                        <div className=\"form-group\">\r\n                                            <label>帖子标题</label>\r\n                                            <input\r\n                                                type=\"text\"\r\n                                                value={postTitle}\r\n                                                onChange={(e) => setPostTitle(e.target.value)}\r\n                                                placeholder=\"请输入标题\"\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>帖子内容</label>\r\n                                            <textarea\r\n                                                value={postContent}\r\n                                                onChange={(e) => setPostContent(e.target.value)}\r\n                                                placeholder=\"详细描述你的问题\"\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>上传图片</label>\r\n                                            <div className=\"upload-image-btn\">\r\n                                                <input\r\n                                                    type=\"file\"\r\n                                                    id=\"image-upload\"\r\n                                                    accept=\"image/*\"\r\n                                                    onChange={handleImageUpload}\r\n                                                    style={{display: 'none'}}\r\n                                                />\r\n                                                <label htmlFor=\"image-upload\">\r\n                                                    {selectedImage ? '已选择图片' : '选择图片'}\r\n                                                </label>\r\n                                                {selectedImage && (\r\n                                                    <span className=\"image-name\">{selectedImage.name}</span>\r\n                                                )}\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        <div className=\"form-actions\">\r\n                                            <button\r\n                                                type=\"button\"\r\n                                                className=\"cancel-btn\"\r\n                                                onClick={() => setShowPostModal(false)}\r\n                                            >\r\n                                                取消\r\n                                            </button>\r\n                                            <button\r\n                                                type=\"submit\"\r\n                                                className=\"submit-btn\"\r\n                                            >\r\n                                                确认发帖\r\n                                            </button>\r\n                                        </div>\r\n                                    </form>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                    \r\n                \r\n\r\n                    \r\n                );\r\n            // 在Dashboard.jsx的renderContent函数中修改case 'help'部分\r\n            case 'help':\r\n                return (\r\n                    <div className=\"content-area\" data-testid=\"help-section\">\r\n                        {/* 求助区搜索框 */}\r\n                        <div className=\"section-search-container\">\r\n                            <input\r\n                                type=\"text\"\r\n                                placeholder=\"搜索求助...\"\r\n                                value={helpSearch}\r\n                                onChange={(e) => setHelpSearch(e.target.value)}\r\n                                className=\"section-search-input\"\r\n                                onKeyPress={(e) => e.key === 'Enter' && handleSearchHelp()}\r\n                            />\r\n                            <button \r\n                                className=\"search-button\"\r\n                                onClick={handleSearchHelp}\r\n                            >\r\n                                搜索\r\n                            </button>\r\n                            <button \r\n                                className=\"reset-button\"\r\n                                onClick={handleResetHelpSearch}\r\n                                style={{marginLeft: '10px'}}\r\n                            >\r\n                                重置\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 新增发帖按钮 */}\r\n                        <div className=\"post-header\">\r\n                            <button\r\n                                className=\"create-post-btn\"\r\n                                onClick={() => setShowPostModal(true)}\r\n                            >\r\n                                ＋ 发帖求助\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 加载状态和错误提示 */}\r\n                        {helpLoading && <div className=\"loading\">加载中...</div>}\r\n                        {helpError && <div className=\"error\">{helpError}</div>}\r\n\r\n                        {/* 求助区帖子列表 */}\r\n                        <div className=\"help-list\">\r\n                            {helpPosts.map(post => (\r\n                                <div\r\n                                    key={post.id}\r\n                                    className={`help-post ${post.isSolved ? 'solved' : ''}`}\r\n                                    onClick={() => navigate(`/help/${post.id}`)}\r\n                                >\r\n                                    <div className=\"post-header\">\r\n                                        <img\r\n                                            src={post.authorAvatar || 'https://via.placeholder.com/40'}\r\n                                            alt={post.authorId}\r\n                                            className=\"post-avatar\"\r\n                                        />\r\n                                        <div className=\"post-author\">{post.authorId}</div>\r\n                                        <div className=\"post-date\">\r\n                                            {new Date(post.createTime).toLocaleDateString()}\r\n                                        </div>\r\n                                        {post.isSolved && <span className=\"solved-badge\">已解决</span>}\r\n                                    </div>\r\n                                    <h3 className=\"post-title\">{post.title}</h3>\r\n                                    <p className=\"post-content\">{post.content}</p>\r\n                                    <div className=\"post-stats\">\r\n                                        <span className=\"post-likes\">👍 {post.likeCount || 0}</span>\r\n                                        <span className=\"post-comments\">💬 {post.replyCount || 0}</span>\r\n                                    </div>\r\n                                </div>\r\n                            ))}\r\n                        </div>\r\n\r\n                        {/* 在帖子列表后添加分页控件 */}\r\n                        <div className=\"pagination\">\r\n                            <button\r\n                                onClick={() => fetchHelpPosts(currentPage - 1)}\r\n                                disabled={currentPage === 1}\r\n                            >\r\n                                上一页\r\n                            </button>\r\n\r\n                            {Array.from({length: totalPages}, (_, i) => i + 1).map(page => (\r\n                                <button\r\n                                    key={page}\r\n                                    onClick={() => fetchHelpPosts(page)}\r\n                                    className={currentPage === page ? 'active' : ''}\r\n                                >\r\n                                    {page}\r\n                                </button>\r\n                            ))}\r\n\r\n                            <button\r\n                                onClick={() => fetchHelpPosts(currentPage + 1)}\r\n                                disabled={currentPage === totalPages}\r\n                            >\r\n                                下一页\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 新增发帖弹窗 */}\r\n                        {showPostModal && (\r\n                            <div className=\"post-modal-overlay\">\r\n                                <div className=\"post-modal\">\r\n                                    <h3>发布求助帖</h3>\r\n                                    <button\r\n                                        className=\"modal-close-btn\"\r\n                                        onClick={() => setShowPostModal(false)}\r\n                                    >\r\n                                        ×\r\n                                    </button>\r\n\r\n                                    <form onSubmit={handleHelpPostSubmit}>\r\n                                        <div className=\"form-group\">\r\n                                            <label>帖子标题</label>\r\n                                            <input\r\n                                                type=\"text\"\r\n                                                value={postTitle}\r\n                                                onChange={(e) => setPostTitle(e.target.value)}\r\n                                                placeholder=\"请输入标题\"\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>帖子内容</label>\r\n                                            <textarea\r\n                                                value={postContent}\r\n                                                onChange={(e) => setPostContent(e.target.value)}\r\n                                                placeholder=\"详细描述你的问题\"\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>上传图片</label>\r\n                                            <div className=\"upload-image-btn\">\r\n                                                <input\r\n                                                    type=\"file\"\r\n                                                    id=\"image-upload\"\r\n                                                    accept=\"image/*\"\r\n                                                    onChange={handleImageUpload}\r\n                                                    style={{display: 'none'}}\r\n                                                />\r\n                                                <label htmlFor=\"image-upload\">\r\n                                                    {selectedImage ? '已选择图片' : '选择图片'}\r\n                                                </label>\r\n                                                {selectedImage && (\r\n                                                    <span className=\"image-name\">{selectedImage.name}</span>\r\n                                                )}\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        <div className=\"form-actions\">\r\n                                            <button\r\n                                                type=\"button\"\r\n                                                className=\"cancel-btn\"\r\n                                                onClick={() => setShowPostModal(false)}\r\n                                            >\r\n                                                取消\r\n                                            </button>\r\n                                            <button\r\n                                                type=\"submit\"\r\n                                                className=\"submit-btn\"\r\n                                            >\r\n                                                确认发帖\r\n                                            </button>\r\n                                        </div>\r\n                                    </form>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                );\r\n            default:\r\n                return <div className=\"content-area\" data-testid=\"default-section\">公告区内容</div>;\r\n        }\r\n        \r\n    };\r\n\r\n    if (loading) return <div className=\"loading\">加载中...</div>;\r\n    if (error) return <div className=\"error\">{error}</div>;\r\n\r\n    return (\r\n        <div className=\"dashboard-container\" data-testid=\"dashboard-container\">\r\n            {/* 顶部栏 */}\r\n            <div className=\"top-bar\" data-testid=\"top-bar\">\r\n                {/* 平台名称替换搜索框 */}\r\n                <div className=\"platform-name\">\r\n                    <h2>PT资源站</h2>\r\n                </div>\r\n\r\n                <div className=\"user-actions\">\r\n                    {/* 新增管理员按钮 - 只有管理员可见 */}\r\n                    {userInfo?.isAdmin && (\r\n                        <button\r\n                            className=\"admin-center-button\"\r\n                            onClick={() => navigate('/administer')}\r\n                        >\r\n                            管理员中心\r\n                        </button>\r\n                    )}\r\n\r\n                    <div className=\"user-info\" data-testid=\"user-info\">\r\n                        <img\r\n                            src={userInfo?.avatar || 'https://via.placeholder.com/40'}\r\n                            alt=\"用户头像\"\r\n                            className=\"user-avatar\"\r\n                            onClick={() => navigate('/personal')}\r\n                            style={{cursor: 'pointer'}}\r\n                        />\r\n                        <span className=\"username\">{userInfo?.name || '用户'}</span>\r\n                        <button onClick={onLogout} className=\"logout-button\">退出</button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            {/* 导航栏 */}\r\n            {/* handleTabchange函数替换了原本的setactivetab函数 */}\r\n            <div className=\"nav-tabs\">\r\n                <button\r\n                    className={`tab-button ${activeTab === 'announcement' ? 'active' : ''}`}\r\n                    onClick={() => handleTabChange('announcement')}\r\n                >\r\n                    公告区\r\n                </button>\r\n                <button\r\n                    className={`tab-button ${activeTab === 'share' ? 'active' : ''}`}\r\n                    onClick={() => handleTabChange('share')}\r\n                >\r\n                    分享区\r\n                </button>\r\n                <button\r\n                    className={`tab-button ${activeTab === 'request' ? 'active' : ''}`}\r\n                    onClick={() => handleTabChange('request')}\r\n                >\r\n                    求种区\r\n                </button>\r\n                <button\r\n                    className={`tab-button ${activeTab === 'help' ? 'active' : ''}`}\r\n                    onClick={() => handleTabChange('help')}\r\n                >\r\n                    求助区\r\n                </button>\r\n            </div>\r\n\r\n            {/* 内容区 */}\r\n            {renderContent()}\r\n            {/* 下载模态框 - 添加在这里 */}\r\n            {showDownloadModal && selectedTorrent && (\r\n                <div className=\"modal-overlay\">\r\n                    <div className=\"download-modal\">\r\n                        <h3>下载 {selectedTorrent.torrentName}</h3>\r\n                        <button \r\n                            className=\"close-btn\"\r\n                            onClick={() => !isDownloading && setShowDownloadModal(false)}\r\n                            disabled={isDownloading}\r\n                        >\r\n                            ×\r\n                        </button>\r\n                        \r\n                        <div className=\"form-group\">\r\n                            <label>下载路径:</label>\r\n                            <input\r\n                                type=\"text\"\r\n                                value={downloadPath}\r\n                                onChange={(e) => {\r\n                                    // 实时格式化显示\r\n                                    let path = e.target.value\r\n                                        .replace(/\\t/g, '')\r\n                                        .replace(/\\\\/g, '/')\r\n                                        .replace(/\\s+/g, ' ');\r\n                                    setDownloadPath(path);\r\n                                }}\r\n                                disabled={isDownloading}\r\n                                placeholder=\"例如: D:/downloads/\"\r\n                            />\r\n                        </div>\r\n                        \r\n                        {isDownloading && (\r\n                            <div className=\"progress-container\">\r\n                                <div className=\"progress-bar\" style={{ width: `${downloadProgress}%` }}>\r\n                                    {downloadProgress}%\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                        \r\n                        <div className=\"modal-actions\">\r\n                            <button\r\n                                onClick={() => !isDownloading && setShowDownloadModal(false)}\r\n                                disabled={isDownloading}\r\n                            >\r\n                                取消\r\n                            </button>\r\n                            <button\r\n                                onClick={handleDownload}\r\n                                disabled={isDownloading || !downloadPath}\r\n                            >\r\n                                {isDownloading ? '下载中...' : '开始下载'}\r\n                            </button>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            )}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default Dashboard;","import { api } from './auth';\r\n\r\n// 获取所有公告\r\nexport const getAnnouncements = () => {\r\n  return api.get('/announcement/list');\r\n};\r\n\r\n\r\nexport const postAnnouncement = (data) => {\r\n  // 创建 FormData 对象\r\n  const formData = new FormData();\r\n  formData.append('title', data.title);\r\n  formData.append('content', data.content);\r\n\r\n  return api.post('/announcement/create', formData);\r\n}\r\n\r\n\r\n// 获取最新公告\r\nexport const getLatestAnnouncements = () => {\r\n  return api.get('/announcement/latest');\r\n};\r\n\r\n// 获取公告详情\r\nexport const getAnnouncementDetail = (id) => {\r\n  return api.get(`/announcement/${id}`);\r\n};\r\n\r\n","// src/api/personal.js\r\nimport { api } from './auth';\r\n\r\n/**\r\n * 获取用户信息\r\n * @returns {Promise<Object>} 用户信息对象\r\n */\r\nexport const getUserInfo = async () => {\r\n  try {\r\n    const response = await api.get('/user/userInfo');\r\n    if (response.data.code === 200) {\r\n        const userData = response.data.data;\r\n        return {\r\n            username: userData.username,\r\n            level: userData.level,\r\n            registTime: formatDate(userData.registTime),\r\n            magicPoints: userData.magicPoints,\r\n            upload: userData.upload, \r\n            download: userData.download, \r\n            shareRate: userData.shareRate.toFixed(2)\r\n        };\r\n    }\r\n    throw new Error(response.data.message || '获取用户信息失败');\r\n  } catch (error) {\r\n    console.error('获取用户信息失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\nexport const formatFileSize = (bytes) => {\r\n    if (bytes < 1024) {\r\n      return bytes + ' B';\r\n    }\r\n    const kb = bytes / 1024;\r\n    if (kb < 1024) {\r\n      return kb.toFixed(2) + ' KB';\r\n    }\r\n    const mb = kb / 1024;\r\n    if (mb < 1024) {\r\n      return mb.toFixed(2) + ' MB';\r\n    }\r\n    const gb = mb / 1024;\r\n    return gb.toFixed(2) + ' GB';\r\n  };\r\n  \r\n  \r\n  export const getDownloadQuota = async () => {\r\n    try {\r\n      const response = await api.get('/user/allowDownload');\r\n      if (response.data.code === 200) {\r\n        const data = response.data.data;\r\n        return {\r\n          total: data.total,  // 已经是字节\r\n          used: data.used,\r\n          remaining: data.remaining\r\n        };\r\n      }\r\n      throw new Error(response.data.message || '获取下载额度失败');\r\n    } catch (error) {\r\n      console.error('获取下载额度失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n// 修正后的时间格式化（正确处理时区）\r\nconst formatDate = (dateString) => {\r\n    const date = new Date(dateString);\r\n    const year = date.getFullYear();\r\n    const month = String(date.getMonth() + 1).padStart(2, '0');\r\n    const day = String(date.getDate()).padStart(2, '0');\r\n    return `${year}-${month}-${day}`;\r\n  };\r\n\r\n\r\n  export const getDownloadProgress = async () => {\r\n    try {\r\n      const response = await api.get('/torrent/getProgress');\r\n      if (response.data.code === 200) {\r\n        return response.data.data.progresses;\r\n      }\r\n      throw new Error(response.data.message || '获取下载进度失败');\r\n    } catch (error) {\r\n      console.error('获取下载进度失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  export const getUserTorrents = async (page = 1, size = 5) => {\r\n    try {\r\n      const response = await api.get('/torrent/get/torrentMyself', {\r\n        params: { page, size }\r\n      });\r\n      if (response.data.code === 200) {\r\n        const records = response.data.data.records.map(item => ({\r\n          ...item.torrent,\r\n          downloadCount: item.downloadCount,\r\n          formattedSize: item.formattedSize\r\n        }));\r\n        return {\r\n          records: records,\r\n          total: response.data.data.total\r\n        };\r\n      }\r\n      throw new Error(response.data.message || '获取上传记录失败');\r\n    } catch (error) {\r\n      console.error('获取上传记录失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n  \r\n\r\n  export const deleteTorrent = async (id) => {\r\n    try {\r\n      const response = await api.delete(`/torrent/deleteTorrent/${id}`);\r\n      if (response.data.code === 200) {\r\n        return response.data;\r\n      }\r\n      throw new Error(response.data.message || '删除种子失败');\r\n    } catch (error) {\r\n      console.error('删除种子失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n\r\n  export const generateInviteCode = async () => {\r\n    try {\r\n      const response = await api.post('/invitecode/generate');\r\n      if (response.data.code === 200) {\r\n        return response.data.data.inviteCode;\r\n      }\r\n      throw new Error(response.data.message || '生成邀请码失败');\r\n    } catch (error) {\r\n      console.error('生成邀请码失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  export const getUserInviteCodes = async () => {\r\n    try {\r\n      const response = await api.get('/invitecode/userInviteCode');\r\n      if (response.data.code === 200) {\r\n        return response.data.data.inviteCode;\r\n      }\r\n      throw new Error(response.data.message || '获取邀请码列表失败');\r\n    } catch (error) {\r\n      console.error('获取邀请码列表失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  export const exchangeUpload = async (magicPoints) => {\r\n    try {\r\n      const response = await api.post('/user/exchangeUpload', {\r\n        magicPoint: magicPoints\r\n      });\r\n      if (response.data.code === 200) {\r\n        return response.data;\r\n      }\r\n      throw new Error(response.data.message || '兑换上传量失败');\r\n    } catch (error) {\r\n      console.error('兑换上传量失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  export const updatePassword = async (oldPassword, newPassword) => {\r\n    try {\r\n      const response = await api.put('/user/password', {\r\n        oldPassword,\r\n        newPassword\r\n      });\r\n      if (response.data.code === 200) {\r\n        return response.data;\r\n      }\r\n      throw new Error(response.data.message || '修改密码失败');\r\n    } catch (error) {\r\n      console.error('修改密码失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n","// Personal.jsx\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useNavigate, useLocation, Outlet } from 'react-router-dom';\r\nimport { getUserInfo, getDownloadQuota, getDownloadProgress } from '../../api/personal';\r\nimport './Personal.css';\r\nimport ActionCard from './ActionCard';\r\n\r\nconst Personal = () => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [userData, setUserData] = useState(null);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n  const [downloadProgress, setDownloadProgress] = useState({});\r\n\r\n  useEffect(() => {\r\n    const fetchData = async () => {\r\n      try {\r\n        // 并行获取用户信息和下载额度\r\n        const [userInfo, downloadQuota] = await Promise.all([\r\n          getUserInfo(),\r\n          getDownloadQuota()\r\n        ]);\r\n        \r\n        setUserData({\r\n          username: userInfo.username,\r\n          avatar: 'https://via.placeholder.com/150',\r\n          joinDate: userInfo.registTime,\r\n          level: userInfo.level, // 可以根据userInfo.level设置不同等级\r\n          points: userInfo.magicPoints,\r\n          upload: userInfo.upload,\r\n          download: userInfo.download,\r\n          ratio: userInfo.shareRate,\r\n          downloadQuota: {\r\n            total: downloadQuota.total,\r\n            used: downloadQuota.used,\r\n            remaining: downloadQuota.remaining\r\n          }\r\n        });\r\n      } catch (err) {\r\n        setError(err.message);\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n\r\n    fetchData();\r\n  }, []);\r\n\r\n  // 获取下载进度数据\r\n  const fetchDownloadProgress = async () => {\r\n    try {\r\n      const progressData = await getDownloadProgress();\r\n      setDownloadProgress(progressData);\r\n    } catch (err) {\r\n      console.error('获取下载进度失败:', err);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    // 初始获取下载进度\r\n    fetchDownloadProgress();\r\n    \r\n    // 设置定时器，每10秒获取一次下载进度\r\n    const intervalId = setInterval(fetchDownloadProgress, 10000);\r\n    \r\n    // 组件卸载时清除定时器\r\n    return () => clearInterval(intervalId);\r\n  }, []);\r\n\r\n\r\n  if (loading) {\r\n    return <div className=\"loading\">加载中...</div>;\r\n  }\r\n\r\n  if (error) {\r\n    return <div className=\"error\">错误: {error}</div>;\r\n  }\r\n\r\n  if (!userData) {\r\n    return <div className=\"error\">未获取到用户数据</div>;\r\n  }\r\n\r\n  const features = [\r\n    { \r\n      title: '兑换区', \r\n      description: '下载量/邀请码',\r\n      path: '/personal/Exchange' // 相对路径\r\n    },\r\n    { \r\n      title: '上传记录', \r\n      description: '管理上传的资源',\r\n      path: '/personal/Upload' \r\n    },\r\n    { \r\n      title: '消息通知', \r\n      description: '查看系统消息',\r\n      path: '/personal/Notice' \r\n    },\r\n    { \r\n      title: '设置', \r\n      description: '修改个人资料',\r\n      path: '/personal/Setting' \r\n    }\r\n  ];\r\n\r\n  const handleCardClick = (path) => {\r\n    navigate(path); // 相对导航\r\n  };\r\n\r\n  const handleBack = () => {\r\n    if (location.state?.fromSubpage) {\r\n      // 如果是从子页面返回，则继续返回到Dashboard\r\n      navigate(`/dashboard/${location.state.dashboardTab || ''}`, {\r\n        replace: true\r\n      });\r\n    } else {\r\n      // 普通返回逻辑\r\n      navigate(-1);\r\n    }\r\n  };\r\n\r\n  const formatSize = (bytes) => {\r\n    if (bytes < 1024) return `${bytes} B`;\r\n    const kb = bytes / 1024;\r\n    if (kb < 1024) return `${kb.toFixed(2)} KB`;\r\n    const mb = kb / 1024;\r\n    if (mb < 1024) return `${mb.toFixed(2)} MB`;\r\n    const gb = mb / 1024;\r\n    return `${gb.toFixed(2)} GB`;\r\n  };\r\n\r\n  // 添加进度条颜色函数\r\n  const getProgressColor = (percentage) => {\r\n    if (percentage < 0.3) return '#4CAF50'; // 绿色\r\n    if (percentage < 0.7) return '#FFC107'; // 黄色\r\n    return '#F44336'; // 红色\r\n  };\r\n\r\n  return (\r\n    <div className=\"personal-container\">\r\n      {/* 返回按钮 */}\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回\r\n      </button>\r\n      \r\n      {/* 用户基本信息卡片 */}\r\n      <div className=\"profile-card\">\r\n        <div className=\"profile-header\">\r\n          <img \r\n            src={userData.avatar} \r\n            alt={userData.username} \r\n            className=\"profile-avatar\"\r\n          />\r\n          <div className=\"profile-info\">\r\n            <h2 className=\"username\">{userData.username}</h2>\r\n            <div className=\"user-meta\">\r\n              <span>加入时间: {userData.joinDate}</span>\r\n              <span>会员等级: Lv.{userData.level}</span> \r\n            </div>\r\n          </div>\r\n        </div>\r\n        \r\n        {/* 用户数据统计 */}\r\n        <div className=\"stats-grid\">\r\n          <div className=\"stat-item\">\r\n            <div className=\"stat-label\">保种积分</div>\r\n            <div className=\"stat-value\">{userData.points}</div>\r\n          </div>\r\n          <div className=\"stat-item\">\r\n            <div className=\"stat-label\">上传量</div>\r\n            <div className=\"stat-value\">{formatSize(userData.upload)}</div>\r\n          </div>\r\n          <div className=\"stat-item\">\r\n            <div className=\"stat-label\">下载量</div>\r\n            <div className=\"stat-value\">{formatSize(userData.download)}</div>\r\n          </div>\r\n          <div className=\"stat-item\">\r\n            <div className=\"stat-label\">分享率</div>\r\n            <div className=\"stat-value\">{userData.ratio}</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      \r\n      {/* 下载额度卡片 */}\r\n      <div className=\"quota-card\">\r\n        <h3>下载额度</h3>\r\n        <div className=\"quota-info\">\r\n          <span className=\"quota-used\">\r\n            {formatSize(userData.downloadQuota.used)} 已使用\r\n          </span>\r\n          <span className=\"quota-remaining\">\r\n            {formatSize(userData.downloadQuota.remaining)} 剩余\r\n          </span>\r\n        </div>\r\n        <div className=\"progress-bar\">\r\n          <div \r\n            className=\"progress-fill\"\r\n            style={{ \r\n              width: `${(userData.downloadQuota.used / userData.downloadQuota.total) * 100}%`,\r\n              backgroundColor: getProgressColor(userData.downloadQuota.used / userData.downloadQuota.total)\r\n            }}\r\n          ></div>\r\n        </div>\r\n        <div className=\"quota-total\">\r\n          总额度: {formatSize(userData.downloadQuota.total)}\r\n        </div>\r\n      </div>\r\n\r\n      {Object.keys(downloadProgress).length > 0 && (\r\n        <div className=\"progress-card\">\r\n          <h3>当前下载进度</h3>\r\n          {Object.entries(downloadProgress).map(([taskId, progress]) => (\r\n            <div key={taskId} className=\"download-task\">\r\n              <div className=\"task-info\">\r\n                <span className=\"task-id\">任务: {taskId.substring(0, 8)}...</span>\r\n                <span className=\"task-progress\">{Math.round(progress * 100)}%</span>\r\n              </div>\r\n              <div className=\"progress-bar\">\r\n                <div \r\n                  className=\"progress-fill\"\r\n                  style={{ width: `${progress * 100}%` }}\r\n                ></div>\r\n              </div>\r\n            </div>\r\n          ))}\r\n        </div>\r\n      )}\r\n      \r\n      {/* 功能卡片区 */}\r\n      <div className=\"action-cards\">\r\n        {features.map((feature) => (\r\n          <div \r\n            key={feature.path}\r\n            className=\"action-card\"\r\n            onClick={() => handleCardClick(feature.path)}\r\n          >\r\n            <h3>{feature.title}</h3>\r\n            <p>{feature.description}</p>\r\n          </div>\r\n        ))}\r\n      </div>\r\n\r\n      {/* 子路由出口 */}\r\n      <div className=\"subpage-container\">\r\n        <Outlet />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Personal;","// src/components/AuthForm.jsx\r\nimport React, { useState } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { login, register } from '../api/auth';\r\nimport './AuthForm.css';\r\n\r\nconst AuthForm = ({ onLoginSuccess }) => {\r\n  const [isLogin, setIsLogin] = useState(true);\r\n  const [formData, setFormData] = useState({\r\n    username: '',\r\n    password: '',\r\n    code: ''\r\n  });\r\n  const [error, setError] = useState('');\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const navigate = useNavigate();\r\n\r\n  const handleChange = (e) => {\r\n    const { name, value } = e.target;\r\n    setFormData(prev => ({ ...prev, [name]: value }));\r\n  };\r\n\r\n  const handleSubmit = async (e) => {\r\n    e.preventDefault();\r\n    \r\n    try {\r\n      if (isLogin) {\r\n            const response = await login(formData.username, formData.password);\r\n            if (response.data.code === 200) {\r\n              localStorage.setItem('token', response.data.data.token);\r\n              localStorage.setItem('username', formData.username);\r\n              onLoginSuccess?.();\r\n              navigate('/dashboard');\r\n            } else {\r\n              setError(response.data.message || '登录失败');\r\n            }\r\n          } else {\r\n            const response = await register(\r\n              formData.username,\r\n              formData.password,\r\n              formData.code\r\n            );\r\n            if (response.data.code === 200) {\r\n              setError('');\r\n              setIsLogin(true);\r\n              setFormData({ username: '', password: '', code: '' });\r\n            } else {\r\n              setError(response.data.message || '注册失败');\r\n            }\r\n          }\r\n        } catch (err) {\r\n          setError(err.message || (isLogin ? '登录失败' : '注册失败'));\r\n        } finally {\r\n          setIsLoading(false);\r\n        }\r\n      \r\n\r\n      \r\n  };\r\n\r\n  return (\r\n    <div className=\"auth-container\">\r\n      <h1 className=\"auth-title\">PT影视资源站</h1>\r\n      \r\n      <div className=\"auth-form-wrapper\">\r\n        {isLogin ? (\r\n          <form className=\"auth-form\" onSubmit={handleSubmit}>\r\n            <h2>用户登录</h2>\r\n            {error && <div className=\"error-message\">{error}</div>}\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"text\"\r\n                name=\"username\"\r\n                placeholder=\"账号\"\r\n                value={formData.username}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"password\"\r\n                name=\"password\"\r\n                placeholder=\"密码\"\r\n                value={formData.password}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <button type=\"submit\" className=\"auth-button\" disabled={isLoading}>\r\n              {isLoading ? '登录中...' : '登录'}\r\n            </button>\r\n            \r\n            <div className=\"auth-switch\">\r\n              <span>未有账户？</span>\r\n              <button type=\"button\" onClick={() => setIsLogin(false)} className=\"switch-button\">\r\n                去注册\r\n              </button>\r\n            </div>\r\n          </form>\r\n        ) : (\r\n          <form className=\"auth-form\" onSubmit={handleSubmit}>\r\n            <h2>用户注册</h2>\r\n            {error && <div className=\"error-message\">{error}</div>}\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"text\"\r\n                name=\"username\"\r\n                placeholder=\"账号\"\r\n                value={formData.username}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"password\"\r\n                name=\"password\"\r\n                placeholder=\"密码\"\r\n                value={formData.password}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"text\"\r\n                name=\"code\"\r\n                placeholder=\"邀请码\"\r\n                value={formData.code}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <button type=\"submit\" className=\"auth-button\" disabled={isLoading}>\r\n              {isLoading ? '注册中...' : '注册'}\r\n            </button>\r\n            \r\n            <div className=\"auth-switch\">\r\n              <span>已有账户？</span>\r\n              <button type=\"button\" onClick={() => setIsLogin(true)} className=\"switch-button\">\r\n                去登录\r\n              </button>\r\n            </div>\r\n          </form>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default AuthForm;","import React, { useEffect, useState } from 'react';\r\nimport { useNavigate, useLocation, useParams } from 'react-router-dom';\r\nimport { getAnnouncementDetail } from '../api/announcement';\r\nimport { message } from 'antd';\r\nimport './AnnouncementDetail.css';\r\n\r\nconst AnnouncementDetail = () => {\r\n  const navigate = useNavigate();\r\n  const { id } = useParams();\r\n  const [announcement, setAnnouncement] = useState(null);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState('');\r\n  const location = useLocation();\r\n  const { state } = useLocation();\r\n  \r\n  \r\n  const handleBack = () => {\r\n    const fromTab = location.state?.fromTab; // 从跳转时传递的 state 中获取\r\n    if (fromTab) {\r\n    navigate(`/dashboard/${fromTab}`); // 明确返回对应标签页\r\n    } else {\r\n        navigate(-1); // 保底策略\r\n    }\r\n}\r\n  useEffect(() => {\r\n    const fetchAnnouncement = async () => {\r\n      try {\r\n        setLoading(true);\r\n        const response = await getAnnouncementDetail(id);\r\n        if (response.data.code === 200) {\r\n          setAnnouncement(response.data.data.announcement);\r\n        } else {\r\n          setError(response.data.message || '获取公告详情失败');\r\n        }\r\n      } catch (err) {\r\n        setError('获取公告详情失败');\r\n        message.error('获取公告详情失败');\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n\r\n    fetchAnnouncement();\r\n  }, [id]);\r\n  \r\n    \r\n\r\n  if (error || !announcement) {\r\n    return (\r\n      <div className=\"announcement-container\">\r\n        <button className=\"back-button\" onClick={handleBack}>\r\n          &larr; 返回\r\n        </button>\r\n        <div className=\"error-message\">{error || '公告不存在'}</div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"announcement-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回\r\n      </button>\r\n\r\n      <div className=\"announcement-detail\">\r\n        <div className=\"announcement-header\">\r\n          <h1>{announcement.title}</h1>\r\n          <div className=\"announcement-meta\">\r\n            <span>发布日期：{announcement.createTime}</span>\r\n          </div>\r\n        </div>\r\n\r\n        <div className=\"announcement-content\">\r\n          {announcement.content.split('\\n').map((paragraph, i) => (\r\n            <p key={i}>{paragraph}</p>\r\n          ))}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default AnnouncementDetail;\r\n\r\n\r\n    ","import React, { useState, useEffect } from 'react';\r\nimport { useParams, useNavigate, useLocation } from 'react-router-dom';\r\nimport { \r\n  getTorrentDetail, \r\n  likeTorrent, \r\n  addTorrentComment \r\n} from '../api/torrent';\r\nimport { \r\n  likeTorrentComment, \r\n  addCommentReply \r\n} from '../api/torrentComment';\r\nimport './TorrentDetail.css';\r\n\r\n\r\nconst TorrentDetail = ({ onLogout }) => {\r\n  const { id } = useParams();\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [torrent, setTorrent] = useState(null);\r\n  const [comments, setComments] = useState([]);\r\n  const [newComment, setNewComment] = useState('');\r\n  const [setReplyingTo] = useState(null);\r\n  const [replyContent, setReplyContent] = useState('');\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState('');\r\n  const [activeReplyId, setActiveReplyId] = useState(null);\r\n  const [replyModal, setReplyModal] = useState({\r\n    visible: false,\r\n    replyingTo: null,\r\n    replyingToUsername: '',\r\n    isReply: false\r\n  });\r\n\r\n  // 确保openReplyModal接收username参数\r\nconst openReplyModal = (commentId, username) => {\r\n  setReplyModal({\r\n    visible: true,\r\n    replyingTo: commentId,\r\n    replyingToUsername: username,  // 确保这里接收username\r\n    isReply: false\r\n  });\r\n};\r\n\r\n  // 关闭回复弹窗\r\n  const closeReplyModal = () => {\r\n    setReplyModal({\r\n      visible: false,\r\n      replyingTo: null,\r\n      replyingToUsername: '',\r\n      isReply: false\r\n    });\r\n    setReplyContent('');\r\n  };\r\n\r\n  const Comment = ({ comment, onLike, onReply, isReply = false }) => {\r\n    return (\r\n      <div className={`comment-container ${isReply ? \"is-reply\" : \"\"}`}>\r\n        <div className=\"comment-item\">\r\n          <div className=\"comment-avatar\">\r\n            {(comment.authorId || \"?\").charAt(0)} {/* 修复点 */}\r\n          </div>\r\n          <div className=\"comment-content\">\r\n            <div className=\"comment-header\">\r\n              <span className=\"comment-user\">{comment.authorId || \"匿名用户\"}</span>\r\n              {comment.replyTo && (\r\n                <span className=\"reply-to\">回复 @{comment.replyTo}</span>\r\n              )}\r\n              <span className=\"comment-time\">\r\n                {new Date(comment.createTime).toLocaleString()}\r\n              </span>\r\n            </div>\r\n            <p className=\"comment-text\">{comment.content}</p>\r\n            <div className=\"comment-actions\">\r\n              <button onClick={() => onLike(comment.id)}>\r\n                👍 ({comment.likeCount || 0})\r\n              </button>\r\n              <button onClick={() => onReply(comment.id, comment.authorId)}>\r\n                回复\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n    // 递归渲染评论组件\r\n  const renderComment = (comment, depth = 0) => {\r\n    return (\r\n      <div key={comment.id} style={{ marginLeft: `${depth * 30}px` }}>\r\n        <Comment\r\n          comment={comment}\r\n          onLike={handleLikeComment}\r\n          onReply={openReplyModal}\r\n          isReply={depth > 0}\r\n        />\r\n        \r\n        {/* 递归渲染所有回复 */}\r\n        {comment.replies && comment.replies.map(reply => \r\n          renderComment(reply, depth + 1)\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n    \r\n\r\n\r\n  const fetchTorrentDetail = async () => {\r\n    try {\r\n      setLoading(true);\r\n      const response = await getTorrentDetail(id);\r\n      console.log('API Response:', JSON.parse(JSON.stringify(response.data.data.comments))); // 深度拷贝避免Proxy影响\r\n      setTorrent(response.data.data.torrent);\r\n      setComments(response.data.data.comments);\r\n    } catch (err) {\r\n      setError(err.response?.data?.message || '获取种子详情失败');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    fetchTorrentDetail();\r\n  }, [id]);\r\n\r\n  // 点赞种子\r\n  const handleLikeTorrent = async () => {\r\n    try {\r\n      await likeTorrent(id);\r\n      setTorrent(prev => ({\r\n        ...prev,\r\n        likeCount: prev.likeCount + 1\r\n      }));\r\n    } catch (err) {\r\n      setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n    }\r\n  };\r\n\r\n  const handleCommentSubmit = async (e) => {\r\n    e.preventDefault();\r\n    if (!newComment.trim()) return;\r\n    \r\n    try {\r\n      const username = localStorage.getItem('username');\r\n      const response = await addTorrentComment(id, {\r\n        content: newComment,\r\n        authorId: username\r\n      });\r\n  \r\n      // 修改这里的响应处理逻辑\r\n      if (response.data && response.data.code === 200) {\r\n        await fetchTorrentDetail();\r\n        \r\n        setNewComment('');\r\n      } else {\r\n        setError(response.data.message || '评论失败');\r\n      }\r\n    } catch (err) {\r\n      setError('评论失败: ' + (err.response?.data?.message || err.message));\r\n    }\r\n  };\r\n  \r\n  \r\n  const handleLikeComment = async (commentId) => {\r\n    try {\r\n      await likeTorrentComment(commentId);\r\n      \r\n      // 递归更新评论点赞数\r\n      const updateComments = (comments) => {\r\n        return comments.map(comment => {\r\n          // 当前评论匹配\r\n          if (comment.id === commentId) {\r\n            return { ...comment, likeCount: comment.likeCount + 1 };\r\n          }\r\n          \r\n          // 递归处理回复\r\n          if (comment.replies && comment.replies.length > 0) {\r\n            return {\r\n              ...comment,\r\n              replies: updateComments(comment.replies)\r\n            };\r\n          }\r\n          \r\n          return comment;\r\n        });\r\n      };\r\n  \r\n      setComments(prev => updateComments(prev));\r\n    } catch (err) {\r\n      setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n    }\r\n  };\r\n  // 修改startReply函数\r\n  const startReply = (commentId) => {\r\n    if (activeReplyId === commentId) {\r\n      // 如果点击的是已经激活的回复按钮，则关闭\r\n      setActiveReplyId(null);\r\n      setReplyingTo(null);\r\n    } else {\r\n      // 否则打开新的回复框\r\n      setActiveReplyId(commentId);\r\n      setReplyingTo(commentId);\r\n    }\r\n  };\r\n\r\n  const handleReplySubmit = async (e) => {\r\n    e.preventDefault();\r\n    if (!replyContent.trim()) return;\r\n  \r\n    try {\r\n      const username = localStorage.getItem('username');\r\n      const response = await addCommentReply(replyModal.replyingTo, {\r\n        content: replyContent,\r\n        authorId: username\r\n      });\r\n  \r\n      console.log('回复响应:', response.data); // 调试\r\n      \r\n      if (response.data && response.data.code === 200) {\r\n        await fetchTorrentDetail();\r\n  \r\n        closeReplyModal();\r\n      }\r\n    } catch (err) {\r\n      console.error('回复错误:', err);\r\n      setError('回复失败: ' + (err.response?.data?.message || err.message));\r\n    }\r\n  };\r\n\r\n\r\n  // 返回按钮\r\n  const handleBack = () => {\r\n    const fromTab = location.state?.fromTab || 'share';\r\n    navigate(`/dashboard/${fromTab}`);\r\n  };\r\n\r\n  if (loading) return <div className=\"loading\">加载中...</div>;\r\n  if (error) return <div className=\"error\">{error}</div>;\r\n  if (!torrent) return <div className=\"error\">种子不存在</div>;\r\n\r\n  return (\r\n    <div className=\"torrent-detail-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回资源区\r\n      </button>\r\n      \r\n      <div className=\"torrent-main\">\r\n        <div className=\"torrent-cover\">\r\n          <div className=\"cover-placeholder\">\r\n            {torrent.torrentName.charAt(0)}\r\n          </div>\r\n        </div>\r\n        \r\n        <div className=\"torrent-info\">\r\n          <h1 className=\"torrent-title\">{torrent.torrentName}</h1>\r\n          \r\n          <div className=\"uploader-info\">\r\n            <div className=\"uploader-avatar\">\r\n              {torrent.username.charAt(0)}\r\n            </div>\r\n            <div className=\"uploader-details\">\r\n              <span className=\"uploader-name\">{torrent.username}</span>\r\n              <span className=\"upload-time\">\r\n                {new Date(torrent.createTime).toLocaleString()}\r\n              </span>\r\n            </div>\r\n          </div>\r\n          \r\n          <div className=\"torrent-meta\">\r\n            <p><strong>类型:</strong> {torrent.category}</p>\r\n            <p><strong>地区:</strong> {torrent.region}</p>\r\n            <p><strong>分辨率:</strong> {torrent.resolution}</p>\r\n            <p><strong>字幕:</strong> {torrent.subtitle}</p>\r\n            {torrent.size && <p><strong>大小:</strong> {torrent.size}</p>}\r\n          </div>\r\n          \r\n          <div className=\"torrent-description\">\r\n            <h3>资源描述</h3>\r\n            <p>{torrent.description}</p>\r\n          </div>\r\n          \r\n          <div className=\"interaction-buttons\">\r\n            <button \r\n              className=\"like-button\"\r\n              onClick={handleLikeTorrent}\r\n            >\r\n              <span>👍 点赞 ({torrent.likeCount})</span>\r\n            </button>\r\n            <button className=\"download-button\">\r\n              <span>⬇️ 立即下载</span>\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      \r\n      <div className=\"comments-section\">\r\n        <h2>评论 ({torrent.replyCount})</h2>\r\n        \r\n        <form onSubmit={handleCommentSubmit} className=\"comment-form\">\r\n          <textarea\r\n            value={newComment}\r\n            onChange={(e) => setNewComment(e.target.value)}\r\n            placeholder=\"写下你的评论...\"\r\n            rows=\"3\"\r\n            required\r\n          />\r\n          <button type=\"submit\">发表评论</button>\r\n        </form>\r\n        \r\n        <div className=\"comment-list\">\r\n          {comments.map(comment => renderComment(comment))}\r\n        </div>\r\n\r\n        {replyModal.visible && (\r\n          <div className=\"reply-modal-overlay\">\r\n            <div className=\"reply-modal\">\r\n              <div className=\"modal-header\">\r\n                <h3>回复 @{replyModal.replyingToUsername}</h3>\r\n                <button onClick={closeReplyModal} className=\"close-modal\">&times;</button>\r\n              </div>\r\n              <form onSubmit={handleReplySubmit}>\r\n                <textarea\r\n                  value={replyContent}\r\n                  onChange={(e) => setReplyContent(e.target.value)}\r\n                  placeholder={`回复 @${replyModal.replyingToUsername}...`}\r\n                  rows=\"5\"\r\n                  autoFocus\r\n                  required\r\n                />\r\n                <div className=\"modal-actions\">\r\n                  <button type=\"button\" onClick={closeReplyModal} className=\"cancel-btn\">\r\n                    取消\r\n                  </button>\r\n                  <button type=\"submit\" className=\"submit-btn\">\r\n                    发送回复\r\n                  </button>\r\n                </div>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default TorrentDetail;","import { api } from './auth';\r\n\r\nexport const likeTorrentComment = (commentId) => {\r\n  return api.post(`/torrent/comments/${commentId}/like`);\r\n};\r\n\r\nexport const getCommentReplies = (commentId) => {\r\n  return api.get(`/torrent/comments/${commentId}/replies`);\r\n};\r\n\r\nexport const addCommentReply = (commentId, replyData) => {\r\n  return api.post(`/torrent/comments/${commentId}/replies`, replyData);\r\n};","import React, { useState, useEffect, useRef } from 'react';\r\nimport { useParams, useNavigate, useLocation } from 'react-router-dom';\r\nimport { \r\n  getRequestPostDetail,\r\n  addRequestPostComment,\r\n  likeRequestPost,\r\n  deleteRequestPost\r\n} from '../api/requestPost';\r\nimport {\r\n  likeRequestPostComment,\r\n  getCommentReplies,\r\n  addRequestCommentReply,\r\n  deleteRequestComment\r\n} from '../api/requestComment';\r\nimport './RequestDetail.css';\r\n\r\nconst RequestDetail = () => {\r\n  const { id } = useParams();\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const fileInputRef = useRef(null);\r\n  const [post, setPost] = useState(null);\r\n  const [comments, setComments] = useState([]);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n  const [newComment, setNewComment] = useState('');\r\n  const [replyContent, setReplyContent] = useState('');\r\n  const [replyImage, setReplyImage] = useState([]);\r\n  const [commentImage, setCommentImage] = useState([]);\r\n  const [expandedReplies, setExpandedReplies] = useState({}); // 记录哪些评论的回复是展开的\r\n  const [loadingReplies, setLoadingReplies] = useState({});\r\n  const [setReplyingTo] = useState(null);\r\n  \r\n\r\n  const [activeReplyId, setActiveReplyId] = useState(null);\r\n    const [replyModal, setReplyModal] = useState({\r\n      visible: false,\r\n      replyingTo: null,\r\n      replyingToUsername: '',\r\n      isReply: false\r\n    });\r\n  \r\n    // 确保openReplyModal接收username参数\r\n  const openReplyModal = (commentId, username) => {\r\n    setReplyModal({\r\n      visible: true,\r\n      replyingTo: commentId,\r\n      replyingToUsername: username,  // 确保这里接收username\r\n      isReply: false\r\n    });\r\n  };\r\n  \r\n    // 关闭回复弹窗\r\n    const closeReplyModal = () => {\r\n      setReplyModal({\r\n        visible: false,\r\n        replyingTo: null,\r\n        replyingToUsername: '',\r\n        isReply: false\r\n      });\r\n      setReplyContent('');\r\n    };\r\n\r\n    const Comment = ({ comment, onLike, onReply, onDelete, isReply = false }) => {\r\n      return (\r\n        <div className={`comment-container ${isReply ? \"is-reply\" : \"\"}`}>\r\n          <div className=\"comment-item\">\r\n            <div className=\"comment-avatar\">\r\n              {(comment.authorId || \"?\").charAt(0)} {/* 修复点 */}\r\n            </div>\r\n            <div className=\"comment-content\">\r\n              <div className=\"comment-header\">\r\n                <span className=\"comment-user\">{comment.authorId || \"匿名用户\"}</span>\r\n                {comment.replyTo && (\r\n                  <span className=\"reply-to\">回复 @{comment.replyTo}</span>\r\n                )}\r\n                <span className=\"comment-time\">\r\n                  {new Date(comment.createTime).toLocaleString()}\r\n                </span>\r\n              </div>\r\n              <p className=\"comment-text\">{comment.content}</p>\r\n              {/* 添加评论图片展示 */}\r\n              {comment.imageUrl && (\r\n                <div className=\"comment-image-container\">\r\n                  <img \r\n                    src={`http://localhost:8088${comment.imageUrl}`} \r\n                    alt=\"评论图片\" \r\n                    className=\"comment-image\"\r\n                    onClick={() => window.open(comment.imageUrl, '_blank')}\r\n                  />\r\n                </div>\r\n              )}\r\n              <div className=\"comment-actions\">\r\n                <button onClick={() => onLike(comment.id)}>\r\n                  👍 ({comment.likeCount || 0})\r\n                </button>\r\n                <button onClick={() => onReply(comment.id, comment.authorId)}>\r\n                  回复\r\n                </button>\r\n                {comment.authorId === localStorage.getItem('username') && (\r\n                  <button \r\n                    className=\"delete-comment-btn\"\r\n                    onClick={() => onDelete(comment.id)}\r\n                  >\r\n                    删除\r\n                  </button>\r\n                )}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      );\r\n    };\r\n\r\n      // 递归渲染评论组件\r\n  const renderComment = (comment, depth = 0) => {\r\n    return (\r\n      <div key={comment.id} style={{ marginLeft: `${depth * 30}px` }}>\r\n        <Comment\r\n          comment={comment}\r\n          onLike={handleLikeComment}\r\n          onReply={openReplyModal}\r\n          isReply={depth > 0}\r\n          onDelete={handleDeleteComment}\r\n        />\r\n        \r\n        {/* 递归渲染所有回复 */}\r\n        {comment.replies && comment.replies.map(reply => \r\n          renderComment(reply, depth + 1)\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n\r\n   const fetchPostDetail = async () => {\r\n      try {\r\n        setLoading(true);\r\n        const response = await getRequestPostDetail(id);\r\n        console.log('API Response:', JSON.parse(JSON.stringify(response.data.data.comments))); // 深度拷贝避免Proxy影响\r\n        setPost(response.data.data.post);\r\n        setComments(response.data.data.comments);\r\n      } catch (err) {\r\n        setError(err.response?.data?.message || '获取帖子详情失败');\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n  \r\n    useEffect(() => {\r\n      fetchPostDetail();\r\n    }, [id]);\r\n  \r\n    // 点赞帖子\r\n    const handleLikePost = async () => {\r\n      try {\r\n        await likeRequestPost(id);\r\n        setPost(prev => ({\r\n          ...prev,\r\n          likeCount: prev.likeCount + 1\r\n        }));\r\n      } catch (err) {\r\n        setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n\r\n     // 添加删除处理函数\r\n     const handleDeletePost = async (postId) => {\r\n      if (window.confirm('确定要删除这个帖子吗？所有评论也将被删除！')) {\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          await deleteRequestPost(postId, username);\r\n          navigate('/dashboard/request'); // 删除成功后返回求助区\r\n        } catch (err) {\r\n          setError('删除失败: ' + (err.response?.data?.message || err.message));\r\n        }\r\n      }\r\n    };\r\n  \r\n    const handleCommentSubmit = async (e) => {\r\n      e.preventDefault();\r\n      if (!newComment.trim()) return;\r\n      \r\n      try {\r\n        const username = localStorage.getItem('username');\r\n        const formData = new FormData();\r\n        formData.append('content', newComment);\r\n        formData.append('authorId', username);\r\n        if (commentImage) {\r\n          formData.append('image', commentImage);\r\n        }\r\n\r\n        const response = await addRequestPostComment(id, formData);\r\n    \r\n        // 修改这里的响应处理逻辑\r\n        if (response.data && response.data.code === 200) {\r\n          await fetchPostDetail();\r\n          \r\n          setNewComment('');\r\n          setCommentImage(null); // 清空评论图片\r\n        } else {\r\n          setError(response.data.message || '评论失败');\r\n        }\r\n      } catch (err) {\r\n        setError('评论失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n    \r\n    \r\n    const handleLikeComment = async (commentId) => {\r\n      try {\r\n        await likeRequestPostComment(commentId);\r\n        \r\n        // 递归更新评论点赞数\r\n        const updateComments = (comments) => {\r\n          return comments.map(comment => {\r\n            // 当前评论匹配\r\n            if (comment.id === commentId) {\r\n              return { ...comment, likeCount: comment.likeCount + 1 };\r\n            }\r\n            \r\n            // 递归处理回复\r\n            if (comment.replies && comment.replies.length > 0) {\r\n              return {\r\n                ...comment,\r\n                replies: updateComments(comment.replies)\r\n              };\r\n            }\r\n            \r\n            return comment;\r\n          });\r\n        };\r\n    \r\n        setComments(prev => updateComments(prev));\r\n      } catch (err) {\r\n        setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n\r\n    const handleDeleteComment = async (commentId) => {\r\n      if (window.confirm('确定要删除这条评论吗？')) {\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          await deleteRequestComment(commentId, username);\r\n          await fetchPostDetail(); // 刷新评论列表\r\n        } catch (err) {\r\n          setError('删除失败: ' + (err.response?.data?.message || err.message));\r\n        }\r\n      }\r\n    };\r\n\r\n\r\n    // 修改startReply函数\r\n    const startReply = (commentId) => {\r\n      if (activeReplyId === commentId) {\r\n        // 如果点击的是已经激活的回复按钮，则关闭\r\n        setActiveReplyId(null);\r\n        setReplyingTo(null);\r\n      } else {\r\n        // 否则打开新的回复框\r\n        setActiveReplyId(commentId);\r\n        setReplyingTo(commentId);\r\n      }\r\n    };\r\n  \r\n    const handleReplySubmit = async (e) => {\r\n      e.preventDefault();\r\n      if (!replyContent.trim()) return;\r\n    \r\n      try {\r\n        const username = localStorage.getItem('username');\r\n        const response = await addRequestCommentReply(replyModal.replyingTo, {\r\n          authorId: username,\r\n          content: replyContent,\r\n          image: replyImage\r\n        });\r\n    \r\n        console.log('回复响应:', response.data); // 调试\r\n        \r\n        if (response.data && response.data.code === 200) {\r\n          await fetchPostDetail();\r\n          setReplyContent('');\r\n          closeReplyModal();\r\n        }\r\n      } catch (err) {\r\n        console.error('回复错误:', err);\r\n        setError('回复失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n  \r\n  \r\n    // 返回按钮\r\n    const handleBack = () => {\r\n      const fromTab = location.state?.fromTab || 'share';\r\n      navigate(`/dashboard/request`);\r\n    };\r\n  \r\n    \r\n\r\n  const handleMarkSolved = () => {\r\n    // TODO: 实现标记为已解决的功能\r\n    setPost(prev => ({\r\n      ...prev,\r\n      isSolved: !prev.isSolved\r\n    }));\r\n  };\r\n\r\n  // const handleImageUpload = (e) => {\r\n  //   const files = Array.from(e.target.files);\r\n  //   const newImages = files.map(file => URL.createObjectURL(file));\r\n  //   setImages(prev => [...prev, ...newImages]);\r\n  // };\r\n\r\n  // const handleRemoveImage = (index) => {\r\n  //   setImages(prev => prev.filter((_, i) => i !== index));\r\n  // };\r\n\r\n  \r\n\r\n  if (loading) return <div className=\"loading\">加载中...</div>;\r\n  if (error) return <div className=\"error\">{error}</div>;\r\n  if (!post) return <div className=\"error\">帖子不存在</div>;\r\n\r\n  return (\r\n    <div className=\"request-detail-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回求助区\r\n      </button>\r\n      \r\n      <div className={`request-post ${post.isSolved ? 'solved' : ''}`}>\r\n        <div className=\"post-header\">\r\n          <img \r\n            src={post.authorAvatar || 'https://via.placeholder.com/40'} \r\n            alt={post.authorId} \r\n            className=\"post-avatar\" \r\n          />\r\n          <div className=\"post-meta\">\r\n            <div className=\"post-author\">{post.authorId}</div>\r\n            <div className=\"post-date\">\r\n              {new Date(post.createTime).toLocaleString()}\r\n              </div>\r\n          </div>\r\n          {post.isSolved && <span ClassName=\"solved-badge\">已解决</span>}\r\n          <div classname=\"delete-post\">\r\n            {post.authorId === localStorage.getItem('username') && (\r\n              <button \r\n                className=\"delete-button\"\r\n                onClick={() => handleDeletePost(post.id)}\r\n              >\r\n                删除帖子\r\n              </button>\r\n            )}\r\n          </div>\r\n        </div>\r\n        \r\n        <h1 className=\"post-title\">{post.title}</h1>\r\n        \r\n        <div className=\"post-content\">\r\n          {post.content.split('\\n').map((para, i) => (\r\n            <p key={i}>{para}</p>\r\n          ))}\r\n          {/* 添加帖子图片展示 */}\r\n          {post.imageUrl && (\r\n            <div className=\"post-image-container\">\r\n              <img \r\n                src={`http://localhost:8088${post.imageUrl}`} \r\n                alt=\"帖子图片\" \r\n                className=\"post-image\"\r\n                // onError={(e) => {\r\n                //   e.target.onerror = null; \r\n                //   e.target.src = 'https://via.placeholder.com/400x300?text=图片加载失败';\r\n                //   console.error('图片加载失败:', post.imageUrl);\r\n                // }}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n        \r\n        <div className=\"post-actions\">\r\n          <button \r\n            className={`like-button ${post.isLiked ? 'liked' : ''}`}\r\n            onClick={handleLikePost}\r\n          >\r\n            👍 点赞 ({post.likeCount})\r\n          </button>\r\n          <button \r\n            className={`solve-button ${post.isSolved ? 'solved' : ''}`}\r\n            onClick={handleMarkSolved}\r\n          >\r\n            {post.isSolved ? '✓ 已解决' : '标记为已解决'}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      \r\n       <div className=\"comments-section\">\r\n        <h2>评论 ({post.replyCount})</h2>\r\n        \r\n        <form onSubmit={handleCommentSubmit} className=\"comment-form\">\r\n          <textarea\r\n            value={newComment}\r\n            onChange={(e) => setNewComment(e.target.value)}\r\n            placeholder=\"写下你的评论...\"\r\n            rows=\"3\"\r\n            required\r\n          />\r\n          <button type=\"submit\">发表评论</button>\r\n\r\n          {/* 图片上传部分 */}\r\n          <div className=\"form-group\">\r\n            <div className=\"upload-image-btn\">\r\n              <input \r\n                type=\"file\" \r\n                accept=\"image/*\" \r\n                onChange={(e) => setCommentImage(e.target.files[0])} \r\n                data-testid=\"comment-image-input\"  \r\n              />\r\n            </div>\r\n          </div>\r\n        </form>\r\n        \r\n        \r\n        <div className=\"comment-list\">\r\n          {comments.map(comment => renderComment(comment))}\r\n        </div>\r\n\r\n        {replyModal.visible && (\r\n          <div className=\"reply-modal-overlay\">\r\n            <div className=\"reply-modal\">\r\n              <div className=\"modal-header\">\r\n                <h3>回复 @{replyModal.replyingToUsername}</h3>\r\n                <button onClick={closeReplyModal} className=\"close-modal\">&times;</button>\r\n              </div>\r\n              <form onSubmit={handleReplySubmit}>\r\n                <textarea\r\n                  value={replyContent}\r\n                  onChange={(e) => setReplyContent(e.target.value)}\r\n                  placeholder={`回复 @${replyModal.replyingToUsername}...`}\r\n                  rows=\"5\"\r\n                  autoFocus\r\n                  required\r\n                />\r\n\r\n                {/* 图片上传部分 */}\r\n                <div className=\"form-group\">\r\n                  <div className=\"upload-image-btn\">\r\n                    <input \r\n                      type=\"file\" \r\n                      accept=\"image/*\" \r\n                      onChange={(e) => setReplyImage(e.target.files[0])} \r\n                    />\r\n                  </div>\r\n                </div>\r\n\r\n                <div className=\"modal-actions\">\r\n                  <button type=\"button\" onClick={closeReplyModal} className=\"cancel-btn\">\r\n                    取消\r\n                  </button>\r\n                  <button type=\"submit\" className=\"submit-btn\">\r\n                    发送回复\r\n                  </button>\r\n                </div>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default RequestDetail;","import { api } from './auth';\r\n\r\nexport const likeRequestPostComment = (commentId) => {\r\n  return api.post(`/request/comments/${commentId}/like`);\r\n};\r\n\r\nexport const getRequestCommentReplies = (commentId) => {\r\n  return api.get(`/request/comments/${commentId}/replies`);\r\n};\r\n\r\nexport const addRequestCommentReply = (commentId, replyData) => {\r\n  const formData = new FormData();\r\n  formData.append('authorId', replyData.authorId);\r\n  formData.append('content', replyData.content);\r\n\r\n  // 如果有图片，添加到formData\r\n  if (replyData.image) {\r\n    formData.append('image', replyData.image);\r\n  }\r\n\r\n  return api.post(`/request/comments/${commentId}/replies`, formData);\r\n};\r\n\r\nexport const deleteRequestComment = (commentId, authorId) => {\r\n  return api.delete(`/request/comments/${commentId}`, {\r\n    params: { authorId }\r\n  });\r\n};","import React, { useState, useEffect, useRef } from 'react';\r\nimport { useParams, useNavigate, useLocation } from 'react-router-dom';\r\nimport { \r\n  getHelpPostDetail,\r\n  addHelpPostComment,\r\n  likeHelpPost,\r\n  deleteHelpPost\r\n} from '../api/helpPost';\r\nimport {\r\n  likeHelpPostComment,\r\n  getCommentReplies,\r\n  addHelpCommentReply,\r\n  deleteHelpComment\r\n} from '../api/helpComment';\r\nimport './HelpDetail.css';\r\n\r\nconst HelpDetail = () => {\r\n  const { id } = useParams();\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const fileInputRef = useRef(null);\r\n  const [post, setPost] = useState(null);\r\n  const [comments, setComments] = useState([]);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n  const [newComment, setNewComment] = useState('');\r\n  const [replyContent, setReplyContent] = useState('');\r\n  const [replyImage, setReplyImage] = useState([]);\r\n  const [commentImage, setCommentImage] = useState([]);\r\n  const [expandedReplies, setExpandedReplies] = useState({}); // 记录哪些评论的回复是展开的\r\n  const [loadingReplies, setLoadingReplies] = useState({});\r\n  const [setReplyingTo] = useState(null);\r\n  \r\n\r\n  const [activeReplyId, setActiveReplyId] = useState(null);\r\n    const [replyModal, setReplyModal] = useState({\r\n      visible: false,\r\n      replyingTo: null,\r\n      replyingToUsername: '',\r\n      isReply: false\r\n    });\r\n  \r\n    // 确保openReplyModal接收username参数\r\n  const openReplyModal = (commentId, username) => {\r\n    setReplyModal({\r\n      visible: true,\r\n      replyingTo: commentId,\r\n      replyingToUsername: username,  // 确保这里接收username\r\n      isReply: false\r\n    });\r\n  };\r\n  \r\n    // 关闭回复弹窗\r\n    const closeReplyModal = () => {\r\n      setReplyModal({\r\n        visible: false,\r\n        replyingTo: null,\r\n        replyingToUsername: '',\r\n        isReply: false\r\n      });\r\n      setReplyContent('');\r\n    };\r\n\r\n    const Comment = ({ comment, onLike, onReply, onDelete, isReply = false }) => {\r\n      return (\r\n        <div className={`comment-container ${isReply ? \"is-reply\" : \"\"}`}>\r\n          <div className=\"comment-item\">\r\n            <div className=\"comment-avatar\">\r\n              {(comment.authorId || \"?\").charAt(0)} {/* 修复点 */}\r\n            </div>\r\n            <div className=\"comment-content\">\r\n              <div className=\"comment-header\">\r\n                <span className=\"comment-user\">{comment.authorId || \"匿名用户\"}</span>\r\n                {comment.replyTo && (\r\n                  <span className=\"reply-to\">回复 @{comment.replyTo}</span>\r\n                )}\r\n                <span className=\"comment-time\">\r\n                  {new Date(comment.createTime).toLocaleString()}\r\n                </span>\r\n              </div>\r\n              <p className=\"comment-text\">{comment.content}</p>\r\n              {/* 添加评论图片展示 */}\r\n              {comment.imageUrl && (\r\n                <div className=\"comment-image-container\">\r\n                  <img \r\n                    src={`http://localhost:8088${comment.imageUrl}`} \r\n                    alt=\"评论图片\" \r\n                    className=\"comment-image\"\r\n                    onClick={() => window.open(comment.imageUrl, '_blank')}\r\n                  />\r\n                </div>\r\n              )}\r\n              <div className=\"comment-actions\">\r\n                <button onClick={() => onLike(comment.id)}>\r\n                  👍 ({comment.likeCount || 0})\r\n                </button>\r\n                <button onClick={() => onReply(comment.id, comment.authorId)}>\r\n                  回复\r\n                </button>\r\n                {comment.authorId === localStorage.getItem('username') && (\r\n                  <button \r\n                    className=\"delete-comment-btn\"\r\n                    onClick={() => onDelete(comment.id)}\r\n                  >\r\n                    删除\r\n                  </button>\r\n                )}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      );\r\n    };\r\n\r\n      // 递归渲染评论组件\r\n  const renderComment = (comment, depth = 0) => {\r\n    return (\r\n      <div key={comment.id} style={{ marginLeft: `${depth * 30}px` }}>\r\n        <Comment\r\n          comment={comment}\r\n          onLike={handleLikeComment}\r\n          onReply={openReplyModal}\r\n          isReply={depth > 0}\r\n          onDelete={handleDeleteComment}\r\n        />\r\n        \r\n        {/* 递归渲染所有回复 */}\r\n        {comment.replies && comment.replies.map(reply => \r\n          renderComment(reply, depth + 1)\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n\r\n   const fetchPostDetail = async () => {\r\n      try {\r\n        setLoading(true);\r\n        const response = await getHelpPostDetail(id);\r\n        console.log('API Response:', JSON.parse(JSON.stringify(response.data.data.comments))); // 深度拷贝避免Proxy影响\r\n        setPost(response.data.data.post);\r\n        setComments(response.data.data.comments);\r\n      } catch (err) {\r\n        setError(err.response?.data?.message || '获取帖子详情失败');\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n  \r\n    useEffect(() => {\r\n      fetchPostDetail();\r\n    }, [id]);\r\n  \r\n    // 点赞帖子\r\n    const handleLikePost = async () => {\r\n      try {\r\n        await likeHelpPost(id);\r\n        setPost(prev => ({\r\n          ...prev,\r\n          likeCount: prev.likeCount + 1\r\n        }));\r\n      } catch (err) {\r\n        setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n\r\n     // 添加删除处理函数\r\n     const handleDeletePost = async (postId) => {\r\n      if (window.confirm('确定要删除这个帖子吗？所有评论也将被删除！')) {\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          await deleteHelpPost(postId, username);\r\n          navigate('/dashboard/help'); // 删除成功后返回求助区\r\n        } catch (err) {\r\n          setError('删除失败: ' + (err.response?.data?.message || err.message));\r\n        }\r\n      }\r\n    };\r\n  \r\n    const handleCommentSubmit = async (e) => {\r\n      e.preventDefault();\r\n      if (!newComment.trim()) return;\r\n      \r\n      try {\r\n        const username = localStorage.getItem('username');\r\n        const formData = new FormData();\r\n        formData.append('content', newComment);\r\n        formData.append('authorId', username);\r\n        if (commentImage) {\r\n          formData.append('image', commentImage);\r\n        }\r\n\r\n        const response = await addHelpPostComment(id, formData);\r\n    \r\n        // 修改这里的响应处理逻辑\r\n        if (response.data && response.data.code === 200) {\r\n          await fetchPostDetail();\r\n          \r\n          setNewComment('');\r\n          setCommentImage(null); // 清空评论图片\r\n        } else {\r\n          setError(response.data.message || '评论失败');\r\n        }\r\n      } catch (err) {\r\n        setError('评论失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n    \r\n    \r\n    const handleLikeComment = async (commentId) => {\r\n      try {\r\n        await likeHelpPostComment(commentId);\r\n        \r\n        // 递归更新评论点赞数\r\n        const updateComments = (comments) => {\r\n          return comments.map(comment => {\r\n            // 当前评论匹配\r\n            if (comment.id === commentId) {\r\n              return { ...comment, likeCount: comment.likeCount + 1 };\r\n            }\r\n            \r\n            // 递归处理回复\r\n            if (comment.replies && comment.replies.length > 0) {\r\n              return {\r\n                ...comment,\r\n                replies: updateComments(comment.replies)\r\n              };\r\n            }\r\n            \r\n            return comment;\r\n          });\r\n        };\r\n    \r\n        setComments(prev => updateComments(prev));\r\n      } catch (err) {\r\n        setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n\r\n    const handleDeleteComment = async (commentId) => {\r\n      if (window.confirm('确定要删除这条评论吗？')) {\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          await deleteHelpComment(commentId, username);\r\n          await fetchPostDetail(); // 刷新评论列表\r\n        } catch (err) {\r\n          setError('删除失败: ' + (err.response?.data?.message || err.message));\r\n        }\r\n      }\r\n    };\r\n\r\n\r\n    // 修改startReply函数\r\n    const startReply = (commentId) => {\r\n      if (activeReplyId === commentId) {\r\n        // 如果点击的是已经激活的回复按钮，则关闭\r\n        setActiveReplyId(null);\r\n        setReplyingTo(null);\r\n      } else {\r\n        // 否则打开新的回复框\r\n        setActiveReplyId(commentId);\r\n        setReplyingTo(commentId);\r\n      }\r\n    };\r\n  \r\n    const handleReplySubmit = async (e) => {\r\n      e.preventDefault();\r\n      if (!replyContent.trim()) return;\r\n    \r\n      try {\r\n        const username = localStorage.getItem('username');\r\n        const response = await addHelpCommentReply(replyModal.replyingTo, {\r\n          authorId: username,\r\n          content: replyContent,\r\n          image: replyImage\r\n        });\r\n    \r\n        console.log('回复响应:', response.data); // 调试\r\n        \r\n        if (response.data && response.data.code === 200) {\r\n          await fetchPostDetail();\r\n          setReplyContent('');\r\n          closeReplyModal();\r\n        }\r\n      } catch (err) {\r\n        console.error('回复错误:', err);\r\n        setError('回复失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n  \r\n  \r\n    // 返回按钮\r\n    const handleBack = () => {\r\n      const fromTab = location.state?.fromTab || 'share';\r\n      navigate(`/dashboard/help`);\r\n    };\r\n  \r\n    \r\n\r\n  const handleMarkSolved = () => {\r\n    // TODO: 实现标记为已解决的功能\r\n    setPost(prev => ({\r\n      ...prev,\r\n      isSolved: !prev.isSolved\r\n    }));\r\n  };\r\n\r\n  // const handleImageUpload = (e) => {\r\n  //   const files = Array.from(e.target.files);\r\n  //   const newImages = files.map(file => URL.createObjectURL(file));\r\n  //   setImages(prev => [...prev, ...newImages]);\r\n  // };\r\n\r\n  // const handleRemoveImage = (index) => {\r\n  //   setImages(prev => prev.filter((_, i) => i !== index));\r\n  // };\r\n\r\n  \r\n\r\n  if (loading) return <div className=\"loading\">加载中...</div>;\r\n  if (error) return <div className=\"error\">{error}</div>;\r\n  if (!post) return <div className=\"error\">帖子不存在</div>;\r\n\r\n  return (\r\n    <div className=\"help-detail-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回求助区\r\n      </button>\r\n      \r\n      <div className={`help-post ${post.isSolved ? 'solved' : ''}`}>\r\n        <div className=\"post-header\">\r\n          <img \r\n            src={post.authorAvatar || 'https://via.placeholder.com/40'} \r\n            alt={post.authorId} \r\n            className=\"post-avatar\" \r\n          />\r\n          <div className=\"post-meta\">\r\n            <div className=\"post-author\">{post.authorId}</div>\r\n            <div className=\"post-date\">\r\n              {new Date(post.createTime).toLocaleString()}\r\n              </div>\r\n          </div>\r\n          {post.isSolved && <span ClassName=\"solved-badge\">已解决</span>}\r\n          <div classname=\"delete-post\">\r\n            {post.authorId === localStorage.getItem('username') && (\r\n              <button \r\n                className=\"delete-button\"\r\n                onClick={() => handleDeletePost(post.id)}\r\n              >\r\n                删除帖子\r\n              </button>\r\n            )}\r\n          </div>\r\n        </div>\r\n        \r\n        <h1 className=\"post-title\">{post.title}</h1>\r\n        \r\n        <div className=\"post-content\">\r\n          {post.content.split('\\n').map((para, i) => (\r\n            <p key={i}>{para}</p>\r\n          ))}\r\n          {/* 添加帖子图片展示 */}\r\n          {post.imageUrl && (\r\n            <div className=\"post-image-container\">\r\n              <img \r\n                src={`http://localhost:8088${post.imageUrl}`} \r\n                alt=\"帖子图片\" \r\n                className=\"post-image\"\r\n                // onError={(e) => {\r\n                //   e.target.onerror = null; \r\n                //   e.target.src = 'https://via.placeholder.com/400x300?text=图片加载失败';\r\n                //   console.error('图片加载失败:', post.imageUrl);\r\n                // }}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n        \r\n        <div className=\"post-actions\">\r\n          <button \r\n            className={`like-button ${post.isLiked ? 'liked' : ''}`}\r\n            onClick={handleLikePost}\r\n          >\r\n            👍 点赞 ({post.likeCount})\r\n          </button>\r\n          <button \r\n            className={`solve-button ${post.isSolved ? 'solved' : ''}`}\r\n            onClick={handleMarkSolved}\r\n          >\r\n            {post.isSolved ? '✓ 已解决' : '标记为已解决'}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      \r\n       <div className=\"comments-section\">\r\n        <h2>评论 ({post.replyCount})</h2>\r\n        \r\n        <form onSubmit={handleCommentSubmit} className=\"comment-form\">\r\n          <textarea\r\n            value={newComment}\r\n            onChange={(e) => setNewComment(e.target.value)}\r\n            placeholder=\"写下你的评论...\"\r\n            rows=\"3\"\r\n            required\r\n          />\r\n          <button type=\"submit\">发表评论</button>\r\n\r\n          {/* 图片上传部分 */}\r\n          <div className=\"form-group\">\r\n            <div className=\"upload-image-btn\">\r\n              <input \r\n                type=\"file\" \r\n                accept=\"image/*\" \r\n                onChange={(e) => setCommentImage(e.target.files[0])} \r\n                data-testid=\"comment-image-input\"  \r\n              />\r\n            </div>\r\n          </div>\r\n        </form>\r\n        \r\n        \r\n        <div className=\"comment-list\">\r\n          {comments.map(comment => renderComment(comment))}\r\n        </div>\r\n\r\n        {replyModal.visible && (\r\n          <div className=\"reply-modal-overlay\">\r\n            <div className=\"reply-modal\">\r\n              <div className=\"modal-header\">\r\n                <h3>回复 @{replyModal.replyingToUsername}</h3>\r\n                <button onClick={closeReplyModal} className=\"close-modal\">&times;</button>\r\n              </div>\r\n              <form onSubmit={handleReplySubmit}>\r\n                <textarea\r\n                  value={replyContent}\r\n                  onChange={(e) => setReplyContent(e.target.value)}\r\n                  placeholder={`回复 @${replyModal.replyingToUsername}...`}\r\n                  rows=\"5\"\r\n                  autoFocus\r\n                  required\r\n                />\r\n\r\n                {/* 图片上传部分 */}\r\n                <div className=\"form-group\">\r\n                  <div className=\"upload-image-btn\">\r\n                    <input \r\n                      type=\"file\" \r\n                      accept=\"image/*\" \r\n                      onChange={(e) => setReplyImage(e.target.files[0])} \r\n                    />\r\n                  </div>\r\n                </div>\r\n\r\n                <div className=\"modal-actions\">\r\n                  <button type=\"button\" onClick={closeReplyModal} className=\"cancel-btn\">\r\n                    取消\r\n                  </button>\r\n                  <button type=\"submit\" className=\"submit-btn\">\r\n                    发送回复\r\n                  </button>\r\n                </div>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default HelpDetail;","import { api } from './auth';\r\n\r\nexport const likeHelpPostComment = (commentId) => {\r\n  return api.post(`/help/comments/${commentId}/like`);\r\n};\r\n\r\nexport const getHelpCommentReplies = (commentId) => {\r\n  return api.get(`/help/comments/${commentId}/replies`);\r\n};\r\n\r\nexport const addHelpCommentReply = (commentId, replyData) => {\r\n  const formData = new FormData();\r\n  formData.append('authorId', replyData.authorId);\r\n  formData.append('content', replyData.content);\r\n\r\n  // 如果有图片，添加到formData\r\n  if (replyData.image) {\r\n    formData.append('image', replyData.image);\r\n  }\r\n\r\n  return api.post(`/help/comments/${commentId}/replies`, formData);\r\n};\r\n\r\nexport const deleteHelpComment = (commentId, authorId) => {\r\n  return api.delete(`/help/comments/${commentId}`, {\r\n    params: { authorId }\r\n  });\r\n};","import React, { useState, useEffect } from 'react';\r\nimport { useNavigate, useLocation } from 'react-router-dom';\r\nimport { generateInviteCode, getUserInviteCodes, exchangeUpload, getUserInfo } from '../../api/personal';\r\nimport './personalSubpage.css';\r\n\r\nconst Exchange = () => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [inviteCodes, setInviteCodes] = useState([]);\r\n  const [userInfo, setUserInfo] = useState(null);\r\n  const [magicPoints, setMagicPoints] = useState('0'); \r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState(null);\r\n\r\n  // 获取用户信息和邀请码列表\r\n  useEffect(() => {\r\n    const fetchData = async () => {\r\n      try {\r\n        setLoading(true);\r\n        const [userData, codes] = await Promise.all([\r\n          getUserInfo(),\r\n          getUserInviteCodes()\r\n        ]);\r\n        setUserInfo(userData);\r\n        setInviteCodes(codes);\r\n      } catch (err) {\r\n        setError(err.message);\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n    fetchData();\r\n  }, []);\r\n\r\n  // 生成邀请码\r\n  const handleGenerateInviteCode = async () => {\r\n    try {\r\n      setLoading(true);\r\n      const newCode = await generateInviteCode();\r\n      setInviteCodes([...inviteCodes, newCode]);\r\n      // 刷新用户信息\r\n      const updatedUser = await getUserInfo();\r\n      setUserInfo(updatedUser);\r\n    } catch (err) {\r\n      setError(err.message);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleExchangeUpload = async () => {\r\n    const points = Number(magicPoints);\r\n    if (!points || points <= 0) {\r\n      setError('请输入有效的魔力值');\r\n      return;\r\n    }\r\n    try {\r\n      setLoading(true);\r\n      await exchangeUpload(points);\r\n      // 刷新用户信息\r\n      const updatedUser = await getUserInfo();\r\n      setUserInfo(updatedUser);\r\n      setMagicPoints('0');\r\n      setError(null);\r\n    } catch (err) {\r\n      setError(err.message);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleBack = () => {\r\n    // 返回个人中心，并携带来源标记\r\n    navigate('/personal', { \r\n      state: { \r\n        fromSubpage: true,  // 标记来自子页面\r\n        dashboardTab: location.state?.dashboardTab // 保留Dashboard的标签页状态\r\n      },\r\n      replace: true  // 替换当前历史记录\r\n    });\r\n  };\r\n\r\n  if (loading) {\r\n    return <div className=\"subpage-container\">加载中...</div>;\r\n  }\r\n\r\n  if (error) {\r\n    return (\r\n      <div className=\"subpage-container\">\r\n        <button className=\"back-button\" onClick={handleBack}>\r\n          ← 返回个人中心\r\n        </button>\r\n        <div className=\"error\">错误: {error}</div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"subpage-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        ← 返回个人中心\r\n      </button>\r\n\r\n      <h2 className=\"page-title\">兑换区</h2>\r\n      \r\n      <div className=\"exchange-section\">\r\n        <h3>当前魔力值: {userInfo?.magicPoints || 0}</h3>\r\n        \r\n        <div className=\"exchange-card\">\r\n          <h4>兑换邀请码</h4>\r\n          <p>消耗10魔力值兑换一个邀请码</p>\r\n          <button \r\n            className=\"exchange-btn\"\r\n            onClick={handleGenerateInviteCode}\r\n            disabled={!userInfo || userInfo.magicPoints < 10}\r\n          >\r\n            兑换邀请码\r\n          </button>\r\n        </div>\r\n\r\n        <div className=\"exchange-card\">\r\n          <h4>兑换上传量</h4>\r\n          <p>1魔力值 = 1GB上传量</p>\r\n          <div className=\"exchange-input-group\">\r\n          <input\r\n            type=\"number\"\r\n            value={magicPoints}\r\n            onChange={(e) => {\r\n              // 允许空字符串或有效数字\r\n              const value = e.target.value;\r\n              if (value === '' || !isNaN(value)) {\r\n                setMagicPoints(value);\r\n              }\r\n            }}\r\n            min=\"1\"\r\n            max={userInfo?.magicPoints || 0}\r\n            placeholder=\"输入要兑换的魔力值\"\r\n          />\r\n\r\n          <button \r\n            className=\"exchange-btn\"\r\n            onClick={handleExchangeUpload}\r\n            disabled={\r\n              !magicPoints || \r\n              Number(magicPoints) <= 0 || \r\n              !userInfo || \r\n              Number(magicPoints) > userInfo.magicPoints\r\n            }\r\n          >\r\n            兑换上传量\r\n          </button>\r\n          </div>\r\n        </div>\r\n\r\n        {inviteCodes.length > 0 && (\r\n          <div className=\"invite-code-list\">\r\n            <h4>我的邀请码</h4>\r\n            <ul>\r\n              {inviteCodes.map((code, index) => (\r\n                <li key={index}>\r\n                  <span className=\"code\">{code.code}</span>\r\n                  <span className={`status ${code.isUsed ? 'used' : 'available'}`}>\r\n                    {code.isUsed ? '已使用' : '可用'}\r\n                  </span>\r\n                </li>\r\n              ))}\r\n            </ul>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Exchange;","import React, { useState, useEffect } from 'react';\r\nimport { useNavigate, useLocation } from 'react-router-dom';\r\nimport { getUserTorrents, deleteTorrent } from '../../api/personal';\r\nimport './personalSubpage.css';\r\n\r\nconst Upload = ({ onLogout }) => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [torrents, setTorrents] = useState([]);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n  const [pagination, setPagination] = useState({\r\n    page: 1,\r\n    size: 5,\r\n    total: 0\r\n  });\r\n\r\n\r\n\r\n  // 格式化日期\r\n  const formatDate = (dateString) => {\r\n    const date = new Date(dateString);\r\n    return date.toLocaleString();\r\n  };\r\n\r\n  // 获取上传记录\r\n  const fetchTorrents = async () => {\r\n    try {\r\n      setLoading(true);\r\n      const { records, total } = await getUserTorrents(pagination.page, pagination.size);\r\n      setTorrents(records);\r\n      setPagination(prev => ({ ...prev, total }));\r\n    } catch (err) {\r\n      setError(err.message);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  \r\n\r\n  // 删除种子\r\n  const handleDelete = async (id) => {\r\n    if (window.confirm('确定要删除这个种子吗？此操作不可撤销！')) {\r\n      try {\r\n        await deleteTorrent(id);\r\n        // 删除成功后刷新列表\r\n        fetchTorrents();\r\n      } catch (err) {\r\n        alert('删除失败: ' + err.message);\r\n      }\r\n    }\r\n  };\r\n\r\n  // 计算总页数\r\n  const totalPages = Math.ceil(pagination.total / pagination.size);\r\n\r\n  // 生成页码数组\r\n  const getPageNumbers = () => {\r\n    const pages = [];\r\n    const maxVisiblePages = 5; // 最多显示5个页码\r\n    \r\n    let startPage = Math.max(1, pagination.page - Math.floor(maxVisiblePages / 2));\r\n    let endPage = Math.min(totalPages, startPage + maxVisiblePages - 1);\r\n    \r\n    // 调整起始页码，确保始终显示 maxVisiblePages 个页码（如果总页数足够）\r\n    if (endPage - startPage + 1 < maxVisiblePages) {\r\n      startPage = Math.max(1, endPage - maxVisiblePages + 1);\r\n    }\r\n    \r\n    for (let i = startPage; i <= endPage; i++) {\r\n      pages.push(i);\r\n    }\r\n    \r\n    return pages;\r\n  };\r\n\r\n  // 直接跳转到指定页码\r\n  const jumpToPage = (page) => {\r\n    if (page >= 1 && page <= totalPages && page !== pagination.page) {\r\n      setPagination(prev => ({ ...prev, page }));\r\n    }\r\n  };\r\n\r\n  // 分页改变\r\n  const handlePageChange = (newPage) => {\r\n    setPagination(prev => ({ ...prev, page: newPage }));\r\n  };\r\n\r\n  useEffect(() => {\r\n    fetchTorrents();\r\n  }, [pagination.page]);\r\n\r\n  const handleBack = () => {\r\n    navigate('/personal', { \r\n      state: { \r\n        fromSubpage: true,\r\n        dashboardTab: location.state?.dashboardTab\r\n      },\r\n      replace: true\r\n    });\r\n  };\r\n\r\n  if (loading) {\r\n    return <div className=\"subpage-container\">加载中...</div>;\r\n  }\r\n\r\n  if (error) {\r\n    return <div className=\"subpage-container\">错误: {error}</div>;\r\n  }\r\n\r\n  return (\r\n    <div className=\"subpage-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        ← 返回个人中心\r\n      </button>\r\n\r\n      <h2 className=\"page-title\">上传记录</h2>\r\n      \r\n      <table className=\"uploads-table\">\r\n        <thead>\r\n          <tr>\r\n            <th>资源名称</th>\r\n            <th>大小</th>\r\n            <th>上传时间</th>\r\n            <th>下载次数</th>\r\n            <th>操作</th>\r\n          </tr>\r\n        </thead>\r\n        <tbody>\r\n          {torrents.map(torrent => (\r\n            <tr key={torrent.id} className=\"list-item\">\r\n              <td>{torrent.torrentName}</td>\r\n              <td>{torrent.formattedSize}</td>\r\n              <td>{formatDate(torrent.createTime)}</td>\r\n              <td>{torrent.downloadCount || 0}</td>\r\n              <td>\r\n                <button \r\n                  className=\"action-btn delete-btn\"\r\n                  onClick={() => handleDelete(torrent.id)}\r\n                >\r\n                  删除\r\n                </button>\r\n              </td>\r\n            </tr>\r\n          ))}\r\n        </tbody>\r\n      </table>\r\n\r\n     {/* 修改后的分页控件 */}\r\n     <div className=\"pagination\">\r\n        <button \r\n          disabled={pagination.page <= 1}\r\n          onClick={() => jumpToPage(1)}\r\n          className=\"page-nav\"\r\n        >\r\n          首页\r\n        </button>\r\n        <button \r\n          disabled={pagination.page <= 1}\r\n          onClick={() => jumpToPage(pagination.page - 1)}\r\n          className=\"page-nav\"\r\n        >\r\n          上一页\r\n        </button>\r\n        \r\n        {/* 显示页码 */}\r\n        {getPageNumbers().map(number => (\r\n          <button\r\n            key={number}\r\n            onClick={() => jumpToPage(number)}\r\n            className={`page-number ${pagination.page === number ? 'active' : ''}`}\r\n          >\r\n            {number}\r\n          </button>\r\n        ))}\r\n        \r\n        {/* 显示省略号（如果有更多页） */}\r\n        {totalPages > getPageNumbers()[getPageNumbers().length - 1] && (\r\n          <span className=\"ellipsis\">...</span>\r\n        )}\r\n        \r\n        <button \r\n          disabled={pagination.page >= totalPages}\r\n          onClick={() => jumpToPage(pagination.page + 1)}\r\n          className=\"page-nav\"\r\n        >\r\n          下一页\r\n        </button>\r\n        <button \r\n          disabled={pagination.page >= totalPages}\r\n          onClick={() => jumpToPage(totalPages)}\r\n          className=\"page-nav\"\r\n        >\r\n          末页\r\n        </button>\r\n        \r\n        <div className=\"page-info\">\r\n          <span>共 {totalPages} 页</span>\r\n          <span>跳至</span>\r\n          <input\r\n            type=\"number\"\r\n            min=\"1\"\r\n            max={totalPages}\r\n            onKeyDown={(e) => {\r\n              if (e.key === 'Enter') {\r\n                const page = parseInt(e.target.value);\r\n                if (!isNaN(page)) {\r\n                  jumpToPage(Math.max(1, Math.min(page, totalPages)));\r\n                  e.target.value = '';\r\n                }\r\n              }\r\n            }}\r\n          />\r\n          <span>页</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Upload;","import React from 'react';\r\nimport { useNavigate,useLocation } from 'react-router-dom';\r\nimport './personalSubpage.css';\r\n\r\nconst Notice = ({ onLogout }) => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  // 模拟数据\r\n  const [notices] = React.useState([\r\n    { \r\n      id: 1, \r\n      title: '积分奖励到账', \r\n      content: '您上传的资源《盗梦空间》获得100积分奖励',\r\n      date: '2023-10-20',\r\n      read: false\r\n    },\r\n    { \r\n      id: 2, \r\n      title: '系统通知', \r\n      content: '服务器将于今晚2:00-4:00进行维护',\r\n      date: '2023-10-18',\r\n      read: true\r\n    }\r\n  ]);\r\n\r\n  const handleBack = () => {\r\n    // 返回个人中心，并携带来源标记\r\n    navigate('/personal', { \r\n      state: { \r\n        fromSubpage: true,  // 标记来自子页面\r\n        dashboardTab: location.state?.dashboardTab // 保留Dashboard的标签页状态\r\n      },\r\n      replace: true  // 替换当前历史记录\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className=\"subpage-container\">\r\n      <button className=\"back-button\" onClick={(handleBack)}>\r\n        ← 返回个人中心\r\n      </button>\r\n\r\n      <h2 className=\"page-title\">消息通知</h2>\r\n      \r\n      <div className=\"notice-list\">\r\n        {notices.map(notice => (\r\n          <div key={notice.id} className={`list-item ${!notice.read ? 'unread' : ''}`}>\r\n            <div className=\"notice-header\">\r\n              <h3>{notice.title}</h3>\r\n              <span className=\"notice-date\">{notice.date}</span>\r\n            </div>\r\n            <p className=\"notice-content\">{notice.content}</p>\r\n          </div>\r\n        ))}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Notice;","import React, { useState,useEffect } from 'react';\r\nimport { useNavigate, useLocation } from 'react-router-dom';\r\nimport { getUserInfo, updatePassword } from '../../api/personal';\r\nimport './personalSubpage.css';\r\n\r\nconst Setting = ({ onLogout }) => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [userInfo, setUserInfo] = useState(null);\r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState(null);\r\n  const [success, setSuccess] = useState(null);\r\n  const [passwordForm, setPasswordForm] = useState({\r\n    oldPassword: '',\r\n    newPassword: '',\r\n    confirmPassword: ''\r\n  });\r\n\r\n  // 获取用户信息\r\n  useEffect(() => {\r\n    const fetchUserInfo = async () => {\r\n      try {\r\n        const info = await getUserInfo();\r\n        setUserInfo(info);\r\n      } catch (err) {\r\n        console.error('获取用户信息失败:', err);\r\n      }\r\n    };\r\n    fetchUserInfo();\r\n  }, []);\r\n\r\n  const handleBack = () => {\r\n    navigate('/personal', { \r\n      state: { \r\n        fromSubpage: true,\r\n        dashboardTab: location.state?.dashboardTab\r\n      },\r\n      replace: true\r\n    });\r\n  };\r\n\r\n  const handlePasswordChange = (e) => {\r\n    const { name, value } = e.target;\r\n    setPasswordForm(prev => ({\r\n      ...prev,\r\n      [name]: value\r\n    }));\r\n  };\r\n\r\n  const handlePasswordSubmit = async (e) => {\r\n    e.preventDefault();\r\n    setError(null);\r\n    setSuccess(null);\r\n\r\n    // 验证表单\r\n    if (!passwordForm.oldPassword || !passwordForm.newPassword || !passwordForm.confirmPassword) {\r\n      setError('请填写所有密码字段');\r\n      return;\r\n    }\r\n\r\n    if (passwordForm.newPassword !== passwordForm.confirmPassword) {\r\n      setError('新密码与确认密码不一致');\r\n      return;\r\n    }\r\n\r\n    if (passwordForm.newPassword.length < 6) {\r\n      setError('新密码长度至少为6位');\r\n      return;\r\n    }\r\n\r\n    try {\r\n      setLoading(true);\r\n      await updatePassword(passwordForm.oldPassword, passwordForm.newPassword);\r\n      setSuccess('密码修改成功');\r\n      setPasswordForm({\r\n        oldPassword: '',\r\n        newPassword: '',\r\n        confirmPassword: ''\r\n      });\r\n    } catch (err) {\r\n      setError(err.message || '修改密码失败');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div className=\"subpage-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        ← 返回个人中心\r\n      </button>\r\n\r\n      <h2 className=\"page-title\">个人设置</h2>\r\n\r\n      <div className=\"setting-section\">\r\n        <div className=\"user-info-card\">\r\n          <h3>账户信息</h3>\r\n          <div className=\"info-item\">\r\n            <label>用户名:</label>\r\n            <span>{userInfo?.username || '加载中...'}</span>\r\n          </div>\r\n          <p className=\"info-note\">用户名不可更改</p>\r\n        </div>\r\n\r\n        <div className=\"password-form-card\">\r\n          <h3>修改密码</h3>\r\n          <form onSubmit={handlePasswordSubmit}>\r\n            <div className=\"form-group\">\r\n              <label htmlFor=\"oldPassword\">原密码:</label>\r\n              <input\r\n                type=\"password\"\r\n                id=\"oldPassword\"\r\n                name=\"oldPassword\"\r\n                value={passwordForm.oldPassword}\r\n                onChange={handlePasswordChange}\r\n                required\r\n              />\r\n            </div>\r\n\r\n            <div className=\"form-group\">\r\n              <label htmlFor=\"newPassword\">新密码:</label>\r\n              <input\r\n                type=\"password\"\r\n                id=\"newPassword\"\r\n                name=\"newPassword\"\r\n                value={passwordForm.newPassword}\r\n                onChange={handlePasswordChange}\r\n                required\r\n                minLength=\"6\"\r\n              />\r\n            </div>\r\n\r\n            <div className=\"form-group\">\r\n              <label htmlFor=\"confirmPassword\">确认新密码:</label>\r\n              <input\r\n                type=\"password\"\r\n                id=\"confirmPassword\"\r\n                name=\"confirmPassword\"\r\n                value={passwordForm.confirmPassword}\r\n                onChange={handlePasswordChange}\r\n                required\r\n                minLength=\"6\"\r\n              />\r\n            </div>\r\n\r\n            {error && <div className=\"error-message\">{error}</div>}\r\n            {success && <div className=\"success-message\">{success}</div>}\r\n\r\n            <button \r\n              type=\"submit\" \r\n              className=\"submit-button\"\r\n              disabled={loading}\r\n            >\r\n              {loading ? '处理中...' : '修改密码'}\r\n            </button>\r\n          </form>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Setting;","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use constructor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   );\n * }\n */\nexport function constructFrom(date, value) {\n  if (typeof date === \"function\") return date(value);\n\n  if (date && typeof date === \"object\" && constructFromSymbol in date)\n    return date[constructFromSymbol](value);\n\n  if (date instanceof Date) return new date.constructor(value);\n\n  return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n  // [TODO] Get rid of `toDate` or `constructFrom`?\n  return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import {\n  millisecondsInHour,\n  millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n  const invalidDate = () => constructFrom(options?.in, NaN);\n\n  const additionalDigits = options?.additionalDigits ?? 2;\n  const dateStrings = splitDateString(argument);\n\n  let date;\n  if (dateStrings.date) {\n    const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n\n  if (!date || isNaN(+date)) return invalidDate();\n\n  const timestamp = +date;\n  let time = 0;\n  let offset;\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) return invalidDate();\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) return invalidDate();\n  } else {\n    const tmpDate = new Date(timestamp + time);\n    const result = toDate(0, options?.in);\n    result.setFullYear(\n      tmpDate.getUTCFullYear(),\n      tmpDate.getUTCMonth(),\n      tmpDate.getUTCDate(),\n    );\n    result.setHours(\n      tmpDate.getUTCHours(),\n      tmpDate.getUTCMinutes(),\n      tmpDate.getUTCSeconds(),\n      tmpDate.getUTCMilliseconds(),\n    );\n    return result;\n  }\n\n  return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n  /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n  /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n  const dateStrings = {};\n  const array = dateString.split(patterns.dateTimeDelimiter);\n  let timeString;\n\n  // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n  if (array.length > 2) {\n    return dateStrings;\n  }\n\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(\n        dateStrings.date.length,\n        dateString.length,\n      );\n    }\n  }\n\n  if (timeString) {\n    const token = patterns.timezone.exec(timeString);\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], \"\");\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n\n  return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  const regex = new RegExp(\n    \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n      (4 + additionalDigits) +\n      \"})|(\\\\d{2}|[+-]\\\\d{\" +\n      (2 + additionalDigits) +\n      \"})$)\",\n  );\n\n  const captures = dateString.match(regex);\n  // Invalid ISO-formatted year\n  if (!captures) return { year: NaN, restDateString: \"\" };\n\n  const year = captures[1] ? parseInt(captures[1]) : null;\n  const century = captures[2] ? parseInt(captures[2]) : null;\n\n  // either year or century is null, not both\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length),\n  };\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n\n  const captures = dateString.match(dateRegex);\n  // Invalid ISO-formatted string\n  if (!captures) return new Date(NaN);\n\n  const isWeekDate = !!captures[4];\n  const dayOfYear = parseDateUnit(captures[1]);\n  const month = parseDateUnit(captures[2]) - 1;\n  const day = parseDateUnit(captures[3]);\n  const week = parseDateUnit(captures[4]);\n  const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    const date = new Date(0);\n    if (\n      !validateDate(year, month, day) ||\n      !validateDayOfYearDate(year, dayOfYear)\n    ) {\n      return new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\n\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n  const captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  const hours = parseTimeUnit(captures[1]);\n  const minutes = parseTimeUnit(captures[2]);\n  const seconds = parseTimeUnit(captures[3]);\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n\n  return (\n    hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n  );\n}\n\nfunction parseTimeUnit(value) {\n  return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === \"Z\") return 0;\n\n  const captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n\n  const sign = captures[1] === \"+\" ? -1 : 1;\n  const hours = parseInt(captures[2]);\n  const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  const date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  const fourthOfJanuaryDay = date.getUTCDay() || 7;\n  const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n  return (\n    month >= 0 &&\n    month <= 11 &&\n    date >= 1 &&\n    date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n  );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n\n  return (\n    seconds >= 0 &&\n    seconds < 60 &&\n    minutes >= 0 &&\n    minutes < 60 &&\n    hours >= 0 &&\n    hours < 25\n  );\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","const formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"less than a second\",\n    other: \"less than {{count}} seconds\",\n  },\n\n  xSeconds: {\n    one: \"1 second\",\n    other: \"{{count}} seconds\",\n  },\n\n  halfAMinute: \"half a minute\",\n\n  lessThanXMinutes: {\n    one: \"less than a minute\",\n    other: \"less than {{count}} minutes\",\n  },\n\n  xMinutes: {\n    one: \"1 minute\",\n    other: \"{{count}} minutes\",\n  },\n\n  aboutXHours: {\n    one: \"about 1 hour\",\n    other: \"about {{count}} hours\",\n  },\n\n  xHours: {\n    one: \"1 hour\",\n    other: \"{{count}} hours\",\n  },\n\n  xDays: {\n    one: \"1 day\",\n    other: \"{{count}} days\",\n  },\n\n  aboutXWeeks: {\n    one: \"about 1 week\",\n    other: \"about {{count}} weeks\",\n  },\n\n  xWeeks: {\n    one: \"1 week\",\n    other: \"{{count}} weeks\",\n  },\n\n  aboutXMonths: {\n    one: \"about 1 month\",\n    other: \"about {{count}} months\",\n  },\n\n  xMonths: {\n    one: \"1 month\",\n    other: \"{{count}} months\",\n  },\n\n  aboutXYears: {\n    one: \"about 1 year\",\n    other: \"about {{count}} years\",\n  },\n\n  xYears: {\n    one: \"1 year\",\n    other: \"{{count}} years\",\n  },\n\n  overXYears: {\n    one: \"over 1 year\",\n    other: \"over {{count}} years\",\n  },\n\n  almostXYears: {\n    one: \"almost 1 year\",\n    other: \"almost {{count}} years\",\n  },\n};\n\nexport const formatDistance = (token, count, options) => {\n  let result;\n\n  const tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === \"string\") {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace(\"{{count}}\", count.toString());\n  }\n\n  if (options?.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"in \" + result;\n    } else {\n      return result + \" ago\";\n    }\n  }\n\n  return result;\n};\n","export function buildFormatLongFn(args) {\n  return (options = {}) => {\n    // TODO: Remove String()\n    const width = options.width ? String(options.width) : args.defaultWidth;\n    const format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n  full: \"EEEE, MMMM do, y\",\n  long: \"MMMM do, y\",\n  medium: \"MMM d, y\",\n  short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n  full: \"h:mm:ss a zzzz\",\n  long: \"h:mm:ss a z\",\n  medium: \"h:mm:ss a\",\n  short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: \"{{date}}, {{time}}\",\n  short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: \"full\",\n  }),\n\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: \"full\",\n  }),\n\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: \"full\",\n  }),\n};\n","const formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n  formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n  return (value, options) => {\n    const context = options?.context ? String(options.context) : \"standalone\";\n\n    let valuesArray;\n    if (context === \"formatting\" && args.formattingValues) {\n      const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      const width = options?.width ? String(options.width) : defaultWidth;\n\n      valuesArray =\n        args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      const defaultWidth = args.defaultWidth;\n      const width = options?.width ? String(options.width) : args.defaultWidth;\n\n      valuesArray = args.values[width] || args.values[defaultWidth];\n    }\n    const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n    // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n  narrow: [\"B\", \"A\"],\n  abbreviated: [\"BC\", \"AD\"],\n  wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\"],\n  abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n  wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n  narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n  abbreviated: [\n    \"Jan\",\n    \"Feb\",\n    \"Mar\",\n    \"Apr\",\n    \"May\",\n    \"Jun\",\n    \"Jul\",\n    \"Aug\",\n    \"Sep\",\n    \"Oct\",\n    \"Nov\",\n    \"Dec\",\n  ],\n\n  wide: [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n  ],\n};\n\nconst dayValues = {\n  narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n  short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n  abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  wide: [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n  ],\n};\n\nconst dayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n};\n\nconst formattingDayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n  const number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  const rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + \"st\";\n      case 2:\n        return number + \"nd\";\n      case 3:\n        return number + \"rd\";\n    }\n  }\n  return number + \"th\";\n};\n\nexport const localize = {\n  ordinalNumber,\n\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: \"wide\",\n  }),\n\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: \"wide\",\n    argumentCallback: (quarter) => quarter - 1,\n  }),\n\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: \"wide\",\n  }),\n\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: \"wide\",\n  }),\n\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: \"wide\",\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: \"wide\",\n  }),\n};\n","export function buildMatchFn(args) {\n  return (string, options = {}) => {\n    const width = options.width;\n\n    const matchPattern =\n      (width && args.matchPatterns[width]) ||\n      args.matchPatterns[args.defaultMatchWidth];\n    const matchResult = string.match(matchPattern);\n\n    if (!matchResult) {\n      return null;\n    }\n    const matchedString = matchResult[0];\n\n    const parsePatterns =\n      (width && args.parsePatterns[width]) ||\n      args.parsePatterns[args.defaultParseWidth];\n\n    const key = Array.isArray(parsePatterns)\n      ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n      : // [TODO] -- I challenge you to fix the type\n        findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n    let value;\n\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback\n      ? // [TODO] -- I challenge you to fix the type\n        options.valueCallback(value)\n      : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n\nfunction findKey(object, predicate) {\n  for (const key in object) {\n    if (\n      Object.prototype.hasOwnProperty.call(object, key) &&\n      predicate(object[key])\n    ) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\nfunction findIndex(array, predicate) {\n  for (let key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n  narrow: [\n    /^j/i,\n    /^f/i,\n    /^m/i,\n    /^a/i,\n    /^m/i,\n    /^j/i,\n    /^j/i,\n    /^a/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n\n  any: [\n    /^ja/i,\n    /^f/i,\n    /^mar/i,\n    /^ap/i,\n    /^may/i,\n    /^jun/i,\n    /^jul/i,\n    /^au/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n};\n\nconst matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i,\n  },\n};\n\nexport const match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: (value) => parseInt(value, 10),\n  }),\n\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: \"any\",\n    valueCallback: (index) => index + 1,\n  }),\n\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: \"any\",\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: \"any\",\n  }),\n};\n","export function buildMatchPatternFn(args) {\n  return (string, options = {}) => {\n    const matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    const matchedString = matchResult[0];\n\n    const parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    let value = args.valueCallback\n      ? args.valueCallback(parseResult[0])\n      : parseResult[0];\n\n    // [TODO] I challenge you to fix the type\n    value = options.valueCallback ? options.valueCallback(value) : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n  code: \"en-US\",\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1,\n  },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","const dateLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"P\":\n      return formatLong.date({ width: \"short\" });\n    case \"PP\":\n      return formatLong.date({ width: \"medium\" });\n    case \"PPP\":\n      return formatLong.date({ width: \"long\" });\n    case \"PPPP\":\n    default:\n      return formatLong.date({ width: \"full\" });\n  }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"p\":\n      return formatLong.time({ width: \"short\" });\n    case \"pp\":\n      return formatLong.time({ width: \"medium\" });\n    case \"ppp\":\n      return formatLong.time({ width: \"long\" });\n    case \"pppp\":\n    default:\n      return formatLong.time({ width: \"full\" });\n  }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n  const matchResult = pattern.match(/(P+)(p+)?/) || [];\n  const datePattern = matchResult[1];\n  const timePattern = matchResult[2];\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n\n  let dateTimeFormat;\n\n  switch (datePattern) {\n    case \"P\":\n      dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n      break;\n    case \"PP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n      break;\n    case \"PPP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n      break;\n    case \"PPPP\":\n    default:\n      dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n      break;\n  }\n\n  return dateTimeFormat\n    .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n    .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n  return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n  return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n  const _message = message(token, format, input);\n  console.warn(_message);\n  if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n  const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n  return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.js\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n  return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam InputDate - The input `Date` type derived from the passed argument.\n * @typeParam ResultDate - The result `Date` type derived from the passed constructor.\n *\n * @param date - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(date, constructor) {\n  const date_ = isConstructor(constructor)\n    ? new constructor(0)\n    : constructFrom(constructor, 0);\n  date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n  date_.setHours(\n    date.getHours(),\n    date.getMinutes(),\n    date.getSeconds(),\n    date.getMilliseconds(),\n  );\n  return date_;\n}\n\nfunction isConstructor(constructor) {\n  return (\n    typeof constructor === \"function\" &&\n    constructor.prototype?.constructor === constructor\n  );\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { constructFrom } from \"../../constructFrom.js\";\nimport { transpose } from \"../../transpose.js\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n  subPriority = 0;\n\n  validate(_utcDate, _options) {\n    return true;\n  }\n}\n\nexport class ValueSetter extends Setter {\n  constructor(\n    value,\n\n    validateValue,\n\n    setValue,\n\n    priority,\n    subPriority,\n  ) {\n    super();\n    this.value = value;\n    this.validateValue = validateValue;\n    this.setValue = setValue;\n    this.priority = priority;\n    if (subPriority) {\n      this.subPriority = subPriority;\n    }\n  }\n\n  validate(date, options) {\n    return this.validateValue(date, this.value, options);\n  }\n\n  set(date, flags, options) {\n    return this.setValue(date, flags, this.value, options);\n  }\n}\n\nexport class DateTimezoneSetter extends Setter {\n  priority = TIMEZONE_UNIT_PRIORITY;\n  subPriority = -1;\n\n  constructor(context, reference) {\n    super();\n    this.context = context || ((date) => constructFrom(reference, date));\n  }\n\n  set(date, flags) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(date, transpose(date, this.context));\n  }\n}\n","import { ValueSetter } from \"./Setter.js\";\n\nexport class Parser {\n  run(dateString, token, match, options) {\n    const result = this.parse(dateString, token, match, options);\n    if (!result) {\n      return null;\n    }\n\n    return {\n      setter: new ValueSetter(\n        result.value,\n        this.validate,\n        this.set,\n        this.priority,\n        this.subPriority,\n      ),\n      rest: result.rest,\n    };\n  }\n\n  validate(_utcDate, _value, _options) {\n    return true;\n  }\n}\n","export const numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/, // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n  minute: /^[0-5]?\\d/, // 0 to 59\n  second: /^[0-5]?\\d/, // 0 to 59\n\n  singleDigit: /^\\d/, // 0 to 9\n  twoDigits: /^\\d{1,2}/, // 0 to 99\n  threeDigits: /^\\d{1,3}/, // 0 to 999\n  fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n  millisecondsInHour,\n  millisecondsInMinute,\n  millisecondsInSecond,\n} from \"../../constants.js\";\n\nimport { numericPatterns } from \"./constants.js\";\n\nexport function mapValue(parseFnResult, mapFn) {\n  if (!parseFnResult) {\n    return parseFnResult;\n  }\n\n  return {\n    value: mapFn(parseFnResult.value),\n    rest: parseFnResult.rest,\n  };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n  const matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  return {\n    value: parseInt(matchResult[0], 10),\n    rest: dateString.slice(matchResult[0].length),\n  };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n  const matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  // Input is 'Z'\n  if (matchResult[0] === \"Z\") {\n    return {\n      value: 0,\n      rest: dateString.slice(1),\n    };\n  }\n\n  const sign = matchResult[1] === \"+\" ? 1 : -1;\n  const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n  const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n  const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n  return {\n    value:\n      sign *\n      (hours * millisecondsInHour +\n        minutes * millisecondsInMinute +\n        seconds * millisecondsInSecond),\n    rest: dateString.slice(matchResult[0].length),\n  };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n  return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigit, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigits, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigits, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigits, dateString);\n    default:\n      return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n    default:\n      return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n  switch (dayPeriod) {\n    case \"morning\":\n      return 4;\n    case \"evening\":\n      return 17;\n    case \"pm\":\n    case \"noon\":\n    case \"afternoon\":\n      return 12;\n    case \"am\":\n    case \"midnight\":\n    case \"night\":\n    default:\n      return 0;\n  }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  const isCommonEra = currentYear > 0;\n  // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n  const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n  let result;\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100;\n  } else {\n    const rangeEnd = absCurrentYear + 50;\n    const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n    const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n  }\n\n  return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date, options?.in);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n  _date.setDate(_date.getDate() - diff);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n  const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n  if (+_date >= +startOfNextYear) {\n    return year + 1;\n  } else if (+_date >= +startOfThisYear) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n  return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const year = getWeekYear(date, options);\n  const firstWeek = constructFrom(options?.in || date, 0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  const _date = startOfWeek(firstWeek, options);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","import { getWeek } from \"./getWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n  const date_ = toDate(date, options?.in);\n  const diff = getWeek(date_, options) - week;\n  date_.setDate(date_.getDate() - diff * 7);\n  return toDate(date_, options?.in);\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n\n  const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n  const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n  const year = getISOWeekYear(date, options);\n  const fourthOfJanuary = constructFrom(options?.in || date, 0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getISOWeek } from \"./getISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISOWeek} function options.\n */\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The `Date` type of the context function.\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week, options) {\n  const _date = toDate(date, options?.in);\n  const diff = getISOWeek(_date, options) - week;\n  _date.setDate(_date.getDate() - diff * 7);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n  isLeapYearIndex,\n  parseNDigits,\n  parseNumericPattern,\n} from \"../utils.js\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n  31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n  priority = 90;\n  subPriority = 1;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"d\":\n        return parseNumericPattern(numericPatterns.date, dateString);\n      case \"do\":\n        return match.ordinalNumber(dateString, { unit: \"date\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(date, value) {\n    const year = date.getFullYear();\n    const isLeapYear = isLeapYearIndex(year);\n    const month = date.getMonth();\n    if (isLeapYear) {\n      return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n    } else {\n      return value >= 1 && value <= DAYS_IN_MONTH[month];\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setDate(value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n  // If 0 days, no-op to avoid changing times in the hour before end of DST\n  if (!amount) return _date;\n\n  _date.setDate(_date.getDate() + amount);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { addDays } from \"./addDays.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const date_ = toDate(date, options?.in);\n  const currentDay = date_.getDay();\n\n  const remainder = day % 7;\n  const dayIndex = (remainder + 7) % 7;\n\n  const delta = 7 - weekStartsOn;\n  const diff =\n    day < 0 || day > 6\n      ? day - ((currentDay + delta) % 7)\n      : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n  return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISODay} function options.\n */\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date, options) {\n  const day = toDate(date, options?.in).getDay();\n  return day === 0 ? 7 : day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { addDays } from \"./addDays.js\";\nimport { getISODay } from \"./getISODay.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISODay} function options.\n */\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday, etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day, options) {\n  const date_ = toDate(date, options?.in);\n  const currentDay = getISODay(date_, options);\n  const diff = day - currentDay;\n  return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n  const _date = toDate(date);\n  const utcDate = new Date(\n    Date.UTC(\n      _date.getFullYear(),\n      _date.getMonth(),\n      _date.getDate(),\n      _date.getHours(),\n      _date.getMinutes(),\n      _date.getSeconds(),\n      _date.getMilliseconds(),\n    ),\n  );\n  utcDate.setUTCFullYear(_date.getFullYear());\n  return +date - +utcDate;\n}\n","import { EraParser } from \"./parsers/EraParser.js\";\nimport { YearParser } from \"./parsers/YearParser.js\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.js\";\nimport { QuarterParser } from \"./parsers/QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./parsers/MonthParser.js\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.js\";\nimport { DateParser } from \"./parsers/DateParser.js\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.js\";\nimport { DayParser } from \"./parsers/DayParser.js\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./parsers/ISODayParser.js\";\nimport { AMPMParser } from \"./parsers/AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.js\";\nimport { MinuteParser } from \"./parsers/MinuteParser.js\";\nimport { SecondParser } from \"./parsers/SecondParser.js\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.js\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\nexport const parsers = {\n  G: new EraParser(),\n  y: new YearParser(),\n  Y: new LocalWeekYearParser(),\n  R: new ISOWeekYearParser(),\n  u: new ExtendedYearParser(),\n  Q: new QuarterParser(),\n  q: new StandAloneQuarterParser(),\n  M: new MonthParser(),\n  L: new StandAloneMonthParser(),\n  w: new LocalWeekParser(),\n  I: new ISOWeekParser(),\n  d: new DateParser(),\n  D: new DayOfYearParser(),\n  E: new DayParser(),\n  e: new LocalDayParser(),\n  c: new StandAloneLocalDayParser(),\n  i: new ISODayParser(),\n  a: new AMPMParser(),\n  b: new AMPMMidnightParser(),\n  B: new DayPeriodParser(),\n  h: new Hour1to12Parser(),\n  H: new Hour0to23Parser(),\n  K: new Hour0To11Parser(),\n  k: new Hour1To24Parser(),\n  m: new MinuteParser(),\n  s: new SecondParser(),\n  S: new FractionOfSecondParser(),\n  X: new ISOTimezoneWithZParser(),\n  x: new ISOTimezoneParser(),\n  t: new TimestampSecondsParser(),\n  T: new TimestampMillisecondsParser(),\n};\n","import { Parser } from \"../Parser.js\";\n\nexport class EraParser extends Parser {\n  priority = 140;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return (\n          match.era(dateString, { width: \"abbreviated\" }) ||\n          match.era(dateString, { width: \"narrow\" })\n        );\n\n      // A, B\n      case \"GGGGG\":\n        return match.era(dateString, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return (\n          match.era(dateString, { width: \"wide\" }) ||\n          match.era(dateString, { width: \"abbreviated\" }) ||\n          match.era(dateString, { width: \"narrow\" })\n        );\n    }\n  }\n\n  set(date, flags, value) {\n    flags.era = value;\n    date.setFullYear(value, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n// | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n// | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n// | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n  priority = 130;\n  incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n  parse(dateString, token, match) {\n    const valueCallback = (year) => ({\n      year,\n      isTwoDigitYear: token === \"yy\",\n    });\n\n    switch (token) {\n      case \"y\":\n        return mapValue(parseNDigits(4, dateString), valueCallback);\n      case \"yo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"year\",\n          }),\n          valueCallback,\n        );\n      default:\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }\n\n  validate(_date, value) {\n    return value.isTwoDigitYear || value.year > 0;\n  }\n\n  set(date, flags, value) {\n    const currentYear = date.getFullYear();\n\n    if (value.isTwoDigitYear) {\n      const normalizedTwoDigitYear = normalizeTwoDigitYear(\n        value.year,\n        currentYear,\n      );\n      date.setFullYear(normalizedTwoDigitYear, 0, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n\n    const year =\n      !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n    date.setFullYear(year, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n}\n","import { getWeekYear } from \"../../../getWeekYear.js\";\n\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token, match) {\n    const valueCallback = (year) => ({\n      year,\n      isTwoDigitYear: token === \"YY\",\n    });\n\n    switch (token) {\n      case \"Y\":\n        return mapValue(parseNDigits(4, dateString), valueCallback);\n      case \"Yo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"year\",\n          }),\n          valueCallback,\n        );\n      default:\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }\n\n  validate(_date, value) {\n    return value.isTwoDigitYear || value.year > 0;\n  }\n\n  set(date, flags, value, options) {\n    const currentYear = getWeekYear(date, options);\n\n    if (value.isTwoDigitYear) {\n      const normalizedTwoDigitYear = normalizeTwoDigitYear(\n        value.year,\n        currentYear,\n      );\n      date.setFullYear(\n        normalizedTwoDigitYear,\n        0,\n        options.firstWeekContainsDate,\n      );\n      date.setHours(0, 0, 0, 0);\n      return startOfWeek(date, options);\n    }\n\n    const year =\n      !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n    date.setFullYear(year, 0, options.firstWeekContainsDate);\n    date.setHours(0, 0, 0, 0);\n    return startOfWeek(date, options);\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"Q\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token) {\n    if (token === \"R\") {\n      return parseNDigitsSigned(4, dateString);\n    }\n\n    return parseNDigitsSigned(token.length, dateString);\n  }\n\n  set(date, _flags, value) {\n    const firstWeekOfYear = constructFrom(date, 0);\n    firstWeekOfYear.setFullYear(value, 0, 4);\n    firstWeekOfYear.setHours(0, 0, 0, 0);\n    return startOfISOWeek(firstWeekOfYear);\n  }\n\n  incompatibleTokens = [\n    \"G\",\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"Q\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\nexport class ExtendedYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token) {\n    if (token === \"u\") {\n      return parseNDigitsSigned(4, dateString);\n    }\n\n    return parseNDigitsSigned(token.length, dateString);\n  }\n\n  set(date, _flags, value) {\n    date.setFullYear(value, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class QuarterParser extends Parser {\n  priority = 120;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n      case \"QQ\": // 01, 02, 03, 04\n        return parseNDigits(token.length, dateString);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return match.ordinalNumber(dateString, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return (\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return match.quarter(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return (\n          match.quarter(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 4;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth((value - 1) * 3, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class StandAloneQuarterParser extends Parser {\n  priority = 120;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n      case \"qq\": // 01, 02, 03, 04\n        return parseNDigits(token.length, dateString);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return match.ordinalNumber(dateString, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return (\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\",\n          })\n        );\n\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return match.quarter(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return (\n          match.quarter(dateString, {\n            width: \"wide\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\",\n          })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 4;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth((value - 1) * 3, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MonthParser extends Parser {\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n\n  priority = 110;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => value - 1;\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"M\":\n        return mapValue(\n          parseNumericPattern(numericPatterns.month, dateString),\n          valueCallback,\n        );\n      // 01, 02, ..., 12\n      case \"MM\":\n        return mapValue(parseNDigits(2, dateString), valueCallback);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"month\",\n          }),\n          valueCallback,\n        );\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return (\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // J, F, ..., D\n      case \"MMMMM\":\n        return match.month(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return (\n          match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(value, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class StandAloneMonthParser extends Parser {\n  priority = 110;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => value - 1;\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return mapValue(\n          parseNumericPattern(numericPatterns.month, dateString),\n          valueCallback,\n        );\n      // 01, 02, ..., 12\n      case \"LL\":\n        return mapValue(parseNDigits(2, dateString), valueCallback);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"month\",\n          }),\n          valueCallback,\n        );\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return (\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // J, F, ..., D\n      case \"LLLLL\":\n        return match.month(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return (\n          match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(value, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setWeek } from \"../../../setWeek.js\";\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n  priority = 100;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"w\":\n        return parseNumericPattern(numericPatterns.week, dateString);\n      case \"wo\":\n        return match.ordinalNumber(dateString, { unit: \"week\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 53;\n  }\n\n  set(date, _flags, value, options) {\n    return startOfWeek(setWeek(date, value, options), options);\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setISOWeek } from \"../../../setISOWeek.js\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n  priority = 100;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"I\":\n        return parseNumericPattern(numericPatterns.week, dateString);\n      case \"Io\":\n        return match.ordinalNumber(dateString, { unit: \"week\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 53;\n  }\n\n  set(date, _flags, value) {\n    return startOfISOWeek(setISOWeek(date, value));\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n  isLeapYearIndex,\n  parseNDigits,\n  parseNumericPattern,\n} from \"../utils.js\";\n\nexport class DayOfYearParser extends Parser {\n  priority = 90;\n\n  subpriority = 1;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"D\":\n      case \"DD\":\n        return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n      case \"Do\":\n        return match.ordinalNumber(dateString, { unit: \"date\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(date, value) {\n    const year = date.getFullYear();\n    const isLeapYear = isLeapYearIndex(year);\n    if (isLeapYear) {\n      return value >= 1 && value <= 366;\n    } else {\n      return value >= 1 && value <= 365;\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(0, value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"E\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\n// Day of week\nexport class DayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // T\n      case \"EEEEE\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n  priority = 90;\n  parse(dateString, token, match, options) {\n    const valueCallback = (value) => {\n      // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n      const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n      return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n    };\n\n    switch (token) {\n      // 3\n      case \"e\":\n      case \"ee\": // 03\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      // 3rd\n      case \"eo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"day\",\n          }),\n          valueCallback,\n        );\n      // Tue\n      case \"eee\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // T\n      case \"eeeee\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // Tuesday\n      case \"eeee\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"i\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match, options) {\n    const valueCallback = (value) => {\n      // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n      const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n      return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n    };\n\n    switch (token) {\n      // 3\n      case \"c\":\n      case \"cc\": // 03\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      // 3rd\n      case \"co\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"day\",\n          }),\n          valueCallback,\n        );\n      // Tue\n      case \"ccc\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // T\n      case \"ccccc\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // Tuesday\n      case \"cccc\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"i\",\n    \"e\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setISODay } from \"../../../setISODay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => {\n      if (value === 0) {\n        return 7;\n      }\n      return value;\n    };\n\n    switch (token) {\n      // 2\n      case \"i\":\n      case \"ii\": // 02\n        return parseNDigits(token.length, dateString);\n      // 2nd\n      case \"io\":\n        return match.ordinalNumber(dateString, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"short\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n      // T\n      case \"iiiii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          }),\n          valueCallback,\n        );\n      // Tu\n      case \"iiiiii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n      // Tuesday\n      case \"iiii\":\n      default:\n        return mapValue(\n          match.day(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"abbreviated\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"short\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 7;\n  }\n\n  set(date, _flags, value) {\n    date = setISODay(date, value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n      case \"aaa\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"aaaaa\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMMidnightParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n      case \"bbb\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"bbbbb\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"BBBBB\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1to12Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"h\":\n        return parseNumericPattern(numericPatterns.hour12h, dateString);\n      case \"ho\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 12;\n  }\n\n  set(date, _flags, value) {\n    const isPM = date.getHours() >= 12;\n    if (isPM && value < 12) {\n      date.setHours(value + 12, 0, 0, 0);\n    } else if (!isPM && value === 12) {\n      date.setHours(0, 0, 0, 0);\n    } else {\n      date.setHours(value, 0, 0, 0);\n    }\n    return date;\n  }\n\n  incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0to23Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"H\":\n        return parseNumericPattern(numericPatterns.hour23h, dateString);\n      case \"Ho\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 23;\n  }\n\n  set(date, _flags, value) {\n    date.setHours(value, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0To11Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"K\":\n        return parseNumericPattern(numericPatterns.hour11h, dateString);\n      case \"Ko\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    const isPM = date.getHours() >= 12;\n    if (isPM && value < 12) {\n      date.setHours(value + 12, 0, 0, 0);\n    } else {\n      date.setHours(value, 0, 0, 0);\n    }\n    return date;\n  }\n\n  incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1To24Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"k\":\n        return parseNumericPattern(numericPatterns.hour24h, dateString);\n      case \"ko\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 24;\n  }\n\n  set(date, _flags, value) {\n    const hours = value <= 24 ? value % 24 : value;\n    date.setHours(hours, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MinuteParser extends Parser {\n  priority = 60;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"m\":\n        return parseNumericPattern(numericPatterns.minute, dateString);\n      case \"mo\":\n        return match.ordinalNumber(dateString, { unit: \"minute\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 59;\n  }\n\n  set(date, _flags, value) {\n    date.setMinutes(value, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class SecondParser extends Parser {\n  priority = 50;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"s\":\n        return parseNumericPattern(numericPatterns.second, dateString);\n      case \"so\":\n        return match.ordinalNumber(dateString, { unit: \"second\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 59;\n  }\n\n  set(date, _flags, value) {\n    date.setSeconds(value, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\nexport class FractionOfSecondParser extends Parser {\n  priority = 30;\n\n  parse(dateString, token) {\n    const valueCallback = (value) =>\n      Math.trunc(value * Math.pow(10, -token.length + 3));\n    return mapValue(parseNDigits(token.length, dateString), valueCallback);\n  }\n\n  set(date, _flags, value) {\n    date.setMilliseconds(value);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n  priority = 10;\n\n  parse(dateString, token) {\n    switch (token) {\n      case \"X\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalMinutes,\n          dateString,\n        );\n      case \"XX\":\n        return parseTimezonePattern(timezonePatterns.basic, dateString);\n      case \"XXXX\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalSeconds,\n          dateString,\n        );\n      case \"XXXXX\":\n        return parseTimezonePattern(\n          timezonePatterns.extendedOptionalSeconds,\n          dateString,\n        );\n      case \"XXX\":\n      default:\n        return parseTimezonePattern(timezonePatterns.extended, dateString);\n    }\n  }\n\n  set(date, flags, value) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(\n      date,\n      date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n    );\n  }\n\n  incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n  priority = 10;\n\n  parse(dateString, token) {\n    switch (token) {\n      case \"x\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalMinutes,\n          dateString,\n        );\n      case \"xx\":\n        return parseTimezonePattern(timezonePatterns.basic, dateString);\n      case \"xxxx\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalSeconds,\n          dateString,\n        );\n      case \"xxxxx\":\n        return parseTimezonePattern(\n          timezonePatterns.extendedOptionalSeconds,\n          dateString,\n        );\n      case \"xxx\":\n      default:\n        return parseTimezonePattern(timezonePatterns.extended, dateString);\n    }\n  }\n\n  set(date, flags, value) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(\n      date,\n      date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n    );\n  }\n\n  incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampSecondsParser extends Parser {\n  priority = 40;\n\n  parse(dateString) {\n    return parseAnyDigitsSigned(dateString);\n  }\n\n  set(date, _flags, value) {\n    return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n  }\n\n  incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampMillisecondsParser extends Parser {\n  priority = 20;\n\n  parse(dateString) {\n    return parseAnyDigitsSigned(dateString);\n  }\n\n  set(date, _flags, value) {\n    return [constructFrom(date, value), { timestampIsSet: true }];\n  }\n\n  incompatibleTokens = \"*\";\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getDefaultOptions } from \"./getDefaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\nimport { DateTimezoneSetter } from \"./parse/_lib/Setter.js\";\nimport { parsers } from \"./parse/_lib/parsers.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Sun           | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangeably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n *    and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n  const invalidDate = () => constructFrom(options?.in || referenceDate, NaN);\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  if (!formatStr)\n    return dateStr ? invalidDate() : toDate(referenceDate, options?.in);\n\n  const subFnOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  // If timezone isn't specified, it will try to use the context or\n  // the reference date and fallback to the system time zone.\n  const setters = [new DateTimezoneSetter(options?.in, referenceDate)];\n\n  const tokens = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter in longFormatters) {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp);\n\n  const usedTokens = [];\n\n  for (let token of tokens) {\n    if (\n      !options?.useAdditionalWeekYearTokens &&\n      isProtectedWeekYearToken(token)\n    ) {\n      warnOrThrowProtectedError(token, formatStr, dateStr);\n    }\n    if (\n      !options?.useAdditionalDayOfYearTokens &&\n      isProtectedDayOfYearToken(token)\n    ) {\n      warnOrThrowProtectedError(token, formatStr, dateStr);\n    }\n\n    const firstCharacter = token[0];\n    const parser = parsers[firstCharacter];\n    if (parser) {\n      const { incompatibleTokens } = parser;\n      if (Array.isArray(incompatibleTokens)) {\n        const incompatibleToken = usedTokens.find(\n          (usedToken) =>\n            incompatibleTokens.includes(usedToken.token) ||\n            usedToken.token === firstCharacter,\n        );\n        if (incompatibleToken) {\n          throw new RangeError(\n            `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n          );\n        }\n      } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n        throw new RangeError(\n          `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n        );\n      }\n\n      usedTokens.push({ token: firstCharacter, fullToken: token });\n\n      const parseResult = parser.run(\n        dateStr,\n        token,\n        locale.match,\n        subFnOptions,\n      );\n\n      if (!parseResult) {\n        return invalidDate();\n      }\n\n      setters.push(parseResult.setter);\n\n      dateStr = parseResult.rest;\n    } else {\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      // Replace two single quote characters with one single quote character\n      if (token === \"''\") {\n        token = \"'\";\n      } else if (firstCharacter === \"'\") {\n        token = cleanEscapedString(token);\n      }\n\n      // Cut token from string, or, if string doesn't match the token, return Invalid Date\n      if (dateStr.indexOf(token) === 0) {\n        dateStr = dateStr.slice(token.length);\n      } else {\n        return invalidDate();\n      }\n    }\n  }\n\n  // Check if the remaining input contains something other than whitespace\n  if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n    return invalidDate();\n  }\n\n  const uniquePrioritySetters = setters\n    .map((setter) => setter.priority)\n    .sort((a, b) => b - a)\n    .filter((priority, index, array) => array.indexOf(priority) === index)\n    .map((priority) =>\n      setters\n        .filter((setter) => setter.priority === priority)\n        .sort((a, b) => b.subPriority - a.subPriority),\n    )\n    .map((setterArray) => setterArray[0]);\n\n  let date = toDate(referenceDate, options?.in);\n\n  if (isNaN(+date)) return invalidDate();\n\n  const flags = {};\n  for (const setter of uniquePrioritySetters) {\n    if (!setter.validate(date, subFnOptions)) {\n      return invalidDate();\n    }\n\n    const result = setter.set(date, flags, subFnOptions);\n    // Result is tuple (date, flags)\n    if (Array.isArray(result)) {\n      date = result[0];\n      Object.assign(flags, result[1]);\n      // Result is date\n    } else {\n      date = result;\n    }\n  }\n\n  return date;\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n  return (\n    value instanceof Date ||\n    (typeof value === \"object\" &&\n      Object.prototype.toString.call(value) === \"[object Date]\")\n  );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n  return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n  return +toDate(date) < +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n  const normalize = constructFrom.bind(\n    null,\n    context || dates.find((date) => typeof date === \"object\"),\n  );\n  return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const laterStartOfDay = startOfDay(laterDate_);\n  const earlierStartOfDay = startOfDay(earlierDate_);\n\n  const laterTimestamp =\n    +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n  const earlierTimestamp =\n    +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n  // Round the number of days to the nearest integer because the number of\n  // milliseconds in a day is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n  const date_ = toDate(date, options?.in);\n  date_.setFullYear(date_.getFullYear(), 0, 1);\n  date_.setHours(0, 0, 0, 0);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = differenceInCalendarDays(_date, startOfYear(_date));\n  const dayOfYear = diff + 1;\n  return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","export function addLeadingZeros(number, targetLength) {\n  const sign = number < 0 ? \"-\" : \"\";\n  const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n  return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n  // Year\n  y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    const signedYear = date.getFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n  },\n\n  // Month\n  M(date, token) {\n    const month = date.getMonth();\n    return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n\n  // Day of the month\n  d(date, token) {\n    return addLeadingZeros(date.getDate(), token.length);\n  },\n\n  // AM or PM\n  a(date, token) {\n    const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return dayPeriodEnumValue.toUpperCase();\n      case \"aaa\":\n        return dayPeriodEnumValue;\n      case \"aaaaa\":\n        return dayPeriodEnumValue[0];\n      case \"aaaa\":\n      default:\n        return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n    }\n  },\n\n  // Hour [1-12]\n  h(date, token) {\n    return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n  },\n\n  // Hour [0-23]\n  H(date, token) {\n    return addLeadingZeros(date.getHours(), token.length);\n  },\n\n  // Minute\n  m(date, token) {\n    return addLeadingZeros(date.getMinutes(), token.length);\n  },\n\n  // Second\n  s(date, token) {\n    return addLeadingZeros(date.getSeconds(), token.length);\n  },\n\n  // Fraction of second\n  S(date, token) {\n    const numberOfDigits = token.length;\n    const milliseconds = date.getMilliseconds();\n    const fractionalSeconds = Math.trunc(\n      milliseconds * Math.pow(10, numberOfDigits - 3),\n    );\n    return addLeadingZeros(fractionalSeconds, token.length);\n  },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n  am: \"am\",\n  pm: \"pm\",\n  midnight: \"midnight\",\n  noon: \"noon\",\n  morning: \"morning\",\n  afternoon: \"afternoon\",\n  evening: \"evening\",\n  night: \"night\",\n};\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n  // Era\n  G: function (date, token, localize) {\n    const era = date.getFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return localize.era(era, { width: \"abbreviated\" });\n      // A, B\n      case \"GGGGG\":\n        return localize.era(era, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return localize.era(era, { width: \"wide\" });\n    }\n  },\n\n  // Year\n  y: function (date, token, localize) {\n    // Ordinal number\n    if (token === \"yo\") {\n      const signedYear = date.getFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      const year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, { unit: \"year\" });\n    }\n\n    return lightFormatters.y(date, token);\n  },\n\n  // Local week-numbering year\n  Y: function (date, token, localize, options) {\n    const signedWeekYear = getWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === \"YY\") {\n      const twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === \"Yo\") {\n      return localize.ordinalNumber(weekYear, { unit: \"year\" });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n\n  // ISO week-numbering year\n  R: function (date, token) {\n    const isoWeekYear = getISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function (date, token) {\n    const year = date.getFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n\n  // Quarter\n  Q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"QQ\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone quarter\n  q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"qq\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // Month\n  M: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      case \"M\":\n      case \"MM\":\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // J, F, ..., D\n      case \"MMMMM\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"formatting\" });\n    }\n  },\n\n  // Stand-alone month\n  L: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case \"LL\":\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // J, F, ..., D\n      case \"LLLLL\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"standalone\" });\n    }\n  },\n\n  // Local week of year\n  w: function (date, token, localize, options) {\n    const week = getWeek(date, options);\n\n    if (token === \"wo\") {\n      return localize.ordinalNumber(week, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(week, token.length);\n  },\n\n  // ISO week of year\n  I: function (date, token, localize) {\n    const isoWeek = getISOWeek(date);\n\n    if (token === \"Io\") {\n      return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(isoWeek, token.length);\n  },\n\n  // Day of the month\n  d: function (date, token, localize) {\n    if (token === \"do\") {\n      return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n    }\n\n    return lightFormatters.d(date, token);\n  },\n\n  // Day of year\n  D: function (date, token, localize) {\n    const dayOfYear = getDayOfYear(date);\n\n    if (token === \"Do\") {\n      return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n    }\n\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n\n  // Day of week\n  E: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"EEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Local day of week\n  e: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case \"e\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"ee\":\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case \"eo\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"eee\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"eeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"eeee\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone local day of week\n  c: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case \"c\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"cc\":\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case \"co\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"ccc\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // T\n      case \"ccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"standalone\",\n        });\n      // Tuesday\n      case \"cccc\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // ISO day of week\n  i: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case \"i\":\n        return String(isoDayOfWeek);\n      // 02\n      case \"ii\":\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case \"io\":\n        return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"iiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"iiiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"iiii\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM or PM\n  a: function (date, token, localize) {\n    const hours = date.getHours();\n    const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"aaa\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"aaaaa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM, PM, midnight, noon\n  b: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n    }\n\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"bbb\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"bbbbb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"BBBBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Hour [1-12]\n  h: function (date, token, localize) {\n    if (token === \"ho\") {\n      let hours = date.getHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return lightFormatters.h(date, token);\n  },\n\n  // Hour [0-23]\n  H: function (date, token, localize) {\n    if (token === \"Ho\") {\n      return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n    }\n\n    return lightFormatters.H(date, token);\n  },\n\n  // Hour [0-11]\n  K: function (date, token, localize) {\n    const hours = date.getHours() % 12;\n\n    if (token === \"Ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Hour [1-24]\n  k: function (date, token, localize) {\n    let hours = date.getHours();\n    if (hours === 0) hours = 24;\n\n    if (token === \"ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Minute\n  m: function (date, token, localize) {\n    if (token === \"mo\") {\n      return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n    }\n\n    return lightFormatters.m(date, token);\n  },\n\n  // Second\n  s: function (date, token, localize) {\n    if (token === \"so\") {\n      return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n    }\n\n    return lightFormatters.s(date, token);\n  },\n\n  // Fraction of second\n  S: function (date, token) {\n    return lightFormatters.S(date, token);\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    if (timezoneOffset === 0) {\n      return \"Z\";\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"X\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case \"XXXX\":\n      case \"XX\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case \"XXXXX\":\n      case \"XXX\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"x\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case \"xxxx\":\n      case \"xx\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case \"xxxxx\":\n      case \"xxx\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (GMT)\n  O: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"O\":\n      case \"OO\":\n      case \"OOO\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"OOOO\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"z\":\n      case \"zz\":\n      case \"zzz\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"zzzz\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Seconds timestamp\n  t: function (date, token, _localize) {\n    const timestamp = Math.trunc(+date / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n\n  // Milliseconds timestamp\n  T: function (date, token, _localize) {\n    return addLeadingZeros(+date, token.length);\n  },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = Math.trunc(absOffset / 60);\n  const minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n  if (offset % 60 === 0) {\n    const sign = offset > 0 ? \"-\" : \"+\";\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n  const minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n *    and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const originalDate = toDate(date, options?.in);\n\n  if (!isValid(originalDate)) {\n    throw new RangeError(\"Invalid time value\");\n  }\n\n  let parts = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp)\n    .map((substring) => {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return { isToken: false, value: \"'\" };\n      }\n\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"'\") {\n        return { isToken: false, value: cleanEscapedString(substring) };\n      }\n\n      if (formatters[firstCharacter]) {\n        return { isToken: true, value: substring };\n      }\n\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      return { isToken: false, value: substring };\n    });\n\n  // invoke localize preprocessor (only for french locales at the moment)\n  if (locale.localize.preprocessor) {\n    parts = locale.localize.preprocessor(originalDate, parts);\n  }\n\n  const formatterOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  return parts\n    .map((part) => {\n      if (!part.isToken) return part.value;\n\n      const token = part.value;\n\n      if (\n        (!options?.useAdditionalWeekYearTokens &&\n          isProtectedWeekYearToken(token)) ||\n        (!options?.useAdditionalDayOfYearTokens &&\n          isProtectedDayOfYearToken(token))\n      ) {\n        warnOrThrowProtectedError(token, formatStr, String(date));\n      }\n\n      const formatter = formatters[token[0]];\n      return formatter(originalDate, token, locale.localize, formatterOptions);\n    })\n    .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n  const matched = input.match(escapedStringRegExp);\n\n  if (!matched) {\n    return input;\n  }\n\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setHours} function options.\n */\n\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param hours - The hours of the new date\n * @param options - An object with options\n *\n * @returns The new date with the hours set\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport function setHours(date, hours, options) {\n  const _date = toDate(date, options?.in);\n  _date.setHours(hours);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setHours;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setMinutes} function options.\n */\n\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows using extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, returned from the context function, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param minutes - The minutes of the new date\n * @param options - An object with options\n *\n * @returns The new date with the minutes set\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport function setMinutes(date, minutes, options) {\n  const date_ = toDate(date, options?.in);\n  date_.setMinutes(minutes);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default setMinutes;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setSeconds} function options.\n */\n\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date, with context support.\n *\n * @description\n * Set the seconds to the given date, with an optional context for time zone specification.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param seconds - The seconds of the new date\n * @param options - An object with options\n *\n * @returns The new date with the seconds set\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nexport function setSeconds(date, seconds, options) {\n  const _date = toDate(date, options?.in);\n  _date.setSeconds(seconds);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setSeconds;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setDate(1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfQuarter} function options.\n */\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a quarter\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport function startOfQuarter(date, options) {\n  const _date = toDate(date, options?.in);\n  const currentMonth = _date.getMonth();\n  const month = currentMonth - (currentMonth % 3);\n  _date.setMonth(month, 1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfDay} function options.\n */\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport function endOfDay(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfDay;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date, options?.in);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n  _date.setDate(_date.getDate() + diff);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  const month = _date.getMonth();\n  _date.setFullYear(_date.getFullYear(), month + 1, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameYear} function options.\n */\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same year\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport function isSameYear(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return laterDate_.getFullYear() === earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default isSameYear;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameMonth} function options.\n */\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same month (and year)\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport function isSameMonth(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return (\n    laterDate_.getFullYear() === earlierDate_.getFullYear() &&\n    laterDate_.getMonth() === earlierDate_.getMonth()\n  );\n}\n\n// Fallback for modularized imports:\nexport default isSameMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfQuarter } from \"./startOfQuarter.js\";\n\n/**\n * The {@link isSameQuarter} function options.\n */\n\n/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same quarter (and year)?\n *\n * @description\n * Are the given dates in the same quarter (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same quarter (and year)\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n *\n * @example\n * // Are 1 January 2014 and 1 January 2015 in the same quarter?\n * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2015, 0, 1))\n * //=> false\n */\nexport function isSameQuarter(laterDate, earlierDate, options) {\n  const [dateLeft_, dateRight_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return +startOfQuarter(dateLeft_) === +startOfQuarter(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameQuarter;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link isSameDay} function options.\n */\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same day (and year and month)\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport function isSameDay(laterDate, earlierDate, options) {\n  const [dateLeft_, dateRight_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return +startOfDay(dateLeft_) === +startOfDay(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The dates are equal\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * const result = isEqual(\n *   new Date(2014, 6, 2, 6, 30, 45, 0),\n *   new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport function isEqual(leftDate, rightDate) {\n  return +toDate(leftDate) === +toDate(rightDate);\n}\n\n// Fallback for modularized imports:\nexport default isEqual;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link isWithinInterval} function options.\n */\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * @param date - The date to check\n * @param interval - The interval to check\n * @param options - An object with options\n *\n * @returns The date is within the interval\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * // => true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * // => false\n *\n * @example\n * // For date equal to the interval start:\n * isWithinInterval(date, { start, end: date })\n * // => true\n *\n * @example\n * // For date equal to the interval end:\n * isWithinInterval(date, { start: date, end })\n * // => true\n */\nexport function isWithinInterval(date, interval, options) {\n  const time = +toDate(date, options?.in);\n  const [startTime, endTime] = [\n    +toDate(interval.start, options?.in),\n    +toDate(interval.end, options?.in),\n  ].sort((a, b) => a - b);\n\n  return time >= startTime && time <= endTime;\n}\n\n// Fallback for modularized imports:\nexport default isWithinInterval;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDaysInMonth} function options.\n */\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date, considering the context if provided.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The number of days in a month\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport function getDaysInMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  const monthIndex = _date.getMonth();\n  const lastDayOfMonth = constructFrom(_date, 0);\n  lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n  lastDayOfMonth.setHours(0, 0, 0, 0);\n  return lastDayOfMonth.getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDaysInMonth;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getDaysInMonth } from \"./getDaysInMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setMonth} function options.\n */\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param month - The month index to set (0-11)\n * @param options - The options\n *\n * @returns The new date with the month set\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport function setMonth(date, month, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  const day = _date.getDate();\n\n  const midMonth = constructFrom(options?.in || date, 0);\n  midMonth.setFullYear(year, month, 15);\n  midMonth.setHours(0, 0, 0, 0);\n  const daysInMonth = getDaysInMonth(midMonth);\n\n  // Set the earlier date, allows to wrap Jan 31 to Feb 28\n  _date.setMonth(month, Math.min(day, daysInMonth));\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setMonth;\n","import { setMonth } from \"./setMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setQuarter} function options.\n */\n\n/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param quarter - The quarter of the new date\n * @param options - The options\n *\n * @returns The new date with the quarter set\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * const result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nexport function setQuarter(date, quarter, options) {\n  const date_ = toDate(date, options?.in);\n  const oldQuarter = Math.trunc(date_.getMonth() / 3) + 1;\n  const diff = quarter - oldQuarter;\n  return setMonth(date_, date_.getMonth() + diff * 3);\n}\n\n// Fallback for modularized imports:\nexport default setQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getYear} function options.\n */\n\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The year\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport function getYear(date, options) {\n  return toDate(date, options?.in).getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default getYear;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getMonth} function options.\n */\n\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The month index (0-11)\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport function getMonth(date, options) {\n  return toDate(date, options?.in).getMonth();\n}\n\n// Fallback for modularized imports:\nexport default getMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfYear} function options.\n */\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The end of a year\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport function endOfYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  _date.setFullYear(year + 1, 0, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfYear;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getQuarter} function options.\n */\n\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The quarter\n *\n * @example\n * // Which quarter is 2 July 2014?\n * const result = getQuarter(new Date(2014, 6, 2));\n * //=> 3\n */\nexport function getQuarter(date, options) {\n  const _date = toDate(date, options?.in);\n  const quarter = Math.trunc(_date.getMonth() / 3) + 1;\n  return quarter;\n}\n\n// Fallback for modularized imports:\nexport default getQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getHours} function options.\n */\n\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The hours\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nexport function getHours(date, options) {\n  return toDate(date, options?.in).getHours();\n}\n\n// Fallback for modularized imports:\nexport default getHours;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getMinutes} function options.\n */\n\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The minutes\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nexport function getMinutes(date, options) {\n  return toDate(date, options?.in).getMinutes();\n}\n\n// Fallback for modularized imports:\nexport default getMinutes;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param date - The given date\n *\n * @returns The seconds\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nexport function getSeconds(date) {\n  return toDate(date).getSeconds();\n}\n\n// Fallback for modularized imports:\nexport default getSeconds;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n  const dayOfMonth = _date.getDate();\n\n  // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n  const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n  endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n  const daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    _date.setFullYear(\n      endOfDesiredMonth.getFullYear(),\n      endOfDesiredMonth.getMonth(),\n      dayOfMonth,\n    );\n    return _date;\n  }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n  return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n  const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n\n  return yearsDiff * 12 + monthsDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addQuarters} function options.\n */\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of quarters to be added.\n * @param options - An object with options\n *\n * @returns The new date with the quarters added\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=; Mon Dec 01 2014 00:00:00\n */\nexport function addQuarters(date, amount, options) {\n  return addMonths(date, amount * 3, options);\n}\n\n// Fallback for modularized imports:\nexport default addQuarters;\n","import { addQuarters } from \"./addQuarters.js\";\n\n/**\n * The {@link subQuarters} function options.\n */\n\n/**\n * @name subQuarters\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of quarters to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the quarters subtracted\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * const result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nexport function subQuarters(date, amount, options) {\n  return addQuarters(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subQuarters;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { getQuarter } from \"./getQuarter.js\";\n\n/**\n * The {@link differenceInCalendarQuarters} function options.\n */\n\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar quarters\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInCalendarQuarters(\n *   new Date(2014, 6, 2),\n *   new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport function differenceInCalendarQuarters(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n  const quartersDiff = getQuarter(laterDate_) - getQuarter(earlierDate_);\n\n  return yearsDiff * 4 + quartersDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarQuarters;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n  return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { addYears } from \"./addYears.js\";\n\n/**\n * The {@link subYears} function options.\n */\n\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the years subtracted\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport function subYears(date, amount, options) {\n  return addYears(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subYears;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarYears} function options.\n */\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n\n * @returns The number of calendar years\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * );\n * //=> 2\n */\nexport function differenceInCalendarYears(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return laterDate_.getFullYear() - earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarYears;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link min} function options.\n */\n\n/**\n * @name min\n * @category Common Helpers\n * @summary Returns the earliest of the given dates.\n *\n * @description\n * Returns the earliest of the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dates - The dates to compare\n *\n * @returns The earliest of the dates\n *\n * @example\n * // Which of these dates is the earliest?\n * const result = min([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport function min(dates, options) {\n  let result;\n  let context = options?.in;\n\n  dates.forEach((date) => {\n    // Use the first date object as the context function\n    if (!context && typeof date === \"object\")\n      context = constructFrom.bind(null, date);\n\n    const date_ = toDate(date, context);\n    if (!result || result > date_ || isNaN(+date_)) result = date_;\n  });\n\n  return constructFrom(context, result || NaN);\n}\n\n// Fallback for modularized imports:\nexport default min;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link max} function options.\n */\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dates - The dates to compare\n *\n * @returns The latest of the dates\n *\n * @example\n * // Which of these dates is the latest?\n * const result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport function max(dates, options) {\n  let result;\n  let context = options?.in;\n\n  dates.forEach((date) => {\n    // Use the first date object as the context function\n    if (!context && typeof date === \"object\")\n      context = constructFrom.bind(null, date);\n\n    const date_ = toDate(date, context);\n    if (!result || result < date_ || isNaN(+date_)) result = date_;\n  });\n\n  return constructFrom(context, result || NaN);\n}\n\n// Fallback for modularized imports:\nexport default max;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMilliseconds} function options.\n */\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n * @param options - The options object\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport function addMilliseconds(date, amount, options) {\n  return constructFrom(options?.in || date, +toDate(date) + amount);\n}\n\n// Fallback for modularized imports:\nexport default addMilliseconds;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link addHours} function options.\n */\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added\n * @param options - An object with options\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport function addHours(date, amount, options) {\n  return addMilliseconds(date, amount * millisecondsInHour, options);\n}\n\n// Fallback for modularized imports:\nexport default addHours;\n","import { millisecondsInMinute } from \"./constants.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMinutes} function options.\n */\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n * @param options - An object with options\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  _date.setTime(_date.getTime() + amount * millisecondsInMinute);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\n\n/**\n * The {@link addSeconds} function options.\n */\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport function addSeconds(date, amount, options) {\n  return addMilliseconds(date, amount * 1000, options);\n}\n\n// Fallback for modularized imports:\nexport default addSeconds;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param date - The date that should be after the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is after the second date\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport function isAfter(date, dateToCompare) {\n  return +toDate(date) > +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isAfter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDay} function options.\n */\n\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of week, 0 represents Sunday\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * const result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport function getDay(date, options) {\n  return toDate(date, options?.in).getDay();\n}\n\n// Fallback for modularized imports:\nexport default getDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDate} function options.\n */\n\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The day of month\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * const result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport function getDate(date, options) {\n  return toDate(date, options?.in).getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDate;\n","import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link addWeeks} function options.\n */\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of weeks to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be added.\n * @param options - An object with options\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport function addWeeks(date, amount, options) {\n  return addDays(date, amount * 7, options);\n}\n\n// Fallback for modularized imports:\nexport default addWeeks;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * @param date - The given date\n *\n * @returns The timestamp\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport function getTime(date) {\n  return +toDate(date);\n}\n\n// Fallback for modularized imports:\nexport default getTime;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setYear} function options.\n */\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param year - The year of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the year set\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport function setYear(date, year, options) {\n  const date_ = toDate(date, options?.in);\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(+date_)) return constructFrom(options?.in || date, NaN);\n\n  date_.setFullYear(year);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default setYear;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\n\n/**\n * The {@link differenceInDays} function options.\n */\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full days according to the local timezone\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n *\n * @example\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 1)\n * )\n * //=> 92\n */\nexport function differenceInDays(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const sign = compareLocalAsc(laterDate_, earlierDate_);\n  const difference = Math.abs(\n    differenceInCalendarDays(laterDate_, earlierDate_),\n  );\n\n  laterDate_.setDate(laterDate_.getDate() - sign * difference);\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  const isLastDayNotFull = Number(\n    compareLocalAsc(laterDate_, earlierDate_) === -sign,\n  );\n\n  const result = sign * (difference - isLastDayNotFull);\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}\n\n// Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(laterDate, earlierDate) {\n  const diff =\n    laterDate.getFullYear() - earlierDate.getFullYear() ||\n    laterDate.getMonth() - earlierDate.getMonth() ||\n    laterDate.getDate() - earlierDate.getDate() ||\n    laterDate.getHours() - earlierDate.getHours() ||\n    laterDate.getMinutes() - earlierDate.getMinutes() ||\n    laterDate.getSeconds() - earlierDate.getSeconds() ||\n    laterDate.getMilliseconds() - earlierDate.getMilliseconds();\n\n  if (diff < 0) return -1;\n  if (diff > 0) return 1;\n\n  // Return 0 if diff is 0; return NaN if diff is NaN\n  return diff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInDays;\n","import { addWeeks } from \"./addWeeks.js\";\n\n/**\n * The {@link subWeeks} function options.\n */\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the weeks subtracted\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * const result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport function subWeeks(date, amount, options) {\n  return addWeeks(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subWeeks;\n","import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n  return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { isShadowRoot, isHTMLElement } from '@floating-ui/utils/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport { floor } from '@floating-ui/utils';\nimport { tabbable } from 'tabbable';\n\n// Avoid Chrome DevTools blue warning.\nfunction getPlatform() {\n  const uaData = navigator.userAgentData;\n  if (uaData != null && uaData.platform) {\n    return uaData.platform;\n  }\n  return navigator.platform;\n}\nfunction getUserAgent() {\n  const uaData = navigator.userAgentData;\n  if (uaData && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(_ref => {\n      let {\n        brand,\n        version\n      } = _ref;\n      return brand + \"/\" + version;\n    }).join(' ');\n  }\n  return navigator.userAgent;\n}\nfunction isSafari() {\n  // Chrome DevTools does not complain about navigator.vendor\n  return /apple/i.test(navigator.vendor);\n}\nfunction isAndroid() {\n  const re = /android/i;\n  return re.test(getPlatform()) || re.test(getUserAgent());\n}\nfunction isMac() {\n  return getPlatform().toLowerCase().startsWith('mac') && !navigator.maxTouchPoints;\n}\nfunction isJSDOM() {\n  return getUserAgent().includes('jsdom/');\n}\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nconst TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),\" + \"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\n\nfunction activeElement(doc) {\n  let activeElement = doc.activeElement;\n  while (((_activeElement = activeElement) == null || (_activeElement = _activeElement.shadowRoot) == null ? void 0 : _activeElement.activeElement) != null) {\n    var _activeElement;\n    activeElement = activeElement.shadowRoot.activeElement;\n  }\n  return activeElement;\n}\nfunction contains(parent, child) {\n  if (!parent || !child) {\n    return false;\n  }\n  const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n\n  // then fallback to custom implementation with Shadow DOM support\n  if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    while (next) {\n      if (parent === next) {\n        return true;\n      }\n      // @ts-ignore\n      next = next.parentNode || next.host;\n    }\n  }\n\n  // Give up, the result is false\n  return false;\n}\nfunction getTarget(event) {\n  if ('composedPath' in event) {\n    return event.composedPath()[0];\n  }\n\n  // TS thinks `event` is of type never as it assumes all browsers support\n  // `composedPath()`, but browsers without shadow DOM don't.\n  return event.target;\n}\nfunction isEventTargetWithin(event, node) {\n  if (node == null) {\n    return false;\n  }\n  if ('composedPath' in event) {\n    return event.composedPath().includes(node);\n  }\n\n  // TS thinks `event` is of type never as it assumes all browsers support composedPath, but browsers without shadow dom don't\n  const e = event;\n  return e.target != null && node.contains(e.target);\n}\nfunction isRootElement(element) {\n  return element.matches('html,body');\n}\nfunction getDocument(node) {\n  return (node == null ? void 0 : node.ownerDocument) || document;\n}\nfunction isTypeableElement(element) {\n  return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nfunction isTypeableCombobox(element) {\n  if (!element) return false;\n  return element.getAttribute('role') === 'combobox' && isTypeableElement(element);\n}\nfunction matchesFocusVisible(element) {\n  // We don't want to block focus from working with `visibleOnly`\n  // (JSDOM doesn't match `:focus-visible` when the element has `:focus`)\n  if (!element || isJSDOM()) return true;\n  try {\n    return element.matches(':focus-visible');\n  } catch (_e) {\n    return true;\n  }\n}\nfunction getFloatingFocusElement(floatingElement) {\n  if (!floatingElement) {\n    return null;\n  }\n  // Try to find the element that has `{...getFloatingProps()}` spread on it.\n  // This indicates the floating element is acting as a positioning wrapper, and\n  // so focus should be managed on the child element with the event handlers and\n  // aria props.\n  return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(\"[\" + FOCUSABLE_ATTRIBUTE + \"]\") || floatingElement;\n}\n\nfunction getNodeChildren(nodes, id, onlyOpenChildren) {\n  if (onlyOpenChildren === void 0) {\n    onlyOpenChildren = true;\n  }\n  let allChildren = nodes.filter(node => {\n    var _node$context;\n    return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n  });\n  let currentChildren = allChildren;\n  while (currentChildren.length) {\n    currentChildren = onlyOpenChildren ? nodes.filter(node => {\n      var _currentChildren;\n      return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n        var _node$context2;\n        return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n      });\n    }) : nodes;\n    allChildren = allChildren.concat(currentChildren);\n  }\n  return allChildren;\n}\nfunction getDeepestNode(nodes, id) {\n  let deepestNodeId;\n  let maxDepth = -1;\n  function findDeepest(nodeId, depth) {\n    if (depth > maxDepth) {\n      deepestNodeId = nodeId;\n      maxDepth = depth;\n    }\n    const children = getNodeChildren(nodes, nodeId);\n    children.forEach(child => {\n      findDeepest(child.id, depth + 1);\n    });\n  }\n  findDeepest(id, 0);\n  return nodes.find(node => node.id === deepestNodeId);\n}\nfunction getNodeAncestors(nodes, id) {\n  var _nodes$find;\n  let allAncestors = [];\n  let currentParentId = (_nodes$find = nodes.find(node => node.id === id)) == null ? void 0 : _nodes$find.parentId;\n  while (currentParentId) {\n    const currentNode = nodes.find(node => node.id === currentParentId);\n    currentParentId = currentNode == null ? void 0 : currentNode.parentId;\n    if (currentNode) {\n      allAncestors = allAncestors.concat(currentNode);\n    }\n  }\n  return allAncestors;\n}\n\nfunction stopEvent(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\nfunction isReactEvent(event) {\n  return 'nativeEvent' in event;\n}\n\n// License: https://github.com/adobe/react-spectrum/blob/b35d5c02fe900badccd0cf1a8f23bb593419f238/packages/@react-aria/utils/src/isVirtualEvent.ts\nfunction isVirtualClick(event) {\n  // FIXME: Firefox is now emitting a deprecation warning for `mozInputSource`.\n  // Try to find a workaround for this. `react-aria` source still has the check.\n  if (event.mozInputSource === 0 && event.isTrusted) {\n    return true;\n  }\n  if (isAndroid() && event.pointerType) {\n    return event.type === 'click' && event.buttons === 1;\n  }\n  return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n  if (isJSDOM()) return false;\n  return !isAndroid() && event.width === 0 && event.height === 0 || isAndroid() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse' ||\n  // iOS VoiceOver returns 0.333• for width/height.\n  event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'touch';\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n  // On some Linux machines with Chromium, mouse inputs return a `pointerType`\n  // of \"pen\": https://github.com/floating-ui/floating-ui/issues/2015\n  const values = ['mouse', 'pen'];\n  if (!strict) {\n    values.push('', undefined);\n  }\n  return values.includes(pointerType);\n}\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n  ...React\n};\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\nconst useInsertionEffect = SafeReact.useInsertionEffect;\nconst useSafeInsertionEffect = useInsertionEffect || (fn => fn());\nfunction useEffectEvent(callback) {\n  const ref = React.useRef(() => {\n    if (process.env.NODE_ENV !== \"production\") {\n      throw new Error('Cannot call an event handler while rendering.');\n    }\n  });\n  useSafeInsertionEffect(() => {\n    ref.current = callback;\n  });\n  return React.useCallback(function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return ref.current == null ? void 0 : ref.current(...args);\n  }, []);\n}\n\nfunction isDifferentGridRow(index, cols, prevRow) {\n  return Math.floor(index / cols) !== prevRow;\n}\nfunction isIndexOutOfListBounds(listRef, index) {\n  return index < 0 || index >= listRef.current.length;\n}\nfunction getMinListIndex(listRef, disabledIndices) {\n  return findNonDisabledListIndex(listRef, {\n    disabledIndices\n  });\n}\nfunction getMaxListIndex(listRef, disabledIndices) {\n  return findNonDisabledListIndex(listRef, {\n    decrement: true,\n    startingIndex: listRef.current.length,\n    disabledIndices\n  });\n}\nfunction findNonDisabledListIndex(listRef, _temp) {\n  let {\n    startingIndex = -1,\n    decrement = false,\n    disabledIndices,\n    amount = 1\n  } = _temp === void 0 ? {} : _temp;\n  let index = startingIndex;\n  do {\n    index += decrement ? -amount : amount;\n  } while (index >= 0 && index <= listRef.current.length - 1 && isListIndexDisabled(listRef, index, disabledIndices));\n  return index;\n}\nfunction getGridNavigatedIndex(listRef, _ref) {\n  let {\n    event,\n    orientation,\n    loop,\n    rtl,\n    cols,\n    disabledIndices,\n    minIndex,\n    maxIndex,\n    prevIndex,\n    stopEvent: stop = false\n  } = _ref;\n  let nextIndex = prevIndex;\n  if (event.key === ARROW_UP) {\n    stop && stopEvent(event);\n    if (prevIndex === -1) {\n      nextIndex = maxIndex;\n    } else {\n      nextIndex = findNonDisabledListIndex(listRef, {\n        startingIndex: nextIndex,\n        amount: cols,\n        decrement: true,\n        disabledIndices\n      });\n      if (loop && (prevIndex - cols < minIndex || nextIndex < 0)) {\n        const col = prevIndex % cols;\n        const maxCol = maxIndex % cols;\n        const offset = maxIndex - (maxCol - col);\n        if (maxCol === col) {\n          nextIndex = maxIndex;\n        } else {\n          nextIndex = maxCol > col ? offset : offset - cols;\n        }\n      }\n    }\n    if (isIndexOutOfListBounds(listRef, nextIndex)) {\n      nextIndex = prevIndex;\n    }\n  }\n  if (event.key === ARROW_DOWN) {\n    stop && stopEvent(event);\n    if (prevIndex === -1) {\n      nextIndex = minIndex;\n    } else {\n      nextIndex = findNonDisabledListIndex(listRef, {\n        startingIndex: prevIndex,\n        amount: cols,\n        disabledIndices\n      });\n      if (loop && prevIndex + cols > maxIndex) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex % cols - cols,\n          amount: cols,\n          disabledIndices\n        });\n      }\n    }\n    if (isIndexOutOfListBounds(listRef, nextIndex)) {\n      nextIndex = prevIndex;\n    }\n  }\n\n  // Remains on the same row/column.\n  if (orientation === 'both') {\n    const prevRow = floor(prevIndex / cols);\n    if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) {\n      stop && stopEvent(event);\n      if (prevIndex % cols !== cols - 1) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex,\n          disabledIndices\n        });\n        if (loop && isDifferentGridRow(nextIndex, cols, prevRow)) {\n          nextIndex = findNonDisabledListIndex(listRef, {\n            startingIndex: prevIndex - prevIndex % cols - 1,\n            disabledIndices\n          });\n        }\n      } else if (loop) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex - prevIndex % cols - 1,\n          disabledIndices\n        });\n      }\n      if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n        nextIndex = prevIndex;\n      }\n    }\n    if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) {\n      stop && stopEvent(event);\n      if (prevIndex % cols !== 0) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex,\n          decrement: true,\n          disabledIndices\n        });\n        if (loop && isDifferentGridRow(nextIndex, cols, prevRow)) {\n          nextIndex = findNonDisabledListIndex(listRef, {\n            startingIndex: prevIndex + (cols - prevIndex % cols),\n            decrement: true,\n            disabledIndices\n          });\n        }\n      } else if (loop) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex + (cols - prevIndex % cols),\n          decrement: true,\n          disabledIndices\n        });\n      }\n      if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n        nextIndex = prevIndex;\n      }\n    }\n    const lastRow = floor(maxIndex / cols) === prevRow;\n    if (isIndexOutOfListBounds(listRef, nextIndex)) {\n      if (loop && lastRow) {\n        nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex - prevIndex % cols - 1,\n          disabledIndices\n        });\n      } else {\n        nextIndex = prevIndex;\n      }\n    }\n  }\n  return nextIndex;\n}\n\n/** For each cell index, gets the item index that occupies that cell */\nfunction createGridCellMap(sizes, cols, dense) {\n  const cellMap = [];\n  let startIndex = 0;\n  sizes.forEach((_ref2, index) => {\n    let {\n      width,\n      height\n    } = _ref2;\n    if (width > cols) {\n      if (process.env.NODE_ENV !== \"production\") {\n        throw new Error(\"[Floating UI]: Invalid grid - item width at index \" + index + \" is greater than grid columns\");\n      }\n    }\n    let itemPlaced = false;\n    if (dense) {\n      startIndex = 0;\n    }\n    while (!itemPlaced) {\n      const targetCells = [];\n      for (let i = 0; i < width; i++) {\n        for (let j = 0; j < height; j++) {\n          targetCells.push(startIndex + i + j * cols);\n        }\n      }\n      if (startIndex % cols + width <= cols && targetCells.every(cell => cellMap[cell] == null)) {\n        targetCells.forEach(cell => {\n          cellMap[cell] = index;\n        });\n        itemPlaced = true;\n      } else {\n        startIndex++;\n      }\n    }\n  });\n\n  // convert into a non-sparse array\n  return [...cellMap];\n}\n\n/** Gets cell index of an item's corner or -1 when index is -1. */\nfunction getGridCellIndexOfCorner(index, sizes, cellMap, cols, corner) {\n  if (index === -1) return -1;\n  const firstCellIndex = cellMap.indexOf(index);\n  const sizeItem = sizes[index];\n  switch (corner) {\n    case 'tl':\n      return firstCellIndex;\n    case 'tr':\n      if (!sizeItem) {\n        return firstCellIndex;\n      }\n      return firstCellIndex + sizeItem.width - 1;\n    case 'bl':\n      if (!sizeItem) {\n        return firstCellIndex;\n      }\n      return firstCellIndex + (sizeItem.height - 1) * cols;\n    case 'br':\n      return cellMap.lastIndexOf(index);\n  }\n}\n\n/** Gets all cell indices that correspond to the specified indices */\nfunction getGridCellIndices(indices, cellMap) {\n  return cellMap.flatMap((index, cellIndex) => indices.includes(index) ? [cellIndex] : []);\n}\nfunction isListIndexDisabled(listRef, index, disabledIndices) {\n  if (disabledIndices) {\n    return disabledIndices.includes(index);\n  }\n  const element = listRef.current[index];\n  return element == null || element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n}\n\nconst getTabbableOptions = () => ({\n  getShadowRoot: true,\n  displayCheck:\n  // JSDOM does not support the `tabbable` library. To solve this we can\n  // check if `ResizeObserver` is a real function (not polyfilled), which\n  // determines if the current environment is JSDOM-like.\n  typeof ResizeObserver === 'function' && ResizeObserver.toString().includes('[native code]') ? 'full' : 'none'\n});\nfunction getTabbableIn(container, dir) {\n  const list = tabbable(container, getTabbableOptions());\n  const len = list.length;\n  if (len === 0) return;\n  const active = activeElement(getDocument(container));\n  const index = list.indexOf(active);\n  const nextIndex = index === -1 ? dir === 1 ? 0 : len - 1 : index + dir;\n  return list[nextIndex];\n}\nfunction getNextTabbable(referenceElement) {\n  return getTabbableIn(getDocument(referenceElement).body, 1) || referenceElement;\n}\nfunction getPreviousTabbable(referenceElement) {\n  return getTabbableIn(getDocument(referenceElement).body, -1) || referenceElement;\n}\nfunction isOutsideEvent(event, container) {\n  const containerElement = container || event.currentTarget;\n  const relatedTarget = event.relatedTarget;\n  return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nfunction disableFocusInside(container) {\n  const tabbableElements = tabbable(container, getTabbableOptions());\n  tabbableElements.forEach(element => {\n    element.dataset.tabindex = element.getAttribute('tabindex') || '';\n    element.setAttribute('tabindex', '-1');\n  });\n}\nfunction enableFocusInside(container) {\n  const elements = container.querySelectorAll('[data-tabindex]');\n  elements.forEach(element => {\n    const tabindex = element.dataset.tabindex;\n    delete element.dataset.tabindex;\n    if (tabindex) {\n      element.setAttribute('tabindex', tabindex);\n    } else {\n      element.removeAttribute('tabindex');\n    }\n  });\n}\n\nexport { activeElement, contains, createGridCellMap, disableFocusInside, enableFocusInside, findNonDisabledListIndex, getDeepestNode, getDocument, getFloatingFocusElement, getGridCellIndexOfCorner, getGridCellIndices, getGridNavigatedIndex, getMaxListIndex, getMinListIndex, getNextTabbable, getNodeAncestors, getNodeChildren, getPlatform, getPreviousTabbable, getTabbableOptions, getTarget, getUserAgent, isAndroid, isDifferentGridRow, isEventTargetWithin, isIndexOutOfListBounds, isJSDOM, isListIndexDisabled, isMac, isMouseLikePointerType, isOutsideEvent, isReactEvent, isRootElement, isSafari, isTypeableCombobox, isTypeableElement, isVirtualClick, isVirtualPointerEvent, matchesFocusVisible, stopEvent, useEffectEvent, useLatestRef, index as useModernLayoutEffect };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  return [':popover-open', ':modal'].some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          var _overflowsData$;\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          const hasInitialMainAxisOverflow = ((_overflowsData$ = overflowsData[0]) == null ? void 0 : _overflowsData$.overflows[0]) > 0;\n          if (!ignoreCrossAxisOverflow || hasInitialMainAxisOverflow) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {\n  if (ignoreScrollbarX === void 0) {\n    ignoreScrollbarX = false;\n  }\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n  // RTL <body> scrollbar.\n  getWindowScrollBarX(documentElement, htmlRect));\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, offset as offset$1, shift as shift$1, limitShift as limitShift$1, flip as flip$1, size as size$1, autoPlacement as autoPlacement$1, hide as hide$1, inline as inline$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (typeof a === 'function' && a.toString() === b.toString()) {\n    return true;\n  }\n  let length;\n  let i;\n  let keys;\n  if (a && b && typeof a === 'object') {\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length !== b.length) return false;\n      for (i = length; i-- !== 0;) {\n        if (!deepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (i = length; i-- !== 0;) {\n      if (!{}.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (i = length; i-- !== 0;) {\n      const key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        continue;\n      }\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n    elements: {\n      reference: externalReference,\n      floating: externalFloating\n    } = {},\n    transform = true,\n    whileElementsMounted,\n    open\n  } = options;\n  const [data, setData] = React.useState({\n    x: 0,\n    y: 0,\n    strategy,\n    placement,\n    middlewareData: {},\n    isPositioned: false\n  });\n  const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n  if (!deepEqual(latestMiddleware, middleware)) {\n    setLatestMiddleware(middleware);\n  }\n  const [_reference, _setReference] = React.useState(null);\n  const [_floating, _setFloating] = React.useState(null);\n  const setReference = React.useCallback(node => {\n    if (node !== referenceRef.current) {\n      referenceRef.current = node;\n      _setReference(node);\n    }\n  }, []);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, []);\n  const referenceEl = externalReference || _reference;\n  const floatingEl = externalFloating || _floating;\n  const referenceRef = React.useRef(null);\n  const floatingRef = React.useRef(null);\n  const dataRef = React.useRef(data);\n  const hasWhileElementsMounted = whileElementsMounted != null;\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const openRef = useLatestRef(open);\n  const update = React.useCallback(() => {\n    if (!referenceRef.current || !floatingRef.current) {\n      return;\n    }\n    const config = {\n      placement,\n      strategy,\n      middleware: latestMiddleware\n    };\n    if (platformRef.current) {\n      config.platform = platformRef.current;\n    }\n    computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n      const fullData = {\n        ...data,\n        // The floating element's position may be recomputed while it's closed\n        // but still mounted (such as when transitioning out). To ensure\n        // `isPositioned` will be `false` initially on the next open, avoid\n        // setting it to `true` when `open === false` (must be specified).\n        isPositioned: openRef.current !== false\n      };\n      if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n        dataRef.current = fullData;\n        ReactDOM.flushSync(() => {\n          setData(fullData);\n        });\n      }\n    });\n  }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n  index(() => {\n    if (open === false && dataRef.current.isPositioned) {\n      dataRef.current.isPositioned = false;\n      setData(data => ({\n        ...data,\n        isPositioned: false\n      }));\n    }\n  }, [open]);\n  const isMountedRef = React.useRef(false);\n  index(() => {\n    isMountedRef.current = true;\n    return () => {\n      isMountedRef.current = false;\n    };\n  }, []);\n  index(() => {\n    if (referenceEl) referenceRef.current = referenceEl;\n    if (floatingEl) floatingRef.current = floatingEl;\n    if (referenceEl && floatingEl) {\n      if (whileElementsMountedRef.current) {\n        return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n      }\n      update();\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n  const refs = React.useMemo(() => ({\n    reference: referenceRef,\n    floating: floatingRef,\n    setReference,\n    setFloating\n  }), [setReference, setFloating]);\n  const elements = React.useMemo(() => ({\n    reference: referenceEl,\n    floating: floatingEl\n  }), [referenceEl, floatingEl]);\n  const floatingStyles = React.useMemo(() => {\n    const initialStyles = {\n      position: strategy,\n      left: 0,\n      top: 0\n    };\n    if (!elements.floating) {\n      return initialStyles;\n    }\n    const x = roundByDPR(elements.floating, data.x);\n    const y = roundByDPR(elements.floating, data.y);\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n        ...(getDPR(elements.floating) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy,\n      left: x,\n      top: y\n    };\n  }, [strategy, transform, elements.floating, data.x, data.y]);\n  return React.useMemo(() => ({\n    ...data,\n    update,\n    refs,\n    elements,\n    floatingStyles\n  }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const {\n        element,\n        padding\n      } = typeof options === 'function' ? options(state) : options;\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$2({\n            element: element.current,\n            padding\n          }).fn(state);\n        }\n        return {};\n      }\n      if (element) {\n        return arrow$2({\n          element,\n          padding\n        }).fn(state);\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n  ...offset$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n  ...shift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n  ...limitShift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n  ...flip$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n  ...size$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n  ...autoPlacement$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n  ...hide$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n  ...inline$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n  ...arrow$1(options),\n  options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import * as React from 'react';\nimport { useModernLayoutEffect, useEffectEvent, getMinListIndex, getMaxListIndex, createGridCellMap, isListIndexDisabled, getGridNavigatedIndex, getGridCellIndexOfCorner, getGridCellIndices, findNonDisabledListIndex, isIndexOutOfListBounds, useLatestRef, getDocument as getDocument$1, isMouseLikePointerType, contains as contains$1, isSafari, enableFocusInside, isOutsideEvent, getPreviousTabbable, getNextTabbable, disableFocusInside, isTypeableCombobox, getFloatingFocusElement, getTabbableOptions, getNodeAncestors, activeElement, getNodeChildren as getNodeChildren$1, stopEvent, getTarget as getTarget$1, isVirtualClick, isVirtualPointerEvent, getPlatform, isTypeableElement, isReactEvent, isRootElement, isEventTargetWithin, matchesFocusVisible, isMac, getDeepestNode, getUserAgent } from '@floating-ui/react/utils';\nimport { jsx, jsxs, Fragment } from 'react/jsx-runtime';\nimport { getComputedStyle, isElement, isShadowRoot, getNodeName, isHTMLElement, getWindow, isLastTraversableNode, getParentNode, isWebKit } from '@floating-ui/utils/dom';\nimport { tabbable, isTabbable, focusable } from 'tabbable';\nimport * as ReactDOM from 'react-dom';\nimport { getOverflowAncestors, useFloating as useFloating$1, offset, detectOverflow } from '@floating-ui/react-dom';\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/react-dom';\nimport { evaluate, max, round, min } from '@floating-ui/utils';\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n * @see https://floating-ui.com/docs/react-utils#usemergerefs\n */\nfunction useMergeRefs(refs) {\n  const cleanupRef = React.useRef(undefined);\n  const refEffect = React.useCallback(instance => {\n    const cleanups = refs.map(ref => {\n      if (ref == null) {\n        return;\n      }\n      if (typeof ref === 'function') {\n        const refCallback = ref;\n        const refCleanup = refCallback(instance);\n        return typeof refCleanup === 'function' ? refCleanup : () => {\n          refCallback(null);\n        };\n      }\n      ref.current = instance;\n      return () => {\n        ref.current = null;\n      };\n    });\n    return () => {\n      cleanups.forEach(refCleanup => refCleanup == null ? void 0 : refCleanup());\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n  return React.useMemo(() => {\n    if (refs.every(ref => ref == null)) {\n      return null;\n    }\n    return value => {\n      if (cleanupRef.current) {\n        cleanupRef.current();\n        cleanupRef.current = undefined;\n      }\n      if (value != null) {\n        cleanupRef.current = refEffect(value);\n      }\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}\n\nfunction sortByDocumentPosition(a, b) {\n  const position = a.compareDocumentPosition(b);\n  if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n    return -1;\n  }\n  if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) {\n    return 1;\n  }\n  return 0;\n}\nconst FloatingListContext = /*#__PURE__*/React.createContext({\n  register: () => {},\n  unregister: () => {},\n  map: /*#__PURE__*/new Map(),\n  elementsRef: {\n    current: []\n  }\n});\n/**\n * Provides context for a list of items within the floating element.\n * @see https://floating-ui.com/docs/FloatingList\n */\nfunction FloatingList(props) {\n  const {\n    children,\n    elementsRef,\n    labelsRef\n  } = props;\n  const [nodes, setNodes] = React.useState(() => new Set());\n  const register = React.useCallback(node => {\n    setNodes(prevSet => new Set(prevSet).add(node));\n  }, []);\n  const unregister = React.useCallback(node => {\n    setNodes(prevSet => {\n      const set = new Set(prevSet);\n      set.delete(node);\n      return set;\n    });\n  }, []);\n  const map = React.useMemo(() => {\n    const newMap = new Map();\n    const sortedNodes = Array.from(nodes.keys()).sort(sortByDocumentPosition);\n    sortedNodes.forEach((node, index) => {\n      newMap.set(node, index);\n    });\n    return newMap;\n  }, [nodes]);\n  return /*#__PURE__*/jsx(FloatingListContext.Provider, {\n    value: React.useMemo(() => ({\n      register,\n      unregister,\n      map,\n      elementsRef,\n      labelsRef\n    }), [register, unregister, map, elementsRef, labelsRef]),\n    children: children\n  });\n}\n/**\n * Used to register a list item and its index (DOM position) in the\n * `FloatingList`.\n * @see https://floating-ui.com/docs/FloatingList#uselistitem\n */\nfunction useListItem(props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    label\n  } = props;\n  const {\n    register,\n    unregister,\n    map,\n    elementsRef,\n    labelsRef\n  } = React.useContext(FloatingListContext);\n  const [index, setIndex] = React.useState(null);\n  const componentRef = React.useRef(null);\n  const ref = React.useCallback(node => {\n    componentRef.current = node;\n    if (index !== null) {\n      elementsRef.current[index] = node;\n      if (labelsRef) {\n        var _node$textContent;\n        const isLabelDefined = label !== undefined;\n        labelsRef.current[index] = isLabelDefined ? label : (_node$textContent = node == null ? void 0 : node.textContent) != null ? _node$textContent : null;\n      }\n    }\n  }, [index, elementsRef, labelsRef, label]);\n  useModernLayoutEffect(() => {\n    const node = componentRef.current;\n    if (node) {\n      register(node);\n      return () => {\n        unregister(node);\n      };\n    }\n  }, [register, unregister]);\n  useModernLayoutEffect(() => {\n    const index = componentRef.current ? map.get(componentRef.current) : null;\n    if (index != null) {\n      setIndex(index);\n    }\n  }, [map]);\n  return React.useMemo(() => ({\n    ref,\n    index: index == null ? -1 : index\n  }), [index, ref]);\n}\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nconst ACTIVE_KEY = 'active';\nconst SELECTED_KEY = 'selected';\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\n\nfunction renderJsx(render, computedProps) {\n  if (typeof render === 'function') {\n    return render(computedProps);\n  }\n  if (render) {\n    return /*#__PURE__*/React.cloneElement(render, computedProps);\n  }\n  return /*#__PURE__*/jsx(\"div\", {\n    ...computedProps\n  });\n}\nconst CompositeContext = /*#__PURE__*/React.createContext({\n  activeIndex: 0,\n  onNavigate: () => {}\n});\nconst horizontalKeys = [ARROW_LEFT, ARROW_RIGHT];\nconst verticalKeys = [ARROW_UP, ARROW_DOWN];\nconst allKeys = [...horizontalKeys, ...verticalKeys];\n\n/**\n * Creates a single tab stop whose items are navigated by arrow keys, which\n * provides list navigation outside of floating element contexts.\n *\n * This is useful to enable navigation of a list of items that aren’t part of a\n * floating element. A menubar is an example of a composite, with each reference\n * element being an item.\n * @see https://floating-ui.com/docs/Composite\n */\nconst Composite = /*#__PURE__*/React.forwardRef(function Composite(props, forwardedRef) {\n  const {\n    render,\n    orientation = 'both',\n    loop = true,\n    rtl = false,\n    cols = 1,\n    disabledIndices,\n    activeIndex: externalActiveIndex,\n    onNavigate: externalSetActiveIndex,\n    itemSizes,\n    dense = false,\n    ...domProps\n  } = props;\n  const [internalActiveIndex, internalSetActiveIndex] = React.useState(0);\n  const activeIndex = externalActiveIndex != null ? externalActiveIndex : internalActiveIndex;\n  const onNavigate = useEffectEvent(externalSetActiveIndex != null ? externalSetActiveIndex : internalSetActiveIndex);\n  const elementsRef = React.useRef([]);\n  const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n  const contextValue = React.useMemo(() => ({\n    activeIndex,\n    onNavigate\n  }), [activeIndex, onNavigate]);\n  const isGrid = cols > 1;\n  function handleKeyDown(event) {\n    if (!allKeys.includes(event.key)) return;\n    let nextIndex = activeIndex;\n    const minIndex = getMinListIndex(elementsRef, disabledIndices);\n    const maxIndex = getMaxListIndex(elementsRef, disabledIndices);\n    const horizontalEndKey = rtl ? ARROW_LEFT : ARROW_RIGHT;\n    const horizontalStartKey = rtl ? ARROW_RIGHT : ARROW_LEFT;\n    if (isGrid) {\n      const sizes = itemSizes || Array.from({\n        length: elementsRef.current.length\n      }, () => ({\n        width: 1,\n        height: 1\n      }));\n      // To calculate movements on the grid, we use hypothetical cell indices\n      // as if every item was 1x1, then convert back to real indices.\n      const cellMap = createGridCellMap(sizes, cols, dense);\n      const minGridIndex = cellMap.findIndex(index => index != null && !isListIndexDisabled(elementsRef, index, disabledIndices));\n      // last enabled index\n      const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isListIndexDisabled(elementsRef, index, disabledIndices) ? cellIndex : foundIndex, -1);\n      const maybeNextIndex = cellMap[getGridNavigatedIndex({\n        current: cellMap.map(itemIndex => itemIndex ? elementsRef.current[itemIndex] : null)\n      }, {\n        event,\n        orientation,\n        loop,\n        rtl,\n        cols,\n        // treat undefined (empty grid spaces) as disabled indices so we\n        // don't end up in them\n        disabledIndices: getGridCellIndices([...(disabledIndices || elementsRef.current.map((_, index) => isListIndexDisabled(elementsRef, index) ? index : undefined)), undefined], cellMap),\n        minIndex: minGridIndex,\n        maxIndex: maxGridIndex,\n        prevIndex: getGridCellIndexOfCorner(activeIndex > maxIndex ? minIndex : activeIndex, sizes, cellMap, cols,\n        // use a corner matching the edge closest to the direction we're\n        // moving in so we don't end up in the same item. Prefer\n        // top/left over bottom/right.\n        event.key === ARROW_DOWN ? 'bl' : event.key === horizontalEndKey ? 'tr' : 'tl')\n      })];\n      if (maybeNextIndex != null) {\n        nextIndex = maybeNextIndex;\n      }\n    }\n    const toEndKeys = {\n      horizontal: [horizontalEndKey],\n      vertical: [ARROW_DOWN],\n      both: [horizontalEndKey, ARROW_DOWN]\n    }[orientation];\n    const toStartKeys = {\n      horizontal: [horizontalStartKey],\n      vertical: [ARROW_UP],\n      both: [horizontalStartKey, ARROW_UP]\n    }[orientation];\n    const preventedKeys = isGrid ? allKeys : {\n      horizontal: horizontalKeys,\n      vertical: verticalKeys,\n      both: allKeys\n    }[orientation];\n    if (nextIndex === activeIndex && [...toEndKeys, ...toStartKeys].includes(event.key)) {\n      if (loop && nextIndex === maxIndex && toEndKeys.includes(event.key)) {\n        nextIndex = minIndex;\n      } else if (loop && nextIndex === minIndex && toStartKeys.includes(event.key)) {\n        nextIndex = maxIndex;\n      } else {\n        nextIndex = findNonDisabledListIndex(elementsRef, {\n          startingIndex: nextIndex,\n          decrement: toStartKeys.includes(event.key),\n          disabledIndices\n        });\n      }\n    }\n    if (nextIndex !== activeIndex && !isIndexOutOfListBounds(elementsRef, nextIndex)) {\n      var _elementsRef$current$;\n      event.stopPropagation();\n      if (preventedKeys.includes(event.key)) {\n        event.preventDefault();\n      }\n      onNavigate(nextIndex);\n      (_elementsRef$current$ = elementsRef.current[nextIndex]) == null || _elementsRef$current$.focus();\n    }\n  }\n  const computedProps = {\n    ...domProps,\n    ...renderElementProps,\n    ref: forwardedRef,\n    'aria-orientation': orientation === 'both' ? undefined : orientation,\n    onKeyDown(e) {\n      domProps.onKeyDown == null || domProps.onKeyDown(e);\n      renderElementProps.onKeyDown == null || renderElementProps.onKeyDown(e);\n      handleKeyDown(e);\n    }\n  };\n  return /*#__PURE__*/jsx(CompositeContext.Provider, {\n    value: contextValue,\n    children: /*#__PURE__*/jsx(FloatingList, {\n      elementsRef: elementsRef,\n      children: renderJsx(render, computedProps)\n    })\n  });\n});\n/**\n * @see https://floating-ui.com/docs/Composite\n */\nconst CompositeItem = /*#__PURE__*/React.forwardRef(function CompositeItem(props, forwardedRef) {\n  const {\n    render,\n    ...domProps\n  } = props;\n  const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n  const {\n    activeIndex,\n    onNavigate\n  } = React.useContext(CompositeContext);\n  const {\n    ref,\n    index\n  } = useListItem();\n  const mergedRef = useMergeRefs([ref, forwardedRef, renderElementProps.ref]);\n  const isActive = activeIndex === index;\n  const computedProps = {\n    ...domProps,\n    ...renderElementProps,\n    ref: mergedRef,\n    tabIndex: isActive ? 0 : -1,\n    'data-active': isActive ? '' : undefined,\n    onFocus(e) {\n      domProps.onFocus == null || domProps.onFocus(e);\n      renderElementProps.onFocus == null || renderElementProps.onFocus(e);\n      onNavigate(index);\n    }\n  };\n  return renderJsx(render, computedProps);\n});\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n  ...React\n};\n\nlet serverHandoffComplete = false;\nlet count = 0;\nconst genId = () => // Ensure the id is unique with multiple independent versions of Floating UI\n// on <React 18\n\"floating-ui-\" + Math.random().toString(36).slice(2, 6) + count++;\nfunction useFloatingId() {\n  const [id, setId] = React.useState(() => serverHandoffComplete ? genId() : undefined);\n  useModernLayoutEffect(() => {\n    if (id == null) {\n      setId(genId());\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  React.useEffect(() => {\n    serverHandoffComplete = true;\n  }, []);\n  return id;\n}\nconst useReactId = SafeReact.useId;\n\n/**\n * Uses React 18's built-in `useId()` when available, or falls back to a\n * slightly less performant (requiring a double render) implementation for\n * earlier React versions.\n * @see https://floating-ui.com/docs/react-utils#useid\n */\nconst useId = useReactId || useFloatingId;\n\nlet devMessageSet;\nif (process.env.NODE_ENV !== \"production\") {\n  devMessageSet = /*#__PURE__*/new Set();\n}\nfunction warn() {\n  var _devMessageSet;\n  for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {\n    messages[_key] = arguments[_key];\n  }\n  const message = \"Floating UI: \" + messages.join(' ');\n  if (!((_devMessageSet = devMessageSet) != null && _devMessageSet.has(message))) {\n    var _devMessageSet2;\n    (_devMessageSet2 = devMessageSet) == null || _devMessageSet2.add(message);\n    console.warn(message);\n  }\n}\nfunction error() {\n  var _devMessageSet3;\n  for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    messages[_key2] = arguments[_key2];\n  }\n  const message = \"Floating UI: \" + messages.join(' ');\n  if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {\n    var _devMessageSet4;\n    (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);\n    console.error(message);\n  }\n}\n\n/**\n * Renders a pointing arrow triangle.\n * @see https://floating-ui.com/docs/FloatingArrow\n */\nconst FloatingArrow = /*#__PURE__*/React.forwardRef(function FloatingArrow(props, ref) {\n  const {\n    context: {\n      placement,\n      elements: {\n        floating\n      },\n      middlewareData: {\n        arrow,\n        shift\n      }\n    },\n    width = 14,\n    height = 7,\n    tipRadius = 0,\n    strokeWidth = 0,\n    staticOffset,\n    stroke,\n    d,\n    style: {\n      transform,\n      ...restStyle\n    } = {},\n    ...rest\n  } = props;\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!ref) {\n      warn('The `ref` prop is required for `FloatingArrow`.');\n    }\n  }\n  const clipPathId = useId();\n  const [isRTL, setIsRTL] = React.useState(false);\n\n  // https://github.com/floating-ui/floating-ui/issues/2932\n  useModernLayoutEffect(() => {\n    if (!floating) return;\n    const isRTL = getComputedStyle(floating).direction === 'rtl';\n    if (isRTL) {\n      setIsRTL(true);\n    }\n  }, [floating]);\n  if (!floating) {\n    return null;\n  }\n  const [side, alignment] = placement.split('-');\n  const isVerticalSide = side === 'top' || side === 'bottom';\n  let computedStaticOffset = staticOffset;\n  if (isVerticalSide && shift != null && shift.x || !isVerticalSide && shift != null && shift.y) {\n    computedStaticOffset = null;\n  }\n\n  // Strokes must be double the border width, this ensures the stroke's width\n  // works as you'd expect.\n  const computedStrokeWidth = strokeWidth * 2;\n  const halfStrokeWidth = computedStrokeWidth / 2;\n  const svgX = width / 2 * (tipRadius / -8 + 1);\n  const svgY = height / 2 * tipRadius / 4;\n  const isCustomShape = !!d;\n  const yOffsetProp = computedStaticOffset && alignment === 'end' ? 'bottom' : 'top';\n  let xOffsetProp = computedStaticOffset && alignment === 'end' ? 'right' : 'left';\n  if (computedStaticOffset && isRTL) {\n    xOffsetProp = alignment === 'end' ? 'left' : 'right';\n  }\n  const arrowX = (arrow == null ? void 0 : arrow.x) != null ? computedStaticOffset || arrow.x : '';\n  const arrowY = (arrow == null ? void 0 : arrow.y) != null ? computedStaticOffset || arrow.y : '';\n  const dValue = d || 'M0,0' + (\" H\" + width) + (\" L\" + (width - svgX) + \",\" + (height - svgY)) + (\" Q\" + width / 2 + \",\" + height + \" \" + svgX + \",\" + (height - svgY)) + ' Z';\n  const rotation = {\n    top: isCustomShape ? 'rotate(180deg)' : '',\n    left: isCustomShape ? 'rotate(90deg)' : 'rotate(-90deg)',\n    bottom: isCustomShape ? '' : 'rotate(180deg)',\n    right: isCustomShape ? 'rotate(-90deg)' : 'rotate(90deg)'\n  }[side];\n  return /*#__PURE__*/jsxs(\"svg\", {\n    ...rest,\n    \"aria-hidden\": true,\n    ref: ref,\n    width: isCustomShape ? width : width + computedStrokeWidth,\n    height: width,\n    viewBox: \"0 0 \" + width + \" \" + (height > width ? height : width),\n    style: {\n      position: 'absolute',\n      pointerEvents: 'none',\n      [xOffsetProp]: arrowX,\n      [yOffsetProp]: arrowY,\n      [side]: isVerticalSide || isCustomShape ? '100%' : \"calc(100% - \" + computedStrokeWidth / 2 + \"px)\",\n      transform: [rotation, transform].filter(t => !!t).join(' '),\n      ...restStyle\n    },\n    children: [computedStrokeWidth > 0 && /*#__PURE__*/jsx(\"path\", {\n      clipPath: \"url(#\" + clipPathId + \")\",\n      fill: \"none\",\n      stroke: stroke\n      // Account for the stroke on the fill path rendered below.\n      ,\n      strokeWidth: computedStrokeWidth + (d ? 0 : 1),\n      d: dValue\n    }), /*#__PURE__*/jsx(\"path\", {\n      stroke: computedStrokeWidth && !d ? rest.fill : 'none',\n      d: dValue\n    }), /*#__PURE__*/jsx(\"clipPath\", {\n      id: clipPathId,\n      children: /*#__PURE__*/jsx(\"rect\", {\n        x: -halfStrokeWidth,\n        y: halfStrokeWidth * (isCustomShape ? -1 : 1),\n        width: width + computedStrokeWidth,\n        height: width\n      })\n    })]\n  });\n});\n\nfunction createEventEmitter() {\n  const map = new Map();\n  return {\n    emit(event, data) {\n      var _map$get;\n      (_map$get = map.get(event)) == null || _map$get.forEach(listener => listener(data));\n    },\n    on(event, listener) {\n      if (!map.has(event)) {\n        map.set(event, new Set());\n      }\n      map.get(event).add(listener);\n    },\n    off(event, listener) {\n      var _map$get2;\n      (_map$get2 = map.get(event)) == null || _map$get2.delete(listener);\n    }\n  };\n}\n\nconst FloatingNodeContext = /*#__PURE__*/React.createContext(null);\nconst FloatingTreeContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */\nconst useFloatingParentNodeId = () => {\n  var _React$useContext;\n  return ((_React$useContext = React.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;\n};\n\n/**\n * Returns the nearest floating tree context, if available.\n */\nconst useFloatingTree = () => React.useContext(FloatingTreeContext);\n\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction useFloatingNodeId(customParentId) {\n  const id = useId();\n  const tree = useFloatingTree();\n  const reactParentId = useFloatingParentNodeId();\n  const parentId = customParentId || reactParentId;\n  useModernLayoutEffect(() => {\n    if (!id) return;\n    const node = {\n      id,\n      parentId\n    };\n    tree == null || tree.addNode(node);\n    return () => {\n      tree == null || tree.removeNode(node);\n    };\n  }, [tree, id, parentId]);\n  return id;\n}\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingNode(props) {\n  const {\n    children,\n    id\n  } = props;\n  const parentId = useFloatingParentNodeId();\n  return /*#__PURE__*/jsx(FloatingNodeContext.Provider, {\n    value: React.useMemo(() => ({\n      id,\n      parentId\n    }), [id, parentId]),\n    children: children\n  });\n}\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingTree(props) {\n  const {\n    children\n  } = props;\n  const nodesRef = React.useRef([]);\n  const addNode = React.useCallback(node => {\n    nodesRef.current = [...nodesRef.current, node];\n  }, []);\n  const removeNode = React.useCallback(node => {\n    nodesRef.current = nodesRef.current.filter(n => n !== node);\n  }, []);\n  const [events] = React.useState(() => createEventEmitter());\n  return /*#__PURE__*/jsx(FloatingTreeContext.Provider, {\n    value: React.useMemo(() => ({\n      nodesRef,\n      addNode,\n      removeNode,\n      events\n    }), [addNode, removeNode, events]),\n    children: children\n  });\n}\n\nfunction createAttribute(name) {\n  return \"data-floating-ui-\" + name;\n}\n\nfunction clearTimeoutIfSet(timeoutRef) {\n  if (timeoutRef.current !== -1) {\n    clearTimeout(timeoutRef.current);\n    timeoutRef.current = -1;\n  }\n}\n\nconst safePolygonIdentifier = /*#__PURE__*/createAttribute('safe-polygon');\nfunction getDelay(value, prop, pointerType) {\n  if (pointerType && !isMouseLikePointerType(pointerType)) {\n    return 0;\n  }\n  if (typeof value === 'number') {\n    return value;\n  }\n  if (typeof value === 'function') {\n    const result = value();\n    if (typeof result === 'number') {\n      return result;\n    }\n    return result == null ? void 0 : result[prop];\n  }\n  return value == null ? void 0 : value[prop];\n}\nfunction getRestMs(value) {\n  if (typeof value === 'function') {\n    return value();\n  }\n  return value;\n}\n/**\n * Opens the floating element while hovering over the reference element, like\n * CSS `:hover`.\n * @see https://floating-ui.com/docs/useHover\n */\nfunction useHover(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    dataRef,\n    events,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    delay = 0,\n    handleClose = null,\n    mouseOnly = false,\n    restMs = 0,\n    move = true\n  } = props;\n  const tree = useFloatingTree();\n  const parentId = useFloatingParentNodeId();\n  const handleCloseRef = useLatestRef(handleClose);\n  const delayRef = useLatestRef(delay);\n  const openRef = useLatestRef(open);\n  const restMsRef = useLatestRef(restMs);\n  const pointerTypeRef = React.useRef();\n  const timeoutRef = React.useRef(-1);\n  const handlerRef = React.useRef();\n  const restTimeoutRef = React.useRef(-1);\n  const blockMouseMoveRef = React.useRef(true);\n  const performedPointerEventsMutationRef = React.useRef(false);\n  const unbindMouseMoveRef = React.useRef(() => {});\n  const restTimeoutPendingRef = React.useRef(false);\n  const isHoverOpen = React.useCallback(() => {\n    var _dataRef$current$open;\n    const type = (_dataRef$current$open = dataRef.current.openEvent) == null ? void 0 : _dataRef$current$open.type;\n    return (type == null ? void 0 : type.includes('mouse')) && type !== 'mousedown';\n  }, [dataRef]);\n\n  // When closing before opening, clear the delay timeouts to cancel it\n  // from showing.\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onOpenChange(_ref) {\n      let {\n        open\n      } = _ref;\n      if (!open) {\n        clearTimeoutIfSet(timeoutRef);\n        clearTimeoutIfSet(restTimeoutRef);\n        blockMouseMoveRef.current = true;\n        restTimeoutPendingRef.current = false;\n      }\n    }\n    events.on('openchange', onOpenChange);\n    return () => {\n      events.off('openchange', onOpenChange);\n    };\n  }, [enabled, events]);\n  React.useEffect(() => {\n    if (!enabled) return;\n    if (!handleCloseRef.current) return;\n    if (!open) return;\n    function onLeave(event) {\n      if (isHoverOpen()) {\n        onOpenChange(false, event, 'hover');\n      }\n    }\n    const html = getDocument$1(elements.floating).documentElement;\n    html.addEventListener('mouseleave', onLeave);\n    return () => {\n      html.removeEventListener('mouseleave', onLeave);\n    };\n  }, [elements.floating, open, onOpenChange, enabled, handleCloseRef, isHoverOpen]);\n  const closeWithDelay = React.useCallback(function (event, runElseBranch, reason) {\n    if (runElseBranch === void 0) {\n      runElseBranch = true;\n    }\n    if (reason === void 0) {\n      reason = 'hover';\n    }\n    const closeDelay = getDelay(delayRef.current, 'close', pointerTypeRef.current);\n    if (closeDelay && !handlerRef.current) {\n      clearTimeoutIfSet(timeoutRef);\n      timeoutRef.current = window.setTimeout(() => onOpenChange(false, event, reason), closeDelay);\n    } else if (runElseBranch) {\n      clearTimeoutIfSet(timeoutRef);\n      onOpenChange(false, event, reason);\n    }\n  }, [delayRef, onOpenChange]);\n  const cleanupMouseMoveHandler = useEffectEvent(() => {\n    unbindMouseMoveRef.current();\n    handlerRef.current = undefined;\n  });\n  const clearPointerEvents = useEffectEvent(() => {\n    if (performedPointerEventsMutationRef.current) {\n      const body = getDocument$1(elements.floating).body;\n      body.style.pointerEvents = '';\n      body.removeAttribute(safePolygonIdentifier);\n      performedPointerEventsMutationRef.current = false;\n    }\n  });\n  const isClickLikeOpenEvent = useEffectEvent(() => {\n    return dataRef.current.openEvent ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type) : false;\n  });\n\n  // Registering the mouse events on the reference directly to bypass React's\n  // delegation system. If the cursor was on a disabled element and then entered\n  // the reference (no gap), `mouseenter` doesn't fire in the delegation system.\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onReferenceMouseEnter(event) {\n      clearTimeoutIfSet(timeoutRef);\n      blockMouseMoveRef.current = false;\n      if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current) || getRestMs(restMsRef.current) > 0 && !getDelay(delayRef.current, 'open')) {\n        return;\n      }\n      const openDelay = getDelay(delayRef.current, 'open', pointerTypeRef.current);\n      if (openDelay) {\n        timeoutRef.current = window.setTimeout(() => {\n          if (!openRef.current) {\n            onOpenChange(true, event, 'hover');\n          }\n        }, openDelay);\n      } else if (!open) {\n        onOpenChange(true, event, 'hover');\n      }\n    }\n    function onReferenceMouseLeave(event) {\n      if (isClickLikeOpenEvent()) {\n        clearPointerEvents();\n        return;\n      }\n      unbindMouseMoveRef.current();\n      const doc = getDocument$1(elements.floating);\n      clearTimeoutIfSet(restTimeoutRef);\n      restTimeoutPendingRef.current = false;\n      if (handleCloseRef.current && dataRef.current.floatingContext) {\n        // Prevent clearing `onScrollMouseLeave` timeout.\n        if (!open) {\n          clearTimeoutIfSet(timeoutRef);\n        }\n        handlerRef.current = handleCloseRef.current({\n          ...dataRef.current.floatingContext,\n          tree,\n          x: event.clientX,\n          y: event.clientY,\n          onClose() {\n            clearPointerEvents();\n            cleanupMouseMoveHandler();\n            if (!isClickLikeOpenEvent()) {\n              closeWithDelay(event, true, 'safe-polygon');\n            }\n          }\n        });\n        const handler = handlerRef.current;\n        doc.addEventListener('mousemove', handler);\n        unbindMouseMoveRef.current = () => {\n          doc.removeEventListener('mousemove', handler);\n        };\n        return;\n      }\n\n      // Allow interactivity without `safePolygon` on touch devices. With a\n      // pointer, a short close delay is an alternative, so it should work\n      // consistently.\n      const shouldClose = pointerTypeRef.current === 'touch' ? !contains$1(elements.floating, event.relatedTarget) : true;\n      if (shouldClose) {\n        closeWithDelay(event);\n      }\n    }\n\n    // Ensure the floating element closes after scrolling even if the pointer\n    // did not move.\n    // https://github.com/floating-ui/floating-ui/discussions/1692\n    function onScrollMouseLeave(event) {\n      if (isClickLikeOpenEvent()) return;\n      if (!dataRef.current.floatingContext) return;\n      handleCloseRef.current == null || handleCloseRef.current({\n        ...dataRef.current.floatingContext,\n        tree,\n        x: event.clientX,\n        y: event.clientY,\n        onClose() {\n          clearPointerEvents();\n          cleanupMouseMoveHandler();\n          if (!isClickLikeOpenEvent()) {\n            closeWithDelay(event);\n          }\n        }\n      })(event);\n    }\n    function onFloatingMouseEnter() {\n      clearTimeoutIfSet(timeoutRef);\n    }\n    function onFloatingMouseLeave(event) {\n      if (!isClickLikeOpenEvent()) {\n        closeWithDelay(event, false);\n      }\n    }\n    if (isElement(elements.domReference)) {\n      const reference = elements.domReference;\n      const floating = elements.floating;\n      if (open) {\n        reference.addEventListener('mouseleave', onScrollMouseLeave);\n      }\n      if (move) {\n        reference.addEventListener('mousemove', onReferenceMouseEnter, {\n          once: true\n        });\n      }\n      reference.addEventListener('mouseenter', onReferenceMouseEnter);\n      reference.addEventListener('mouseleave', onReferenceMouseLeave);\n      if (floating) {\n        floating.addEventListener('mouseleave', onScrollMouseLeave);\n        floating.addEventListener('mouseenter', onFloatingMouseEnter);\n        floating.addEventListener('mouseleave', onFloatingMouseLeave);\n      }\n      return () => {\n        if (open) {\n          reference.removeEventListener('mouseleave', onScrollMouseLeave);\n        }\n        if (move) {\n          reference.removeEventListener('mousemove', onReferenceMouseEnter);\n        }\n        reference.removeEventListener('mouseenter', onReferenceMouseEnter);\n        reference.removeEventListener('mouseleave', onReferenceMouseLeave);\n        if (floating) {\n          floating.removeEventListener('mouseleave', onScrollMouseLeave);\n          floating.removeEventListener('mouseenter', onFloatingMouseEnter);\n          floating.removeEventListener('mouseleave', onFloatingMouseLeave);\n        }\n      };\n    }\n  }, [elements, enabled, context, mouseOnly, move, closeWithDelay, cleanupMouseMoveHandler, clearPointerEvents, onOpenChange, open, openRef, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent, restMsRef]);\n\n  // Block pointer-events of every element other than the reference and floating\n  // while the floating element is open and has a `handleClose` handler. Also\n  // handles nested floating elements.\n  // https://github.com/floating-ui/floating-ui/issues/1722\n  useModernLayoutEffect(() => {\n    var _handleCloseRef$curre;\n    if (!enabled) return;\n    if (open && (_handleCloseRef$curre = handleCloseRef.current) != null && _handleCloseRef$curre.__options.blockPointerEvents && isHoverOpen()) {\n      performedPointerEventsMutationRef.current = true;\n      const floatingEl = elements.floating;\n      if (isElement(elements.domReference) && floatingEl) {\n        var _tree$nodesRef$curren;\n        const body = getDocument$1(elements.floating).body;\n        body.setAttribute(safePolygonIdentifier, '');\n        const ref = elements.domReference;\n        const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating;\n        if (parentFloating) {\n          parentFloating.style.pointerEvents = '';\n        }\n        body.style.pointerEvents = 'none';\n        ref.style.pointerEvents = 'auto';\n        floatingEl.style.pointerEvents = 'auto';\n        return () => {\n          body.style.pointerEvents = '';\n          ref.style.pointerEvents = '';\n          floatingEl.style.pointerEvents = '';\n        };\n      }\n    }\n  }, [enabled, open, parentId, elements, tree, handleCloseRef, isHoverOpen]);\n  useModernLayoutEffect(() => {\n    if (!open) {\n      pointerTypeRef.current = undefined;\n      restTimeoutPendingRef.current = false;\n      cleanupMouseMoveHandler();\n      clearPointerEvents();\n    }\n  }, [open, cleanupMouseMoveHandler, clearPointerEvents]);\n  React.useEffect(() => {\n    return () => {\n      cleanupMouseMoveHandler();\n      clearTimeoutIfSet(timeoutRef);\n      clearTimeoutIfSet(restTimeoutRef);\n      clearPointerEvents();\n    };\n  }, [enabled, elements.domReference, cleanupMouseMoveHandler, clearPointerEvents]);\n  const reference = React.useMemo(() => {\n    function setPointerRef(event) {\n      pointerTypeRef.current = event.pointerType;\n    }\n    return {\n      onPointerDown: setPointerRef,\n      onPointerEnter: setPointerRef,\n      onMouseMove(event) {\n        const {\n          nativeEvent\n        } = event;\n        function handleMouseMove() {\n          if (!blockMouseMoveRef.current && !openRef.current) {\n            onOpenChange(true, nativeEvent, 'hover');\n          }\n        }\n        if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current)) {\n          return;\n        }\n        if (open || getRestMs(restMsRef.current) === 0) {\n          return;\n        }\n\n        // Ignore insignificant movements to account for tremors.\n        if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) {\n          return;\n        }\n        clearTimeoutIfSet(restTimeoutRef);\n        if (pointerTypeRef.current === 'touch') {\n          handleMouseMove();\n        } else {\n          restTimeoutPendingRef.current = true;\n          restTimeoutRef.current = window.setTimeout(handleMouseMove, getRestMs(restMsRef.current));\n        }\n      }\n    };\n  }, [mouseOnly, onOpenChange, open, openRef, restMsRef]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nconst NOOP = () => {};\nconst FloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n  delay: 0,\n  initialDelay: 0,\n  timeoutMs: 0,\n  currentId: null,\n  setCurrentId: NOOP,\n  setState: NOOP,\n  isInstantPhase: false\n});\n\n/**\n * @deprecated\n * Use the return value of `useDelayGroup()` instead.\n */\nconst useDelayGroupContext = () => React.useContext(FloatingDelayGroupContext);\n/**\n * Provides context for a group of floating elements that should share a\n * `delay`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction FloatingDelayGroup(props) {\n  const {\n    children,\n    delay,\n    timeoutMs = 0\n  } = props;\n  const [state, setState] = React.useReducer((prev, next) => ({\n    ...prev,\n    ...next\n  }), {\n    delay,\n    timeoutMs,\n    initialDelay: delay,\n    currentId: null,\n    isInstantPhase: false\n  });\n  const initialCurrentIdRef = React.useRef(null);\n  const setCurrentId = React.useCallback(currentId => {\n    setState({\n      currentId\n    });\n  }, []);\n  useModernLayoutEffect(() => {\n    if (state.currentId) {\n      if (initialCurrentIdRef.current === null) {\n        initialCurrentIdRef.current = state.currentId;\n      } else if (!state.isInstantPhase) {\n        setState({\n          isInstantPhase: true\n        });\n      }\n    } else {\n      if (state.isInstantPhase) {\n        setState({\n          isInstantPhase: false\n        });\n      }\n      initialCurrentIdRef.current = null;\n    }\n  }, [state.currentId, state.isInstantPhase]);\n  return /*#__PURE__*/jsx(FloatingDelayGroupContext.Provider, {\n    value: React.useMemo(() => ({\n      ...state,\n      setState,\n      setCurrentId\n    }), [state, setCurrentId]),\n    children: children\n  });\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `FloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useDelayGroup(context, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    floatingId\n  } = context;\n  const {\n    id: optionId,\n    enabled = true\n  } = options;\n  const id = optionId != null ? optionId : floatingId;\n  const groupContext = useDelayGroupContext();\n  const {\n    currentId,\n    setCurrentId,\n    initialDelay,\n    setState,\n    timeoutMs\n  } = groupContext;\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (!currentId) return;\n    setState({\n      delay: {\n        open: 1,\n        close: getDelay(initialDelay, 'close')\n      }\n    });\n    if (currentId !== id) {\n      onOpenChange(false);\n    }\n  }, [enabled, id, onOpenChange, setState, currentId, initialDelay]);\n  useModernLayoutEffect(() => {\n    function unset() {\n      onOpenChange(false);\n      setState({\n        delay: initialDelay,\n        currentId: null\n      });\n    }\n    if (!enabled) return;\n    if (!currentId) return;\n    if (!open && currentId === id) {\n      if (timeoutMs) {\n        const timeout = window.setTimeout(unset, timeoutMs);\n        return () => {\n          clearTimeout(timeout);\n        };\n      }\n      unset();\n    }\n  }, [enabled, open, setState, currentId, id, onOpenChange, initialDelay, timeoutMs]);\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (setCurrentId === NOOP || !open) return;\n    setCurrentId(id);\n  }, [enabled, open, setCurrentId, id]);\n  return groupContext;\n}\n\nconst NextFloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n  hasProvider: false,\n  timeoutMs: 0,\n  delayRef: {\n    current: 0\n  },\n  initialDelayRef: {\n    current: 0\n  },\n  timeoutIdRef: {\n    current: -1\n  },\n  currentIdRef: {\n    current: null\n  },\n  currentContextRef: {\n    current: null\n  }\n});\n/**\n * Experimental next version of `FloatingDelayGroup` to become the default\n * in the future. This component is not yet stable.\n * Provides context for a group of floating elements that should share a\n * `delay`. Unlike `FloatingDelayGroup`, `useNextDelayGroup` with this\n * component does not cause a re-render of unrelated consumers of the\n * context when the delay changes.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction NextFloatingDelayGroup(props) {\n  const {\n    children,\n    delay,\n    timeoutMs = 0\n  } = props;\n  const delayRef = React.useRef(delay);\n  const initialDelayRef = React.useRef(delay);\n  const currentIdRef = React.useRef(null);\n  const currentContextRef = React.useRef(null);\n  const timeoutIdRef = React.useRef(-1);\n  return /*#__PURE__*/jsx(NextFloatingDelayGroupContext.Provider, {\n    value: React.useMemo(() => ({\n      hasProvider: true,\n      delayRef,\n      initialDelayRef,\n      currentIdRef,\n      timeoutMs,\n      currentContextRef,\n      timeoutIdRef\n    }), [timeoutMs]),\n    children: children\n  });\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `NextFloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useNextDelayGroup(context, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    floatingId\n  } = context;\n  const {\n    enabled = true\n  } = options;\n  const groupContext = React.useContext(NextFloatingDelayGroupContext);\n  const {\n    currentIdRef,\n    delayRef,\n    timeoutMs,\n    initialDelayRef,\n    currentContextRef,\n    hasProvider,\n    timeoutIdRef\n  } = groupContext;\n  const [isInstantPhase, setIsInstantPhase] = React.useState(false);\n  useModernLayoutEffect(() => {\n    function unset() {\n      var _currentContextRef$cu;\n      setIsInstantPhase(false);\n      (_currentContextRef$cu = currentContextRef.current) == null || _currentContextRef$cu.setIsInstantPhase(false);\n      currentIdRef.current = null;\n      currentContextRef.current = null;\n      delayRef.current = initialDelayRef.current;\n    }\n    if (!enabled) return;\n    if (!currentIdRef.current) return;\n    if (!open && currentIdRef.current === floatingId) {\n      setIsInstantPhase(false);\n      if (timeoutMs) {\n        timeoutIdRef.current = window.setTimeout(unset, timeoutMs);\n        return () => {\n          clearTimeout(timeoutIdRef.current);\n        };\n      }\n      unset();\n    }\n  }, [enabled, open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeoutIdRef]);\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (!open) return;\n    const prevContext = currentContextRef.current;\n    const prevId = currentIdRef.current;\n    currentContextRef.current = {\n      onOpenChange,\n      setIsInstantPhase\n    };\n    currentIdRef.current = floatingId;\n    delayRef.current = {\n      open: 0,\n      close: getDelay(initialDelayRef.current, 'close')\n    };\n    if (prevId !== null && prevId !== floatingId) {\n      clearTimeoutIfSet(timeoutIdRef);\n      setIsInstantPhase(true);\n      prevContext == null || prevContext.setIsInstantPhase(true);\n      prevContext == null || prevContext.onOpenChange(false);\n    } else {\n      setIsInstantPhase(false);\n      prevContext == null || prevContext.setIsInstantPhase(false);\n    }\n  }, [enabled, open, floatingId, onOpenChange, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeoutIdRef]);\n  useModernLayoutEffect(() => {\n    return () => {\n      currentContextRef.current = null;\n    };\n  }, [currentContextRef]);\n  return React.useMemo(() => ({\n    hasProvider,\n    delayRef,\n    isInstantPhase\n  }), [hasProvider, delayRef, isInstantPhase]);\n}\n\nlet rafId = 0;\nfunction enqueueFocus(el, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    preventScroll = false,\n    cancelPrevious = true,\n    sync = false\n  } = options;\n  cancelPrevious && cancelAnimationFrame(rafId);\n  const exec = () => el == null ? void 0 : el.focus({\n    preventScroll\n  });\n  if (sync) {\n    exec();\n  } else {\n    rafId = requestAnimationFrame(exec);\n  }\n}\n\nfunction contains(parent, child) {\n  if (!parent || !child) {\n    return false;\n  }\n  const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n\n  // then fallback to custom implementation with Shadow DOM support\n  if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    while (next) {\n      if (parent === next) {\n        return true;\n      }\n      // @ts-ignore\n      next = next.parentNode || next.host;\n    }\n  }\n\n  // Give up, the result is false\n  return false;\n}\nfunction getTarget(event) {\n  if ('composedPath' in event) {\n    return event.composedPath()[0];\n  }\n\n  // TS thinks `event` is of type never as it assumes all browsers support\n  // `composedPath()`, but browsers without shadow DOM don't.\n  return event.target;\n}\nfunction getDocument(node) {\n  return (node == null ? void 0 : node.ownerDocument) || document;\n}\n\n// Modified to add conditional `aria-hidden` support:\n// https://github.com/theKashey/aria-hidden/blob/9220c8f4a4fd35f63bee5510a9f41a37264382d4/src/index.ts\nlet counterMap = /*#__PURE__*/new WeakMap();\nlet uncontrolledElementsSet = /*#__PURE__*/new WeakSet();\nlet markerMap = {};\nlet lockCount$1 = 0;\nconst supportsInert = () => typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nconst unwrapHost = node => node && (node.host || unwrapHost(node.parentNode));\nconst correctElements = (parent, targets) => targets.map(target => {\n  if (parent.contains(target)) {\n    return target;\n  }\n  const correctedTarget = unwrapHost(target);\n  if (parent.contains(correctedTarget)) {\n    return correctedTarget;\n  }\n  return null;\n}).filter(x => x != null);\nfunction applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert) {\n  const markerName = 'data-floating-ui-inert';\n  const controlAttribute = inert ? 'inert' : ariaHidden ? 'aria-hidden' : null;\n  const avoidElements = correctElements(body, uncorrectedAvoidElements);\n  const elementsToKeep = new Set();\n  const elementsToStop = new Set(avoidElements);\n  const hiddenElements = [];\n  if (!markerMap[markerName]) {\n    markerMap[markerName] = new WeakMap();\n  }\n  const markerCounter = markerMap[markerName];\n  avoidElements.forEach(keep);\n  deep(body);\n  elementsToKeep.clear();\n  function keep(el) {\n    if (!el || elementsToKeep.has(el)) {\n      return;\n    }\n    elementsToKeep.add(el);\n    el.parentNode && keep(el.parentNode);\n  }\n  function deep(parent) {\n    if (!parent || elementsToStop.has(parent)) {\n      return;\n    }\n    [].forEach.call(parent.children, node => {\n      if (getNodeName(node) === 'script') return;\n      if (elementsToKeep.has(node)) {\n        deep(node);\n      } else {\n        const attr = controlAttribute ? node.getAttribute(controlAttribute) : null;\n        const alreadyHidden = attr !== null && attr !== 'false';\n        const currentCounterValue = counterMap.get(node) || 0;\n        const counterValue = controlAttribute ? currentCounterValue + 1 : currentCounterValue;\n        const markerValue = (markerCounter.get(node) || 0) + 1;\n        counterMap.set(node, counterValue);\n        markerCounter.set(node, markerValue);\n        hiddenElements.push(node);\n        if (counterValue === 1 && alreadyHidden) {\n          uncontrolledElementsSet.add(node);\n        }\n        if (markerValue === 1) {\n          node.setAttribute(markerName, '');\n        }\n        if (!alreadyHidden && controlAttribute) {\n          node.setAttribute(controlAttribute, controlAttribute === 'inert' ? '' : 'true');\n        }\n      }\n    });\n  }\n  lockCount$1++;\n  return () => {\n    hiddenElements.forEach(element => {\n      const currentCounterValue = counterMap.get(element) || 0;\n      const counterValue = controlAttribute ? currentCounterValue - 1 : currentCounterValue;\n      const markerValue = (markerCounter.get(element) || 0) - 1;\n      counterMap.set(element, counterValue);\n      markerCounter.set(element, markerValue);\n      if (!counterValue) {\n        if (!uncontrolledElementsSet.has(element) && controlAttribute) {\n          element.removeAttribute(controlAttribute);\n        }\n        uncontrolledElementsSet.delete(element);\n      }\n      if (!markerValue) {\n        element.removeAttribute(markerName);\n      }\n    });\n    lockCount$1--;\n    if (!lockCount$1) {\n      counterMap = new WeakMap();\n      counterMap = new WeakMap();\n      uncontrolledElementsSet = new WeakSet();\n      markerMap = {};\n    }\n  };\n}\nfunction markOthers(avoidElements, ariaHidden, inert) {\n  if (ariaHidden === void 0) {\n    ariaHidden = false;\n  }\n  if (inert === void 0) {\n    inert = false;\n  }\n  const body = getDocument(avoidElements[0]).body;\n  return applyAttributeToOthers(avoidElements.concat(Array.from(body.querySelectorAll('[aria-live]'))), body, ariaHidden, inert);\n}\n\nconst HIDDEN_STYLES = {\n  border: 0,\n  clip: 'rect(0 0 0 0)',\n  height: '1px',\n  margin: '-1px',\n  overflow: 'hidden',\n  padding: 0,\n  position: 'fixed',\n  whiteSpace: 'nowrap',\n  width: '1px',\n  top: 0,\n  left: 0\n};\nconst FocusGuard = /*#__PURE__*/React.forwardRef(function FocusGuard(props, ref) {\n  const [role, setRole] = React.useState();\n  useModernLayoutEffect(() => {\n    if (isSafari()) {\n      // Unlike other screen readers such as NVDA and JAWS, the virtual cursor\n      // on VoiceOver does trigger the onFocus event, so we can use the focus\n      // trap element. On Safari, only buttons trigger the onFocus event.\n      // NB: \"group\" role in the Sandbox no longer appears to work, must be a\n      // button role.\n      setRole('button');\n    }\n  }, []);\n  const restProps = {\n    ref,\n    tabIndex: 0,\n    // Role is only for VoiceOver\n    role,\n    'aria-hidden': role ? undefined : true,\n    [createAttribute('focus-guard')]: '',\n    style: HIDDEN_STYLES\n  };\n  return /*#__PURE__*/jsx(\"span\", {\n    ...props,\n    ...restProps\n  });\n});\n\nconst PortalContext = /*#__PURE__*/React.createContext(null);\nconst attr = /*#__PURE__*/createAttribute('portal');\n/**\n * @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode\n */\nfunction useFloatingPortalNode(props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    id,\n    root\n  } = props;\n  const uniqueId = useId();\n  const portalContext = usePortalContext();\n  const [portalNode, setPortalNode] = React.useState(null);\n  const portalNodeRef = React.useRef(null);\n  useModernLayoutEffect(() => {\n    return () => {\n      portalNode == null || portalNode.remove();\n      // Allow the subsequent layout effects to create a new node on updates.\n      // The portal node will still be cleaned up on unmount.\n      // https://github.com/floating-ui/floating-ui/issues/2454\n      queueMicrotask(() => {\n        portalNodeRef.current = null;\n      });\n    };\n  }, [portalNode]);\n  useModernLayoutEffect(() => {\n    // Wait for the uniqueId to be generated before creating the portal node in\n    // React <18 (using `useFloatingId` instead of the native `useId`).\n    // https://github.com/floating-ui/floating-ui/issues/2778\n    if (!uniqueId) return;\n    if (portalNodeRef.current) return;\n    const existingIdRoot = id ? document.getElementById(id) : null;\n    if (!existingIdRoot) return;\n    const subRoot = document.createElement('div');\n    subRoot.id = uniqueId;\n    subRoot.setAttribute(attr, '');\n    existingIdRoot.appendChild(subRoot);\n    portalNodeRef.current = subRoot;\n    setPortalNode(subRoot);\n  }, [id, uniqueId]);\n  useModernLayoutEffect(() => {\n    // Wait for the root to exist before creating the portal node. The root must\n    // be stored in state, not a ref, for this to work reactively.\n    if (root === null) return;\n    if (!uniqueId) return;\n    if (portalNodeRef.current) return;\n    let container = root || (portalContext == null ? void 0 : portalContext.portalNode);\n    if (container && !isElement(container)) container = container.current;\n    container = container || document.body;\n    let idWrapper = null;\n    if (id) {\n      idWrapper = document.createElement('div');\n      idWrapper.id = id;\n      container.appendChild(idWrapper);\n    }\n    const subRoot = document.createElement('div');\n    subRoot.id = uniqueId;\n    subRoot.setAttribute(attr, '');\n    container = idWrapper || container;\n    container.appendChild(subRoot);\n    portalNodeRef.current = subRoot;\n    setPortalNode(subRoot);\n  }, [id, root, uniqueId, portalContext]);\n  return portalNode;\n}\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n */\nfunction FloatingPortal(props) {\n  const {\n    children,\n    id,\n    root,\n    preserveTabOrder = true\n  } = props;\n  const portalNode = useFloatingPortalNode({\n    id,\n    root\n  });\n  const [focusManagerState, setFocusManagerState] = React.useState(null);\n  const beforeOutsideRef = React.useRef(null);\n  const afterOutsideRef = React.useRef(null);\n  const beforeInsideRef = React.useRef(null);\n  const afterInsideRef = React.useRef(null);\n  const modal = focusManagerState == null ? void 0 : focusManagerState.modal;\n  const open = focusManagerState == null ? void 0 : focusManagerState.open;\n  const shouldRenderGuards =\n  // The FocusManager and therefore floating element are currently open/\n  // rendered.\n  !!focusManagerState &&\n  // Guards are only for non-modal focus management.\n  !focusManagerState.modal &&\n  // Don't render if unmount is transitioning.\n  focusManagerState.open && preserveTabOrder && !!(root || portalNode);\n\n  // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n  React.useEffect(() => {\n    if (!portalNode || !preserveTabOrder || modal) {\n      return;\n    }\n\n    // Make sure elements inside the portal element are tabbable only when the\n    // portal has already been focused, either by tabbing into a focus trap\n    // element outside or using the mouse.\n    function onFocus(event) {\n      if (portalNode && isOutsideEvent(event)) {\n        const focusing = event.type === 'focusin';\n        const manageFocus = focusing ? enableFocusInside : disableFocusInside;\n        manageFocus(portalNode);\n      }\n    }\n    // Listen to the event on the capture phase so they run before the focus\n    // trap elements onFocus prop is called.\n    portalNode.addEventListener('focusin', onFocus, true);\n    portalNode.addEventListener('focusout', onFocus, true);\n    return () => {\n      portalNode.removeEventListener('focusin', onFocus, true);\n      portalNode.removeEventListener('focusout', onFocus, true);\n    };\n  }, [portalNode, preserveTabOrder, modal]);\n  React.useEffect(() => {\n    if (!portalNode) return;\n    if (open) return;\n    enableFocusInside(portalNode);\n  }, [open, portalNode]);\n  return /*#__PURE__*/jsxs(PortalContext.Provider, {\n    value: React.useMemo(() => ({\n      preserveTabOrder,\n      beforeOutsideRef,\n      afterOutsideRef,\n      beforeInsideRef,\n      afterInsideRef,\n      portalNode,\n      setFocusManagerState\n    }), [preserveTabOrder, portalNode]),\n    children: [shouldRenderGuards && portalNode && /*#__PURE__*/jsx(FocusGuard, {\n      \"data-type\": \"outside\",\n      ref: beforeOutsideRef,\n      onFocus: event => {\n        if (isOutsideEvent(event, portalNode)) {\n          var _beforeInsideRef$curr;\n          (_beforeInsideRef$curr = beforeInsideRef.current) == null || _beforeInsideRef$curr.focus();\n        } else {\n          const domReference = focusManagerState ? focusManagerState.domReference : null;\n          const prevTabbable = getPreviousTabbable(domReference);\n          prevTabbable == null || prevTabbable.focus();\n        }\n      }\n    }), shouldRenderGuards && portalNode && /*#__PURE__*/jsx(\"span\", {\n      \"aria-owns\": portalNode.id,\n      style: HIDDEN_STYLES\n    }), portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode), shouldRenderGuards && portalNode && /*#__PURE__*/jsx(FocusGuard, {\n      \"data-type\": \"outside\",\n      ref: afterOutsideRef,\n      onFocus: event => {\n        if (isOutsideEvent(event, portalNode)) {\n          var _afterInsideRef$curre;\n          (_afterInsideRef$curre = afterInsideRef.current) == null || _afterInsideRef$curre.focus();\n        } else {\n          const domReference = focusManagerState ? focusManagerState.domReference : null;\n          const nextTabbable = getNextTabbable(domReference);\n          nextTabbable == null || nextTabbable.focus();\n          (focusManagerState == null ? void 0 : focusManagerState.closeOnFocusOut) && (focusManagerState == null ? void 0 : focusManagerState.onOpenChange(false, event.nativeEvent, 'focus-out'));\n        }\n      }\n    })]\n  });\n}\nconst usePortalContext = () => React.useContext(PortalContext);\n\nfunction useLiteMergeRefs(refs) {\n  return React.useMemo(() => {\n    return value => {\n      refs.forEach(ref => {\n        if (ref) {\n          ref.current = value;\n        }\n      });\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}\n\nconst LIST_LIMIT = 20;\nlet previouslyFocusedElements = [];\nfunction addPreviouslyFocusedElement(element) {\n  previouslyFocusedElements = previouslyFocusedElements.filter(el => el.isConnected);\n  if (element && getNodeName(element) !== 'body') {\n    previouslyFocusedElements.push(element);\n    if (previouslyFocusedElements.length > LIST_LIMIT) {\n      previouslyFocusedElements = previouslyFocusedElements.slice(-20);\n    }\n  }\n}\nfunction getPreviouslyFocusedElement() {\n  return previouslyFocusedElements.slice().reverse().find(el => el.isConnected);\n}\nfunction getFirstTabbableElement(container) {\n  const tabbableOptions = getTabbableOptions();\n  if (isTabbable(container, tabbableOptions)) {\n    return container;\n  }\n  return tabbable(container, tabbableOptions)[0] || container;\n}\nfunction handleTabIndex(floatingFocusElement, orderRef) {\n  var _floatingFocusElement;\n  if (!orderRef.current.includes('floating') && !((_floatingFocusElement = floatingFocusElement.getAttribute('role')) != null && _floatingFocusElement.includes('dialog'))) {\n    return;\n  }\n  const options = getTabbableOptions();\n  const focusableElements = focusable(floatingFocusElement, options);\n  const tabbableContent = focusableElements.filter(element => {\n    const dataTabIndex = element.getAttribute('data-tabindex') || '';\n    return isTabbable(element, options) || element.hasAttribute('data-tabindex') && !dataTabIndex.startsWith('-');\n  });\n  const tabIndex = floatingFocusElement.getAttribute('tabindex');\n  if (orderRef.current.includes('floating') || tabbableContent.length === 0) {\n    if (tabIndex !== '0') {\n      floatingFocusElement.setAttribute('tabindex', '0');\n    }\n  } else if (tabIndex !== '-1' || floatingFocusElement.hasAttribute('data-tabindex') && floatingFocusElement.getAttribute('data-tabindex') !== '-1') {\n    floatingFocusElement.setAttribute('tabindex', '-1');\n    floatingFocusElement.setAttribute('data-tabindex', '-1');\n  }\n}\nconst VisuallyHiddenDismiss = /*#__PURE__*/React.forwardRef(function VisuallyHiddenDismiss(props, ref) {\n  return /*#__PURE__*/jsx(\"button\", {\n    ...props,\n    type: \"button\",\n    ref: ref,\n    tabIndex: -1,\n    style: HIDDEN_STYLES\n  });\n});\n/**\n * Provides focus management for the floating element.\n * @see https://floating-ui.com/docs/FloatingFocusManager\n */\nfunction FloatingFocusManager(props) {\n  const {\n    context,\n    children,\n    disabled = false,\n    order = ['content'],\n    guards: _guards = true,\n    initialFocus = 0,\n    returnFocus = true,\n    restoreFocus = false,\n    modal = true,\n    visuallyHiddenDismiss = false,\n    closeOnFocusOut = true,\n    outsideElementsInert = false,\n    getInsideElements: _getInsideElements = () => []\n  } = props;\n  const {\n    open,\n    onOpenChange,\n    events,\n    dataRef,\n    elements: {\n      domReference,\n      floating\n    }\n  } = context;\n  const getNodeId = useEffectEvent(() => {\n    var _dataRef$current$floa;\n    return (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n  });\n  const getInsideElements = useEffectEvent(_getInsideElements);\n  const ignoreInitialFocus = typeof initialFocus === 'number' && initialFocus < 0;\n  // If the reference is a combobox and is typeable (e.g. input/textarea),\n  // there are different focus semantics. The guards should not be rendered, but\n  // aria-hidden should be applied to all nodes still. Further, the visually\n  // hidden dismiss button should only appear at the end of the list, not the\n  // start.\n  const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;\n\n  // Force the guards to be rendered if the `inert` attribute is not supported.\n  const inertSupported = supportsInert();\n  const guards = inertSupported ? _guards : true;\n  const useInert = !guards || inertSupported && outsideElementsInert;\n  const orderRef = useLatestRef(order);\n  const initialFocusRef = useLatestRef(initialFocus);\n  const returnFocusRef = useLatestRef(returnFocus);\n  const tree = useFloatingTree();\n  const portalContext = usePortalContext();\n  const startDismissButtonRef = React.useRef(null);\n  const endDismissButtonRef = React.useRef(null);\n  const preventReturnFocusRef = React.useRef(false);\n  const isPointerDownRef = React.useRef(false);\n  const tabbableIndexRef = React.useRef(-1);\n  const isInsidePortal = portalContext != null;\n  const floatingFocusElement = getFloatingFocusElement(floating);\n  const getTabbableContent = useEffectEvent(function (container) {\n    if (container === void 0) {\n      container = floatingFocusElement;\n    }\n    return container ? tabbable(container, getTabbableOptions()) : [];\n  });\n  const getTabbableElements = useEffectEvent(container => {\n    const content = getTabbableContent(container);\n    return orderRef.current.map(type => {\n      if (domReference && type === 'reference') {\n        return domReference;\n      }\n      if (floatingFocusElement && type === 'floating') {\n        return floatingFocusElement;\n      }\n      return content;\n    }).filter(Boolean).flat();\n  });\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!modal) return;\n    function onKeyDown(event) {\n      if (event.key === 'Tab') {\n        // The focus guards have nothing to focus, so we need to stop the event.\n        if (contains$1(floatingFocusElement, activeElement(getDocument$1(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {\n          stopEvent(event);\n        }\n        const els = getTabbableElements();\n        const target = getTarget$1(event);\n        if (orderRef.current[0] === 'reference' && target === domReference) {\n          stopEvent(event);\n          if (event.shiftKey) {\n            enqueueFocus(els[els.length - 1]);\n          } else {\n            enqueueFocus(els[1]);\n          }\n        }\n        if (orderRef.current[1] === 'floating' && target === floatingFocusElement && event.shiftKey) {\n          stopEvent(event);\n          enqueueFocus(els[0]);\n        }\n      }\n    }\n    const doc = getDocument$1(floatingFocusElement);\n    doc.addEventListener('keydown', onKeyDown);\n    return () => {\n      doc.removeEventListener('keydown', onKeyDown);\n    };\n  }, [disabled, domReference, floatingFocusElement, modal, orderRef, isUntrappedTypeableCombobox, getTabbableContent, getTabbableElements]);\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!floating) return;\n    function handleFocusIn(event) {\n      const target = getTarget$1(event);\n      const tabbableContent = getTabbableContent();\n      const tabbableIndex = tabbableContent.indexOf(target);\n      if (tabbableIndex !== -1) {\n        tabbableIndexRef.current = tabbableIndex;\n      }\n    }\n    floating.addEventListener('focusin', handleFocusIn);\n    return () => {\n      floating.removeEventListener('focusin', handleFocusIn);\n    };\n  }, [disabled, floating, getTabbableContent]);\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!closeOnFocusOut) return;\n\n    // In Safari, buttons lose focus when pressing them.\n    function handlePointerDown() {\n      isPointerDownRef.current = true;\n      setTimeout(() => {\n        isPointerDownRef.current = false;\n      });\n    }\n    function handleFocusOutside(event) {\n      const relatedTarget = event.relatedTarget;\n      const currentTarget = event.currentTarget;\n      queueMicrotask(() => {\n        const nodeId = getNodeId();\n        const movedToUnrelatedNode = !(contains$1(domReference, relatedTarget) || contains$1(floating, relatedTarget) || contains$1(relatedTarget, floating) || contains$1(portalContext == null ? void 0 : portalContext.portalNode, relatedTarget) || relatedTarget != null && relatedTarget.hasAttribute(createAttribute('focus-guard')) || tree && (getNodeChildren$1(tree.nodesRef.current, nodeId).find(node => {\n          var _node$context, _node$context2;\n          return contains$1((_node$context = node.context) == null ? void 0 : _node$context.elements.floating, relatedTarget) || contains$1((_node$context2 = node.context) == null ? void 0 : _node$context2.elements.domReference, relatedTarget);\n        }) || getNodeAncestors(tree.nodesRef.current, nodeId).find(node => {\n          var _node$context3, _node$context4, _node$context5;\n          return [(_node$context3 = node.context) == null ? void 0 : _node$context3.elements.floating, getFloatingFocusElement((_node$context4 = node.context) == null ? void 0 : _node$context4.elements.floating)].includes(relatedTarget) || ((_node$context5 = node.context) == null ? void 0 : _node$context5.elements.domReference) === relatedTarget;\n        })));\n        if (currentTarget === domReference && floatingFocusElement) {\n          handleTabIndex(floatingFocusElement, orderRef);\n        }\n\n        // Restore focus to the previous tabbable element index to prevent\n        // focus from being lost outside the floating tree.\n        if (restoreFocus && movedToUnrelatedNode && activeElement(getDocument$1(floatingFocusElement)) === getDocument$1(floatingFocusElement).body) {\n          // Let `FloatingPortal` effect knows that focus is still inside the\n          // floating tree.\n          if (isHTMLElement(floatingFocusElement)) {\n            floatingFocusElement.focus();\n          }\n          const prevTabbableIndex = tabbableIndexRef.current;\n          const tabbableContent = getTabbableContent();\n          const nodeToFocus = tabbableContent[prevTabbableIndex] || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;\n          if (isHTMLElement(nodeToFocus)) {\n            nodeToFocus.focus();\n          }\n        }\n\n        // Focus did not move inside the floating tree, and there are no tabbable\n        // portal guards to handle closing.\n        if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current &&\n        // Fix React 18 Strict Mode returnFocus due to double rendering.\n        relatedTarget !== getPreviouslyFocusedElement()) {\n          preventReturnFocusRef.current = true;\n          onOpenChange(false, event, 'focus-out');\n        }\n      });\n    }\n    if (floating && isHTMLElement(domReference)) {\n      domReference.addEventListener('focusout', handleFocusOutside);\n      domReference.addEventListener('pointerdown', handlePointerDown);\n      floating.addEventListener('focusout', handleFocusOutside);\n      return () => {\n        domReference.removeEventListener('focusout', handleFocusOutside);\n        domReference.removeEventListener('pointerdown', handlePointerDown);\n        floating.removeEventListener('focusout', handleFocusOutside);\n      };\n    }\n  }, [disabled, domReference, floating, floatingFocusElement, modal, tree, portalContext, onOpenChange, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef]);\n  const beforeGuardRef = React.useRef(null);\n  const afterGuardRef = React.useRef(null);\n  const mergedBeforeGuardRef = useLiteMergeRefs([beforeGuardRef, portalContext == null ? void 0 : portalContext.beforeInsideRef]);\n  const mergedAfterGuardRef = useLiteMergeRefs([afterGuardRef, portalContext == null ? void 0 : portalContext.afterInsideRef]);\n  React.useEffect(() => {\n    var _portalContext$portal, _ancestors$find;\n    if (disabled) return;\n    if (!floating) return;\n\n    // Don't hide portals nested within the parent portal.\n    const portalNodes = Array.from((portalContext == null || (_portalContext$portal = portalContext.portalNode) == null ? void 0 : _portalContext$portal.querySelectorAll(\"[\" + createAttribute('portal') + \"]\")) || []);\n    const ancestors = tree ? getNodeAncestors(tree.nodesRef.current, getNodeId()) : [];\n    const ancestorFloatingNodes = tree && !modal ? ancestors.map(node => {\n      var _node$context6;\n      return (_node$context6 = node.context) == null ? void 0 : _node$context6.elements.floating;\n    }) : [];\n    const rootAncestorComboboxDomReference = (_ancestors$find = ancestors.find(node => {\n      var _node$context7;\n      return isTypeableCombobox(((_node$context7 = node.context) == null ? void 0 : _node$context7.elements.domReference) || null);\n    })) == null || (_ancestors$find = _ancestors$find.context) == null ? void 0 : _ancestors$find.elements.domReference;\n    const insideElements = [floating, rootAncestorComboboxDomReference, ...portalNodes, ...ancestorFloatingNodes, ...getInsideElements(), startDismissButtonRef.current, endDismissButtonRef.current, beforeGuardRef.current, afterGuardRef.current, portalContext == null ? void 0 : portalContext.beforeOutsideRef.current, portalContext == null ? void 0 : portalContext.afterOutsideRef.current, orderRef.current.includes('reference') || isUntrappedTypeableCombobox ? domReference : null].filter(x => x != null);\n    const cleanup = modal || isUntrappedTypeableCombobox ? markOthers(insideElements, !useInert, useInert) : markOthers(insideElements);\n    return () => {\n      cleanup();\n    };\n  }, [disabled, domReference, floating, modal, orderRef, portalContext, isUntrappedTypeableCombobox, guards, useInert, tree, getNodeId, getInsideElements]);\n  useModernLayoutEffect(() => {\n    if (disabled || !isHTMLElement(floatingFocusElement)) return;\n    const doc = getDocument$1(floatingFocusElement);\n    const previouslyFocusedElement = activeElement(doc);\n\n    // Wait for any layout effect state setters to execute to set `tabIndex`.\n    queueMicrotask(() => {\n      const focusableElements = getTabbableElements(floatingFocusElement);\n      const initialFocusValue = initialFocusRef.current;\n      const elToFocus = (typeof initialFocusValue === 'number' ? focusableElements[initialFocusValue] : initialFocusValue.current) || floatingFocusElement;\n      const focusAlreadyInsideFloatingEl = contains$1(floatingFocusElement, previouslyFocusedElement);\n      if (!ignoreInitialFocus && !focusAlreadyInsideFloatingEl && open) {\n        enqueueFocus(elToFocus, {\n          preventScroll: elToFocus === floatingFocusElement\n        });\n      }\n    });\n  }, [disabled, open, floatingFocusElement, ignoreInitialFocus, getTabbableElements, initialFocusRef]);\n  useModernLayoutEffect(() => {\n    if (disabled || !floatingFocusElement) return;\n    let preventReturnFocusScroll = false;\n    const doc = getDocument$1(floatingFocusElement);\n    const previouslyFocusedElement = activeElement(doc);\n    addPreviouslyFocusedElement(previouslyFocusedElement);\n\n    // Dismissing via outside press should always ignore `returnFocus` to\n    // prevent unwanted scrolling.\n    function onOpenChange(_ref) {\n      let {\n        reason,\n        event,\n        nested\n      } = _ref;\n      if (['hover', 'safe-polygon'].includes(reason) && event.type === 'mouseleave') {\n        preventReturnFocusRef.current = true;\n      }\n      if (reason !== 'outside-press') return;\n      if (nested) {\n        preventReturnFocusRef.current = false;\n        preventReturnFocusScroll = true;\n      } else if (isVirtualClick(event) || isVirtualPointerEvent(event)) {\n        preventReturnFocusRef.current = false;\n      } else {\n        let isPreventScrollSupported = false;\n        document.createElement('div').focus({\n          get preventScroll() {\n            isPreventScrollSupported = true;\n            return false;\n          }\n        });\n        if (isPreventScrollSupported) {\n          preventReturnFocusRef.current = false;\n          preventReturnFocusScroll = true;\n        } else {\n          preventReturnFocusRef.current = true;\n        }\n      }\n    }\n    events.on('openchange', onOpenChange);\n    const fallbackEl = doc.createElement('span');\n    fallbackEl.setAttribute('tabindex', '-1');\n    fallbackEl.setAttribute('aria-hidden', 'true');\n    Object.assign(fallbackEl.style, HIDDEN_STYLES);\n    if (isInsidePortal && domReference) {\n      domReference.insertAdjacentElement('afterend', fallbackEl);\n    }\n    function getReturnElement() {\n      if (typeof returnFocusRef.current === 'boolean') {\n        const el = domReference || getPreviouslyFocusedElement();\n        return el && el.isConnected ? el : fallbackEl;\n      }\n      return returnFocusRef.current.current || fallbackEl;\n    }\n    return () => {\n      events.off('openchange', onOpenChange);\n      const activeEl = activeElement(doc);\n      const isFocusInsideFloatingTree = contains$1(floating, activeEl) || tree && getNodeChildren$1(tree.nodesRef.current, getNodeId()).some(node => {\n        var _node$context8;\n        return contains$1((_node$context8 = node.context) == null ? void 0 : _node$context8.elements.floating, activeEl);\n      });\n      const returnElement = getReturnElement();\n      queueMicrotask(() => {\n        // This is `returnElement`, if it's tabbable, or its first tabbable child.\n        const tabbableReturnElement = getFirstTabbableElement(returnElement);\n        if (\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        returnFocusRef.current && !preventReturnFocusRef.current && isHTMLElement(tabbableReturnElement) && (\n        // If the focus moved somewhere else after mount, avoid returning focus\n        // since it likely entered a different element which should be\n        // respected: https://github.com/floating-ui/floating-ui/issues/2607\n        tabbableReturnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {\n          tabbableReturnElement.focus({\n            preventScroll: preventReturnFocusScroll\n          });\n        }\n        fallbackEl.remove();\n      });\n    };\n  }, [disabled, floating, floatingFocusElement, returnFocusRef, dataRef, events, tree, isInsidePortal, domReference, getNodeId]);\n  React.useEffect(() => {\n    // The `returnFocus` cleanup behavior is inside a microtask; ensure we\n    // wait for it to complete before resetting the flag.\n    queueMicrotask(() => {\n      preventReturnFocusRef.current = false;\n    });\n  }, [disabled]);\n\n  // Synchronize the `context` & `modal` value to the FloatingPortal context.\n  // It will decide whether or not it needs to render its own guards.\n  useModernLayoutEffect(() => {\n    if (disabled) return;\n    if (!portalContext) return;\n    portalContext.setFocusManagerState({\n      modal,\n      closeOnFocusOut,\n      open,\n      onOpenChange,\n      domReference\n    });\n    return () => {\n      portalContext.setFocusManagerState(null);\n    };\n  }, [disabled, portalContext, modal, open, onOpenChange, closeOnFocusOut, domReference]);\n  useModernLayoutEffect(() => {\n    if (disabled) return;\n    if (!floatingFocusElement) return;\n    handleTabIndex(floatingFocusElement, orderRef);\n  }, [disabled, floatingFocusElement, orderRef]);\n  function renderDismissButton(location) {\n    if (disabled || !visuallyHiddenDismiss || !modal) {\n      return null;\n    }\n    return /*#__PURE__*/jsx(VisuallyHiddenDismiss, {\n      ref: location === 'start' ? startDismissButtonRef : endDismissButtonRef,\n      onClick: event => onOpenChange(false, event.nativeEvent),\n      children: typeof visuallyHiddenDismiss === 'string' ? visuallyHiddenDismiss : 'Dismiss'\n    });\n  }\n  const shouldRenderGuards = !disabled && guards && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);\n  return /*#__PURE__*/jsxs(Fragment, {\n    children: [shouldRenderGuards && /*#__PURE__*/jsx(FocusGuard, {\n      \"data-type\": \"inside\",\n      ref: mergedBeforeGuardRef,\n      onFocus: event => {\n        if (modal) {\n          const els = getTabbableElements();\n          enqueueFocus(order[0] === 'reference' ? els[0] : els[els.length - 1]);\n        } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n          preventReturnFocusRef.current = false;\n          if (isOutsideEvent(event, portalContext.portalNode)) {\n            const nextTabbable = getNextTabbable(domReference);\n            nextTabbable == null || nextTabbable.focus();\n          } else {\n            var _portalContext$before;\n            (_portalContext$before = portalContext.beforeOutsideRef.current) == null || _portalContext$before.focus();\n          }\n        }\n      }\n    }), !isUntrappedTypeableCombobox && renderDismissButton('start'), children, renderDismissButton('end'), shouldRenderGuards && /*#__PURE__*/jsx(FocusGuard, {\n      \"data-type\": \"inside\",\n      ref: mergedAfterGuardRef,\n      onFocus: event => {\n        if (modal) {\n          enqueueFocus(getTabbableElements()[0]);\n        } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n          if (closeOnFocusOut) {\n            preventReturnFocusRef.current = true;\n          }\n          if (isOutsideEvent(event, portalContext.portalNode)) {\n            const prevTabbable = getPreviousTabbable(domReference);\n            prevTabbable == null || prevTabbable.focus();\n          } else {\n            var _portalContext$afterO;\n            (_portalContext$afterO = portalContext.afterOutsideRef.current) == null || _portalContext$afterO.focus();\n          }\n        }\n      }\n    })]\n  });\n}\n\nlet lockCount = 0;\nfunction enableScrollLock() {\n  const isIOS = /iP(hone|ad|od)|iOS/.test(getPlatform());\n  const bodyStyle = document.body.style;\n  // RTL <body> scrollbar\n  const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;\n  const paddingProp = scrollbarX ? 'paddingLeft' : 'paddingRight';\n  const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n  const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;\n  const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;\n  bodyStyle.overflow = 'hidden';\n  if (scrollbarWidth) {\n    bodyStyle[paddingProp] = scrollbarWidth + \"px\";\n  }\n\n  // Only iOS doesn't respect `overflow: hidden` on document.body, and this\n  // technique has fewer side effects.\n  if (isIOS) {\n    var _window$visualViewpor, _window$visualViewpor2;\n    // iOS 12 does not support `visualViewport`.\n    const offsetLeft = ((_window$visualViewpor = window.visualViewport) == null ? void 0 : _window$visualViewpor.offsetLeft) || 0;\n    const offsetTop = ((_window$visualViewpor2 = window.visualViewport) == null ? void 0 : _window$visualViewpor2.offsetTop) || 0;\n    Object.assign(bodyStyle, {\n      position: 'fixed',\n      top: -(scrollY - Math.floor(offsetTop)) + \"px\",\n      left: -(scrollX - Math.floor(offsetLeft)) + \"px\",\n      right: '0'\n    });\n  }\n  return () => {\n    Object.assign(bodyStyle, {\n      overflow: '',\n      [paddingProp]: ''\n    });\n    if (isIOS) {\n      Object.assign(bodyStyle, {\n        position: '',\n        top: '',\n        left: '',\n        right: ''\n      });\n      window.scrollTo(scrollX, scrollY);\n    }\n  };\n}\nlet cleanup = () => {};\n\n/**\n * Provides base styling for a fixed overlay element to dim content or block\n * pointer events behind a floating element.\n * It's a regular `<div>`, so it can be styled via any CSS solution you prefer.\n * @see https://floating-ui.com/docs/FloatingOverlay\n */\nconst FloatingOverlay = /*#__PURE__*/React.forwardRef(function FloatingOverlay(props, ref) {\n  const {\n    lockScroll = false,\n    ...rest\n  } = props;\n  useModernLayoutEffect(() => {\n    if (!lockScroll) return;\n    lockCount++;\n    if (lockCount === 1) {\n      cleanup = enableScrollLock();\n    }\n    return () => {\n      lockCount--;\n      if (lockCount === 0) {\n        cleanup();\n      }\n    };\n  }, [lockScroll]);\n  return /*#__PURE__*/jsx(\"div\", {\n    ref: ref,\n    ...rest,\n    style: {\n      position: 'fixed',\n      overflow: 'auto',\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0,\n      ...rest.style\n    }\n  });\n});\n\nfunction isButtonTarget(event) {\n  return isHTMLElement(event.target) && event.target.tagName === 'BUTTON';\n}\nfunction isAnchorTarget(event) {\n  return isHTMLElement(event.target) && event.target.tagName === 'A';\n}\nfunction isSpaceIgnored(element) {\n  return isTypeableElement(element);\n}\n/**\n * Opens or closes the floating element when clicking the reference element.\n * @see https://floating-ui.com/docs/useClick\n */\nfunction useClick(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    dataRef,\n    elements: {\n      domReference\n    }\n  } = context;\n  const {\n    enabled = true,\n    event: eventOption = 'click',\n    toggle = true,\n    ignoreMouse = false,\n    keyboardHandlers = true,\n    stickIfOpen = true\n  } = props;\n  const pointerTypeRef = React.useRef();\n  const didKeyDownRef = React.useRef(false);\n  const reference = React.useMemo(() => ({\n    onPointerDown(event) {\n      pointerTypeRef.current = event.pointerType;\n    },\n    onMouseDown(event) {\n      const pointerType = pointerTypeRef.current;\n\n      // Ignore all buttons except for the \"main\" button.\n      // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n      if (event.button !== 0) return;\n      if (eventOption === 'click') return;\n      if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n      if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'mousedown' : true)) {\n        onOpenChange(false, event.nativeEvent, 'click');\n      } else {\n        // Prevent stealing focus from the floating element\n        event.preventDefault();\n        onOpenChange(true, event.nativeEvent, 'click');\n      }\n    },\n    onClick(event) {\n      const pointerType = pointerTypeRef.current;\n      if (eventOption === 'mousedown' && pointerTypeRef.current) {\n        pointerTypeRef.current = undefined;\n        return;\n      }\n      if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n      if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'click' : true)) {\n        onOpenChange(false, event.nativeEvent, 'click');\n      } else {\n        onOpenChange(true, event.nativeEvent, 'click');\n      }\n    },\n    onKeyDown(event) {\n      pointerTypeRef.current = undefined;\n      if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event)) {\n        return;\n      }\n      if (event.key === ' ' && !isSpaceIgnored(domReference)) {\n        // Prevent scrolling\n        event.preventDefault();\n        didKeyDownRef.current = true;\n      }\n      if (isAnchorTarget(event)) {\n        return;\n      }\n      if (event.key === 'Enter') {\n        if (open && toggle) {\n          onOpenChange(false, event.nativeEvent, 'click');\n        } else {\n          onOpenChange(true, event.nativeEvent, 'click');\n        }\n      }\n    },\n    onKeyUp(event) {\n      if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event) || isSpaceIgnored(domReference)) {\n        return;\n      }\n      if (event.key === ' ' && didKeyDownRef.current) {\n        didKeyDownRef.current = false;\n        if (open && toggle) {\n          onOpenChange(false, event.nativeEvent, 'click');\n        } else {\n          onOpenChange(true, event.nativeEvent, 'click');\n        }\n      }\n    }\n  }), [dataRef, domReference, eventOption, ignoreMouse, keyboardHandlers, onOpenChange, open, stickIfOpen, toggle]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nfunction createVirtualElement(domElement, data) {\n  let offsetX = null;\n  let offsetY = null;\n  let isAutoUpdateEvent = false;\n  return {\n    contextElement: domElement || undefined,\n    getBoundingClientRect() {\n      var _data$dataRef$current;\n      const domRect = (domElement == null ? void 0 : domElement.getBoundingClientRect()) || {\n        width: 0,\n        height: 0,\n        x: 0,\n        y: 0\n      };\n      const isXAxis = data.axis === 'x' || data.axis === 'both';\n      const isYAxis = data.axis === 'y' || data.axis === 'both';\n      const canTrackCursorOnAutoUpdate = ['mouseenter', 'mousemove'].includes(((_data$dataRef$current = data.dataRef.current.openEvent) == null ? void 0 : _data$dataRef$current.type) || '') && data.pointerType !== 'touch';\n      let width = domRect.width;\n      let height = domRect.height;\n      let x = domRect.x;\n      let y = domRect.y;\n      if (offsetX == null && data.x && isXAxis) {\n        offsetX = domRect.x - data.x;\n      }\n      if (offsetY == null && data.y && isYAxis) {\n        offsetY = domRect.y - data.y;\n      }\n      x -= offsetX || 0;\n      y -= offsetY || 0;\n      width = 0;\n      height = 0;\n      if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {\n        width = data.axis === 'y' ? domRect.width : 0;\n        height = data.axis === 'x' ? domRect.height : 0;\n        x = isXAxis && data.x != null ? data.x : x;\n        y = isYAxis && data.y != null ? data.y : y;\n      } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {\n        height = data.axis === 'x' ? domRect.height : height;\n        width = data.axis === 'y' ? domRect.width : width;\n      }\n      isAutoUpdateEvent = true;\n      return {\n        width,\n        height,\n        x,\n        y,\n        top: y,\n        right: x + width,\n        bottom: y + height,\n        left: x\n      };\n    }\n  };\n}\nfunction isMouseBasedEvent(event) {\n  return event != null && event.clientX != null;\n}\n/**\n * Positions the floating element relative to a client point (in the viewport),\n * such as the mouse position. By default, it follows the mouse cursor.\n * @see https://floating-ui.com/docs/useClientPoint\n */\nfunction useClientPoint(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    dataRef,\n    elements: {\n      floating,\n      domReference\n    },\n    refs\n  } = context;\n  const {\n    enabled = true,\n    axis = 'both',\n    x = null,\n    y = null\n  } = props;\n  const initialRef = React.useRef(false);\n  const cleanupListenerRef = React.useRef(null);\n  const [pointerType, setPointerType] = React.useState();\n  const [reactive, setReactive] = React.useState([]);\n  const setReference = useEffectEvent((x, y) => {\n    if (initialRef.current) return;\n\n    // Prevent setting if the open event was not a mouse-like one\n    // (e.g. focus to open, then hover over the reference element).\n    // Only apply if the event exists.\n    if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {\n      return;\n    }\n    refs.setPositionReference(createVirtualElement(domReference, {\n      x,\n      y,\n      axis,\n      dataRef,\n      pointerType\n    }));\n  });\n  const handleReferenceEnterOrMove = useEffectEvent(event => {\n    if (x != null || y != null) return;\n    if (!open) {\n      setReference(event.clientX, event.clientY);\n    } else if (!cleanupListenerRef.current) {\n      // If there's no cleanup, there's no listener, but we want to ensure\n      // we add the listener if the cursor landed on the floating element and\n      // then back on the reference (i.e. it's interactive).\n      setReactive([]);\n    }\n  });\n\n  // If the pointer is a mouse-like pointer, we want to continue following the\n  // mouse even if the floating element is transitioning out. On touch\n  // devices, this is undesirable because the floating element will move to\n  // the dismissal touch point.\n  const openCheck = isMouseLikePointerType(pointerType) ? floating : open;\n  const addListener = React.useCallback(() => {\n    // Explicitly specified `x`/`y` coordinates shouldn't add a listener.\n    if (!openCheck || !enabled || x != null || y != null) return;\n    const win = getWindow(floating);\n    function handleMouseMove(event) {\n      const target = getTarget$1(event);\n      if (!contains$1(floating, target)) {\n        setReference(event.clientX, event.clientY);\n      } else {\n        win.removeEventListener('mousemove', handleMouseMove);\n        cleanupListenerRef.current = null;\n      }\n    }\n    if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {\n      win.addEventListener('mousemove', handleMouseMove);\n      const cleanup = () => {\n        win.removeEventListener('mousemove', handleMouseMove);\n        cleanupListenerRef.current = null;\n      };\n      cleanupListenerRef.current = cleanup;\n      return cleanup;\n    }\n    refs.setPositionReference(domReference);\n  }, [openCheck, enabled, x, y, floating, dataRef, refs, domReference, setReference]);\n  React.useEffect(() => {\n    return addListener();\n  }, [addListener, reactive]);\n  React.useEffect(() => {\n    if (enabled && !floating) {\n      initialRef.current = false;\n    }\n  }, [enabled, floating]);\n  React.useEffect(() => {\n    if (!enabled && open) {\n      initialRef.current = true;\n    }\n  }, [enabled, open]);\n  useModernLayoutEffect(() => {\n    if (enabled && (x != null || y != null)) {\n      initialRef.current = false;\n      setReference(x, y);\n    }\n  }, [enabled, x, y, setReference]);\n  const reference = React.useMemo(() => {\n    function setPointerTypeRef(_ref) {\n      let {\n        pointerType\n      } = _ref;\n      setPointerType(pointerType);\n    }\n    return {\n      onPointerDown: setPointerTypeRef,\n      onPointerEnter: setPointerTypeRef,\n      onMouseMove: handleReferenceEnterOrMove,\n      onMouseEnter: handleReferenceEnterOrMove\n    };\n  }, [handleReferenceEnterOrMove]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nconst bubbleHandlerKeys = {\n  pointerdown: 'onPointerDown',\n  mousedown: 'onMouseDown',\n  click: 'onClick'\n};\nconst captureHandlerKeys = {\n  pointerdown: 'onPointerDownCapture',\n  mousedown: 'onMouseDownCapture',\n  click: 'onClickCapture'\n};\nconst normalizeProp = normalizable => {\n  var _normalizable$escapeK, _normalizable$outside;\n  return {\n    escapeKey: typeof normalizable === 'boolean' ? normalizable : (_normalizable$escapeK = normalizable == null ? void 0 : normalizable.escapeKey) != null ? _normalizable$escapeK : false,\n    outsidePress: typeof normalizable === 'boolean' ? normalizable : (_normalizable$outside = normalizable == null ? void 0 : normalizable.outsidePress) != null ? _normalizable$outside : true\n  };\n};\n/**\n * Closes the floating element when a dismissal is requested — by default, when\n * the user presses the `escape` key or outside of the floating element.\n * @see https://floating-ui.com/docs/useDismiss\n */\nfunction useDismiss(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    elements,\n    dataRef\n  } = context;\n  const {\n    enabled = true,\n    escapeKey = true,\n    outsidePress: unstable_outsidePress = true,\n    outsidePressEvent = 'pointerdown',\n    referencePress = false,\n    referencePressEvent = 'pointerdown',\n    ancestorScroll = false,\n    bubbles,\n    capture\n  } = props;\n  const tree = useFloatingTree();\n  const outsidePressFn = useEffectEvent(typeof unstable_outsidePress === 'function' ? unstable_outsidePress : () => false);\n  const outsidePress = typeof unstable_outsidePress === 'function' ? outsidePressFn : unstable_outsidePress;\n  const insideReactTreeRef = React.useRef(false);\n  const endedOrStartedInsideRef = React.useRef(false);\n  const {\n    escapeKey: escapeKeyBubbles,\n    outsidePress: outsidePressBubbles\n  } = normalizeProp(bubbles);\n  const {\n    escapeKey: escapeKeyCapture,\n    outsidePress: outsidePressCapture\n  } = normalizeProp(capture);\n  const isComposingRef = React.useRef(false);\n  const closeOnEscapeKeyDown = useEffectEvent(event => {\n    var _dataRef$current$floa;\n    if (!open || !enabled || !escapeKey || event.key !== 'Escape') {\n      return;\n    }\n\n    // Wait until IME is settled. Pressing `Escape` while composing should\n    // close the compose menu, but not the floating element.\n    if (isComposingRef.current) {\n      return;\n    }\n    const nodeId = (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n    const children = tree ? getNodeChildren$1(tree.nodesRef.current, nodeId) : [];\n    if (!escapeKeyBubbles) {\n      event.stopPropagation();\n      if (children.length > 0) {\n        let shouldDismiss = true;\n        children.forEach(child => {\n          var _child$context;\n          if ((_child$context = child.context) != null && _child$context.open && !child.context.dataRef.current.__escapeKeyBubbles) {\n            shouldDismiss = false;\n            return;\n          }\n        });\n        if (!shouldDismiss) {\n          return;\n        }\n      }\n    }\n    onOpenChange(false, isReactEvent(event) ? event.nativeEvent : event, 'escape-key');\n  });\n  const closeOnEscapeKeyDownCapture = useEffectEvent(event => {\n    var _getTarget2;\n    const callback = () => {\n      var _getTarget;\n      closeOnEscapeKeyDown(event);\n      (_getTarget = getTarget$1(event)) == null || _getTarget.removeEventListener('keydown', callback);\n    };\n    (_getTarget2 = getTarget$1(event)) == null || _getTarget2.addEventListener('keydown', callback);\n  });\n  const closeOnPressOutside = useEffectEvent(event => {\n    var _dataRef$current$floa2;\n    // Given developers can stop the propagation of the synthetic event,\n    // we can only be confident with a positive value.\n    const insideReactTree = insideReactTreeRef.current;\n    insideReactTreeRef.current = false;\n\n    // When click outside is lazy (`click` event), handle dragging.\n    // Don't close if:\n    // - The click started inside the floating element.\n    // - The click ended inside the floating element.\n    const endedOrStartedInside = endedOrStartedInsideRef.current;\n    endedOrStartedInsideRef.current = false;\n    if (outsidePressEvent === 'click' && endedOrStartedInside) {\n      return;\n    }\n    if (insideReactTree) {\n      return;\n    }\n    if (typeof outsidePress === 'function' && !outsidePress(event)) {\n      return;\n    }\n    const target = getTarget$1(event);\n    const inertSelector = \"[\" + createAttribute('inert') + \"]\";\n    const markers = getDocument$1(elements.floating).querySelectorAll(inertSelector);\n    let targetRootAncestor = isElement(target) ? target : null;\n    while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {\n      const nextParent = getParentNode(targetRootAncestor);\n      if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {\n        break;\n      }\n      targetRootAncestor = nextParent;\n    }\n\n    // Check if the click occurred on a third-party element injected after the\n    // floating element rendered.\n    if (markers.length && isElement(target) && !isRootElement(target) &&\n    // Clicked on a direct ancestor (e.g. FloatingOverlay).\n    !contains$1(target, elements.floating) &&\n    // If the target root element contains none of the markers, then the\n    // element was injected after the floating element rendered.\n    Array.from(markers).every(marker => !contains$1(targetRootAncestor, marker))) {\n      return;\n    }\n\n    // Check if the click occurred on the scrollbar\n    if (isHTMLElement(target) && floating) {\n      const lastTraversableNode = isLastTraversableNode(target);\n      const style = getComputedStyle(target);\n      const scrollRe = /auto|scroll/;\n      const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);\n      const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);\n      const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;\n      const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;\n      const isRTL = style.direction === 'rtl';\n\n      // Check click position relative to scrollbar.\n      // In some browsers it is possible to change the <body> (or window)\n      // scrollbar to the left side, but is very rare and is difficult to\n      // check for. Plus, for modal dialogs with backdrops, it is more\n      // important that the backdrop is checked but not so much the window.\n      const pressedVerticalScrollbar = canScrollY && (isRTL ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);\n      const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;\n      if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {\n        return;\n      }\n    }\n    const nodeId = (_dataRef$current$floa2 = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa2.nodeId;\n    const targetIsInsideChildren = tree && getNodeChildren$1(tree.nodesRef.current, nodeId).some(node => {\n      var _node$context;\n      return isEventTargetWithin(event, (_node$context = node.context) == null ? void 0 : _node$context.elements.floating);\n    });\n    if (isEventTargetWithin(event, elements.floating) || isEventTargetWithin(event, elements.domReference) || targetIsInsideChildren) {\n      return;\n    }\n    const children = tree ? getNodeChildren$1(tree.nodesRef.current, nodeId) : [];\n    if (children.length > 0) {\n      let shouldDismiss = true;\n      children.forEach(child => {\n        var _child$context2;\n        if ((_child$context2 = child.context) != null && _child$context2.open && !child.context.dataRef.current.__outsidePressBubbles) {\n          shouldDismiss = false;\n          return;\n        }\n      });\n      if (!shouldDismiss) {\n        return;\n      }\n    }\n    onOpenChange(false, event, 'outside-press');\n  });\n  const closeOnPressOutsideCapture = useEffectEvent(event => {\n    var _getTarget4;\n    const callback = () => {\n      var _getTarget3;\n      closeOnPressOutside(event);\n      (_getTarget3 = getTarget$1(event)) == null || _getTarget3.removeEventListener(outsidePressEvent, callback);\n    };\n    (_getTarget4 = getTarget$1(event)) == null || _getTarget4.addEventListener(outsidePressEvent, callback);\n  });\n  React.useEffect(() => {\n    if (!open || !enabled) {\n      return;\n    }\n    dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;\n    dataRef.current.__outsidePressBubbles = outsidePressBubbles;\n    let compositionTimeout = -1;\n    function onScroll(event) {\n      onOpenChange(false, event, 'ancestor-scroll');\n    }\n    function handleCompositionStart() {\n      window.clearTimeout(compositionTimeout);\n      isComposingRef.current = true;\n    }\n    function handleCompositionEnd() {\n      // Safari fires `compositionend` before `keydown`, so we need to wait\n      // until the next tick to set `isComposing` to `false`.\n      // https://bugs.webkit.org/show_bug.cgi?id=165004\n      compositionTimeout = window.setTimeout(() => {\n        isComposingRef.current = false;\n      },\n      // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.\n      // Only apply to WebKit for the test to remain 0ms.\n      isWebKit() ? 5 : 0);\n    }\n    const doc = getDocument$1(elements.floating);\n    if (escapeKey) {\n      doc.addEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n      doc.addEventListener('compositionstart', handleCompositionStart);\n      doc.addEventListener('compositionend', handleCompositionEnd);\n    }\n    outsidePress && doc.addEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n    let ancestors = [];\n    if (ancestorScroll) {\n      if (isElement(elements.domReference)) {\n        ancestors = getOverflowAncestors(elements.domReference);\n      }\n      if (isElement(elements.floating)) {\n        ancestors = ancestors.concat(getOverflowAncestors(elements.floating));\n      }\n      if (!isElement(elements.reference) && elements.reference && elements.reference.contextElement) {\n        ancestors = ancestors.concat(getOverflowAncestors(elements.reference.contextElement));\n      }\n    }\n\n    // Ignore the visual viewport for scrolling dismissal (allow pinch-zoom)\n    ancestors = ancestors.filter(ancestor => {\n      var _doc$defaultView;\n      return ancestor !== ((_doc$defaultView = doc.defaultView) == null ? void 0 : _doc$defaultView.visualViewport);\n    });\n    ancestors.forEach(ancestor => {\n      ancestor.addEventListener('scroll', onScroll, {\n        passive: true\n      });\n    });\n    return () => {\n      if (escapeKey) {\n        doc.removeEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n        doc.removeEventListener('compositionstart', handleCompositionStart);\n        doc.removeEventListener('compositionend', handleCompositionEnd);\n      }\n      outsidePress && doc.removeEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n      ancestors.forEach(ancestor => {\n        ancestor.removeEventListener('scroll', onScroll);\n      });\n      window.clearTimeout(compositionTimeout);\n    };\n  }, [dataRef, elements, escapeKey, outsidePress, outsidePressEvent, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, escapeKeyCapture, closeOnEscapeKeyDownCapture, closeOnPressOutside, outsidePressCapture, closeOnPressOutsideCapture]);\n  React.useEffect(() => {\n    insideReactTreeRef.current = false;\n  }, [outsidePress, outsidePressEvent]);\n  const reference = React.useMemo(() => ({\n    onKeyDown: closeOnEscapeKeyDown,\n    ...(referencePress && {\n      [bubbleHandlerKeys[referencePressEvent]]: event => {\n        onOpenChange(false, event.nativeEvent, 'reference-press');\n      },\n      ...(referencePressEvent !== 'click' && {\n        onClick(event) {\n          onOpenChange(false, event.nativeEvent, 'reference-press');\n        }\n      })\n    })\n  }), [closeOnEscapeKeyDown, onOpenChange, referencePress, referencePressEvent]);\n  const floating = React.useMemo(() => ({\n    onKeyDown: closeOnEscapeKeyDown,\n    onMouseDown() {\n      endedOrStartedInsideRef.current = true;\n    },\n    onMouseUp() {\n      endedOrStartedInsideRef.current = true;\n    },\n    [captureHandlerKeys[outsidePressEvent]]: () => {\n      insideReactTreeRef.current = true;\n    }\n  }), [closeOnEscapeKeyDown, outsidePressEvent]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating\n  } : {}, [enabled, reference, floating]);\n}\n\nfunction useFloatingRootContext(options) {\n  const {\n    open = false,\n    onOpenChange: onOpenChangeProp,\n    elements: elementsProp\n  } = options;\n  const floatingId = useId();\n  const dataRef = React.useRef({});\n  const [events] = React.useState(() => createEventEmitter());\n  const nested = useFloatingParentNodeId() != null;\n  if (process.env.NODE_ENV !== \"production\") {\n    const optionDomReference = elementsProp.reference;\n    if (optionDomReference && !isElement(optionDomReference)) {\n      error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `refs.setPositionReference()`', 'instead.');\n    }\n  }\n  const [positionReference, setPositionReference] = React.useState(elementsProp.reference);\n  const onOpenChange = useEffectEvent((open, event, reason) => {\n    dataRef.current.openEvent = open ? event : undefined;\n    events.emit('openchange', {\n      open,\n      event,\n      reason,\n      nested\n    });\n    onOpenChangeProp == null || onOpenChangeProp(open, event, reason);\n  });\n  const refs = React.useMemo(() => ({\n    setPositionReference\n  }), []);\n  const elements = React.useMemo(() => ({\n    reference: positionReference || elementsProp.reference || null,\n    floating: elementsProp.floating || null,\n    domReference: elementsProp.reference\n  }), [positionReference, elementsProp.reference, elementsProp.floating]);\n  return React.useMemo(() => ({\n    dataRef,\n    open,\n    onOpenChange,\n    elements,\n    events,\n    floatingId,\n    refs\n  }), [open, onOpenChange, elements, events, floatingId, refs]);\n}\n\n/**\n * Provides data to position a floating element and context to add interactions.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    nodeId\n  } = options;\n  const internalRootContext = useFloatingRootContext({\n    ...options,\n    elements: {\n      reference: null,\n      floating: null,\n      ...options.elements\n    }\n  });\n  const rootContext = options.rootContext || internalRootContext;\n  const computedElements = rootContext.elements;\n  const [_domReference, setDomReference] = React.useState(null);\n  const [positionReference, _setPositionReference] = React.useState(null);\n  const optionDomReference = computedElements == null ? void 0 : computedElements.domReference;\n  const domReference = optionDomReference || _domReference;\n  const domReferenceRef = React.useRef(null);\n  const tree = useFloatingTree();\n  useModernLayoutEffect(() => {\n    if (domReference) {\n      domReferenceRef.current = domReference;\n    }\n  }, [domReference]);\n  const position = useFloating$1({\n    ...options,\n    elements: {\n      ...computedElements,\n      ...(positionReference && {\n        reference: positionReference\n      })\n    }\n  });\n  const setPositionReference = React.useCallback(node => {\n    const computedPositionReference = isElement(node) ? {\n      getBoundingClientRect: () => node.getBoundingClientRect(),\n      getClientRects: () => node.getClientRects(),\n      contextElement: node\n    } : node;\n    // Store the positionReference in state if the DOM reference is specified externally via the\n    // `elements.reference` option. This ensures that it won't be overridden on future renders.\n    _setPositionReference(computedPositionReference);\n    position.refs.setReference(computedPositionReference);\n  }, [position.refs]);\n  const setReference = React.useCallback(node => {\n    if (isElement(node) || node === null) {\n      domReferenceRef.current = node;\n      setDomReference(node);\n    }\n\n    // Backwards-compatibility for passing a virtual element to `reference`\n    // after it has set the DOM reference.\n    if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||\n    // Don't allow setting virtual elements using the old technique back to\n    // `null` to support `positionReference` + an unstable `reference`\n    // callback ref.\n    node !== null && !isElement(node)) {\n      position.refs.setReference(node);\n    }\n  }, [position.refs]);\n  const refs = React.useMemo(() => ({\n    ...position.refs,\n    setReference,\n    setPositionReference,\n    domReference: domReferenceRef\n  }), [position.refs, setReference, setPositionReference]);\n  const elements = React.useMemo(() => ({\n    ...position.elements,\n    domReference: domReference\n  }), [position.elements, domReference]);\n  const context = React.useMemo(() => ({\n    ...position,\n    ...rootContext,\n    refs,\n    elements,\n    nodeId\n  }), [position, refs, elements, nodeId, rootContext]);\n  useModernLayoutEffect(() => {\n    rootContext.dataRef.current.floatingContext = context;\n    const node = tree == null ? void 0 : tree.nodesRef.current.find(node => node.id === nodeId);\n    if (node) {\n      node.context = context;\n    }\n  });\n  return React.useMemo(() => ({\n    ...position,\n    context,\n    refs,\n    elements\n  }), [position, refs, elements, context]);\n}\n\nfunction isMacSafari() {\n  return isMac() && isSafari();\n}\n/**\n * Opens the floating element while the reference element has focus, like CSS\n * `:focus`.\n * @see https://floating-ui.com/docs/useFocus\n */\nfunction useFocus(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    events,\n    dataRef,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    visibleOnly = true\n  } = props;\n  const blockFocusRef = React.useRef(false);\n  const timeoutRef = React.useRef(-1);\n  const keyboardModalityRef = React.useRef(true);\n  React.useEffect(() => {\n    if (!enabled) return;\n    const win = getWindow(elements.domReference);\n\n    // If the reference was focused and the user left the tab/window, and the\n    // floating element was not open, the focus should be blocked when they\n    // return to the tab/window.\n    function onBlur() {\n      if (!open && isHTMLElement(elements.domReference) && elements.domReference === activeElement(getDocument$1(elements.domReference))) {\n        blockFocusRef.current = true;\n      }\n    }\n    function onKeyDown() {\n      keyboardModalityRef.current = true;\n    }\n    function onPointerDown() {\n      keyboardModalityRef.current = false;\n    }\n    win.addEventListener('blur', onBlur);\n    if (isMacSafari()) {\n      win.addEventListener('keydown', onKeyDown, true);\n      win.addEventListener('pointerdown', onPointerDown, true);\n    }\n    return () => {\n      win.removeEventListener('blur', onBlur);\n      if (isMacSafari()) {\n        win.removeEventListener('keydown', onKeyDown, true);\n        win.removeEventListener('pointerdown', onPointerDown, true);\n      }\n    };\n  }, [elements.domReference, open, enabled]);\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onOpenChange(_ref) {\n      let {\n        reason\n      } = _ref;\n      if (reason === 'reference-press' || reason === 'escape-key') {\n        blockFocusRef.current = true;\n      }\n    }\n    events.on('openchange', onOpenChange);\n    return () => {\n      events.off('openchange', onOpenChange);\n    };\n  }, [events, enabled]);\n  React.useEffect(() => {\n    return () => {\n      clearTimeoutIfSet(timeoutRef);\n    };\n  }, []);\n  const reference = React.useMemo(() => ({\n    onMouseLeave() {\n      blockFocusRef.current = false;\n    },\n    onFocus(event) {\n      if (blockFocusRef.current) return;\n      const target = getTarget$1(event.nativeEvent);\n      if (visibleOnly && isElement(target)) {\n        // Safari fails to match `:focus-visible` if focus was initially\n        // outside the document.\n        if (isMacSafari() && !event.relatedTarget) {\n          if (!keyboardModalityRef.current && !isTypeableElement(target)) {\n            return;\n          }\n        } else if (!matchesFocusVisible(target)) {\n          return;\n        }\n      }\n      onOpenChange(true, event.nativeEvent, 'focus');\n    },\n    onBlur(event) {\n      blockFocusRef.current = false;\n      const relatedTarget = event.relatedTarget;\n      const nativeEvent = event.nativeEvent;\n\n      // Hit the non-modal focus management portal guard. Focus will be\n      // moved into the floating element immediately after.\n      const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';\n\n      // Wait for the window blur listener to fire.\n      timeoutRef.current = window.setTimeout(() => {\n        var _dataRef$current$floa;\n        const activeEl = activeElement(elements.domReference ? elements.domReference.ownerDocument : document);\n\n        // Focus left the page, keep it open.\n        if (!relatedTarget && activeEl === elements.domReference) return;\n\n        // When focusing the reference element (e.g. regular click), then\n        // clicking into the floating element, prevent it from hiding.\n        // Note: it must be focusable, e.g. `tabindex=\"-1\"`.\n        // We can not rely on relatedTarget to point to the correct element\n        // as it will only point to the shadow host of the newly focused element\n        // and not the element that actually has received focus if it is located\n        // inside a shadow root.\n        if (contains$1((_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.refs.floating.current, activeEl) || contains$1(elements.domReference, activeEl) || movedToFocusGuard) {\n          return;\n        }\n        onOpenChange(false, nativeEvent, 'focus');\n      });\n    }\n  }), [dataRef, elements.domReference, onOpenChange, visibleOnly]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nfunction mergeProps(userProps, propsList, elementKey) {\n  const map = new Map();\n  const isItem = elementKey === 'item';\n  let domUserProps = userProps;\n  if (isItem && userProps) {\n    const {\n      [ACTIVE_KEY]: _,\n      [SELECTED_KEY]: __,\n      ...validProps\n    } = userProps;\n    domUserProps = validProps;\n  }\n  return {\n    ...(elementKey === 'floating' && {\n      tabIndex: -1,\n      [FOCUSABLE_ATTRIBUTE]: ''\n    }),\n    ...domUserProps,\n    ...propsList.map(value => {\n      const propsOrGetProps = value ? value[elementKey] : null;\n      if (typeof propsOrGetProps === 'function') {\n        return userProps ? propsOrGetProps(userProps) : null;\n      }\n      return propsOrGetProps;\n    }).concat(userProps).reduce((acc, props) => {\n      if (!props) {\n        return acc;\n      }\n      Object.entries(props).forEach(_ref => {\n        let [key, value] = _ref;\n        if (isItem && [ACTIVE_KEY, SELECTED_KEY].includes(key)) {\n          return;\n        }\n        if (key.indexOf('on') === 0) {\n          if (!map.has(key)) {\n            map.set(key, []);\n          }\n          if (typeof value === 'function') {\n            var _map$get;\n            (_map$get = map.get(key)) == null || _map$get.push(value);\n            acc[key] = function () {\n              var _map$get2;\n              for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n                args[_key] = arguments[_key];\n              }\n              return (_map$get2 = map.get(key)) == null ? void 0 : _map$get2.map(fn => fn(...args)).find(val => val !== undefined);\n            };\n          }\n        } else {\n          acc[key] = value;\n        }\n      });\n      return acc;\n    }, {})\n  };\n}\n/**\n * Merges an array of interaction hooks' props into prop getters, allowing\n * event handler functions to be composed together without overwriting one\n * another.\n * @see https://floating-ui.com/docs/useInteractions\n */\nfunction useInteractions(propsList) {\n  if (propsList === void 0) {\n    propsList = [];\n  }\n  const referenceDeps = propsList.map(key => key == null ? void 0 : key.reference);\n  const floatingDeps = propsList.map(key => key == null ? void 0 : key.floating);\n  const itemDeps = propsList.map(key => key == null ? void 0 : key.item);\n  const getReferenceProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'reference'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  referenceDeps);\n  const getFloatingProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'floating'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  floatingDeps);\n  const getItemProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'item'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  itemDeps);\n  return React.useMemo(() => ({\n    getReferenceProps,\n    getFloatingProps,\n    getItemProps\n  }), [getReferenceProps, getFloatingProps, getItemProps]);\n}\n\nconst ESCAPE = 'Escape';\nfunction doSwitch(orientation, vertical, horizontal) {\n  switch (orientation) {\n    case 'vertical':\n      return vertical;\n    case 'horizontal':\n      return horizontal;\n    default:\n      return vertical || horizontal;\n  }\n}\nfunction isMainOrientationKey(key, orientation) {\n  const vertical = key === ARROW_UP || key === ARROW_DOWN;\n  const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n  return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n  const vertical = key === ARROW_DOWN;\n  const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n  return doSwitch(orientation, vertical, horizontal) || key === 'Enter' || key === ' ' || key === '';\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n  const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n  const horizontal = key === ARROW_DOWN;\n  return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl, cols) {\n  const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n  const horizontal = key === ARROW_UP;\n  if (orientation === 'both' || orientation === 'horizontal' && cols && cols > 1) {\n    return key === ESCAPE;\n  }\n  return doSwitch(orientation, vertical, horizontal);\n}\n/**\n * Adds arrow key-based navigation of a list of items, either using real DOM\n * focus or virtual focus.\n * @see https://floating-ui.com/docs/useListNavigation\n */\nfunction useListNavigation(context, props) {\n  const {\n    open,\n    onOpenChange,\n    elements,\n    floatingId\n  } = context;\n  const {\n    listRef,\n    activeIndex,\n    onNavigate: unstable_onNavigate = () => {},\n    enabled = true,\n    selectedIndex = null,\n    allowEscape = false,\n    loop = false,\n    nested = false,\n    rtl = false,\n    virtual = false,\n    focusItemOnOpen = 'auto',\n    focusItemOnHover = true,\n    openOnArrowKeyDown = true,\n    disabledIndices = undefined,\n    orientation = 'vertical',\n    parentOrientation,\n    cols = 1,\n    scrollItemIntoView = true,\n    virtualItemRef,\n    itemSizes,\n    dense = false\n  } = props;\n  if (process.env.NODE_ENV !== \"production\") {\n    if (allowEscape) {\n      if (!loop) {\n        warn('`useListNavigation` looping must be enabled to allow escaping.');\n      }\n      if (!virtual) {\n        warn('`useListNavigation` must be virtual to allow escaping.');\n      }\n    }\n    if (orientation === 'vertical' && cols > 1) {\n      warn('In grid list navigation mode (`cols` > 1), the `orientation` should', 'be either \"horizontal\" or \"both\".');\n    }\n  }\n  const floatingFocusElement = getFloatingFocusElement(elements.floating);\n  const floatingFocusElementRef = useLatestRef(floatingFocusElement);\n  const parentId = useFloatingParentNodeId();\n  const tree = useFloatingTree();\n  useModernLayoutEffect(() => {\n    context.dataRef.current.orientation = orientation;\n  }, [context, orientation]);\n  const onNavigate = useEffectEvent(() => {\n    unstable_onNavigate(indexRef.current === -1 ? null : indexRef.current);\n  });\n  const typeableComboboxReference = isTypeableCombobox(elements.domReference);\n  const focusItemOnOpenRef = React.useRef(focusItemOnOpen);\n  const indexRef = React.useRef(selectedIndex != null ? selectedIndex : -1);\n  const keyRef = React.useRef(null);\n  const isPointerModalityRef = React.useRef(true);\n  const previousOnNavigateRef = React.useRef(onNavigate);\n  const previousMountedRef = React.useRef(!!elements.floating);\n  const previousOpenRef = React.useRef(open);\n  const forceSyncFocusRef = React.useRef(false);\n  const forceScrollIntoViewRef = React.useRef(false);\n  const disabledIndicesRef = useLatestRef(disabledIndices);\n  const latestOpenRef = useLatestRef(open);\n  const scrollItemIntoViewRef = useLatestRef(scrollItemIntoView);\n  const selectedIndexRef = useLatestRef(selectedIndex);\n  const [activeId, setActiveId] = React.useState();\n  const [virtualId, setVirtualId] = React.useState();\n  const focusItem = useEffectEvent(() => {\n    function runFocus(item) {\n      if (virtual) {\n        var _item$id;\n        if ((_item$id = item.id) != null && _item$id.endsWith('-fui-option')) {\n          item.id = floatingId + \"-\" + Math.random().toString(16).slice(2, 10);\n        }\n        setActiveId(item.id);\n        tree == null || tree.events.emit('virtualfocus', item);\n        if (virtualItemRef) {\n          virtualItemRef.current = item;\n        }\n      } else {\n        enqueueFocus(item, {\n          sync: forceSyncFocusRef.current,\n          preventScroll: true\n        });\n      }\n    }\n    const initialItem = listRef.current[indexRef.current];\n    const forceScrollIntoView = forceScrollIntoViewRef.current;\n    if (initialItem) {\n      runFocus(initialItem);\n    }\n    const scheduler = forceSyncFocusRef.current ? v => v() : requestAnimationFrame;\n    scheduler(() => {\n      const waitedItem = listRef.current[indexRef.current] || initialItem;\n      if (!waitedItem) return;\n      if (!initialItem) {\n        runFocus(waitedItem);\n      }\n      const scrollIntoViewOptions = scrollItemIntoViewRef.current;\n      const shouldScrollIntoView = scrollIntoViewOptions && item && (forceScrollIntoView || !isPointerModalityRef.current);\n      if (shouldScrollIntoView) {\n        // JSDOM doesn't support `.scrollIntoView()` but it's widely supported\n        // by all browsers.\n        waitedItem.scrollIntoView == null || waitedItem.scrollIntoView(typeof scrollIntoViewOptions === 'boolean' ? {\n          block: 'nearest',\n          inline: 'nearest'\n        } : scrollIntoViewOptions);\n      }\n    });\n  });\n\n  // Sync `selectedIndex` to be the `activeIndex` upon opening the floating\n  // element. Also, reset `activeIndex` upon closing the floating element.\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (open && elements.floating) {\n      if (focusItemOnOpenRef.current && selectedIndex != null) {\n        // Regardless of the pointer modality, we want to ensure the selected\n        // item comes into view when the floating element is opened.\n        forceScrollIntoViewRef.current = true;\n        indexRef.current = selectedIndex;\n        onNavigate();\n      }\n    } else if (previousMountedRef.current) {\n      // Since the user can specify `onNavigate` conditionally\n      // (onNavigate: open ? setActiveIndex : setSelectedIndex),\n      // we store and call the previous function.\n      indexRef.current = -1;\n      previousOnNavigateRef.current();\n    }\n  }, [enabled, open, elements.floating, selectedIndex, onNavigate]);\n\n  // Sync `activeIndex` to be the focused item while the floating element is\n  // open.\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (!open) return;\n    if (!elements.floating) return;\n    if (activeIndex == null) {\n      forceSyncFocusRef.current = false;\n      if (selectedIndexRef.current != null) {\n        return;\n      }\n\n      // Reset while the floating element was open (e.g. the list changed).\n      if (previousMountedRef.current) {\n        indexRef.current = -1;\n        focusItem();\n      }\n\n      // Initial sync.\n      if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n        let runs = 0;\n        const waitForListPopulated = () => {\n          if (listRef.current[0] == null) {\n            // Avoid letting the browser paint if possible on the first try,\n            // otherwise use rAF. Don't try more than twice, since something\n            // is wrong otherwise.\n            if (runs < 2) {\n              const scheduler = runs ? requestAnimationFrame : queueMicrotask;\n              scheduler(waitForListPopulated);\n            }\n            runs++;\n          } else {\n            indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef, disabledIndicesRef.current) : getMaxListIndex(listRef, disabledIndicesRef.current);\n            keyRef.current = null;\n            onNavigate();\n          }\n        };\n        waitForListPopulated();\n      }\n    } else if (!isIndexOutOfListBounds(listRef, activeIndex)) {\n      indexRef.current = activeIndex;\n      focusItem();\n      forceScrollIntoViewRef.current = false;\n    }\n  }, [enabled, open, elements.floating, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, disabledIndicesRef]);\n\n  // Ensure the parent floating element has focus when a nested child closes\n  // to allow arrow key navigation to work after the pointer leaves the child.\n  useModernLayoutEffect(() => {\n    var _nodes$find;\n    if (!enabled || elements.floating || !tree || virtual || !previousMountedRef.current) {\n      return;\n    }\n    const nodes = tree.nodesRef.current;\n    const parent = (_nodes$find = nodes.find(node => node.id === parentId)) == null || (_nodes$find = _nodes$find.context) == null ? void 0 : _nodes$find.elements.floating;\n    const activeEl = activeElement(getDocument$1(elements.floating));\n    const treeContainsActiveEl = nodes.some(node => node.context && contains$1(node.context.elements.floating, activeEl));\n    if (parent && !treeContainsActiveEl && isPointerModalityRef.current) {\n      parent.focus({\n        preventScroll: true\n      });\n    }\n  }, [enabled, elements.floating, tree, parentId, virtual]);\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (!tree) return;\n    if (!virtual) return;\n    if (parentId) return;\n    function handleVirtualFocus(item) {\n      setVirtualId(item.id);\n      if (virtualItemRef) {\n        virtualItemRef.current = item;\n      }\n    }\n    tree.events.on('virtualfocus', handleVirtualFocus);\n    return () => {\n      tree.events.off('virtualfocus', handleVirtualFocus);\n    };\n  }, [enabled, tree, virtual, parentId, virtualItemRef]);\n  useModernLayoutEffect(() => {\n    previousOnNavigateRef.current = onNavigate;\n    previousOpenRef.current = open;\n    previousMountedRef.current = !!elements.floating;\n  });\n  useModernLayoutEffect(() => {\n    if (!open) {\n      keyRef.current = null;\n    }\n  }, [open]);\n  const hasActiveIndex = activeIndex != null;\n  const item = React.useMemo(() => {\n    function syncCurrentTarget(currentTarget) {\n      if (!open) return;\n      const index = listRef.current.indexOf(currentTarget);\n      if (index !== -1 && indexRef.current !== index) {\n        indexRef.current = index;\n        onNavigate();\n      }\n    }\n    const props = {\n      onFocus(_ref) {\n        let {\n          currentTarget\n        } = _ref;\n        forceSyncFocusRef.current = true;\n        syncCurrentTarget(currentTarget);\n      },\n      onClick: _ref2 => {\n        let {\n          currentTarget\n        } = _ref2;\n        return currentTarget.focus({\n          preventScroll: true\n        });\n      },\n      // Safari\n      ...(focusItemOnHover && {\n        onMouseMove(_ref3) {\n          let {\n            currentTarget\n          } = _ref3;\n          forceSyncFocusRef.current = true;\n          forceScrollIntoViewRef.current = false;\n          syncCurrentTarget(currentTarget);\n        },\n        onPointerLeave(_ref4) {\n          let {\n            pointerType\n          } = _ref4;\n          if (!isPointerModalityRef.current || pointerType === 'touch') {\n            return;\n          }\n          forceSyncFocusRef.current = true;\n          indexRef.current = -1;\n          onNavigate();\n          if (!virtual) {\n            var _floatingFocusElement;\n            (_floatingFocusElement = floatingFocusElementRef.current) == null || _floatingFocusElement.focus({\n              preventScroll: true\n            });\n          }\n        }\n      })\n    };\n    return props;\n  }, [open, floatingFocusElementRef, focusItemOnHover, listRef, onNavigate, virtual]);\n  const getParentOrientation = React.useCallback(() => {\n    var _tree$nodesRef$curren;\n    return parentOrientation != null ? parentOrientation : tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.dataRef) == null ? void 0 : _tree$nodesRef$curren.current.orientation;\n  }, [parentId, tree, parentOrientation]);\n  const commonOnKeyDown = useEffectEvent(event => {\n    isPointerModalityRef.current = false;\n    forceSyncFocusRef.current = true;\n\n    // When composing a character, Chrome fires ArrowDown twice. Firefox/Safari\n    // don't appear to suffer from this. `event.isComposing` is avoided due to\n    // Safari not supporting it properly (although it's not needed in the first\n    // place for Safari, just avoiding any possible issues).\n    if (event.which === 229) {\n      return;\n    }\n\n    // If the floating element is animating out, ignore navigation. Otherwise,\n    // the `activeIndex` gets set to 0 despite not being open so the next time\n    // the user ArrowDowns, the first item won't be focused.\n    if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) {\n      return;\n    }\n    if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl, cols)) {\n      // If the nested list's close key is also the parent navigation key,\n      // let the parent navigate. Otherwise, stop propagating the event.\n      if (!isMainOrientationKey(event.key, getParentOrientation())) {\n        stopEvent(event);\n      }\n      onOpenChange(false, event.nativeEvent, 'list-navigation');\n      if (isHTMLElement(elements.domReference)) {\n        if (virtual) {\n          tree == null || tree.events.emit('virtualfocus', elements.domReference);\n        } else {\n          elements.domReference.focus();\n        }\n      }\n      return;\n    }\n    const currentIndex = indexRef.current;\n    const minIndex = getMinListIndex(listRef, disabledIndices);\n    const maxIndex = getMaxListIndex(listRef, disabledIndices);\n    if (!typeableComboboxReference) {\n      if (event.key === 'Home') {\n        stopEvent(event);\n        indexRef.current = minIndex;\n        onNavigate();\n      }\n      if (event.key === 'End') {\n        stopEvent(event);\n        indexRef.current = maxIndex;\n        onNavigate();\n      }\n    }\n\n    // Grid navigation.\n    if (cols > 1) {\n      const sizes = itemSizes || Array.from({\n        length: listRef.current.length\n      }, () => ({\n        width: 1,\n        height: 1\n      }));\n      // To calculate movements on the grid, we use hypothetical cell indices\n      // as if every item was 1x1, then convert back to real indices.\n      const cellMap = createGridCellMap(sizes, cols, dense);\n      const minGridIndex = cellMap.findIndex(index => index != null && !isListIndexDisabled(listRef, index, disabledIndices));\n      // last enabled index\n      const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isListIndexDisabled(listRef, index, disabledIndices) ? cellIndex : foundIndex, -1);\n      const index = cellMap[getGridNavigatedIndex({\n        current: cellMap.map(itemIndex => itemIndex != null ? listRef.current[itemIndex] : null)\n      }, {\n        event,\n        orientation,\n        loop,\n        rtl,\n        cols,\n        // treat undefined (empty grid spaces) as disabled indices so we\n        // don't end up in them\n        disabledIndices: getGridCellIndices([...(disabledIndices || listRef.current.map((_, index) => isListIndexDisabled(listRef, index) ? index : undefined)), undefined], cellMap),\n        minIndex: minGridIndex,\n        maxIndex: maxGridIndex,\n        prevIndex: getGridCellIndexOfCorner(indexRef.current > maxIndex ? minIndex : indexRef.current, sizes, cellMap, cols,\n        // use a corner matching the edge closest to the direction\n        // we're moving in so we don't end up in the same item. Prefer\n        // top/left over bottom/right.\n        event.key === ARROW_DOWN ? 'bl' : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? 'tr' : 'tl'),\n        stopEvent: true\n      })];\n      if (index != null) {\n        indexRef.current = index;\n        onNavigate();\n      }\n      if (orientation === 'both') {\n        return;\n      }\n    }\n    if (isMainOrientationKey(event.key, orientation)) {\n      stopEvent(event);\n\n      // Reset the index if no item is focused.\n      if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n        indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n        onNavigate();\n        return;\n      }\n      if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n        if (loop) {\n          indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledListIndex(listRef, {\n            startingIndex: currentIndex,\n            disabledIndices\n          });\n        } else {\n          indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef, {\n            startingIndex: currentIndex,\n            disabledIndices\n          }));\n        }\n      } else {\n        if (loop) {\n          indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledListIndex(listRef, {\n            startingIndex: currentIndex,\n            decrement: true,\n            disabledIndices\n          });\n        } else {\n          indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef, {\n            startingIndex: currentIndex,\n            decrement: true,\n            disabledIndices\n          }));\n        }\n      }\n      if (isIndexOutOfListBounds(listRef, indexRef.current)) {\n        indexRef.current = -1;\n      }\n      onNavigate();\n    }\n  });\n  const ariaActiveDescendantProp = React.useMemo(() => {\n    return virtual && open && hasActiveIndex && {\n      'aria-activedescendant': virtualId || activeId\n    };\n  }, [virtual, open, hasActiveIndex, virtualId, activeId]);\n  const floating = React.useMemo(() => {\n    return {\n      'aria-orientation': orientation === 'both' ? undefined : orientation,\n      ...(!typeableComboboxReference ? ariaActiveDescendantProp : {}),\n      onKeyDown: commonOnKeyDown,\n      onPointerMove() {\n        isPointerModalityRef.current = true;\n      }\n    };\n  }, [ariaActiveDescendantProp, commonOnKeyDown, orientation, typeableComboboxReference]);\n  const reference = React.useMemo(() => {\n    function checkVirtualMouse(event) {\n      if (focusItemOnOpen === 'auto' && isVirtualClick(event.nativeEvent)) {\n        focusItemOnOpenRef.current = true;\n      }\n    }\n    function checkVirtualPointer(event) {\n      // `pointerdown` fires first, reset the state then perform the checks.\n      focusItemOnOpenRef.current = focusItemOnOpen;\n      if (focusItemOnOpen === 'auto' && isVirtualPointerEvent(event.nativeEvent)) {\n        focusItemOnOpenRef.current = true;\n      }\n    }\n    return {\n      ...ariaActiveDescendantProp,\n      onKeyDown(event) {\n        isPointerModalityRef.current = false;\n        const isArrowKey = event.key.startsWith('Arrow');\n        const isHomeOrEndKey = ['Home', 'End'].includes(event.key);\n        const isMoveKey = isArrowKey || isHomeOrEndKey;\n        const isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n        const isCrossCloseKey = isCrossOrientationCloseKey(event.key, orientation, rtl, cols);\n        const isParentCrossOpenKey = isCrossOrientationOpenKey(event.key, getParentOrientation(), rtl);\n        const isMainKey = isMainOrientationKey(event.key, orientation);\n        const isNavigationKey = (nested ? isParentCrossOpenKey : isMainKey) || event.key === 'Enter' || event.key.trim() === '';\n        if (virtual && open) {\n          const rootNode = tree == null ? void 0 : tree.nodesRef.current.find(node => node.parentId == null);\n          const deepestNode = tree && rootNode ? getDeepestNode(tree.nodesRef.current, rootNode.id) : null;\n          if (isMoveKey && deepestNode && virtualItemRef) {\n            const eventObject = new KeyboardEvent('keydown', {\n              key: event.key,\n              bubbles: true\n            });\n            if (isCrossOpenKey || isCrossCloseKey) {\n              var _deepestNode$context, _deepestNode$context2;\n              const isCurrentTarget = ((_deepestNode$context = deepestNode.context) == null ? void 0 : _deepestNode$context.elements.domReference) === event.currentTarget;\n              const dispatchItem = isCrossCloseKey && !isCurrentTarget ? (_deepestNode$context2 = deepestNode.context) == null ? void 0 : _deepestNode$context2.elements.domReference : isCrossOpenKey ? listRef.current.find(item => (item == null ? void 0 : item.id) === activeId) : null;\n              if (dispatchItem) {\n                stopEvent(event);\n                dispatchItem.dispatchEvent(eventObject);\n                setVirtualId(undefined);\n              }\n            }\n            if ((isMainKey || isHomeOrEndKey) && deepestNode.context) {\n              if (deepestNode.context.open && deepestNode.parentId && event.currentTarget !== deepestNode.context.elements.domReference) {\n                var _deepestNode$context$;\n                stopEvent(event);\n                (_deepestNode$context$ = deepestNode.context.elements.domReference) == null || _deepestNode$context$.dispatchEvent(eventObject);\n                return;\n              }\n            }\n          }\n          return commonOnKeyDown(event);\n        }\n        // If a floating element should not open on arrow key down, avoid\n        // setting `activeIndex` while it's closed.\n        if (!open && !openOnArrowKeyDown && isArrowKey) {\n          return;\n        }\n        if (isNavigationKey) {\n          const isParentMainKey = isMainOrientationKey(event.key, getParentOrientation());\n          keyRef.current = nested && isParentMainKey ? null : event.key;\n        }\n        if (nested) {\n          if (isParentCrossOpenKey) {\n            stopEvent(event);\n            if (open) {\n              indexRef.current = getMinListIndex(listRef, disabledIndicesRef.current);\n              onNavigate();\n            } else {\n              onOpenChange(true, event.nativeEvent, 'list-navigation');\n            }\n          }\n          return;\n        }\n        if (isMainKey) {\n          if (selectedIndex != null) {\n            indexRef.current = selectedIndex;\n          }\n          stopEvent(event);\n          if (!open && openOnArrowKeyDown) {\n            onOpenChange(true, event.nativeEvent, 'list-navigation');\n          } else {\n            commonOnKeyDown(event);\n          }\n          if (open) {\n            onNavigate();\n          }\n        }\n      },\n      onFocus() {\n        if (open && !virtual) {\n          indexRef.current = -1;\n          onNavigate();\n        }\n      },\n      onPointerDown: checkVirtualPointer,\n      onPointerEnter: checkVirtualPointer,\n      onMouseDown: checkVirtualMouse,\n      onClick: checkVirtualMouse\n    };\n  }, [activeId, ariaActiveDescendantProp, cols, commonOnKeyDown, disabledIndicesRef, focusItemOnOpen, listRef, nested, onNavigate, onOpenChange, open, openOnArrowKeyDown, orientation, getParentOrientation, rtl, selectedIndex, tree, virtual, virtualItemRef]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating,\n    item\n  } : {}, [enabled, reference, floating, item]);\n}\n\nconst componentRoleToAriaRoleMap = /*#__PURE__*/new Map([['select', 'listbox'], ['combobox', 'listbox'], ['label', false]]);\n\n/**\n * Adds base screen reader props to the reference and floating elements for a\n * given floating element `role`.\n * @see https://floating-ui.com/docs/useRole\n */\nfunction useRole(context, props) {\n  var _elements$domReferenc, _componentRoleToAriaR;\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    elements,\n    floatingId: defaultFloatingId\n  } = context;\n  const {\n    enabled = true,\n    role = 'dialog'\n  } = props;\n  const defaultReferenceId = useId();\n  const referenceId = ((_elements$domReferenc = elements.domReference) == null ? void 0 : _elements$domReferenc.id) || defaultReferenceId;\n  const floatingId = React.useMemo(() => {\n    var _getFloatingFocusElem;\n    return ((_getFloatingFocusElem = getFloatingFocusElement(elements.floating)) == null ? void 0 : _getFloatingFocusElem.id) || defaultFloatingId;\n  }, [elements.floating, defaultFloatingId]);\n  const ariaRole = (_componentRoleToAriaR = componentRoleToAriaRoleMap.get(role)) != null ? _componentRoleToAriaR : role;\n  const parentId = useFloatingParentNodeId();\n  const isNested = parentId != null;\n  const reference = React.useMemo(() => {\n    if (ariaRole === 'tooltip' || role === 'label') {\n      return {\n        [\"aria-\" + (role === 'label' ? 'labelledby' : 'describedby')]: open ? floatingId : undefined\n      };\n    }\n    return {\n      'aria-expanded': open ? 'true' : 'false',\n      'aria-haspopup': ariaRole === 'alertdialog' ? 'dialog' : ariaRole,\n      'aria-controls': open ? floatingId : undefined,\n      ...(ariaRole === 'listbox' && {\n        role: 'combobox'\n      }),\n      ...(ariaRole === 'menu' && {\n        id: referenceId\n      }),\n      ...(ariaRole === 'menu' && isNested && {\n        role: 'menuitem'\n      }),\n      ...(role === 'select' && {\n        'aria-autocomplete': 'none'\n      }),\n      ...(role === 'combobox' && {\n        'aria-autocomplete': 'list'\n      })\n    };\n  }, [ariaRole, floatingId, isNested, open, referenceId, role]);\n  const floating = React.useMemo(() => {\n    const floatingProps = {\n      id: floatingId,\n      ...(ariaRole && {\n        role: ariaRole\n      })\n    };\n    if (ariaRole === 'tooltip' || role === 'label') {\n      return floatingProps;\n    }\n    return {\n      ...floatingProps,\n      ...(ariaRole === 'menu' && {\n        'aria-labelledby': referenceId\n      })\n    };\n  }, [ariaRole, floatingId, referenceId, role]);\n  const item = React.useCallback(_ref => {\n    let {\n      active,\n      selected\n    } = _ref;\n    const commonProps = {\n      role: 'option',\n      ...(active && {\n        id: floatingId + \"-fui-option\"\n      })\n    };\n\n    // For `menu`, we are unable to tell if the item is a `menuitemradio`\n    // or `menuitemcheckbox`. For backwards-compatibility reasons, also\n    // avoid defaulting to `menuitem` as it may overwrite custom role props.\n    switch (role) {\n      case 'select':\n        return {\n          ...commonProps,\n          'aria-selected': active && selected\n        };\n      case 'combobox':\n        {\n          return {\n            ...commonProps,\n            'aria-selected': selected\n          };\n        }\n    }\n    return {};\n  }, [floatingId, role]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating,\n    item\n  } : {}, [enabled, reference, floating, item]);\n}\n\n// Converts a JS style key like `backgroundColor` to a CSS transition-property\n// like `background-color`.\nconst camelCaseToKebabCase = str => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\nfunction execWithArgsOrReturn(valueOrFn, args) {\n  return typeof valueOrFn === 'function' ? valueOrFn(args) : valueOrFn;\n}\nfunction useDelayUnmount(open, durationMs) {\n  const [isMounted, setIsMounted] = React.useState(open);\n  if (open && !isMounted) {\n    setIsMounted(true);\n  }\n  React.useEffect(() => {\n    if (!open && isMounted) {\n      const timeout = setTimeout(() => setIsMounted(false), durationMs);\n      return () => clearTimeout(timeout);\n    }\n  }, [open, isMounted, durationMs]);\n  return isMounted;\n}\n/**\n * Provides a status string to apply CSS transitions to a floating element,\n * correctly handling placement-aware transitions.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstatus\n */\nfunction useTransitionStatus(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    elements: {\n      floating\n    }\n  } = context;\n  const {\n    duration = 250\n  } = props;\n  const isNumberDuration = typeof duration === 'number';\n  const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n  const [status, setStatus] = React.useState('unmounted');\n  const isMounted = useDelayUnmount(open, closeDuration);\n  if (!isMounted && status === 'close') {\n    setStatus('unmounted');\n  }\n  useModernLayoutEffect(() => {\n    if (!floating) return;\n    if (open) {\n      setStatus('initial');\n      const frame = requestAnimationFrame(() => {\n        // Ensure it opens before paint. With `FloatingDelayGroup`,\n        // this avoids a flicker when moving between floating elements\n        // to ensure one is always open with no missing frames.\n        ReactDOM.flushSync(() => {\n          setStatus('open');\n        });\n      });\n      return () => {\n        cancelAnimationFrame(frame);\n      };\n    }\n    setStatus('close');\n  }, [open, floating]);\n  return {\n    isMounted,\n    status\n  };\n}\n/**\n * Provides styles to apply CSS transitions to a floating element, correctly\n * handling placement-aware transitions. Wrapper around `useTransitionStatus`.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstyles\n */\nfunction useTransitionStyles(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    initial: unstable_initial = {\n      opacity: 0\n    },\n    open: unstable_open,\n    close: unstable_close,\n    common: unstable_common,\n    duration = 250\n  } = props;\n  const placement = context.placement;\n  const side = placement.split('-')[0];\n  const fnArgs = React.useMemo(() => ({\n    side,\n    placement\n  }), [side, placement]);\n  const isNumberDuration = typeof duration === 'number';\n  const openDuration = (isNumberDuration ? duration : duration.open) || 0;\n  const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n  const [styles, setStyles] = React.useState(() => ({\n    ...execWithArgsOrReturn(unstable_common, fnArgs),\n    ...execWithArgsOrReturn(unstable_initial, fnArgs)\n  }));\n  const {\n    isMounted,\n    status\n  } = useTransitionStatus(context, {\n    duration\n  });\n  const initialRef = useLatestRef(unstable_initial);\n  const openRef = useLatestRef(unstable_open);\n  const closeRef = useLatestRef(unstable_close);\n  const commonRef = useLatestRef(unstable_common);\n  useModernLayoutEffect(() => {\n    const initialStyles = execWithArgsOrReturn(initialRef.current, fnArgs);\n    const closeStyles = execWithArgsOrReturn(closeRef.current, fnArgs);\n    const commonStyles = execWithArgsOrReturn(commonRef.current, fnArgs);\n    const openStyles = execWithArgsOrReturn(openRef.current, fnArgs) || Object.keys(initialStyles).reduce((acc, key) => {\n      acc[key] = '';\n      return acc;\n    }, {});\n    if (status === 'initial') {\n      setStyles(styles => ({\n        transitionProperty: styles.transitionProperty,\n        ...commonStyles,\n        ...initialStyles\n      }));\n    }\n    if (status === 'open') {\n      setStyles({\n        transitionProperty: Object.keys(openStyles).map(camelCaseToKebabCase).join(','),\n        transitionDuration: openDuration + \"ms\",\n        ...commonStyles,\n        ...openStyles\n      });\n    }\n    if (status === 'close') {\n      const styles = closeStyles || initialStyles;\n      setStyles({\n        transitionProperty: Object.keys(styles).map(camelCaseToKebabCase).join(','),\n        transitionDuration: closeDuration + \"ms\",\n        ...commonStyles,\n        ...styles\n      });\n    }\n  }, [closeDuration, closeRef, initialRef, openRef, commonRef, openDuration, status, fnArgs]);\n  return {\n    isMounted,\n    styles\n  };\n}\n\n/**\n * Provides a matching callback that can be used to focus an item as the user\n * types, often used in tandem with `useListNavigation()`.\n * @see https://floating-ui.com/docs/useTypeahead\n */\nfunction useTypeahead(context, props) {\n  var _ref;\n  const {\n    open,\n    dataRef\n  } = context;\n  const {\n    listRef,\n    activeIndex,\n    onMatch: unstable_onMatch,\n    onTypingChange: unstable_onTypingChange,\n    enabled = true,\n    findMatch = null,\n    resetMs = 750,\n    ignoreKeys = [],\n    selectedIndex = null\n  } = props;\n  const timeoutIdRef = React.useRef(-1);\n  const stringRef = React.useRef('');\n  const prevIndexRef = React.useRef((_ref = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref : -1);\n  const matchIndexRef = React.useRef(null);\n  const onMatch = useEffectEvent(unstable_onMatch);\n  const onTypingChange = useEffectEvent(unstable_onTypingChange);\n  const findMatchRef = useLatestRef(findMatch);\n  const ignoreKeysRef = useLatestRef(ignoreKeys);\n  useModernLayoutEffect(() => {\n    if (open) {\n      clearTimeoutIfSet(timeoutIdRef);\n      matchIndexRef.current = null;\n      stringRef.current = '';\n    }\n  }, [open]);\n  useModernLayoutEffect(() => {\n    // Sync arrow key navigation but not typeahead navigation.\n    if (open && stringRef.current === '') {\n      var _ref2;\n      prevIndexRef.current = (_ref2 = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref2 : -1;\n    }\n  }, [open, selectedIndex, activeIndex]);\n  const setTypingChange = useEffectEvent(value => {\n    if (value) {\n      if (!dataRef.current.typing) {\n        dataRef.current.typing = value;\n        onTypingChange(value);\n      }\n    } else {\n      if (dataRef.current.typing) {\n        dataRef.current.typing = value;\n        onTypingChange(value);\n      }\n    }\n  });\n  const onKeyDown = useEffectEvent(event => {\n    function getMatchingIndex(list, orderedList, string) {\n      const str = findMatchRef.current ? findMatchRef.current(orderedList, string) : orderedList.find(text => (text == null ? void 0 : text.toLocaleLowerCase().indexOf(string.toLocaleLowerCase())) === 0);\n      return str ? list.indexOf(str) : -1;\n    }\n    const listContent = listRef.current;\n    if (stringRef.current.length > 0 && stringRef.current[0] !== ' ') {\n      if (getMatchingIndex(listContent, listContent, stringRef.current) === -1) {\n        setTypingChange(false);\n      } else if (event.key === ' ') {\n        stopEvent(event);\n      }\n    }\n    if (listContent == null || ignoreKeysRef.current.includes(event.key) ||\n    // Character key.\n    event.key.length !== 1 ||\n    // Modifier key.\n    event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n    if (open && event.key !== ' ') {\n      stopEvent(event);\n      setTypingChange(true);\n    }\n\n    // Bail out if the list contains a word like \"llama\" or \"aaron\". TODO:\n    // allow it in this case, too.\n    const allowRapidSuccessionOfFirstLetter = listContent.every(text => {\n      var _text$, _text$2;\n      return text ? ((_text$ = text[0]) == null ? void 0 : _text$.toLocaleLowerCase()) !== ((_text$2 = text[1]) == null ? void 0 : _text$2.toLocaleLowerCase()) : true;\n    });\n\n    // Allows the user to cycle through items that start with the same letter\n    // in rapid succession.\n    if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {\n      stringRef.current = '';\n      prevIndexRef.current = matchIndexRef.current;\n    }\n    stringRef.current += event.key;\n    clearTimeoutIfSet(timeoutIdRef);\n    timeoutIdRef.current = window.setTimeout(() => {\n      stringRef.current = '';\n      prevIndexRef.current = matchIndexRef.current;\n      setTypingChange(false);\n    }, resetMs);\n    const prevIndex = prevIndexRef.current;\n    const index = getMatchingIndex(listContent, [...listContent.slice((prevIndex || 0) + 1), ...listContent.slice(0, (prevIndex || 0) + 1)], stringRef.current);\n    if (index !== -1) {\n      onMatch(index);\n      matchIndexRef.current = index;\n    } else if (event.key !== ' ') {\n      stringRef.current = '';\n      setTypingChange(false);\n    }\n  });\n  const reference = React.useMemo(() => ({\n    onKeyDown\n  }), [onKeyDown]);\n  const floating = React.useMemo(() => {\n    return {\n      onKeyDown,\n      onKeyUp(event) {\n        if (event.key === ' ') {\n          setTypingChange(false);\n        }\n      }\n    };\n  }, [onKeyDown, setTypingChange]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating\n  } : {}, [enabled, reference, floating]);\n}\n\nfunction getArgsWithCustomFloatingHeight(state, height) {\n  return {\n    ...state,\n    rects: {\n      ...state.rects,\n      floating: {\n        ...state.rects.floating,\n        height\n      }\n    }\n  };\n}\n/**\n * Positions the floating element such that an inner element inside of it is\n * anchored to the reference element.\n * @see https://floating-ui.com/docs/inner\n * @deprecated\n */\nconst inner = props => ({\n  name: 'inner',\n  options: props,\n  async fn(state) {\n    const {\n      listRef,\n      overflowRef,\n      onFallbackChange,\n      offset: innerOffset = 0,\n      index = 0,\n      minItemsVisible = 4,\n      referenceOverflowThreshold = 0,\n      scrollRef,\n      ...detectOverflowOptions\n    } = evaluate(props, state);\n    const {\n      rects,\n      elements: {\n        floating\n      }\n    } = state;\n    const item = listRef.current[index];\n    const scrollEl = (scrollRef == null ? void 0 : scrollRef.current) || floating;\n\n    // Valid combinations:\n    // 1. Floating element is the scrollRef and has a border (default)\n    // 2. Floating element is not the scrollRef, floating element has a border\n    // 3. Floating element is not the scrollRef, scrollRef has a border\n    // Floating > {...getFloatingProps()} wrapper > scrollRef > items is not\n    // allowed as VoiceOver doesn't work.\n    const clientTop = floating.clientTop || scrollEl.clientTop;\n    const floatingIsBordered = floating.clientTop !== 0;\n    const scrollElIsBordered = scrollEl.clientTop !== 0;\n    const floatingIsScrollEl = floating === scrollEl;\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!state.placement.startsWith('bottom')) {\n        warn('`placement` side must be \"bottom\" when using the `inner`', 'middleware.');\n      }\n    }\n    if (!item) {\n      return {};\n    }\n    const nextArgs = {\n      ...state,\n      ...(await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state))\n    };\n    const overflow = await detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n    const refOverflow = await detectOverflow(nextArgs, {\n      ...detectOverflowOptions,\n      elementContext: 'reference'\n    });\n    const diffY = max(0, overflow.top);\n    const nextY = nextArgs.y + diffY;\n    const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n    const rounder = isScrollable ? v => v : round;\n    const maxHeight = rounder(max(0, scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0) - diffY - max(0, overflow.bottom)));\n    scrollEl.style.maxHeight = maxHeight + \"px\";\n    scrollEl.scrollTop = diffY;\n\n    // There is not enough space, fallback to standard anchored positioning\n    if (onFallbackChange) {\n      const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * min(minItemsVisible, listRef.current.length) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n      ReactDOM.flushSync(() => onFallbackChange(shouldFallback));\n    }\n    if (overflowRef) {\n      overflowRef.current = await detectOverflow(getArgsWithCustomFloatingHeight({\n        ...nextArgs,\n        y: nextY\n      }, scrollEl.offsetHeight + clientTop + floating.clientTop), detectOverflowOptions);\n    }\n    return {\n      y: nextY\n    };\n  }\n});\n/**\n * Changes the `inner` middleware's `offset` upon a `wheel` event to\n * expand the floating element's height, revealing more list items.\n * @see https://floating-ui.com/docs/inner\n * @deprecated\n */\nfunction useInnerOffset(context, props) {\n  const {\n    open,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    overflowRef,\n    scrollRef,\n    onChange: unstable_onChange\n  } = props;\n  const onChange = useEffectEvent(unstable_onChange);\n  const controlledScrollingRef = React.useRef(false);\n  const prevScrollTopRef = React.useRef(null);\n  const initialOverflowRef = React.useRef(null);\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onWheel(e) {\n      if (e.ctrlKey || !el || overflowRef.current == null) {\n        return;\n      }\n      const dY = e.deltaY;\n      const isAtTop = overflowRef.current.top >= -0.5;\n      const isAtBottom = overflowRef.current.bottom >= -0.5;\n      const remainingScroll = el.scrollHeight - el.clientHeight;\n      const sign = dY < 0 ? -1 : 1;\n      const method = dY < 0 ? 'max' : 'min';\n      if (el.scrollHeight <= el.clientHeight) {\n        return;\n      }\n      if (!isAtTop && dY > 0 || !isAtBottom && dY < 0) {\n        e.preventDefault();\n        ReactDOM.flushSync(() => {\n          onChange(d => d + Math[method](dY, remainingScroll * sign));\n        });\n      } else if (/firefox/i.test(getUserAgent())) {\n        // Needed to propagate scrolling during momentum scrolling phase once\n        // it gets limited by the boundary. UX improvement, not critical.\n        el.scrollTop += dY;\n      }\n    }\n    const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n    if (open && el) {\n      el.addEventListener('wheel', onWheel);\n\n      // Wait for the position to be ready.\n      requestAnimationFrame(() => {\n        prevScrollTopRef.current = el.scrollTop;\n        if (overflowRef.current != null) {\n          initialOverflowRef.current = {\n            ...overflowRef.current\n          };\n        }\n      });\n      return () => {\n        prevScrollTopRef.current = null;\n        initialOverflowRef.current = null;\n        el.removeEventListener('wheel', onWheel);\n      };\n    }\n  }, [enabled, open, elements.floating, overflowRef, scrollRef, onChange]);\n  const floating = React.useMemo(() => ({\n    onKeyDown() {\n      controlledScrollingRef.current = true;\n    },\n    onWheel() {\n      controlledScrollingRef.current = false;\n    },\n    onPointerMove() {\n      controlledScrollingRef.current = false;\n    },\n    onScroll() {\n      const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n      if (!overflowRef.current || !el || !controlledScrollingRef.current) {\n        return;\n      }\n      if (prevScrollTopRef.current !== null) {\n        const scrollDiff = el.scrollTop - prevScrollTopRef.current;\n        if (overflowRef.current.bottom < -0.5 && scrollDiff < -1 || overflowRef.current.top < -0.5 && scrollDiff > 1) {\n          ReactDOM.flushSync(() => onChange(d => d + scrollDiff));\n        }\n      }\n\n      // [Firefox] Wait for the height change to have been applied.\n      requestAnimationFrame(() => {\n        prevScrollTopRef.current = el.scrollTop;\n      });\n    }\n  }), [elements.floating, onChange, overflowRef, scrollRef]);\n  return React.useMemo(() => enabled ? {\n    floating\n  } : {}, [enabled, floating]);\n}\n\nfunction getNodeChildren(nodes, id, onlyOpenChildren) {\n  if (onlyOpenChildren === void 0) {\n    onlyOpenChildren = true;\n  }\n  let allChildren = nodes.filter(node => {\n    var _node$context;\n    return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n  });\n  let currentChildren = allChildren;\n  while (currentChildren.length) {\n    currentChildren = onlyOpenChildren ? nodes.filter(node => {\n      var _currentChildren;\n      return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n        var _node$context2;\n        return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n      });\n    }) : nodes;\n    allChildren = allChildren.concat(currentChildren);\n  }\n  return allChildren;\n}\n\nfunction isPointInPolygon(point, polygon) {\n  const [x, y] = point;\n  let isInside = false;\n  const length = polygon.length;\n  for (let i = 0, j = length - 1; i < length; j = i++) {\n    const [xi, yi] = polygon[i] || [0, 0];\n    const [xj, yj] = polygon[j] || [0, 0];\n    const intersect = yi >= y !== yj >= y && x <= (xj - xi) * (y - yi) / (yj - yi) + xi;\n    if (intersect) {\n      isInside = !isInside;\n    }\n  }\n  return isInside;\n}\nfunction isInside(point, rect) {\n  return point[0] >= rect.x && point[0] <= rect.x + rect.width && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n}\n/**\n * Generates a safe polygon area that the user can traverse without closing the\n * floating element once leaving the reference element.\n * @see https://floating-ui.com/docs/useHover#safepolygon\n */\nfunction safePolygon(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    buffer = 0.5,\n    blockPointerEvents = false,\n    requireIntent = true\n  } = options;\n  let timeoutId;\n  let hasLanded = false;\n  let lastX = null;\n  let lastY = null;\n  let lastCursorTime = performance.now();\n  function getCursorSpeed(x, y) {\n    const currentTime = performance.now();\n    const elapsedTime = currentTime - lastCursorTime;\n    if (lastX === null || lastY === null || elapsedTime === 0) {\n      lastX = x;\n      lastY = y;\n      lastCursorTime = currentTime;\n      return null;\n    }\n    const deltaX = x - lastX;\n    const deltaY = y - lastY;\n    const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n    const speed = distance / elapsedTime; // px / ms\n\n    lastX = x;\n    lastY = y;\n    lastCursorTime = currentTime;\n    return speed;\n  }\n  const fn = _ref => {\n    let {\n      x,\n      y,\n      placement,\n      elements,\n      onClose,\n      nodeId,\n      tree\n    } = _ref;\n    return function onMouseMove(event) {\n      function close() {\n        clearTimeout(timeoutId);\n        onClose();\n      }\n      clearTimeout(timeoutId);\n      if (!elements.domReference || !elements.floating || placement == null || x == null || y == null) {\n        return;\n      }\n      const {\n        clientX,\n        clientY\n      } = event;\n      const clientPoint = [clientX, clientY];\n      const target = getTarget(event);\n      const isLeave = event.type === 'mouseleave';\n      const isOverFloatingEl = contains(elements.floating, target);\n      const isOverReferenceEl = contains(elements.domReference, target);\n      const refRect = elements.domReference.getBoundingClientRect();\n      const rect = elements.floating.getBoundingClientRect();\n      const side = placement.split('-')[0];\n      const cursorLeaveFromRight = x > rect.right - rect.width / 2;\n      const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;\n      const isOverReferenceRect = isInside(clientPoint, refRect);\n      const isFloatingWider = rect.width > refRect.width;\n      const isFloatingTaller = rect.height > refRect.height;\n      const left = (isFloatingWider ? refRect : rect).left;\n      const right = (isFloatingWider ? refRect : rect).right;\n      const top = (isFloatingTaller ? refRect : rect).top;\n      const bottom = (isFloatingTaller ? refRect : rect).bottom;\n      if (isOverFloatingEl) {\n        hasLanded = true;\n        if (!isLeave) {\n          return;\n        }\n      }\n      if (isOverReferenceEl) {\n        hasLanded = false;\n      }\n      if (isOverReferenceEl && !isLeave) {\n        hasLanded = true;\n        return;\n      }\n\n      // Prevent overlapping floating element from being stuck in an open-close\n      // loop: https://github.com/floating-ui/floating-ui/issues/1910\n      if (isLeave && isElement(event.relatedTarget) && contains(elements.floating, event.relatedTarget)) {\n        return;\n      }\n\n      // If any nested child is open, abort.\n      if (tree && getNodeChildren(tree.nodesRef.current, nodeId).some(_ref2 => {\n        let {\n          context\n        } = _ref2;\n        return context == null ? void 0 : context.open;\n      })) {\n        return;\n      }\n\n      // If the pointer is leaving from the opposite side, the \"buffer\" logic\n      // creates a point where the floating element remains open, but should be\n      // ignored.\n      // A constant of 1 handles floating point rounding errors.\n      if (side === 'top' && y >= refRect.bottom - 1 || side === 'bottom' && y <= refRect.top + 1 || side === 'left' && x >= refRect.right - 1 || side === 'right' && x <= refRect.left + 1) {\n        return close();\n      }\n\n      // Ignore when the cursor is within the rectangular trough between the\n      // two elements. Since the triangle is created from the cursor point,\n      // which can start beyond the ref element's edge, traversing back and\n      // forth from the ref to the floating element can cause it to close. This\n      // ensures it always remains open in that case.\n      let rectPoly = [];\n      switch (side) {\n        case 'top':\n          rectPoly = [[left, refRect.top + 1], [left, rect.bottom - 1], [right, rect.bottom - 1], [right, refRect.top + 1]];\n          break;\n        case 'bottom':\n          rectPoly = [[left, rect.top + 1], [left, refRect.bottom - 1], [right, refRect.bottom - 1], [right, rect.top + 1]];\n          break;\n        case 'left':\n          rectPoly = [[rect.right - 1, bottom], [rect.right - 1, top], [refRect.left + 1, top], [refRect.left + 1, bottom]];\n          break;\n        case 'right':\n          rectPoly = [[refRect.right - 1, bottom], [refRect.right - 1, top], [rect.left + 1, top], [rect.left + 1, bottom]];\n          break;\n      }\n      function getPolygon(_ref3) {\n        let [x, y] = _ref3;\n        switch (side) {\n          case 'top':\n            {\n              const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n              const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n              const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.bottom - buffer : isFloatingWider ? rect.bottom - buffer : rect.top], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.bottom - buffer : rect.top : rect.bottom - buffer]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n          case 'bottom':\n            {\n              const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n              const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n              const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.top + buffer : isFloatingWider ? rect.top + buffer : rect.bottom], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.top + buffer : rect.bottom : rect.top + buffer]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n          case 'left':\n            {\n              const cursorPointOne = [x + buffer + 1, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const cursorPointTwo = [x + buffer + 1, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const commonPoints = [[cursorLeaveFromBottom ? rect.right - buffer : isFloatingTaller ? rect.right - buffer : rect.left, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.right - buffer : rect.left : rect.right - buffer, rect.bottom]];\n              return [...commonPoints, cursorPointOne, cursorPointTwo];\n            }\n          case 'right':\n            {\n              const cursorPointOne = [x - buffer, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const cursorPointTwo = [x - buffer, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const commonPoints = [[cursorLeaveFromBottom ? rect.left + buffer : isFloatingTaller ? rect.left + buffer : rect.right, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.left + buffer : rect.right : rect.left + buffer, rect.bottom]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n        }\n      }\n      if (isPointInPolygon([clientX, clientY], rectPoly)) {\n        return;\n      }\n      if (hasLanded && !isOverReferenceRect) {\n        return close();\n      }\n      if (!isLeave && requireIntent) {\n        const cursorSpeed = getCursorSpeed(event.clientX, event.clientY);\n        const cursorSpeedThreshold = 0.1;\n        if (cursorSpeed !== null && cursorSpeed < cursorSpeedThreshold) {\n          return close();\n        }\n      }\n      if (!isPointInPolygon([clientX, clientY], getPolygon([x, y]))) {\n        close();\n      } else if (!hasLanded && requireIntent) {\n        timeoutId = window.setTimeout(close, 40);\n      }\n    };\n  };\n  fn.__options = {\n    blockPointerEvents\n  };\n  return fn;\n}\n\nexport { Composite, CompositeItem, FloatingArrow, FloatingDelayGroup, FloatingFocusManager, FloatingList, FloatingNode, FloatingOverlay, FloatingPortal, FloatingTree, NextFloatingDelayGroup, inner, safePolygon, useClick, useClientPoint, useDelayGroup, useDelayGroupContext, useDismiss, useFloating, useFloatingNodeId, useFloatingParentNodeId, useFloatingPortalNode, useFloatingRootContext, useFloatingTree, useFocus, useHover, useId, useInnerOffset, useInteractions, useListItem, useListNavigation, useMergeRefs, useNextDelayGroup, useRole, useTransitionStatus, useTransitionStyles, useTypeahead };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n    ownKeys = Object.getOwnPropertyNames || function (o) {\r\n        var ar = [];\r\n        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n        return ar;\r\n    };\r\n    return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose, inner;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n            if (async) inner = dispose;\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    var r, s = 0;\r\n    function next() {\r\n        while (r = env.stack.pop()) {\r\n            try {\r\n                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n                if (r.dispose) {\r\n                    var result = r.dispose.call(r.value);\r\n                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n                }\r\n                else s |= 1;\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n    if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n        return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n            return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n        });\r\n    }\r\n    return path;\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __esDecorate: __esDecorate,\r\n    __runInitializers: __runInitializers,\r\n    __propKey: __propKey,\r\n    __setFunctionName: __setFunctionName,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import React, { useState, useEffect } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport './Administer.css';\r\nimport { \r\n  getAllUsers, \r\n  searchUsers, \r\n  updateUserAuthority,\r\n  getAllDiscounts,\r\n  getCurrentDiscount,\r\n  addDiscount,\r\n  deleteDiscount\r\n} from '../api/administer';\r\nimport {postAnnouncement, getAnnouncements} from '../api/announcement'; \r\nimport DatePicker from 'react-datepicker';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\n\r\n\r\nconst Administer = () => {\r\n  const navigate = useNavigate();\r\n  const [users, setUsers] = useState([]);\r\n  const [discounts, setDiscounts] = useState([]);\r\n  const [currentDiscount, setCurrentDiscount] = useState(null);\r\n  const [searchKey, setSearchKey] = useState('');\r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState(null);\r\n  const [announcements, setAnnouncements] = useState([]); // 存储公告列表\r\n  const [newAnnouncement, setNewAnnouncement] = useState({\r\n    title: '',\r\n    content: ''\r\n  });\r\n  const [newDiscount, setNewDiscount] = useState({\r\n    name: '',\r\n    discountType: 'FREE'\r\n  });\r\n  const [startDate, setStartDate] = useState(new Date());\r\n  const [endDate, setEndDate] = useState(new Date());\r\n  const [activeTab, setActiveTab] = useState('users'); // 'users' 或 'discounts','announcements'\r\n\r\nconst fetchAllUsers = async () => {\r\n  setLoading(true);\r\n  setError(null);\r\n  try {\r\n    const users = await getAllUsers();\r\n    console.log(\"API Data:\", users); // 现在应该直接是用户数组\r\n    \r\n    const formattedUsers = users.map(user => ({\r\n      username: user.username || '未知用户',\r\n      authority: user.authority || 'USER',\r\n      registTime: user.registTime || null,\r\n      lastLogin: user.lastLogin || null,\r\n      upload: Number(user.upload) || 0,\r\n      download: Number(user.download) || 0,\r\n      magicPoints: Number(user.magicPoints) || 0,\r\n      shareRate: Number(user.shareRate) || 0\r\n    }));\r\n    \r\n    console.log(\"Formatted Users:\", formattedUsers);\r\n    setUsers(formattedUsers);\r\n  } catch (err) {\r\n    console.error(\"Error details:\", err);\r\n    setError(`获取用户列表失败: ${err.message}`);\r\n  } finally {\r\n    setLoading(false);\r\n  }\r\n};\r\n\r\n\r\n const handleSearch = async () => {\r\n  if (!searchKey.trim()) {\r\n    fetchAllUsers();\r\n    return;\r\n  }\r\n\r\n  setLoading(true);\r\n  setError(null);\r\n  try {\r\n    const users = await searchUsers(searchKey);\r\n    console.log(\"Search Results:\", users); // 打印搜索结果\r\n\r\n    // 格式化数据（确保数值字段正确解析）\r\n    const formattedUsers = users.map(user => ({\r\n      username: user.username || '未知用户',\r\n      authority: user.authority || 'USER',\r\n      registTime: user.registTime || null,\r\n      lastLogin: user.lastLogin || null,\r\n      upload: Number(user.upload) || 0,    // 确保解析为数字\r\n      download: Number(user.download) || 0,\r\n      magicPoints: Number(user.magicPoints) || 0,\r\n      shareRate: Number(user.shareRate) || 0\r\n    }));\r\n\r\n    setUsers(formattedUsers);\r\n  } catch (err) {\r\n    setError('搜索用户失败，请重试');\r\n    console.error(err);\r\n  } finally {\r\n    setLoading(false);\r\n  }\r\n};\r\n\r\n  // 重置搜索\r\n  const handleReset = () => {\r\n    setSearchKey('');\r\n    fetchAllUsers();\r\n  };\r\n\r\n  // 修改用户权限\r\n  const handleChangeAuthority = async (username, newAuthority) => {\r\n    try {\r\n      await updateUserAuthority(username, newAuthority);\r\n      // 更新本地状态\r\n      setUsers(users.map(user => \r\n        user.username === username ? { ...user, authority: newAuthority } : user\r\n      ));\r\n    } catch (err) {\r\n      setError('修改权限失败，请重试');\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n   // 获取所有折扣\r\n  const fetchAllDiscounts = async () => {\r\n    setLoading(true);\r\n    setError(null);\r\n    try {\r\n      const data = await getAllDiscounts();\r\n      setDiscounts(data);\r\n    } catch (err) {\r\n      setError('获取折扣列表失败: ' + err.message);\r\n      console.error(err);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  // 获取当前折扣\r\n  const fetchCurrentDiscount = async () => {\r\n    try {\r\n      const data = await getCurrentDiscount();\r\n      setCurrentDiscount(data);\r\n    } catch (err) {\r\n      console.error('获取当前折扣失败:', err);\r\n    }\r\n  };\r\n\r\n    const handleAddDiscount = async () => {\r\n  if (!newDiscount.name || !startDate || !endDate) {\r\n    setError('请填写所有必填字段');\r\n    return;\r\n  }\r\n\r\n  try {\r\n    // 验证时间\r\n    if (startDate >= endDate) {\r\n      setError('结束时间必须晚于开始时间');\r\n      return;\r\n    }\r\n\r\n    const payload = {\r\n      name: newDiscount.name,\r\n      startTime: formatDateToISO(startDate), // 例如: \"2025-06-01T14:30:00\"\r\n      endTime: formatDateToISO(endDate, true), // 例如: \"2025-06-01T18:45:59\"\r\n      discountType: newDiscount.discountType\r\n    };\r\n\r\n    console.log('提交数据:', payload); // 调试用\r\n\r\n    await addDiscount(payload);\r\n    \r\n    // 重置表单\r\n    setNewDiscount({\r\n      name: '',\r\n      discountType: 'FREE'\r\n    });\r\n    setStartDate(new Date());\r\n    setEndDate(new Date());\r\n    \r\n    fetchAllDiscounts();\r\n    setError(null);\r\n  } catch (err) {\r\n    setError('添加折扣失败: ' + err.message);\r\n    console.error(err);\r\n  }\r\n};\r\n\r\nconst formatDateToISO = (date, isEndTime = false) => {\r\n  if (!date) return '';\r\n  \r\n  const pad = (num) => num.toString().padStart(2, '0');\r\n  \r\n  const year = date.getFullYear();\r\n  const month = pad(date.getMonth() + 1);\r\n  const day = pad(date.getDate());\r\n  const hours = pad(date.getHours());\r\n  const minutes = pad(date.getMinutes());\r\n  \r\n  if (isEndTime) {\r\n    // 结束时间精确到用户选择的时间+59秒\r\n    return `${year}-${month}-${day}T${hours}:${minutes}:59`;\r\n  } else {\r\n    // 开始时间精确到用户选择的时间+00秒\r\n    return `${year}-${month}-${day}T${hours}:${minutes}:00`;\r\n  }\r\n};\r\n\r\n  // 删除折扣\r\n  const handleDeleteDiscount = async (id) => {\r\n    try {\r\n      await deleteDiscount(id);\r\n      fetchAllDiscounts();\r\n    } catch (err) {\r\n      setError('删除折扣失败: ' + err.message);\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n  \r\n\r\n  // 格式化分享率为百分比\r\n  const formatShareRate = (rate) => {\r\n    return (rate * 100).toFixed(2) + '%';\r\n  };\r\n\r\n  // 格式化日期\r\n  const formatDate = (date) => {\r\n    if (!date) return '-';\r\n    return new Date(date).toLocaleDateString();\r\n  };\r\n    // 格式化日期\r\n  const formatDateTime = (dateTime) => {\r\n    if (!dateTime) return '-';\r\n    return new Date(dateTime).toLocaleString();\r\n  };\r\n\r\n    // 折扣类型翻译\r\n  const translateDiscountType = (type) => {\r\n    switch (type) {\r\n      case 'FREE': return '全部免费';\r\n      case 'HALF': return '半价下载';\r\n      case 'DOUBLE': return '双倍上传';\r\n      default: return type;\r\n    }\r\n  };\r\n\r\n  // 获取所有公告\r\n  const fetchAllAnnouncements = async () => {\r\n  setLoading(true);\r\n  setError(null);\r\n  try {\r\n    const announcements = await getAnnouncements();\r\n    // 确保总是设置为数组\r\n    setAnnouncements(Array.isArray(announcements) ? announcements : []);\r\n  } catch (err) {\r\n    setError('获取公告列表失败: ' + err.message);\r\n    console.error(err);\r\n  } finally {\r\n    setLoading(false);\r\n  }\r\n};\r\n\r\n  // 发布新公告\r\n  const handlePostAnnouncement = async () => {\r\n    if (!newAnnouncement.title || !newAnnouncement.content) {\r\n      setError('请填写公告标题和内容');\r\n      return;\r\n    }\r\n\r\n    try {\r\n      await postAnnouncement(newAnnouncement);\r\n      setNewAnnouncement({ title: '', content: '' });\r\n      fetchAllAnnouncements();\r\n      setError(null);\r\n    } catch (err) {\r\n      setError('发布公告失败: ' + err.message);\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n  // 初始化加载数据\r\n  useEffect(() => {\r\n    if (activeTab === 'users') {\r\n      fetchAllUsers();\r\n    } else if (activeTab === 'discounts') {\r\n      fetchAllDiscounts();\r\n      fetchCurrentDiscount();\r\n    } else if (activeTab === 'announcements') {\r\n      fetchAllAnnouncements();\r\n    }\r\n  }, [activeTab]);\r\n\r\n  \r\n\r\n\r\n  return (\r\n    <div className=\"administer-container\">\r\n      <h1>系统管理</h1>\r\n\r\n      {/* 选项卡切换 */}\r\n      <div className=\"tab-container\">\r\n        <button \r\n          className={`tab-button ${activeTab === 'users' ? 'active' : ''}`}\r\n          onClick={() => setActiveTab('users')}\r\n        >\r\n          用户管理\r\n        </button>\r\n        <button \r\n          className={`tab-button ${activeTab === 'discounts' ? 'active' : ''}`}\r\n          onClick={() => setActiveTab('discounts')}\r\n        >\r\n          折扣管理\r\n        </button>\r\n        <button \r\n          className={`tab-button ${activeTab === 'announcements' ? 'active' : ''}`}\r\n          onClick={() => setActiveTab('announcements')}\r\n        >\r\n          公告管理\r\n        </button>\r\n      </div>\r\n\r\n      {activeTab === 'users' ? (\r\n        <>\r\n            {/* 搜索框 */}\r\n            <div className=\"search-container\">\r\n                <input\r\n                type=\"text\"\r\n                value={searchKey}\r\n                onChange={(e) => setSearchKey(e.target.value)}\r\n                placeholder=\"输入用户名搜索\"\r\n                className=\"search-input\"\r\n                />\r\n                <button onClick={handleSearch} className=\"search-button\">\r\n                搜索\r\n                </button>\r\n                <button onClick={handleReset} className=\"reset-button\">\r\n                重置\r\n                </button>\r\n            </div>\r\n\r\n            {/* 错误提示 */}\r\n            {error && <div className=\"error-message\">{error}</div>}\r\n\r\n            {/* 加载状态 */}\r\n            {loading && <div className=\"loading-message\">加载中...</div>}\r\n\r\n            {/* 用户列表 */}\r\n            <div className=\"user-list-container\">\r\n                <table className=\"user-table\">\r\n                <thead>\r\n                    <tr>\r\n                    <th>用户名</th>\r\n                    <th>注册时间</th>\r\n                    <th>最后登录</th>\r\n                    <th>上传量</th>\r\n                    <th>下载量</th>\r\n                    <th>分享率</th>\r\n                    <th>魔力值</th>\r\n                    <th>权限</th>\r\n                    <th>操作</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {Array.isArray(users) && users.map((user) => (\r\n                    <tr key={user.username}>\r\n                        <td>{user.username}</td>\r\n                        <td>{formatDate(user.registTime)}</td>\r\n                        <td>{formatDate(user.lastLogin)}</td>\r\n                        <td>{user.upload}</td>\r\n                        <td>{user.download}</td>\r\n                        <td>{formatShareRate(user.shareRate)}</td>\r\n                        <td>{user.magicPoints}</td>\r\n                        <td>{user.authority}</td>\r\n                        <td>\r\n                        <select\r\n                            value={user.authority}\r\n                            onChange={(e) => handleChangeAuthority(user.username, e.target.value)}\r\n                            className=\"authority-select\"\r\n                        >\r\n                            <option value=\"USER\">普通用户</option>\r\n                            <option value=\"ADMIN\">管理员</option>\r\n                            <option value=\"LIMIT\">受限用户</option>\r\n                            <option value=\"BAN\">封禁用户</option>\r\n                        </select>\r\n                        </td>\r\n                    </tr>\r\n                    ))}\r\n                </tbody>\r\n                </table>\r\n            </div>\r\n        </>\r\n      ) : activeTab === 'discounts' ? (\r\n          /* 新增的折扣管理部分 */\r\n          <>\r\n            {/* 当前活动折扣 */}\r\n            <div className=\"current-discount-section\">\r\n              <h3>当前活动折扣</h3>\r\n              {currentDiscount ? (\r\n                <div className=\"current-discount-card\">\r\n                  <p><strong>名称:</strong> {currentDiscount.name}</p>\r\n                  <p><strong>类型:</strong> {translateDiscountType(currentDiscount.discountType)}</p>\r\n                  <p><strong>时间:</strong> {formatDateTime(currentDiscount.startTime)} 至 {formatDateTime(currentDiscount.endTime)}</p>\r\n                  <p><strong>状态:</strong> {currentDiscount.status}</p>\r\n                </div>\r\n              ) : (\r\n                <p>当前没有进行中的折扣</p>\r\n              )}\r\n            </div>\r\n\r\n            {/* 添加新折扣表单 */}\r\n            <div className=\"add-discount-form\">\r\n              <h3>添加新折扣</h3>\r\n              <div className=\"form-group\">\r\n                <label>折扣名称:</label>\r\n                <input\r\n                  type=\"text\"\r\n                  value={newDiscount.name}\r\n                  onChange={(e) => setNewDiscount({...newDiscount, name: e.target.value})}\r\n                />\r\n              </div>\r\n              <div className=\"form-group\">\r\n                  <label>开始时间:</label>\r\n                  <DatePicker\r\n                    selected={startDate}\r\n                    onChange={(date) => setStartDate(date)}\r\n                    showTimeSelect\r\n                    timeFormat=\"HH:mm\"\r\n                    timeIntervals={1} // 1分钟间隔\r\n                    dateFormat=\"yyyy-MM-dd HH:mm\"\r\n                    minDate={new Date()}\r\n                    placeholderText=\"选择开始日期和时间\"\r\n                  />\r\n              </div>\r\n              <div className=\"form-group\">\r\n                    <label>结束时间:</label>\r\n                    <DatePicker\r\n                      selected={endDate}\r\n                      onChange={(date) => setEndDate(date)}\r\n                      showTimeSelect\r\n                      timeFormat=\"HH:mm\"\r\n                      timeIntervals={1} // 1分钟间隔\r\n                      dateFormat=\"yyyy-MM-dd HH:mm\"\r\n                      minDate={startDate}\r\n                      placeholderText=\"选择结束日期和时间\"\r\n                    />\r\n              </div>\r\n              <div className=\"form-group\">\r\n                <label>折扣类型:</label>\r\n                <select\r\n                  value={newDiscount.discountType}\r\n                  onChange={(e) => setNewDiscount({...newDiscount, discountType: e.target.value})}\r\n                >\r\n                  <option value=\"FREE\">全部免费</option>\r\n                  <option value=\"HALF\">半价下载</option>\r\n                  <option value=\"DOUBLE\">双倍上传</option>\r\n                </select>\r\n              </div>\r\n              <button \r\n                  onClick={(e) => {\r\n                      e.preventDefault(); // 确保没有阻止默认行为\r\n                      handleAddDiscount();\r\n                  }}\r\n                  >\r\n                  添加折扣\r\n              </button>\r\n            </div>\r\n\r\n            {/* 所有折扣列表 */}\r\n            <div className=\"discount-list-container\">\r\n              <h3>所有折扣计划</h3>\r\n              <table className=\"discount-table\">\r\n                <thead>\r\n                  <tr>\r\n                    <th>ID</th>\r\n                    <th>名称</th>\r\n                    <th>开始时间</th>\r\n                    <th>结束时间</th>\r\n                    <th>类型</th>\r\n                    <th>创建时间</th>\r\n                    <th>状态</th>\r\n                    <th>操作</th>\r\n                  </tr>\r\n                </thead>\r\n                <tbody>\r\n                  {discounts.map(discount => (\r\n                    <tr key={discount.id}>\r\n                      <td>{discount.id}</td>\r\n                      <td>{discount.name}</td>\r\n                      <td>{formatDateTime(discount.startTime)}</td>\r\n                      <td>{formatDateTime(discount.endTime)}</td>\r\n                      <td>{translateDiscountType(discount.discountType)}</td>\r\n                      <td>{formatDateTime(discount.createTime)}</td>\r\n                      <td>{discount.status || '未知'}</td>\r\n                      <td>\r\n                        <button \r\n                          onClick={() => handleDeleteDiscount(discount.id)}\r\n                          className=\"delete-button\"\r\n                        >\r\n                          删除\r\n                        </button>\r\n                      </td>\r\n                    </tr>\r\n                  ))}\r\n                </tbody>\r\n              </table>\r\n            </div>\r\n          </>\r\n        ) : (\r\n        /* 新增的公告管理部分 */\r\n        <>\r\n          {/* 发布新公告表单 */}\r\n          <div className=\"announcement-form\">\r\n            <h3>发布新公告</h3>\r\n            <div className=\"form-group\">\r\n              <label>公告标题:</label>\r\n              <input\r\n                type=\"text\"\r\n                value={newAnnouncement.title}\r\n                onChange={(e) => setNewAnnouncement({\r\n                  ...newAnnouncement,\r\n                  title: e.target.value\r\n                })}\r\n                placeholder=\"输入公告标题\"\r\n              />\r\n            </div>\r\n            <div className=\"form-group\">\r\n              <label>公告内容:</label>\r\n              <textarea\r\n                value={newAnnouncement.content}\r\n                onChange={(e) => setNewAnnouncement({\r\n                  ...newAnnouncement,\r\n                  content: e.target.value\r\n                })}\r\n                rows=\"5\"\r\n                placeholder=\"输入公告内容\"\r\n              />\r\n            </div>\r\n            <button onClick={handlePostAnnouncement}>\r\n              发布公告\r\n            </button>\r\n          </div>\r\n\r\n          {/* 所有公告列表 */}\r\n          <div className=\"announcement-list-container\">\r\n            <h3>所有公告</h3>\r\n            <table className=\"announcement-table\">\r\n              <thead>\r\n                <tr>\r\n                  <th>标题</th>\r\n                  <th>内容</th>\r\n                  <th>发布时间</th>\r\n                </tr>\r\n              </thead>\r\n              <tbody>\r\n                {announcements.map(announcement => (\r\n                  <tr key={announcement.id}>\r\n                    <td>{announcement.title}</td>\r\n                    <td>{announcement.content}</td>\r\n                    <td>{formatDateTime(announcement.createTime)}</td>\r\n                  </tr>\r\n                ))}\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Administer;","// src/App.jsx\r\nimport React from 'react';\r\nimport { \r\n  BrowserRouter as Router,\r\n  Routes,\r\n  Route,\r\n  Navigate\r\n} from 'react-router-dom';\r\nimport Dashboard from './components/Dashboard';\r\nimport Personal from './components/Personal/Personal';\r\nimport AuthForm from './components/AuthForm';\r\nimport AnnouncementDetail from './components/AnnouncementDetail';\r\n\r\nimport TorrentDetail from './components/TorrentDetail'; // 确保路径正确\r\nimport RequestDetail from './components/RequestDetail';\r\nimport HelpDetail from './components/HelpDetail';\r\nimport Exchange from './components/Personal/Exchange';\r\nimport Upload from './components/Personal/Upload';\r\nimport Notice from './components/Personal/Notice';\r\nimport Setting from './components/Personal/Setting';\r\nimport Administer from './components/Administer';\r\n\r\nimport './App.css';\r\n\r\nfunction App() {\r\n  // 每次应用启动时强制清除 token\r\n  React.useEffect(() => {\r\n    localStorage.removeItem('token');\r\n    console.log('Token cleared on app startup');\r\n    localStorage.removeItem('username');\r\n  }, []); // 空依赖数组表示只在组件挂载时执行一次\r\n\r\n  const [isAuthenticated, setIsAuthenticated] = React.useState(\r\n    false\r\n  );\r\n\r\n  const handleLoginSuccess = (token) => {\r\n    setIsAuthenticated(true);\r\n  };\r\n\r\n  const handleLogout = () => {\r\n    localStorage.removeItem('token');\r\n    setIsAuthenticated(false);\r\n  };\r\n\r\n  return (\r\n    <Router>\r\n      <Routes>\r\n        {/* 修改点1：根路径强制跳转到登录页 */}\r\n        <Route path=\"/\" element={<Navigate to=\"/login\" replace />} />\r\n\r\n        {/* 登录页 */}\r\n        <Route path=\"/login\" element={\r\n          isAuthenticated ? (\r\n            <Navigate to=\"/dashboard\" replace />\r\n          ) : (\r\n            <AuthForm onLoginSuccess={handleLoginSuccess} />\r\n          )\r\n        } />\r\n\r\n        {/* 主面板 */}\r\n        <Route path=\"/dashboard/:tab?\" element={\r\n          isAuthenticated ? (\r\n            <Dashboard onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 公告详情 */}\r\n        <Route path=\"/announcement/:id\" element={\r\n          isAuthenticated ? (\r\n            <AnnouncementDetail onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 个人中心及子功能页面 */}\r\n        <Route path=\"/personal\" element={\r\n          isAuthenticated ? <Personal onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n        <Route path=\"/personal/exchange\" element={\r\n          isAuthenticated ? <Exchange onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n        <Route path=\"/personal/upload\" element={\r\n          isAuthenticated ? <Upload onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n        <Route path=\"/personal/notice\" element={\r\n          isAuthenticated ? <Notice onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n        <Route path=\"/personal/setting\" element={\r\n          isAuthenticated ? <Setting onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n\r\n        \r\n        {/* 404 重定向 */}\r\n        <Route path=\"*\" element={\r\n          isAuthenticated ? (\r\n            <Navigate to=\"/dashboard\" replace />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 新增管理员中心路由 */}\r\n        <Route path=\"/administer\" element={\r\n          isAuthenticated ? (\r\n            <Administer onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 求种区 */}\r\n        <Route path=\"/request/:id\" element={\r\n          isAuthenticated ? (\r\n            <RequestDetail onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 求助区 */}\r\n        <Route path=\"/help/:id\" element={\r\n          isAuthenticated ? (\r\n            <HelpDetail onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        <Route path=\"/torrent/:id\" element={\r\n          isAuthenticated ? (\r\n            <TorrentDetail onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n\r\n\r\n      </Routes>\r\n\r\n      \r\n    </Router>\r\n  );\r\n}\r\n\r\nexport default App;","const reportWebVitals = onPerfEntry => {\r\n  if (onPerfEntry && onPerfEntry instanceof Function) {\r\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n      getCLS(onPerfEntry);\r\n      getFID(onPerfEntry);\r\n      getFCP(onPerfEntry);\r\n      getLCP(onPerfEntry);\r\n      getTTFB(onPerfEntry);\r\n    });\r\n  }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","// 1. 首先放所有 import 语句\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom/client';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport process from 'process/browser';  // 新增\r\nimport { Buffer } from 'buffer';        // 新增\r\n\r\n// 2. 然后放 polyfill 代码\r\nif (typeof window.process === 'undefined') {\r\n  window.process = process;\r\n}\r\nif (typeof window.Buffer === 'undefined') {\r\n  window.Buffer = Buffer;\r\n}\r\n\r\n// 3. 最后放应用逻辑\r\nconst root = ReactDOM.createRoot(document.getElementById('root'));\r\nroot.render(\r\n  <React.StrictMode>\r\n    <App />\r\n  </React.StrictMode>\r\n);\r\n\r\nreportWebVitals();"],"names":["hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","appendClass","parseValue","Array","isArray","apply","toString","Object","prototype","includes","key","call","value","newClass","module","exports","default","u","b","Symbol","for","c","d","e","f","g","h","k","l","m","n","p","q","t","v","a","r","$$typeof","type","ForwardRef","isMemo","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","code","Error","indexOf","start","end","num","output","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","this","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","run","marker","runClearTimeout","Item","array","noop","nextTick","args","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","base64","require","ieee754","customInspectSymbol","Buffer","K_MAX_LENGTH","createBuffer","RangeError","buf","setPrototypeOf","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","obj","isBuffer","checked","undefined","numberIsNaN","data","fromObject","toPrimitive","assertSize","size","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","val","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","alloc","fill","allocUnsafeSlow","_isBuffer","compare","x","y","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","Scheduler","React","ReactDOM","formatProdErrorMessage","url","encodeURIComponent","isValidContainer","node","nodeType","getNearestMountedFiber","fiber","nearestMounted","alternate","return","flags","tag","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","assertIsMounted","findCurrentHostFiberImpl","child","sibling","assign","REACT_LEGACY_ELEMENT_TYPE","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","REACT_MEMO_CACHE_SENTINEL","MAYBE_ITERATOR_SYMBOL","iterator","getIteratorFn","maybeIterable","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","_context","innerType","render","_payload","_init","isArrayImpl","ReactSharedInternals","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","ReactDOMSharedInternals","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","sharedNotPendingObject","pending","method","action","valueStack","index","createCursor","defaultValue","current","pop","cursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","documentElement","namespaceURI","getOwnHostContext","tagName","getChildHostContextProd","popHostContainer","pushHostContext","context","JSCompiler_inline_result","popHostContext","HostTransitionContext","_currentValue","scheduleCallback$3","unstable_scheduleCallback","cancelCallback$1","unstable_cancelCallback","shouldYield","unstable_shouldYield","requestPaint","unstable_requestPaint","now","unstable_now","getCurrentPriorityLevel","unstable_getCurrentPriorityLevel","ImmediatePriority","unstable_ImmediatePriority","UserBlockingPriority","unstable_UserBlockingPriority","NormalPriority$1","unstable_NormalPriority","LowPriority","unstable_LowPriority","IdlePriority","unstable_IdlePriority","log$1","log","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","err","clz32","LN2","nextTransitionLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","root","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","currentTime","claimNextTransitionLane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$6","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","window","event","getEventPriority","randomKey","random","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","parentNode","getParentSuspenseInstance","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","Map","hoistableScripts","markNodeAsHoistable","allNativeEvents","Set","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","add","prefix","suffix","VALID_ATTRIBUTE_NAME_REGEX","RegExp","illegalAttributeNameCache","validatedAttributeNameCache","setValueForAttribute","attributeName","test","removeAttribute","prefix$8","setAttribute","setValueForKnownAttribute","setValueForNamespacedAttribute","namespace","setAttributeNS","describeBuiltInComponentFrame","match","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","Reflect","control","x$9","x$10","catch","sample","namePropDescriptor","getOwnPropertyDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","getStackByFiberInDevAndProd","workInProgress","info","getToStringValue","isCheckable","elem","nodeName","track","_valueTracker","valueField","descriptor","currentValue","getValue","setValue","stopTracking","trackValueOnNode","updateValueIfChanged","tracker","lastValue","getActiveElement","doc","document","activeElement","body","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","ch","updateInput","element","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","options","selected","defaultSelected","disabled","updateTextarea","initTextarea","children","textContent","setTextContent","text","firstChild","lastChild","nodeValue","unitlessNumbers","setValueForStyle","style","styleName","isCustomProperty","setProperty","cssFloat","has","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","props","querySelectorAll","otherNode","form","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","createElement","passiveBrowserEventsSupported","addEventListener","removeEventListener","startText","fallbackText","getData","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","propName","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","eventPhase","bubbles","cancelable","timeStamp","Date","isTrusted","SyntheticEvent","UIEventInterface","view","detail","SyntheticUIEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","getEventModifierState","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","clipboardData","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","SyntheticKeyboardEvent","location","repeat","locale","which","SyntheticPointerEvent","pointerId","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticTouchEvent","touches","targetTouches","changedTouches","SyntheticTransitionEvent","propertyName","SyntheticWheelEvent","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticToggleEvent","newState","oldState","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","supportedInputTypes","color","date","datetime","email","month","number","password","search","tel","time","week","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$282","isSupported$jscomp$inline_417","element$jscomp$inline_418","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","is","shallowEqual","objA","objB","keysA","keys","keysB","currentKey","getLeafNode","getNodeForCharacterOffset","nodeEnd","nextSibling","containsNode","outerNode","innerNode","contains","compareDocumentPosition","getActiveElementDeep","containerInfo","defaultView","HTMLIFrameElement","contentWindow","href","hasSelectionCapabilities","contentEditable","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","eventName","prefixes","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","prefixMap","animation","transition","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","CapturedStacks","WeakMap","createCapturedValueAtFiber","source","existing","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","update","next","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","parent","childLanes","_visibility","hiddenUpdates","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","mode","elementType","refCleanup","ref","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","Component","isReactComponent","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","owner","fiberTag","hostContext","itemProp","precedence","rel","onLoad","onError","async","isHostHoistableType","createFiberFromFragment","elements","createFiberFromText","content","createFiberFromPortal","portal","pendingChildren","implementation","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","noop$1","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratable","isSingletonScope","previousHydratableOnEnteringScopedSingleton","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","nextValue","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","AbortController","signal","aborted","listener","abort","forEach","scheduleCallback$2","NormalPriority","CacheContext","Consumer","Provider","_currentValue2","_threadCount","createCache","controller","refCount","releaseCache","cache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","status","prevOnStartTransitionFinish","S","then","thenable","entangledListeners","requestTransitionLane","resolve","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","noop$3","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","reason","shellSuspendCounter","fulfilledValue","fulfilledThenable","rejectedThenable","suspendedThenable","getSuspendedThenable","rejectedReason","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","cloneUpdateQueue","createUpdate","payload","callback","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","clone","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter$1","thenableState$1","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","H","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useState","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","use","usable","useMemoCache","map","basicStateReducer","state","updateReducer","reducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$32","revertLane","hasEagerState","eagerState","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","isHydrating$jscomp$0","snapshotChanged","updateEffectImpl","subscribeToStore","bind","pushSimpleEffect","destroy","resource","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialState","initialStateInitializer","updateOptimisticImpl","passthrough","dispatchActionState","actionQueue","setPendingState","setState","isRenderPhaseUpdate","actionNode","isTransition","T","runActionStateAction","prevState","prevTransition","currentTransition","onStartTransitionFinish","handleActionReturnValue","onActionError","error$38","nextState","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","create","createDeps","deps","updateRef","mountEffectImpl","fiberFlags","hookFlags","mountEffect","updateEffect","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","initialValue","requestDeferredLane","updateDeferredValueImpl","prevValue","startTransition","pendingState","finishedState","previousPriority","dispatchSetStateInternal","result","thenableWithOverride","chainThenableValue","requestUpdateLane","noop$2","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","useHostTransitionStatus","updateId","updateRefresh","refreshCache","provider","root$41","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","useCallback","useContext","useEffect","useImperativeHandle","useLayoutEffect","useInsertionEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useSyncExternalStore","useId","useFormState","useActionState","useOptimistic","useCacheRefresh","initialArg","init","identifierPrefix","booleanOrThenable","thenableIndexCounter","unwrapThenable","coerceRef","throwOnInvalidObjectType","returnFiber","newChild","resolveLazy","lazyType","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","fragment","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","delete","reconcileChildrenArray","step","done","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","handler","suspenseStackCursor","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","row","isSuspenseInstanceFallback","revealOrder","applyDerivedStateFromProps","ctor","getDerivedStateFromProps","nextProps","classComponentUpdater","enqueueSetState","_reactInternals","enqueueReplaceState","enqueueForceUpdate","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","isPureReactComponent","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","defaultProps","propName$73","reportGlobalError","reportError","ErrorEvent","dispatchEvent","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","boundary","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","deferHiddenOffscreenComponent","cachePool","nextBaseLanes","markRef","replayFunctionComponent","updateClassComponent","contextType","updater","refs","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","JSCompiler_temp$jscomp$0","nextInstance","id","overflow","fallback","mountWorkInProgressOffscreenFiber","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","dataset","digest","dgst","renderDidSuspendDelayIfPossible","primaryChildren","offscreenProps","_pendingMarkers","_retryCache","_transitions","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","beginWork","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","lazyComponent","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","hasAttribute","getAttribute","crossOrigin","canHydrateInstance","canHydrateTextInstance","pooledCacheLanes","markUpdate","preloadResourceAndSuspendIfNeeded","loading","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$113","bubbleProperties","completedWork","didBailout","newChildLanes","child$114","completeWork","pendingContext","createElementNS","innerHTML","removeChild","appendChild","autoFocus","createTextNode","cache$127","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$143","commitHostMount","focus","srcSet","srcset","commitHostUpdate","domElement","lastProps","propKey","lastProp","setProp","propKey$205","propKey$221","propKey$226","propKey$231","setPropOnCustomElement","propKey$236","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","before","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","attributes","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$142","commitSuspenseHydrationCallbacks","readyState","_reactRetry","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","count","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearSuspenseBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","head","querySelector","maybeNodes","getHydratableHoistableCache","splice","property","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","display","hostParentFiber","parent$144","parent$146","reset","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","accumulateSuspenseyCommitOnFiber","suspendedState","media","matchMedia","matches","getStyleKey","getStylesheetSelectorFromKey","_p","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","Promise","reject","onload","onerror","stylesheets","preload","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","suspenseHandler","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrentByScheduler","thrownValue$169","handleThrow","A","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","unsuspend","insertSuspendedStylesheets","commit","stylesheetTimer","waitForCommitToBeReady","commitRoot","check","didAttemptEntireTree","expirationTimes","index$4","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$2","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$167","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","cause","wrapperError","throwException","unwindUnitOfWork","skipSiblings","flushPendingEffects","finishedLanes","remainingLanes","previouslyPendingLanes","index$5","hiddenUpdatesForLane","markRootFinished","callbackNode","callbackPriority","flushPassiveEffects","eventsEnabled","_enabled","selection","rangeCount","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","win","start$jscomp$0","end$jscomp$0","extend","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","left","scrollLeft","top","scrollTop","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","wasDelayedCommit","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleMicrotask","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$174","performSyncWorkOnRoot","currentPopstateTransitionEvent","shouldAttemptEagerTransition","prev","scheduleTaskForRootDuringMicrotask","index$3","expirationTime","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","temp","FormData","i$jscomp$inline_1528","eventName$jscomp$inline_1529","toUpperCase","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","targetElement","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","container","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","getNativeBeforeInputChars","char","getFallbackBeforeInputChars","maybeTargetInst","formAction","extractEvents$1","targetFiber","captureName","_instance2","unshift","common","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","formEncType","formMethod","formTarget","encType","__html","muted","isNaN","endsWith","hasSrc","hasSrcSet","propValue$188","parentNamespace","dangerouslySetInnerHTML","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","suspenseInstance","possiblePreambleContribution","depth","nextNode","nextNode$jscomp$0","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","getRootNode","previousDispatcher","previousWasRendering","wasRendering","formInst","D","preconnectAs","C","L","as","globalDocument","preloadSelector","imageSrcSet","imageSizes","getScriptKey","getScriptSelectorFromKey","X","scripts","adoptPreloadPropsForScript","link","insertStylesheet","M","limitedEscapedHref","currentProps","preloadProps","styles$244","resource$245","integrity","hrefLang","referrerPolicy","rawProps","styleProps","instance$250","nodes","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","transitionCallbacks","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","priority","runWithPriority","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","shift","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1785","findDOMNode","componentOrElement","parentA","parentB","didFindChild","child$0","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2256","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","hook$jscomp$inline_2257","isDisabled","supportsFiber","inject","createRoot","unstable_strictMode","unstable_transitionCallbacks","hydrateRoot","ReactNoopUpdateQueue","isMounted","emptyObject","ComponentDummy","PureComponent","partialState","forceUpdate","pureComponentPrototype","V","ReactElement","self","isValidElement","object","userProvidedKeyEscapeRegex","getElementKey","escaperLookup","escape","mapIntoArray","escapedPrefix","nameSoFar","oldElement","newKey","invokeCallback","nextNamePrefix","resolveThenable","mapChildren","func","lazyInitializer","_status","_result","moduleObject","Children","forEachFunc","forEachContext","toArray","only","Fragment","Profiler","StrictMode","Suspense","__COMPILER_RUNTIME","__proto__","cloneElement","config","childArray","createContext","childrenLength","createRef","forwardRef","lazy","memo","scope","unstable_useCacheRefresh","permalink","Context","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","right","diff","sortIndex","performance","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","localSetImmediate","setImmediate","advanceTimers","timer","startTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","MessageChannel","channel","port","port2","port1","onmessage","postMessage","ms","unstable_Profiling","task","unstable_forceFrameRate","fps","unstable_next","eventHandler","unstable_runWithPriority","delay","unstable_wrapCallback","parentPriorityLevel","jsxProd","maybeKey","jsx","jsxs","checkDCE","Internals","getCrossOriginStringAs","createPortal","createPortal$1","flushSync","previousTransition","previousUpdatePriority","preconnect","prefetchDNS","preinit","fetchPriority","nonce","preinitModule","preloadModule","requestFormReset","unstable_batchedUpdates","useFormStatus","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","s","NaN","rt","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","ns","def","getOwnPropertyNames","definition","o","chunkId","all","reduce","promises","miniCssF","prop","inProgress","dataWebpackPrefix","script","needAttach","charset","nc","onScriptComplete","doneFns","toStringTag","installedChunks","installedChunkData","promise","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","Action","PopStateEventType","invariant","warning","cond","warn","getHistoryState","usr","idx","createLocation","to","_extends","pathname","hash","parsePath","createPath","_ref","charAt","path","parsedPath","hashIndex","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","v5Compat","globalHistory","history","Pop","getIndex","handlePop","nextIndex","delta","createURL","base","origin","URL","replaceState","listen","encodeLocation","Push","historyState","pushState","DOMException","Replace","go","ResultType","matchRoutes","routes","locationArg","basename","matchRoutesImpl","allowPartial","stripBasename","branches","flattenRoutes","sort","score","siblings","every","compareIndexes","routesMeta","meta","childrenIndex","rankRouteBranches","decoded","decodePath","matchRouteBranch","parentsMeta","parentPath","flattenRoute","route","relativePath","caseSensitive","startsWith","joinPaths","computeScore","_route$path","exploded","explodeOptionalSegments","segments","rest","isOptional","required","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","filter","segment","branch","matchedParams","matchedPathname","remainingPathname","matchPath","params","pathnameBase","normalizePathname","pattern","matcher","compiledParams","regexpSource","_","paramName","compilePath","captureGroups","splatValue","decodeURIComponent","startIndex","nextChar","getInvalidPathError","field","dest","JSON","stringify","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","routePathnameIndex","toSegments","fromPathname","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","isRouteErrorResponse","statusText","internal","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useLocation","UNSAFE_invariant","useIsomorphicLayoutEffect","cb","static","useNavigate","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","future","navigator","routePathnamesJson","UNSAFE_getResolveToMatches","parse","relative","useNavigateUnstable","OutletContext","useParams","routeMatch","useRoutesImpl","dataRouterState","isStatic","parentMatches","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","parentSegments","renderedMatches","_renderMatches","navigationType","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","useRouteError","lightgrey","preStyles","padding","backgroundColor","fontStyle","defaultErrorElement","RenderErrorBoundary","revalidation","routeContext","component","RenderedRoute","staticContext","errorElement","ErrorBoundary","_deepestRenderedBoundaryId","_dataRouterState","_future","v7_partialHydration","initialized","errorIndex","findIndex","renderFallback","fallbackIndex","HydrateFallback","hydrateFallbackElement","loaderData","needsToRunLoader","loader","reduceRight","shouldRenderHydrateFallback","alreadyWarned$1","getChildren","hookName","ctx","useRouteContext","thisRoute","logV6DeprecationWarnings","renderFuture","routerFuture","v7_startTransition","v7_fetcherPersist","v7_normalizeFormMethod","v7_skipActionErrorRevalidation","Navigate","_ref4","jsonPath","Outlet","useOutlet","Route","_props","Router","_ref5","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","Routes","_ref6","createRoutesFromChildren","treePath","hasErrorBoundary","shouldRevalidate","handle","__reactRouterVersion","startTransitionImpl","BrowserRouter","historyRef","setStateImpl","UNSAFE_logV6DeprecationWarnings","toPropertyKey","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptors","defineProperties","thisArg","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","findKey","_key","_global","globalThis","global","isContextDefined","isTypedArray","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","descriptors","reducedDescriptors","isAsyncFn","_setImmediate","setImmediateSupported","postMessageSupported","token","_ref2","asap","isFormData","kind","append","isArrayBufferView","isBoolean","isStream","pipe","merge","caseless","assignValue","targetKey","stripBOM","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","merged","searchString","position","lastIndex","forEachEntry","_iterator","pair","matchAll","regExp","exec","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","delimiter","define","toCamelCase","p1","p2","toFiniteNumber","isSpecCompliantForm","toJSONObject","visit","reducedValue","isThenable","isIterable","AxiosError","response","captureStackTrace","utils","description","fileName","lineNumber","columnNumber","customProps","axiosError","isVisitable","removeBrackets","renderKey","dots","predicates","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","isFlatArray","el","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","_pairs","toFormData","encoder","_encode","buildURL","serialize","serializeFn","serializedParams","hashmarkIndex","handlers","fulfilled","rejected","synchronous","runWhen","eject","clear","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","isBrowser","URLSearchParams","protocols","hasBrowserEnv","_navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","_objectSpread","platform","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","transitionalDefaults","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","formDataToJSON","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","rawValue","parser","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","substring","parseHeaders","entry","tokens","tokensRE","parseTokens","deleted","deleteHeader","normalize","format","normalized","w","formatHeader","_len","targets","asStrings","getSetCookie","computed","_len2","_key2","accessor","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","buildAccessors","mapped","headerValue","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","samplesCount","timestamps","firstSampleTS","chunkLength","startedAt","bytesCount","passed","round","freq","lastArgs","timestamp","threshold","invoke","flush","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","speedometer","throttle","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","progressEventDecorator","throttled","asyncDecorator","isMSIE","protocol","host","userAgent","expires","domain","secure","cookie","toGMTString","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","newConfig","auth","btoa","username","unescape","Boolean","isURLSameOrigin","xsrfValue","cookies","XMLHttpRequest","_config","resolveConfig","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","onloadend","responseHeaders","getAllResponseHeaders","responseText","open","onreadystatechange","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","parseProtocol","send","composeSignals","signals","_OverloadYield","_wrapAsyncGenerator","AsyncGenerator","resume","_invoke","_awaitAsyncGenerator","_asyncGeneratorDelegate","pump","_asyncIterator","asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","streamChunk","chunk","chunkSize","readBytes","iterable","_iteratorError","_iteratorAbruptCompletion","_didIteratorError","_step","readStream","_x","_x2","stream","reader","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","close","loadedBytes","enqueue","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","_request","getBodyLength","fetchOptions","composedSignal","toAbortSignal","requestContentLength","contentTypeHeader","isCredentialsSupported","credentials","isStreamResponse","responseContentLength","responseData","knownAdapters","http","xhr","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","formatMessage","opt","desc","opts","ERR_DEPRECATED","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","Cancel","spread","isAxiosError","formToJSON","getAdapter","api","localStorage","getItem","Authorization","getUserInfo","searchTorrents","keyword","page","getHelpPostDetail","postId","getRequestPostDetail","_arrayLikeToArray","_iterableToArray","_unsupportedIterableToArray","_toConsumableArray","AppConfigContext","defaultPrefixCls","defaultIconPrefixCls","ConfigContext","getPrefixCls","defaultGetPrefixCls","suffixCls","customizePrefixCls","iconPrefixCls","ConfigConsumer","_arrayWithHoles","_nonIterableRest","canUseDom","APPEND_ORDER","APPEND_PRIORITY","containerCache","getMark","mark","getContainer","attachTo","findStyles","injectCSS","css","csp","prepend","_option$priority","mergedOrder","getOrder","isPrependQueue","styleNode","existStyle","nodePriority","findExistNode","find","removeCSS","existNode","updateCSS","originOption","cachedRealContainer","placeholderStyle","syncRealContainer","_option$csp","_option$csp2","_option$csp3","newNode","condition","shouldUpdate","cacheRef","warned","preWarningFns","valid","note","warningOnce","preMessage","resetWarned","noteOnce","obj1","obj2","shallow","refSet","deepEqual","level","circular","newLevel","_typeof","_defineProperties","pathKey","Entity","instanceId","_classCallCheck","_defineProperty","_createClass","opGet","keyPathStr","valueFn","opUpdate","ATTR_TOKEN","ATTR_MARK","CSS_IN_JS_INSTANCE","cssinjsInstanceId","styleHash","_style$parentNode","CacheEntity","StyleContext","hashPriority","defaultCache","CALC_UNIT","ThemeCache","cacheCallTimes","derivativeOption","_cache2","_cache3","updateCallTimes","derivative","_cache","_this$internalGet","internalGet","_this","MAX_CACHE_SIZE","MAX_CACHE_OFFSET","_this$keys$reduce","callTimes","_slicedToArray","cacheValue","currentCache","derivatives","_cache$value","deleteByPath","item","sameDerivativeOption","uuid","Theme","cacheThemes","createTheme","derivativeArr","resultCache","RESULT_VALUE","flattenTokenCache","flattenToken","token2key","salt","isClientSide","unit","toStyleStr","tokenKey","styleId","_objectSpread2","attrs","attrStr","attr","token2CSSVar","serializeCSSVar","cssVars","hashId","transformToken","themeKey","_ref3","_config$preserve","_config$ignore","preserve","ignore","_config$unitless","cssVar","unitless","useInternalLayoutEffect","firstMountRef","renderEffect","effect","effectCleanups","cleanupFlag","useGlobalCache","keyPath","cacheFn","onCacheRemove","onCacheEffect","globalCache","fullPathStr","register","useEffectCleanupRegister","buildCache","useHMR","prevCache","_ref2$","cacheContent","useCompatibleInsertionEffect","polyfill","times","_ref6$","EMPTY_OVERRIDE","tokenKeys","cleanTokenStyle","tokenKeyList","cleanableKeyList","removeStyleTags","TOKEN_PREFIX","useCacheToken","theme","_useContext","_option$salt","_option$override","override","formatToken","compute","getComputedToken","mergedToken","dep","memoResult","tokenStr","overrideTokenStr","cssVarStr","cachedToken","_cssVar$key","mergedDerivativeToken","originToken","overrideToken","getDerivativeToken","actualToken","cssVarsStr","_transformToken2","_tokenKey","_themeKey","recordCleanToken","_hashId","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","COMMENT","RULESET","DECLARATION","replacement","indexof","charat","begin","strlen","column","character","characters","caret","dealloc","delimit","whitespace","escaping","commenter","identifier","compile","rule","rules","rulesets","pseudo","points","declarations","atrule","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","sizeof","z","cachePathMap","ATTR_CACHE_MAP","CSS_FILE_STYLE","fromCSSFile","existPath","div","className","visibility","getComputedStyle","_item$split2","_inlineMapStyle$paren","inlineMapStyle","prepare","MULTI_VALUE","normalizeStyle","styleStr","injectSelectorHash","hashClassName","hashSelector","_firstPath$match","fullPath","firstPath","htmlElement","parseStyle","interpolation","parentSelectors","injectHash","layer","_config$transformers","transformers","linters","effectStyle","parseKeyframes","keyframes","getName","_parsedStr","flattenStyleList","flattenList","fullList","originStyle","_keyframe","mergedStyle","trans","_trans$visit","isCompoundCSSProperty","appendStyle","cssKey","cssValue","formatValue","actualValue","subInjectHash","mergedKey","nextRoot","_parseStyle4","_parsedStr2","childEffectStyle","uniqueHash","Empty","STYLE_PREFIX","useStyleRegister","styleFn","clientOnly","_info$order","_React$useContext","autoClear","mock","ssrInline","enableLayer","isMergedClientSide","_useGlobalCache","cachePath","_getStyleAndHash","_style","getStyleAndHash","_getStyleAndHash2","inlineCacheStyleStr","styleObj","_parseStyle6","parsedStyle","fromHMR","mergedCSSConfig","nonceStr","effectLayerKeys","effectRestKeys","effectKey","_useGlobalCache2","cachedStyleStr","cachedTokenKey","cachedStyleId","CSS_VAR_PREFIX","_config$scope","stylePath","_ExtractStyleFns","effectStyles","plain","keyStyleText","sharedAttrs","effectStyleHTML","realToken","cssVarKey","Keyframe","noSplit","notSplit","entity","internalSet","removeIfUndefined","_paths","_toArray","restPath","createEmpty","sources","internalMerge","parentLoopSet","loopSet","isArr","originValue","WarningContext","devUseWarning","noopWarning","deprecated","items_per_page","jump_to","jump_to_confirm","prev_page","next_page","prev_5","next_5","prev_3","next_3","page_size","yearFormat","dayFormat","cellMeridiemFormat","monthBeforeYear","today","backToToday","ok","year","timeSelect","dateSelect","weekSelect","monthSelect","yearSelect","decadeSelect","dateFormat","dateTimeFormat","previousMonth","nextMonth","previousYear","nextYear","previousDecade","nextDecade","previousCentury","nextCentury","placeholder","rangePlaceholder","lang","yearPlaceholder","quarterPlaceholder","monthPlaceholder","weekPlaceholder","rangeYearPlaceholder","rangeQuarterPlaceholder","rangeMonthPlaceholder","rangeWeekPlaceholder","CalendarLocale","timePickerLocale","TimePickerLocale","typeTemplate","Pagination","DatePicker","TimePicker","Calendar","Table","filterTitle","filterConfirm","filterReset","filterEmptyText","filterCheckAll","filterSearchPlaceholder","emptyText","selectAll","selectInvert","selectNone","selectionAll","sortTitle","expand","collapse","triggerDesc","triggerAsc","cancelSort","Tour","Next","Previous","Finish","Modal","okText","cancelText","justOkText","Popconfirm","Transfer","titles","searchPlaceholder","itemUnit","itemsUnit","selectCurrent","removeCurrent","deselectAll","removeAll","Upload","uploading","removeFile","uploadError","previewFile","downloadFile","Icon","icon","Text","edit","copied","Form","optional","defaultValidateMessages","enum","invalid","types","integer","float","regexp","hex","mismatch","Image","preview","QRCode","expired","refresh","scanned","ColorPicker","presetEmpty","transparent","singleColor","gradientColor","runtimeLocale","defaultLocale","localeList","generateLocale","_ANT_MARK__","clearLocale","newLocale","cloneLocale","changeConfirmLocale","getMemoizedContextValue","exist","LocaleContext","splitColorStr","parseNum","numList","parseFloat","parseHSVorHSL","limitRange","mergedMax","FastColor","matchFormat","trimStr","matchPrefix","fromHexString","fromRgbString","fromHslString","fromHsvString","_h","_s","_l","_v","fromHsl","fromHsv","setR","_sc","setG","setB","setA","setHue","hsv","toHsv","_c","getLuminance","adjustGamma","raw","getHue","getMax","getMin","getSaturation","getLightness","getBrightness","_brightness","darken","amount","lighten","mix","calc","rgba","tint","shade","onBackground","background","bg","alpha","isDark","isLight","other","toHexString","rHex","gHex","bHex","aHex","toHsl","toHslString","toRgb","toRgbString","rgb","_max","_min","withoutPrefix","connectNum","index1","index2","huePrime","chroma","secondComponent","lightnessModification","vv","hh","ff","cells","txt","darkColorMap","light","hue","saturation","generate","patterns","pColor","_i","presetPrimaryColors","red","primary","volcano","orange","gold","yellow","lime","green","cyan","blue","geekblue","purple","magenta","grey","presetPalettes","redDark","volcanoDark","orangeDark","goldDark","yellowDark","limeDark","greenDark","cyanDark","blueDark","geekblueDark","purpleDark","magentaDark","greyDark","defaultPresetColors","pink","colorPrimary","colorSuccess","colorWarning","colorError","colorInfo","colorLink","colorTextBase","colorBgBase","fontFamily","fontFamilyCode","fontSize","lineWidth","lineType","motionUnit","motionBase","motionEaseOutCirc","motionEaseInOutCirc","motionEaseOut","motionEaseInOut","motionEaseOutBack","motionEaseInBack","motionEaseInQuint","motionEaseOutQuint","borderRadius","sizeUnit","sizeStep","sizePopupArrow","controlHeight","zIndexBase","zIndexPopupBase","opacityImage","wireframe","motion","radiusBase","radiusLG","radiusSM","radiusXS","radiusOuter","borderRadiusXS","borderRadiusSM","borderRadiusLG","borderRadiusOuter","controlHeightSM","controlHeightXS","controlHeightLG","fontSizePairs","fontSizes","baseSize","intSize","ceil","genFontSizes","lineHeights","fontSizeMD","fontSizeSM","fontSizeLG","lineHeightSM","lineHeightLG","fontSizeXL","fontSizeHeading1","fontSizeHeading2","fontSizeHeading3","fontSizeHeading4","fontSizeHeading5","fontHeight","fontHeightLG","fontHeightSM","lineHeightHeading1","lineHeightHeading2","lineHeightHeading3","lineHeightHeading4","lineHeightHeading5","getAlphaColor","baseColor","getSolidColor","brightness","generateColorPalettes","colors","generateNeutralColorPalettes","bgBaseColor","textBaseColor","colorText","colorTextSecondary","colorTextTertiary","colorTextQuaternary","colorFill","colorFillSecondary","colorFillTertiary","colorFillQuaternary","colorBgSolid","colorBgSolidHover","colorBgSolidActive","colorBgLayout","colorBgContainer","colorBgElevated","colorBgSpotlight","colorBgBlur","colorBorder","colorBorderSecondary","defaultTheme","colorPalettes","colorKey","cur","seed","colorSuccessBase","colorWarningBase","colorErrorBase","colorInfoBase","colorPrimaryBase","primaryColors","successColors","warningColors","errorColors","infoColors","neutralColors","linkColors","colorErrorBgFilledHover","colorPrimaryBg","colorPrimaryBgHover","colorPrimaryBorder","colorPrimaryBorderHover","colorPrimaryHover","colorPrimaryActive","colorPrimaryTextHover","colorPrimaryText","colorPrimaryTextActive","colorSuccessBg","colorSuccessBgHover","colorSuccessBorder","colorSuccessBorderHover","colorSuccessHover","colorSuccessActive","colorSuccessTextHover","colorSuccessText","colorSuccessTextActive","colorErrorBg","colorErrorBgHover","colorErrorBgActive","colorErrorBorder","colorErrorBorderHover","colorErrorHover","colorErrorActive","colorErrorTextHover","colorErrorText","colorErrorTextActive","colorWarningBg","colorWarningBgHover","colorWarningBorder","colorWarningBorderHover","colorWarningHover","colorWarningActive","colorWarningTextHover","colorWarningText","colorWarningTextActive","colorInfoBg","colorInfoBgHover","colorInfoBorder","colorInfoBorderHover","colorInfoHover","colorInfoActive","colorInfoTextHover","colorInfoText","colorInfoTextActive","colorLinkHover","colorLinkActive","colorBgMask","colorWhite","genColorMapToken","genFontMapToken","sizeXXL","sizeXL","sizeLG","sizeMD","sizeMS","sizeSM","sizeXS","sizeXXS","genSizeMapToken","genControlHeight","motionDurationFast","toFixed","motionDurationMid","motionDurationSlow","lineWidthBold","genRadius","genCommonMapToken","defaultSeedToken","hashed","DesignTokenContext","dynamicStyleMark","registerTheme","globalPrefixCls","variables","formatColor","fillColor","colorVal","primaryColor","primaryActiveColor","successColor","warningColor","errorColor","infoColor","cssList","getStyle","DisabledContext","DisabledContextProvider","originDisabled","SizeContext","SizeContextProvider","originSize","componentDisabled","componentSize","fullClone","useEmptyId","isDOM","HTMLElement","SVGElement","_ReactDOM$findDOMNode","domNode","nativeElement","getDOM","REACT_ELEMENT_TYPE_18","REACT_ELEMENT_TYPE_19","ReactMajorVersion","fillRef","supportRef","nodeOrComponent","_type$prototype","_nodeOrComponent$prot","isReactElement","propertyIsEnumerable","_excluded","MotionProvider","_objectWithoutProperties","_setPrototypeOf","_getPrototypeOf","_isNativeReflectConstruct","ReferenceError","_React$Component","_inherits","DomWrapper","_super","_createSuper","useEvent","fnRef","memoFn","_fnRef$current","useSafeState","destroyRef","_React$useState2","ignoreDestroy","STATUS_NONE","STATUS_APPEAR","STATUS_ENTER","STATUS_LEAVE","STEP_NONE","STEP_PREPARE","STEP_START","STEP_ACTIVE","STEP_ACTIVATED","STEP_PREPARED","domSupport","getVendorPrefixes","_document$createEleme","stylePropList","internalAnimationEndName","internalTransitionEndName","supportTransition","animationEndName","transitionEndName","getTransitionName","transitionName","transitionType","raf","caf","requestAnimationFrame","cancelAnimationFrame","rafUUID","rafIds","cleanup","wrapperRaf","callRef","leftTimes","realId","FULL_STEP_QUEUE","SIMPLE_STEP_QUEUE","SkipStep","isActive","prepareOnly","_useState2","setStep","_useNextFrame","nextFrameRef","cancelNextFrame","nextFrame","nextFrameId","isCanceled","useNextFrame","_useNextFrame2","STEP_QUEUE","nextStep","doNext","useStatus","supportMotion","visible","getElement","_ref$motionEnter","motionEnter","_ref$motionAppear","motionAppear","_ref$motionLeave","motionLeave","motionDeadline","motionLeaveImmediately","onAppearPrepare","onEnterPrepare","onLeavePrepare","onAppearStart","onEnterStart","onLeaveStart","onAppearActive","onEnterActive","onLeaveActive","onAppearEnd","onEnterEnd","onLeaveEnd","onVisibleChanged","asyncVisible","setAsyncVisible","_useSyncState","currentValueRef","useSyncState","_useSyncState2","getStatus","setStatus","_useState4","setStyle","currentStatus","mountedRef","deadlineRef","getDomElement","updateMotionEndStatus","onInternalMotionEnd","deadline","canEnd","currentActive","_useDomMotionEvents","cacheElementRef","removeMotionEvents","useDomMotionEvents","patchMotionEvents","getEventHandlers","targetStatus","eventHandlers","_useStepQueue2","useStepQueue","newStep","onPrepare","_eventHandlers$step","startStep","active","visibleRef","nextStatus","nextEventHandlers","firstMountChangeRef","transitionSupport","CSSMotion","_props$visible","_props$removeOnLeave","removeOnLeave","forceRender","motionName","leavedClassName","eventProps","contextMotion","isSupportTransition","nodeRef","wrapperNodeRef","_useStatus2","statusStep","statusStyle","mergedVisible","renderedRef","motionChildren","setNodeRef","mergedProps","statusSuffix","motionCls","originNodeRef","ele","getNodeRef","STATUS_ADD","STATUS_KEEP","STATUS_REMOVE","STATUS_REMOVED","wrapKeyToObject","keyObj","parseKeys","_excluded2","MOTION_PROP_NAMES","OriginCSSMotion","CSSMotionList","_assertThisInitialized","keyEntities","removeKey","onAllRemoved","_this2","_this$props","_onVisibleChanged","restProps","motionProps","changedVisible","parsedKeyObjects","mixedKeyEntities","prevKeys","currentKeys","currentIndex","currentLen","prevKeyObjects","currentKeyObjects","hit","currentKeyObj","matchKey","diffKeys","prevEntity","isStableColor","frontColor","fR","fG","fB","originAlpha","bR","bG","bB","fA","__rest","derivativeToken","restToken","overrideTokens","seedToken","screenXL","screenXXL","fastDuration","colorFillContent","colorFillContentHover","colorFillAlter","colorBgContainerDisabled","colorBorderBg","colorSplit","colorTextPlaceholder","colorTextDisabled","colorTextHeading","colorTextLabel","colorTextDescription","colorTextLightSolid","colorHighlight","colorBgTextHover","colorBgTextActive","colorIcon","colorIconHover","colorErrorOutline","colorWarningOutline","fontSizeIcon","lineWidthFocus","controlOutlineWidth","controlInteractiveSize","controlItemBgHover","controlItemBgActive","controlItemBgActiveHover","controlItemBgActiveDisabled","controlTmpOutline","controlOutline","fontWeightStrong","opacityLoading","linkDecoration","linkHoverDecoration","linkFocusDecoration","controlPaddingHorizontal","controlPaddingHorizontalSM","paddingXXS","paddingXS","paddingSM","paddingMD","paddingLG","paddingXL","paddingContentHorizontalLG","paddingContentVerticalLG","paddingContentHorizontal","paddingContentVertical","paddingContentHorizontalSM","paddingContentVerticalSM","marginXXS","marginXS","marginSM","margin","marginMD","marginLG","marginXL","marginXXL","boxShadow","boxShadowSecondary","boxShadowTertiary","screenXS","screenXSMin","screenXSMax","screenSM","screenSMMin","screenSMMax","screenMD","screenMDMin","screenMDMax","screenLG","screenLGMin","screenLGMax","screenXLMin","screenXLMax","screenXXLMin","boxShadowPopoverArrow","boxShadowCard","boxShadowDrawerRight","boxShadowDrawerLeft","boxShadowDrawerUp","boxShadowDrawerDown","boxShadowTabsOverflowLeft","boxShadowTabsOverflowRight","boxShadowTabsOverflowTop","boxShadowTabsOverflowBottom","components","componentTheme","componentTokens","mergedComponentToken","useToken","rootDesignToken","mergedTheme","MotionWrapper","needWrapMotionProviderRef","resetComponent","needInheritFontFamily","boxSizing","listStyle","genIconStyle","alignItems","textAlign","textTransform","verticalAlign","textRendering","svg","useResetIconStyle","PASSED_PROPS","globalIconPrefixCls","globalTheme","globalHolderRender","getGlobalPrefixCls","getGlobalIconPrefixCls","globalConfig","getIconPrefixCls","getRootPrefixCls","getTheme","holderRender","ProviderChildren","customCsp","autoInsertSpaceInButton","alert","anchor","direction","space","splitter","virtual","dropdownMatchSelectWidth","popupMatchSelectWidth","popupOverflow","legacyLocale","parentContext","customIconPrefixCls","segmented","statistic","spin","calendar","carousel","cascader","typography","checkbox","descriptions","divider","drawer","skeleton","steps","image","layout","mentions","modal","slider","breadcrumb","menu","pagination","textArea","empty","badge","radio","switch","SWITCH","transfer","avatar","card","tabs","timeline","timePicker","notification","tree","colorPicker","datePicker","rangePicker","wave","dropdown","warningConfig","tour","tooltip","popconfirm","floatButtonGroup","variant","inputNumber","treeSelect","prefixCls","mergedPrefixCls","useStyle","parentTheme","_a","themeConfig","parentThemeConfig","inherit","useThemeKey","_b","mergedComponents","componentName","mergedCssVar","prevTheme","nextTheme","isEqual","useTheme","baseConfig","autoInsertSpace","memoedConfig","prevConfig","currentConfig","CssInJsStyleContext","memoIconContextValue","childNode","PropWarning","validateMessages","_d","ValidateMessagesContext","LocaleProvider","IconContext","memoTheme","algorithm","themeObj","parsedComponents","componentToken","parsedToken","ConfigProvider","antLocale","isLegacyTheme","useConfig","_regeneratorRuntime","Generator","delegate","sent","_sent","dispatchException","abrupt","wrap","GeneratorFunction","GeneratorFunctionPrototype","AsyncIterator","__await","tryEntries","isGeneratorFunction","awrap","values","stop","rval","complete","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","_next","_throw","reactRender","unmountComponentAtNode","toggleWarning","skip","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","usingClientEntryPoint","MARK","modernRender","legacyRender","modernUnmount","_modernUnmount","_callee","_container$MARK","legacyUnmount","_unmount","_callee2","_context2","unstableRender","defaultReactRender","getRoot","_ele$getRootNode","getShadowRoot","ShadowRoot","inShadow","isIconDefinition","normalizeAttrs","acc","class","rootProps","getSecondaryColor","generateColor","normalizeTwoToneColors","twoToneColor","twoToneColorPalette","secondaryColor","calculated","IconBase","svgRef","eleRef","mergedStyleStr","shadowRoot","useInsertStyles","getTwoToneColors","setTwoToneColors","setTwoToneColor","_normalizeTwoToneColo2","ReactIcon","rotate","tabIndex","_React$useContext$pre","rootClassName","classString","iconTabIndex","svgStyle","msTransform","transform","role","getTwoToneColor","CheckCircleFilled","AntdIcon","CheckCircleFilledSvg","CloseCircleFilled","CloseCircleFilledSvg","ExclamationCircleFilled","ExclamationCircleFilledSvg","InfoCircleFilled","InfoCircleFilledSvg","LoadingOutlined","LoadingOutlinedSvg","KeyCode","MAC_ENTER","BACKSPACE","TAB","NUM_CENTER","ENTER","SHIFT","CTRL","ALT","PAUSE","CAPS_LOCK","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","PRINT_SCREEN","INSERT","DELETE","ZERO","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","QUESTION_MARK","B","F","G","I","J","K","N","O","P","Q","R","U","W","Y","Z","META","WIN_KEY_RIGHT","CONTEXT_MENU","NUM_ZERO","NUM_ONE","NUM_TWO","NUM_THREE","NUM_FOUR","NUM_FIVE","NUM_SIX","NUM_SEVEN","NUM_EIGHT","NUM_NINE","NUM_MULTIPLY","NUM_PLUS","NUM_MINUS","NUM_PERIOD","NUM_DIVISION","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","NUMLOCK","SEMICOLON","DASH","EQUALS","COMMA","PERIOD","SLASH","APOSTROPHE","SINGLE_QUOTE","OPEN_SQUARE_BRACKET","BACKSLASH","CLOSE_SQUARE_BRACKET","WIN_KEY","MAC_FF_META","WIN_IME","isTextModifyingKeyEvent","isCharacterKey","propList","Notify","_props$duration","duration","showProgress","_props$pauseOnHover","pauseOnHover","eventKey","closable","_props$closeIcon","closeIcon","divProps","onNoticeClose","forcedHovering","hovering","setHovering","_React$useState4","percent","setPercent","_React$useState6","spentTime","setSpentTime","mergedHovering","mergedShowProgress","onInternalClose","animationFrame","calculate","closableObj","ariaProps","mergedConfig","ariaOnly","aria","pickAttrs","validPercent","noticePrefixCls","onMouseEnter","_divProps$onMouseEnte","onMouseLeave","_divProps$onMouseLeav","onKeyDown","NotificationContext","_config$offset","_config$threshold","_config$gap","gap","configList","placement","onAllNoticeRemoved","stackConfig","ctxCls","dictRef","latestNotice","setLatestNotice","hoverKeys","setHoverKeys","_useStack2","useStack","_useStack2$","expanded","placementMotion","dataKey","_keys","_keys2","clsx","motionClassName","motionStyle","motionIndex","strKey","configClassName","configStyle","configClassNames","configStyles","restConfig","dataIndex","stackStyle","transformX","_dictRef$current$strK","_dictRef$current$strK2","_dictRef$current$strK3","offsetHeight","verticalOffset","_dictRef$current$keys","transformY","scaleX","offsetWidth","wrapper","Notice","notice","Notifications","_props$prefixCls","maxCount","renderNotifications","setConfigList","_config$onClose","onClose","_list$index","innerConfig","placements","setPlacements","nextPlacements","_config$placement","originPlacements","emptyRef","placementList","placementConfigList","NoticeList","defaultGetContainer","uniqueKey","useNotification","rootConfig","_rootConfig$getContai","shareConfig","setContainer","notificationsRef","contextHolder","setTaskQueue","objList","oriTaskQueue","tgtTaskQueue","oriQueue","AbstractCalculator","CSSCalculator","_AbstractCalculator","unitlessCssVar","numType","getResult","lowPriority","force","cssUnit","mergedUnit","NumCalculator","Calculator","defaultToken","customToken","deprecatedTokens","_customToken$newToken","oldTokenKey","newTokenKey","enableStatistic","CSSINJS_STATISTIC","recording","objs","proxy","Proxy","_tokenKeys","_statistic$componentN","getDefaultToken","_token$component","mergeToken","ArrayKeyMap","compositeKey","getCompositeKey","lastAccessBeat","accessBeat","getObjectID","objectIDMap","nextID","beat","uniqueMap","cachedValue","newValue","_config$useCSP","useCSP","useDefaultCSP","usePrefix","getResetStyles","getCommonStyle","getCompUnitless","genComponentStyleHook","concatComponent","mergedLayer","rootCls","_useToken3","_usePrefix","rootPrefixCls","useUniqueMemo","getCompVarPrefix","genCalc","_genMaxMin","genMaxMin","sharedConfig","injectStyle","_statisticToken","statisticToken","proxyToken","defaultComponentToken","getDefaultComponentToken","componentCls","getComponentToken","iconCls","antCls","styleInterpolation","commonStyle","resetFont","resetStyle","genStyleHooks","prefixToken","originUnitless","compUnitless","mergedOptions","useCSSVar","_options$injectStyle","CSSVarRegister","_ref$cssVar","useCSSVarRegister","genCSSVarRegister","_useCSSVar2","genSubStyleComponent","_ref2$rootCls","genStyleUtils","useLocalToken","linkStyle","textDecoration","outline","genLinkStyle","genCommonStyle","componentPrefixCls","prefixSelector","rootPrefixSelector","resetFontStyle","genMessageStyle","zIndexPopup","contentPadding","contentBg","noticeCls","messageMoveIn","Keyframes","messageMoveOut","maxHeight","noticeStyle","marginInlineEnd","pointerEvents","animationFillMode","animationDuration","animationPlayState","animationTimingFunction","span","combinedToken","CONTAINER_OFFSET","TypeIcon","success","PureContent","staticPrefixCls","useCSSVarCls","wrapCSSVar","cssVarCls","CloseOutlined","CloseOutlinedSvg","wrapPromiseFn","openFn","closeFn","closePromise","filled","DEFAULT_DURATION","Wrapper","NotificationProvider","Holder","staticGetContainer","rtl","getPopupContainer","mergedCloseIcon","holder","useRcNotification","getClassName","getNotificationMotion","getMotion","keyIndex","useInternalMessage","messageConfig","holderRef","wrapAPI","fakeResult","originOpen","typeOpen","jointContent","mergedDuration","mergedOnClose","act","defaultGlobalConfig","getGlobalContext","mergedContainer","GlobalHolder","sync","appConfig","GlobalHolderWrapper","setMessageConfig","rootIconPrefixCls","dom","flushNotice","holderFragment","createDocumentFragment","newMessage","unstableSetRender","skipped","setCloseFn","_message$instance","baseStaticMethods","useMessage","_InternalPanelDoNotUseOrYouWillBeFired","PurePanel","staticMethods","API_BASE_URL","getAllDiscounts","_response$data$data","_response$data4","_location$state","onLogout","userInfo","setUserInfo","setLoading","setError","currentSlide","setCurrentSlide","tab","showUploadModal","setShowUploadModal","isUploading","setIsUploading","uploadData","setUploadData","region","subtitle","resolution","file","showPostModal","setShowPostModal","postTitle","setPostTitle","postContent","setPostContent","selectedImage","setSelectedImage","helpPosts","setHelpPosts","helpLoading","setHelpLoading","helpError","setHelpError","currentPage","setCurrentPage","totalPages","setTotalPages","likedPosts","setLikedPosts","announcements","setAnnouncements","carouselDiscounts","setCarouselDiscounts","requestLoading","setRequestLoading","requestError","setRequestError","requestPosts","setRequestPosts","torrentPosts","setTorrentPosts","torrentLoading","setTorrentLoading","torrentError","setTorrentError","filteredResources","setFilteredResources","isAdmin","setIsAdmin","showDownloadModal","setShowDownloadModal","selectedTorrent","setSelectedTorrent","downloadProgress","setDownloadProgress","isDownloading","setIsDownloading","downloadPath","setDownloadPath","announcementSearch","setAnnouncementSearch","shareSearch","setShareSearch","requestSearch","setRequestSearch","helpSearch","setHelpSearch","activeTab","handleTabChange","tabName","savedFilters","selectedFilters","fetchAnnouncements","fetchDiscountsForCarousel","ongoing","getTime","endTime","upcoming","handleSearchAnnouncement","handleSearchShare","records","handleResetShareSearch","setSelectedFilters","filterCategories","category","fetchTorrentPosts","handleSearchRequest","searchRequestPosts","postsWithCounts","detailResponse","replyCount","isLiked","handleResetRequestSearch","fetchRequestPosts","handleSearchHelp","searchHelpPosts","handleResetHelpSearch","fetchHelpPosts","handleFileChange","files","handleUploadSubmit","torrentData","torrentName","bodyObj","createTorrent","_error$response","_error$response$data","checkFileExists","handleDeleteTorrent","torrentId","confirm","deleteTorrent","_error$response2","_error$response2$data","handleRequestPostSubmit","createRequestPost","authorId","handleHelpPostSubmit","createHelpPost","isReset","getRequestPosts","handleImageUpload","getHelpPosts","label","applyFilters","_location$state2","scrollPosition","scrollTo","backendData","authority","fetchUserInfo","setInterval","clearInterval","_jsx","_jsxs","alt","renderContent","onChange","onKeyPress","discount","toLocaleDateString","announcement","handleAnnouncementClick","closest","returnPath","scrollY","marginLeft","handleFilterSelect","onSubmit","accept","torrent","handleDownloadClick","isSolved","authorAvatar","createTime","likeCount","htmlFor","cleanPath","finalPath","downloadTorrent","interval","getDownloadProgress","progresses","filePath","foundProgress","normalizedKey","newProgress","userData","registTime","formatDate","magicPoints","download","shareRate","getDownloadQuota","used","dateString","getFullYear","getMonth","padStart","day","getDate","getUserInviteCodes","inviteCode","Personal","setUserData","downloadQuota","joinDate","ratio","fetchData","fetchDownloadProgress","progressData","intervalId","formatSize","kb","mb","handleBack","fromSubpage","dashboardTab","percentage","taskId","feature","handleCardClick","onLoginSuccess","isLogin","setIsLogin","setFormData","isLoading","setIsLoading","handleChange","handleSubmit","setItem","login","AnnouncementDetail","setAnnouncement","fromTab","getAnnouncementDetail","fetchAnnouncement","paragraph","setTorrent","comments","setComments","newComment","setNewComment","setReplyingTo","replyContent","setReplyContent","activeReplyId","setActiveReplyId","replyModal","setReplyModal","replyingTo","replyingToUsername","isReply","openReplyModal","commentId","closeReplyModal","Comment","onLike","onReply","replyTo","renderComment","handleLikeComment","replies","reply","fetchTorrentDetail","_err$response","_err$response$data","likeTorrentComment","updateComments","_err$response4","_err$response4$data","_err$response2","_err$response2$data","addTorrentComment","commentData","_err$response3","_err$response3$data","rows","addCommentReply","replyData","_err$response5","_err$response5$data","RequestDetail","setPost","replyImage","setReplyImage","commentImage","setCommentImage","expandedReplies","setExpandedReplies","loadingReplies","setLoadingReplies","onDelete","imageUrl","handleDeleteComment","fetchPostDetail","handleDeletePost","deleteRequestPost","likeRequestPostComment","deleteRequestComment","_err$response6","_err$response6$data","ClassName","classname","para","likeRequestPost","handleMarkSolved","addRequestPostComment","addRequestCommentReply","_err$response7","_err$response7$data","HelpDetail","deleteHelpPost","likeHelpPostComment","deleteHelpComment","likeHelpPost","addHelpPostComment","addHelpCommentReply","Exchange","inviteCodes","setInviteCodes","setMagicPoints","codes","newCode","generateInviteCode","updatedUser","magicPoint","exchangeUpload","isUsed","torrents","setTorrents","setPagination","fetchTorrents","downloadCount","formattedSize","getUserTorrents","handleDelete","getPageNumbers","pages","startPage","maxVisiblePages","endPage","jumpToPage","notices","setSuccess","passwordForm","setPasswordForm","oldPassword","newPassword","confirmPassword","handlePasswordChange","put","updatePassword","minLength","millisecondsInWeek","millisecondsInMinute","millisecondsInHour","constructFromSymbol","constructFrom","toDate","argument","parseISO","_options$additionalDi","invalidDate","in","additionalDigits","dateStrings","dateTimeDelimiter","timeString","timeZoneDelimiter","timezone","splitDateString","parseYearResult","regex","captures","restDateString","century","parseYear","dateRegex","isWeekDate","dayOfYear","parseDateUnit","dayOfWeek","_year","validateWeekDate","isoWeekYear","setUTCFullYear","fourthOfJanuaryDay","getUTCDay","setUTCDate","getUTCDate","dayOfISOWeekYear","daysInMonths","isLeapYearIndex","validateDate","validateDayOfYearDate","parseDate","timeRegex","hours","parseTimeUnit","minutes","seconds","validateTime","parseTime","tmpDate","setFullYear","getUTCFullYear","getUTCMonth","setHours","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","timezoneString","timezoneRegex","sign","_hours","validateTimezone","parseTimezone","formatDistanceLocale","lessThanXSeconds","one","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","defaultWidth","formats","formatLong","full","long","medium","short","dateTime","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","buildLocalizeFn","valuesArray","formattingValues","defaultFormattingWidth","argumentCallback","localize","ordinalNumber","dirtyNumber","_options","rem100","era","narrow","abbreviated","wide","quarter","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","predicate","valueCallback","parsePattern","parseResult","any","enUS","formatDistance","tokenValue","addSuffix","comparison","formatRelative","_date","_baseDate","weekStartsOn","firstWeekContainsDate","dateLongFormatter","timeLongFormatter","longFormatters","dateTimeLongFormatter","datePattern","timePattern","dayOfYearTokenRE","weekYearTokenRE","throwTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","warnOrThrowProtectedError","_message","subject","defaultOptions","getDefaultOptions","getInternalDefaultOptions","transpose","date_","_constructor$prototyp","isConstructor","getHours","getMinutes","getSeconds","getMilliseconds","Setter","validate","_utcDate","ValueSetter","validateValue","subPriority","DateTimezoneSetter","timestampIsSet","Parser","setter","numericPatterns","timezonePatterns","mapValue","parseFnResult","mapFn","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","trunc","startOfWeek","_options$weekStartsOn","_options$locale","_defaultOptions$local","getDay","setDate","getWeekYear","_options$firstWeekCon","firstWeekOfNextYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","startOfISOWeek","startOfWeekYear","firstWeek","getWeek","setWeek","getISOWeekYear","fourthOfJanuaryOfNextYear","fourthOfJanuaryOfThisYear","startOfISOWeekYear","fourthOfJanuary","getISOWeek","setISOWeek","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","addDays","setDay","currentDay","getISODay","setISODay","getTimezoneOffsetInMilliseconds","utcDate","UTC","parsers","isTwoDigitYear","normalizedTwoDigitYear","_flags","firstWeekOfYear","setMonth","isLeapYear","wholeWeekDays","isPM","setMinutes","setSeconds","setMilliseconds","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","dateStr","formatStr","referenceDate","_options$locale2","_ref7","_options$locale3","_defaultOptions$local2","subFnOptions","setters","firstCharacter","longFormatter","usedTokens","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","incompatibleTokens","incompatibleToken","usedToken","fullToken","uniquePrioritySetters","setterArray","isValid","isBefore","dateToCompare","normalizeDates","dates","startOfDay","differenceInCalendarDays","laterDate","earlierDate","laterDate_","earlierDate_","laterStartOfDay","earlierStartOfDay","laterTimestamp","earlierTimestamp","startOfYear","getDayOfYear","addLeadingZeros","targetLength","lightFormatters","signedYear","dayPeriodEnumValue","numberOfDigits","milliseconds","dayPeriodEnum","formatters","signedWeekYear","weekYear","isoWeek","localDayOfWeek","isoDayOfWeek","_localize","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","absOffset","originalDate","isToken","cleanEscapedString","preprocessor","formatterOptions","part","formatter","matched","startOfMonth","startOfQuarter","currentMonth","endOfDay","endOfWeek","endOfMonth","isSameYear","isSameMonth","isSameQuarter","dateLeft_","dateRight_","isSameDay","leftDate","rightDate","isWithinInterval","getDaysInMonth","monthIndex","lastDayOfMonth","midMonth","daysInMonth","setQuarter","getYear","endOfYear","getQuarter","addMonths","dayOfMonth","endOfDesiredMonth","subMonths","differenceInCalendarMonths","addQuarters","subQuarters","differenceInCalendarQuarters","addYears","subYears","differenceInCalendarYears","addMilliseconds","addHours","addMinutes","setTime","addSeconds","isAfter","addWeeks","setYear","differenceInDays","compareLocalAsc","difference","subWeeks","subDays","useSafeInsertionEffect","hasWindow","getNodeName","getWindow","_node$ownerDocument","getDocumentElement","Node","isElement","Element","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","isTableElement","isTopLayer","selector","isContainingBlock","elementOrCss","webkit","isWebKit","containerType","backdropFilter","willChange","contain","CSS","supports","isLastTraversableNode","getNodeScroll","scrollX","getParentNode","assignedSlot","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","frameElement","getFrameElement","visualViewport","createCoords","oppositeSideMap","bottom","oppositeAlignmentMap","evaluate","param","getSide","getAlignment","getAxisLength","axis","getSideAxis","getAlignmentAxis","getOppositeAlignmentPlacement","alignment","getOppositePlacement","side","getPaddingObject","expandPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","floating","sideAxis","alignmentAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","_await$platform$isEle","rects","strategy","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","getClippingRect","contextElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","getCssDimensions","hasOffset","shouldFallback","$","unwrapElement","getBoundingClientRect","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","getWindowScrollBarX","leftScroll","getHTMLOffset","scroll","ignoreScrollbarX","htmlRect","getClientRectFromClippingAncestor","clippingAncestor","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scrollWidth","scrollHeight","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","setLeftRTLScrollbarOffset","offsetRect","htmlOffset","isStaticPositioned","getTrueOffsetParent","rawOffsetParent","svgOffsetParent","currentNode","getContainingBlock","topLayer","elementClippingAncestors","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingElementAncestors","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getElementRects","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","isRTL","rectsAreEqual","autoUpdate","ancestorScroll","ancestorResize","elementResize","ResizeObserver","layoutShift","IntersectionObserver","referenceEl","ancestors","cleanupIo","onMove","timeoutId","io","_io","disconnect","elementRectForRootMargin","rootMargin","isFirstUpdate","handleObserve","intersectionRatio","_e","observe","observeMove","frameId","reobserveFrame","resizeObserver","firstEntry","unobserve","_resizeObserver","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","crossAxisMulti","mainAxis","crossAxis","convertValueToCoords","arrow","alignmentOffset","flip","_middlewareData$flip","initialPlacement","_evaluate2","checkMainAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","initialSideAxis","isBasePlacement","oppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","isStart","lr","rl","tb","bt","getSideList","getOppositeAxisPlacements","overflows","overflowsData","sides","mainAlignmentSide","getAlignmentSides","_middlewareData$flip2","_overflowsData$filter","nextPlacement","_overflowsData$","ignoreCrossAxisOverflow","hasInitialMainAxisOverflow","resetPlacement","_overflowsData$filter2","currentSideAxis","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","centerOffset","computePosition","platformWithCache","middleware","validMiddleware","statefulPlacement","resetCount","nextX","nextY","computePosition$1","getDPR","devicePixelRatio","roundByDPR","dpr","useLatestRef","offset$1","arrow$2","arrow$1","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","ARROW_DOWN","horizontalKeys","verticalKeys","SafeReact","serverHandoffComplete","genId","setId","useModernLayoutEffect","FloatingArrow","tipRadius","staticOffset","stroke","restStyle","_excluded3","_excluded4","clipPathId","setIsRTL","isVerticalSide","computedStaticOffset","computedStrokeWidth","halfStrokeWidth","svgX","svgY","isCustomShape","yOffsetProp","xOffsetProp","arrowX","arrowY","dValue","rotation","viewBox","clipPath","createEventEmitter","_map$get","_map$get2","FloatingNodeContext","FloatingTreeContext","useFloatingParentNodeId","useFloatingTree","useFloatingRootContext","onOpenChange","onOpenChangeProp","elementsProp","floatingId","dataRef","nested","positionReference","setPositionReference","useEffectEvent","openEvent","domReference","useFloating","nodeId","internalRootContext","rootContext","computedElements","_domReference","setDomReference","_setPositionReference","domReferenceRef","externalReference","externalFloating","whileElementsMounted","setData","isPositioned","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","useFloating$1","computedPositionReference","floatingContext","nodesRef","_extendStatics","__extends","__","_assign","__spreadArray","pack","ar","SuppressedError","KeyType","CalendarContainer","showTimeSelectOnly","showTime","ariaLabel","ClickOutsideWrapper","onClickOutside","containerRef","detectRef","ignoreClass","onClickOutsideRef","handleClickOutside","composed","composedPath","eventTarget","classList","useDetectClickOutside","getLocaleScope","newDate","strictParsing","refDate","localeObject","getLocaleObject","getDefaultLocale","formats_1","format_1","parsedDate","minDate","isValid$1","localeObj","safeDateFormat","hour","minute","second","getStartOfDay","getStartOfWeek","calendarStartDay","getStartOfMonth","getStartOfYear","getStartOfQuarter","getStartOfToday","getEndOfDay","getEndOfMonth","date1","date2","isSameYear$1","isSameMonth$1","isSameQuarter$1","isSameDay$1","isEqual$1","isDayInRange","startDate","endDate","__localeId__","localeSpec","__localeData__","getMonthInLocale","getMonthShortInLocale","isDayDisabled","maxDate","excludeDates","excludeDateIntervals","includeDates","includeDateIntervals","filterDate","isOutOfBounds","excludeDate","includeDate","isDayExcluded","isMonthDisabled","isMonthInRange","startDateYear","startDateMonth","endDateYear","endDateMonth","dayYear","isMonthYearDisabled","excludedDate","includedDate","isQuarterDisabled","isYearInRange","startYear","endYear","isYearDisabled","isQuarterInRange","startDateQuarter","endDateQuarter","isTimeInList","listTime","isTimeDisabled","excludeTimes","includeTimes","filterTime","isTimeInDisabledRange","minTime","maxTime","baseTime","monthDisabledBefore","monthDisabledAfter","yearDisabledBefore","yearDisabledAfter","getEffectiveMinDate","getEffectiveMaxDate","getHighLightDaysMap","highlightDates","defaultClassName","dateClasses","classNamesArr","arrOfDates","len_1","dateK","getHolidaysMap","holidayDates","holiday","dateObj","holidayName","classNamesObj","holidayNames","array1","array2","holidayNameArr","timesToInjectAfter","currentMultiplier","intervals","injectedTimes","injectedTime","injectedTimeValue","nextTime","addZero","getYearsPeriod","yearItemNumber","endPeriod","startPeriod","startOfMinute","getMidnightDate","dateWithoutTime","isDateBefore","isSpaceKeyDown","Space","InputTime","inputRef","onTimeChange","propDate","renderTimeInput","customTimeInput","timeInputLabel","Day","dayEl","handleClick","handleMouseEnter","handleOnKeyDown","Enter","isKeyboardSelected","disabledKeyboardNavigation","isSelectedDate","selectsMultiple","selectedDates","isSameDayOrWeek","preSelection","isExcluded","isStartOfWeek","isSameWeek","showWeekPicker","getHighLightedClass","dayStr","getHolidaysClass","holidays","isInRange","isInSelectingRange","selectsStart","selectsEnd","selectsRange","selectsDisabledDaysInRange","selectingDate","isSelectingRangeStart","isSelectingRangeEnd","isRangeStart","isRangeEnd","isWeekend","weekday","isAfterMonth","isBeforeMonth","isCurrentDay","isSelected","getClassNames","dayClassName","getDayOfWeekCode","getAriaLabel","ariaLabelPrefixWhenEnabled","ariaLabelPrefixWhenDisabled","getTitle","compareDt","getTabIndex","selectedDay","preSelectionDay","showWeekNumber","handleFocusDay","shouldFocusDay","preventScroll","renderDayContents","monthShowsDuplicateDaysEnd","monthShowsDuplicateDaysStart","usePointerEvent","onPointerEnter","inline","shouldFocusDayInline","isDayActiveElement","isDuplicateDay","WeekNumber","weekNumberEl","handleFocusWeekNumber","shouldFocusWeekNumber","isInputFocused","ariaLabelPrefix","weekNumber","isWeekDisabled","weekNumberClasses","Week","handleDayClick","onDayClick","handleDayMouseEnter","onDayMouseEnter","handleWeekClick","enabledWeekDay","processingDay","onWeekSelect","shouldCloseOnSelect","setOpen","formatWeekNumber","processingDate","renderDays","days","onClickAction","chooseDayAriaLabelPrefix","disabledDayAriaLabelPrefix","MONTH_COLUMNS_LAYOUT","MONTH_COLUMNS","grid","verticalNavigationOffset","getMonthColumnsLayout","showFourColumnMonthYearPicker","showTwoColumnMonthYearPicker","Month","MONTH_REFS","QUARTER_REFS","orderInDisplay","handleMouseLeave","isRangeStartMonth","isRangeStartQuarter","isRangeEndMonth","isRangeEndQuarter","isInSelectingRangeMonth","isSelectingMonthRangeStart","_month","isSelectingMonthRangeEnd","isInSelectingRangeQuarter","isWeekInMonth","isCurrentMonth","isCurrentQuarter","isSelectedMonth","isSelectMonthInList","selectedDate","isSelectedQuarter","renderWeeks","weeks","isFixedHeight","fixedHeight","breakAfterNextPush","currentWeekStart","isPreSelected","weekAriaLabelPrefix","showWeekNumbers","isFixedAndFinalWeek","isNonFixedAndOutOfMonth","peekNextMonth","onMonthClick","isMonthDisabledForLabelDate","labelDate","onMonthMouseEnter","handleMonthNavigation","newMonth","setPreSelection","handleKeyboardNavigation","monthColumnsLayout","getVerticalOffset","monthsGrid","calculateNewDateAndMonth","newCalculatedDate","newCalculatedMonth","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","eventKeyCopy","validDateFound","iterations","getNewDateAndMonth","onMonthKeyDown","handleOnMonthKeyDown","Tab","onQuarterClick","onQuarterMouseEnter","handleQuarterNavigation","newQuarter","onQuarterKeyDown","getMonthClassNames","monthClassName","_monthClassName","preSelectedMonth","isPreSelectedMonthDisabled","getQuarterTabIndex","preSelectedQuarter","isCurrentQuarterDisabled","getQuarterClassNames","getMonthContent","showFullMonthYearPicker","renderMonthContent","shortMonthText","fullMonthText","getQuarterContent","renderQuarterContent","shortQuarter","getQuarterShortInLocale","renderMonths","monthColumns","renderQuarters","showMonthYearPicker","showQuarterYearPicker","formattedAriaLabelPrefix","onPointerLeave","MonthDropdownOptions","renderOptions","monthNames","onCancel","MonthDropdown","dropdownVisible","renderSelectOptions","renderSelectMode","renderReadView","toggleDropdown","renderDropdown","renderScrollMode","renderedDropdown","useShortMonthInDropdown","dropdownMode","generateMonthYears","currDate","lastDate","MonthYearDropdownOptions","monthYearsList","monthYear","monthYearPoint","isSameMonthYear","dropdownClass","scrollableMonthYearDropdown","MonthYearDropdown","timePoint","onSelectChange","yearMonth","changedDate","Time","scrollToTheSelectedTime","centerLi","calcCenterPosition","monthRef","isSelectedTime","d1","d2","isDisabledTime","liClasses","timeClassName","injectTimes","renderTimes","activeDate","openToDate","sortedInjectTimes","minutesInDay","startOfTheNextDay","getHoursInDay","multiplier","timesToInject","timeToFocus","li","renderTimeCaption","showTimeCaption","timeCaption","todayButton","observeDatePickerHeightChanges","updateContainerHeight","listHeight","centerLiRef","Year","YEAR_REFS","updateFocusOnPaginate","refIndex","handleYearClick","handleYearNavigation","newYear","isCurrentYear","isSelectedYear","onYearClick","onYearKeyDown","leftOverOffset","getYearClassNames","yearClassName","getYearTabIndex","preSelected","isPreSelectedYearDisabled","getYearContent","renderYearContent","yearsList","onYearMouseEnter","onYearMouseLeave","this_1","clearSelectingDate","generateYears","noOfYear","YearDropdownOptions","selectedYear","minYear","maxYear","incrementYears","decrementYears","shiftYears","years","yearDropdownItemNumber","scrollableYearDropdown","dropdownRef","dropdownCurrent","dropdownCurrentChildren","selectedYearOptionEl","childEl","ariaSelected","YearDropdown","adjustDateOnChange","handleYearChange","onSelect","DROPDOWN_FOCUS_CLASSNAMES","monthContainer","setClickOutsideRef","handleDropdownFocus","testClassname","isDropdownSelect","onDropdownFocus","getDateInView","initialDate","increaseMonth","handleMonthChange","decreaseMonth","monthSelectedIn","handleMonthMouseLeave","onMonthMouseLeave","handleYearMouseEnter","handleYearMouseLeave","onYearChange","isRenderAriaLiveMessage","getEnabledPreSelectionDateForMonth","totalDays","preSelectedDate","dayIdx","enabledPreSelectionDate","handleCustomMonthChange","onMonthChange","handleMonthYearChange","changeYear","changeMonth","changeMonthYear","dayNames","weekLabel","weekDayName","formatWeekday","weekDayClassName","formatWeekDay","formatFunc","getFormattedWeekdayInLocale","useWeekdaysShort","getWeekdayShortInLocale","getWeekdayMinInLocale","decreaseYear","showYearPicker","renderPreviousButton","renderCustomHeader","allPrevDaysDisabled","monthsShown","monthsToSubtract","showPreviousMonths","fromMonthDate","minDateYear","yearsDisabledBefore","previousQuarter","quarterDisabledBefore","forceShowMonthNavigation","showDisabledMonthNavigation","clickHandler","isForYear","previousMonthButtonLabel","_f","previousYearButtonLabel","_g","previousMonthAriaLabel","_j","previousYearAriaLabel","increaseYear","renderNextButton","allNextDaysDisabled","maxDateYear","yearsDisabledAfter","nextQuarter","quarterDisabledAfter","showTimeSelect","nextMonthButtonLabel","nextYearButtonLabel","nextMonthAriaLabel","nextYearAriaLabel","renderCurrentMonth","showYearDropdown","showMonthDropdown","showMonthYearDropdown","renderYearDropdown","overrideHide","renderMonthDropdown","renderMonthYearDropdown","handleTodayButtonClick","renderTodayButton","renderDefaultHeader","monthDate","onFocus","headerArgs","prevMonthButtonDisabled","nextMonthButtonDisabled","prevYearButtonDisabled","nextYearButtonDisabled","showDayNames","customHeaderCount","renderYearHeader","renderHeader","monthList","monthsToAdd","monthKey","monthAriaLabelPrefix","handleOnDayKeyDown","renderYears","renderTimeSection","timeFormat","timeIntervals","renderInputTimeSection","showTimeInput","renderAriaLiveRegion","ariaLiveMessage","renderChildren","assignMonthContainer","hasMonthChanged_1","Container","outsideClickIgnoreClass","CalendarIcon","defaultClass","iconElement_1","xmlns","Portal","portalRoot","portalHost","getElementById","portalId","focusableFilter","HTMLAnchorElement","TabLoop","getTabChildren","tabLoopRef","handleFocusStart","tabChildren","handleFocusEnd","enableTabLoop","PopperComponent","hidePopper","wrapperClassName","popperComponent","targetComponent","popperOnKeyDown","popperProps","showArrow","popper","arrowRef","popperContainer","wrapperClasses","PopperComponent$1","floatingProps","popperPlacement","flip$1","popperModifiers","componentProps","INPUT_ERR_1","getPreSelection","modifyHolidays","accumulator","calcInitialState","defaultPreSelection","boundedPreSelection","startOpen","preventFocus","inputValue","focused","resetHiddenStatus","setHiddenStatus","setHiddenStateOnVisibilityHidden","visibilityState","clearPreventFocusTimeout","preventFocusTimeout","setFocus","setBlur","blur","cancelFocusInput","deferBlur","skipSetBlur","lastPreSelectChange","PRESELECT_CHANGE_VIA_NAVIGATE","inputOk","isCalendarOpen","readOnly","handleFocus","isAutoReFocus","isOpenAllowed","preventOpenOnFocus","sendFocusBackToInput","inputFocusTimeout","deferFocusInput","handleBlur","withPortal","onBlur","handleCalendarClickOutside","allArgs","onChangeRaw","HTMLInputElement","PRESELECT_CHANGE_VIA_INPUT","valueStart","valueEnd","startDateNew","endDateNew","startChanged","endChanged","setSelected","handleSelect","showDateSelect","swapRange","keepInput","allowSameDay","focusSelectedMonth","hasStartRange","isRangeFilled","nextDates","hasMinDate","hasMaxDate","isValidDateSelection","dateStartOfDay","minDateStartOfDay","maxDateEndOfDay","toggleCalendar","handleTimeChange","onInputClick","onInputKeyDown","selectorString","selectedItem","Escape","onInputError","onPortalKeyDown","onDayKeyDown","isShiftKeyActive","calculateNewDate","PageUp","PageDown","Home","End","getEndOfWeek","newSelection","getNewDate","prevMonth","prevYear","onPopperKeyDown","onClearClick","closeOnScroll","renderCalendar","dateFormatCalendar","calendarClassName","calendarContainer","longDateFormat","renderDateInput","customInput","customInputRef","formattedStartDate","formattedEndDate","safeDateRangeFormat","formattedFirstDate","formattedSecondDate","extraDatesCount","safeMultipleDatesFormat","placeholderText","autoComplete","ariaDescribedBy","ariaInvalid","ariaLabelledBy","ariaRequired","renderClearButton","isClearable","clearButtonTitle","clearButtonClassName","ariaLabelClose","showPopperArrow","excludeScrollbar","toggleCalendarOnIconClick","onCalendarOpen","onCalendarClose","renderInputContainer","showIcon","calendarIconClassname","calendarIconClassName","portalContainer","popperClassName","Administer","users","setUsers","discounts","setDiscounts","currentDiscount","setCurrentDiscount","searchKey","setSearchKey","newAnnouncement","setNewAnnouncement","newDiscount","setNewDiscount","discountType","setStartDate","setEndDate","setActiveTab","fetchAllUsers","_response$data","getAllUsers","formattedUsers","user","lastLogin","handleChangeAuthority","newAuthority","changeUsername","updateUserAuthority","fetchAllDiscounts","fetchCurrentDiscount","_response$data5","_response$data$data2","_response$data6","getCurrentDiscount","handleAddDiscount","formatDateToISO","discountData","_response$data7","addDiscount","isEndTime","pad","handleDeleteDiscount","_response$data8","deleteDiscount","formatDateTime","translateDiscountType","fetchAllAnnouncements","_Fragment","_response$data2","_response$data3","searchUsers","handleReset","postAnnouncement","removeItem","isAuthenticated","setIsAuthenticated","handleLogout","AuthForm","Dashboard","Setting","TorrentDetail","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","App","reportWebVitals"],"sourceRoot":""}
\ No newline at end of file
