From 23c44415904e328803900e6fd1ddd4865aafb68e Mon Sep 17 00:00:00 2001 From: wyp311395 Date: Wed, 16 Oct 2024 17:08:01 +0800 Subject: [PATCH 1/6] test githook --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02c3a39..46d7f25 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [**简体中文**](./README_ZH.md)|[**HuggingFace**](https://huggingface.co/codefuse-ai)|[**ModelScope**](https://modelscope.cn/organization/codefuse-ai) -Hello! This is CodeFuse! +Hello!! This is CodeFuse! CodeFuse's mission is to develop large-scale code language models (Code LLMs) specifically designed to support the entire software development lifecycle, covering key stages such as design, requirements, coding, testing, deployment, operations, and more. We are committed to creating innovative solutions to make the process of software development as smooth as silk for developers. From 8e2a54a536845773541c8053dc44d22df1171998 Mon Sep 17 00:00:00 2001 From: wyp311395 Date: Thu, 17 Oct 2024 13:40:13 +0800 Subject: [PATCH 2/6] feat: add blog contents --- .dumi/theme/constants/index.ts | 1 + .dumi/theme/layouts/DocLayout/index.less | 28 - .dumi/theme/layouts/DocLayout/index.tsx | 13 +- .dumi/theme/slots/AboutDocs/index.less | 2 - .dumi/theme/slots/AutomatedTesting/index.less | 11 +- .dumi/theme/slots/AutomatedTesting/index.tsx | 9 +- .dumi/theme/slots/BlogDetails/index.less | 383 ++++++ .dumi/theme/slots/BlogDetails/index.tsx | 34 + .dumi/theme/slots/Blogs/index.less | 300 +++++ .dumi/theme/slots/Blogs/index.tsx | 239 ++++ .dumi/theme/slots/CodeAnalysis/index.less | 4 + .dumi/theme/slots/CodeAnalysis/index.tsx | 8 +- .dumi/theme/slots/CodeGeneration/index.less | 29 +- .dumi/theme/slots/CodeGeneration/index.tsx | 19 +- .dumi/theme/slots/ColorSwitch/index.less | 1 - .dumi/theme/slots/ColorSwitch/index.tsx | 15 +- .dumi/theme/slots/DevOps/index.less | 6 + .dumi/theme/slots/DevOps/index.tsx | 5 +- .dumi/theme/slots/Header/index.less | 38 +- .dumi/theme/slots/Header/index.tsx | 23 +- .dumi/theme/slots/Hero/index.less | 69 +- .dumi/theme/slots/Hero/index.tsx | 16 +- .dumi/theme/slots/HeroTitle/index.less | 2 +- .../slots/IntelligentInference/index.less | 5 + .../slots/IntelligentInference/index.tsx | 10 +- .dumi/theme/slots/LangSwitch/index.tsx | 16 +- .dumi/theme/slots/LearnMore/index.less | 36 + .dumi/theme/slots/LearnMore/index.tsx | 23 + .dumi/theme/slots/Logo/index.less | 1 + .dumi/theme/slots/Navbar/index.tsx | 8 +- .../slots/PerformanceEvaluation/index.less | 13 + .../slots/PerformanceEvaluation/index.tsx | 10 +- .dumi/theme/slots/SearchBar/index.less | 40 +- .dumi/theme/slots/SearchBar/index.tsx | 8 +- .dumi/theme/slots/SearchResult/index.less | 174 +++ .dumi/theme/slots/SearchResult/index.tsx | 229 ++++ .dumi/theme/slots/Toc/index.less | 2 +- .dumi/theme/slots/Toc/index.tsx | 45 +- .dumi/theme/styles/variables.less | 2 +- .dumi/tsconfig.json | 10 +- .dumirc.ts | 4 +- .gitignore | 3 +- docs/blogDetails/001.en-US.md | 7 + docs/blogDetails/001.zh-CN.md | 54 + docs/blogDetails/20231101.en-US.md | 7 + docs/blogDetails/20231101.zh-CN.md | 7 + docs/blogDetails/20231211.en-US.md | 7 + docs/blogDetails/20231211.zh-CN.md | 62 + docs/blogDetails/20231220.en-US.md | 7 + docs/blogDetails/20231220.zh-CN.md | 263 ++++ docs/blogDetails/20240119.en-US.md | 7 + docs/blogDetails/20240119.zh-CN.md | 93 ++ docs/blogDetails/20240123.en-US.md | 7 + docs/blogDetails/20240123.zh-CN.md | 200 +++ docs/blogDetails/20240423.en-US.md | 136 ++ docs/blogDetails/20240423.zh-CN.md | 169 +++ docs/blogDetails/20240614.en-US.md | 7 + docs/blogDetails/20240614.zh-CN.md | 606 +++++++++ docs/blogDetails/20240703.en-US.md | 7 + docs/blogDetails/20240703.zh-CN.md | 103 ++ docs/blogDetails/20240705.en-US.md | 7 + docs/blogDetails/20240705.zh-CN.md | 143 ++ docs/blogDetails/20240706.en-US.md | 7 + docs/blogDetails/20240706.zh-CN.md | 770 +++++++++++ docs/blogDetails/20240805.en-US.md | 7 + docs/blogDetails/20240805.zh-CN.md | 1172 +++++++++++++++++ docs/blogDetails/20240807.en-US.md | 7 + docs/blogDetails/20240807.zh-CN.md | 143 ++ docs/blogDetails/20240820.en-US.md | 7 + docs/blogDetails/20240820.zh-CN.md | 132 ++ docs/blogDetails/20240914.en-US.md | 7 + docs/blogDetails/20240914.zh-CN.md | 150 +++ docs/blogDetails/blogDeatils.zh-CN.md | 7 + docs/blogDetails/blogDetails.en-US.md | 7 + docs/blogs/blogs.en-US.md | 43 + docs/blogs/blogs.zh-CN.md | 103 ++ .../CodeFuse-MFT-VLM/main/mftvlm.zh-CN.md | 257 +++- docs/index.en-US.md | 14 +- docs/index.zh-CN.md | 12 +- docs/publication/publication.en-US.md | 2 +- package.json | 2 + tsconfig.json | 8 +- 82 files changed, 6430 insertions(+), 220 deletions(-) create mode 100644 .dumi/theme/slots/BlogDetails/index.less create mode 100644 .dumi/theme/slots/BlogDetails/index.tsx create mode 100644 .dumi/theme/slots/Blogs/index.less create mode 100644 .dumi/theme/slots/Blogs/index.tsx create mode 100644 .dumi/theme/slots/LearnMore/index.less create mode 100644 .dumi/theme/slots/LearnMore/index.tsx create mode 100644 .dumi/theme/slots/SearchResult/index.less create mode 100644 .dumi/theme/slots/SearchResult/index.tsx create mode 100644 docs/blogDetails/001.en-US.md create mode 100644 docs/blogDetails/001.zh-CN.md create mode 100644 docs/blogDetails/20231101.en-US.md create mode 100644 docs/blogDetails/20231101.zh-CN.md create mode 100644 docs/blogDetails/20231211.en-US.md create mode 100644 docs/blogDetails/20231211.zh-CN.md create mode 100644 docs/blogDetails/20231220.en-US.md create mode 100644 docs/blogDetails/20231220.zh-CN.md create mode 100644 docs/blogDetails/20240119.en-US.md create mode 100644 docs/blogDetails/20240119.zh-CN.md create mode 100644 docs/blogDetails/20240123.en-US.md create mode 100644 docs/blogDetails/20240123.zh-CN.md create mode 100644 docs/blogDetails/20240423.en-US.md create mode 100644 docs/blogDetails/20240423.zh-CN.md create mode 100644 docs/blogDetails/20240614.en-US.md create mode 100644 docs/blogDetails/20240614.zh-CN.md create mode 100644 docs/blogDetails/20240703.en-US.md create mode 100644 docs/blogDetails/20240703.zh-CN.md create mode 100644 docs/blogDetails/20240705.en-US.md create mode 100644 docs/blogDetails/20240705.zh-CN.md create mode 100644 docs/blogDetails/20240706.en-US.md create mode 100644 docs/blogDetails/20240706.zh-CN.md create mode 100644 docs/blogDetails/20240805.en-US.md create mode 100644 docs/blogDetails/20240805.zh-CN.md create mode 100644 docs/blogDetails/20240807.en-US.md create mode 100644 docs/blogDetails/20240807.zh-CN.md create mode 100644 docs/blogDetails/20240820.en-US.md create mode 100644 docs/blogDetails/20240820.zh-CN.md create mode 100644 docs/blogDetails/20240914.en-US.md create mode 100644 docs/blogDetails/20240914.zh-CN.md create mode 100644 docs/blogDetails/blogDeatils.zh-CN.md create mode 100644 docs/blogDetails/blogDetails.en-US.md create mode 100644 docs/blogs/blogs.en-US.md create mode 100644 docs/blogs/blogs.zh-CN.md diff --git a/.dumi/theme/constants/index.ts b/.dumi/theme/constants/index.ts index 8277afc..78d8744 100644 --- a/.dumi/theme/constants/index.ts +++ b/.dumi/theme/constants/index.ts @@ -29,3 +29,4 @@ export const NavbarEnumsEn = { 'Overview': '/docs/about/overview', 'AboutDocs':'/aboutDocs/aboutdocs' } + diff --git a/.dumi/theme/layouts/DocLayout/index.less b/.dumi/theme/layouts/DocLayout/index.less index bd8d349..c80ef97 100644 --- a/.dumi/theme/layouts/DocLayout/index.less +++ b/.dumi/theme/layouts/DocLayout/index.less @@ -10,7 +10,6 @@ body { background-color: @c-site-bg; @{dark-selector} & { - // background-color: @c-site-bg-dark; background: #f8f9fb; } } @@ -175,10 +174,6 @@ body { color: #b5b5b5; } - // .dumi-default-toc>li>a.active { - // color: #fff !important; - // } - .dumi-default-toc>li>a { color: #b5b5b5; } @@ -227,17 +222,6 @@ body { } } - - // .ant-select-outlined:not(.ant-select-customize-input) .ant-select-selector { - // background: #070b13; - // } - - // .ant-menu-light .ant-menu-item { - // color: #b5b5b5; - // } - .dumi-default-navbar .ant-menu-light { - - } .ant-menu-light:not(.ant-menu-horizontal) .ant-menu-submenu-title:active { background-color: #181d29; @@ -247,18 +231,6 @@ body { } - // .ant-menu-light:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):hover { - // background-color: #181d29; - // color: #fff; - // } - - // .ant-select-single .ant-select-selector { - // color: #fff; - // } - - // .ant-select .ant-select-arrow { - // color: #fff; - // } .ant-menu-light .ant-menu-submenu-title { color: #f0f4ff; diff --git a/.dumi/theme/layouts/DocLayout/index.tsx b/.dumi/theme/layouts/DocLayout/index.tsx index 15adff9..e89821e 100644 --- a/.dumi/theme/layouts/DocLayout/index.tsx +++ b/.dumi/theme/layouts/DocLayout/index.tsx @@ -11,7 +11,6 @@ import { } from 'dumi'; import Content from 'dumi/theme/slots/Content'; import ContentFooter from 'dumi/theme/slots/ContentFooter'; -import Features from 'dumi/theme/slots/Features'; import Footer from 'dumi/theme/slots/Footer'; import Header from 'dumi/theme/slots/Header'; import Hero from 'dumi/theme/slots/Hero'; @@ -22,6 +21,8 @@ import './index.less'; import AboutDocs from 'dumi/theme/slots/AboutDocs'; import Foot from 'dumi/theme/slots/Foot'; import Publication from 'dumi/theme/slots/Publication'; +import Blogs from 'dumi/theme/slots/Blogs'; +import BlogDetails from 'dumi/theme/slots/BlogDetails'; const DocLayout: FC = () => { const intl = useIntl(); @@ -35,7 +36,9 @@ const DocLayout: FC = () => { const doc = pathname.includes("/docs"); const showSidebar = fm.sidebar !== false && sidebar?.length > 0; const publication = pathname.split("/").pop(); + const blog = pathname.split("/").pop(); const com = pathname.includes("/contribution"); + const blogDet = pathname.includes("/blogDetails"); // handle hash change or visit page hash after async chunk loaded useEffect(() => { @@ -78,12 +81,19 @@ const DocLayout: FC = () => {
+ { + blogDet && + } { about === 'aboutdocs' && } + { + blog === 'blogs' && + } { publication === 'publication' && } + { com ?
{/* 文档页两侧展示 */} @@ -95,7 +105,6 @@ const DocLayout: FC = () => { {fm.toc === 'content' && (
- {/*

大纲

*/}
)} diff --git a/.dumi/theme/slots/AboutDocs/index.less b/.dumi/theme/slots/AboutDocs/index.less index 36d9669..00867ad 100644 --- a/.dumi/theme/slots/AboutDocs/index.less +++ b/.dumi/theme/slots/AboutDocs/index.less @@ -24,7 +24,6 @@ height: 380px; width: 100%; box-sizing: border-box; - // background: linear-gradient(to top, #30cfd0 0%, #330867 100%); background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*wCCKR7plqDMAAAAAAAAAAAAADlHYAQ/original'); background-repeat: no-repeat; background-size: cover; @@ -34,7 +33,6 @@ justify-content: center; flex-direction: column; - .bannerContent { padding: 0px 24px; margin-top: 30px; diff --git a/.dumi/theme/slots/AutomatedTesting/index.less b/.dumi/theme/slots/AutomatedTesting/index.less index 11839c5..2b1c9ad 100644 --- a/.dumi/theme/slots/AutomatedTesting/index.less +++ b/.dumi/theme/slots/AutomatedTesting/index.less @@ -2,12 +2,6 @@ margin-top: 180px; display: flex; justify-content: center; - position: relative; - background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*C8E9RZGf5eEAAAAAAAAAAAAADlHYAQ/original'); - background-repeat: no-repeat; - background-size: cover; - background-position: center; - .automatedTesting-center { display: flex; @@ -54,6 +48,11 @@ color: #ffffff; letter-spacing: 1px; opacity: 0.8; + + @{dark-selector} & { + font-size: 16px; + color: #171616; + } } .buttom { diff --git a/.dumi/theme/slots/AutomatedTesting/index.tsx b/.dumi/theme/slots/AutomatedTesting/index.tsx index 7bbafd0..9849237 100644 --- a/.dumi/theme/slots/AutomatedTesting/index.tsx +++ b/.dumi/theme/slots/AutomatedTesting/index.tsx @@ -1,4 +1,4 @@ -import { useRouteMeta,useLocale } from 'dumi'; +import { useRouteMeta, useLocale, usePrefersColor } from 'dumi'; import './index.less'; import React, { type FC } from 'react'; import { SwapRightOutlined } from '@ant-design/icons'; @@ -6,11 +6,12 @@ import { SwapRightOutlined } from '@ant-design/icons'; const AutomatedTesting: FC = () => { const { frontmatter } = useRouteMeta(); const locale = useLocale(); - + const [color] = usePrefersColor(); + if (!('AutomatedTesting' in frontmatter)) return null; return
- +
{frontmatter.AutomatedTesting.title} @@ -20,7 +21,7 @@ const AutomatedTesting: FC = () => { {frontmatter.AutomatedTesting.description}
{ window.open(frontmatter.AutomatedTesting.link) }}> - {locale.id==='zh-CN'?'了解更多':'Learn more'} + {locale.id === 'zh-CN' ? '了解更多' : 'Learn more'}
diff --git a/.dumi/theme/slots/BlogDetails/index.less b/.dumi/theme/slots/BlogDetails/index.less new file mode 100644 index 0000000..22fa0a2 --- /dev/null +++ b/.dumi/theme/slots/BlogDetails/index.less @@ -0,0 +1,383 @@ +@import (reference) '.dumi/theme/styles/variables.less'; + +.@{prefix}-blogDetail { + margin: -@s-header-height auto 0 auto; + // margin: 0 auto ; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + @media @mobile { + margin-top: -@s-header-height-m - 20; + padding-top: 160px; + height: 660px; + } + + +* { + position: relative; + } + + .@{prefix}-blogDetail-banner { + position: relative; + padding-top: 60px; + height: 380px; + width: 100%; + box-sizing: border-box; + background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*H68hT641jX0AAAAAAAAAAAAADlHYAQ/original'); + background-repeat: no-repeat; + background-size: cover; + background-position: center; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + + @{dark-selector} & { + background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*mm_8QaNji70AAAAAAAAAAAAADlHYAQ/original'); + } + + .bannerCon { + padding: 0px 24px; + min-width: 1100px; + display: flex; + flex-direction: column; + justify-content: center; + + .time { + font-size: 22px; + color: #fff5f5; + letter-spacing: 0.68px; + margin-bottom: 21px; + font-weight: 00; + + @{dark-selector} & { + color: #5d5d5d; + } + } + + .title { + font-size: 28px; + color: #ffffff; + letter-spacing: 0.94px; + font-weight: 600; + + @{dark-selector} & { + color: #171616; + } + } + } + } + + .@{prefix}-blogDetail-content { + max-width: 1280px; + margin-top: 80px; + display: flex; + flex-direction: row-reverse; + padding: 0 20px 0 150px; + + .dumi-default-article { + display: flex; + flex: 1 1; + flex-direction: column; + min-width: 0; + max-width: 100%; + box-sizing: border-box; + } + + >main { + display: flex; + align-items: flex-start; + padding: 0 24px; + box-sizing: border-box; + + >section { + flex: 1; + max-width: 100%; + } + + >.@{prefix}-doc-layout-toc-wrapper { + position: sticky; + top: @s-header-height; + max-width: @s-sidebar-width; + margin-inline-start: 24px; + max-height: 80vh; + overflow: auto; + overscroll-behavior: contain; + -webkit-overflow-scrolling: touch; + + @media @mobile { + display: none; + } + + >h4 { + margin: 0 0 20px; + color: @c-text-note; + font-size: 15px; + line-height: 1; + + @{dark-selector} & { + color: @c-text-note-dark; + } + } + } + + .dumi-default-article .dumi-default-content:not([data-no-sidebar]) { + background-color: #070b13; + box-shadow: 0px 2px 4px 0px #000000ff; + + @{dark-selector} & { + background: #ffffff; + box-shadow: 0px 2px 4px 0px rgb(249, 249, 249); + } + } + + .markdown { + font-size: 16px; + color: #e4e9ec; + line-height: 30px; + letter-spacing: 0.61px; + font-weight: 300; + margin: 0 auto; + // line-height: 1.5; + + @{dark-selector} & { + font-size: 18px; + color: #1b1b1b; + line-height: 30px; + } + + a { + color: #9999FF; + } + } + + .markdown th { + background-color: #828287; + + @{dark-selector} & { + background-color: #bcbec1; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } + } + + .dumi-default-content-tool { + color: #b5b5b5; + } + + .dumi-default-content-tool>dl dd>a { + color: #b5b5b5; + } + + .dumi-default-toc>li>a { + color: #b5b5b5; + } + + .dumi-default-source-code { + background: #2c2d2e; + border-radius: 4px; + + @{dark-selector} & { + background-color: #fbfcfd; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } + } + + .markdown *:not(pre) code { + background: #2c2d2e; + + @{dark-selector} & { + background: #f0f4f8; + } + } + + + .dumi-default-source-code>pre.prism-code { + color: #e4e9ec; + background: #2c2d2e; + + @{dark-selector} & { + color: #383a42; + background-color: #fbfcfd; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } + } + + .dumi-default-source-code-copy { + background: #2c2d2e; + } + + .dumi-default-article .dumi-default-content:not([data-no-sidebar]) { + padding: 10px 18px 48px 28px; + + // @{dark-selector} & { + + // padding: 10px 18px 48px 28px; + // } + } + + .ant-menu-light:not(.ant-menu-horizontal) .ant-menu-submenu-title:active { + background-color: #181d29; + + @{dark-selector} & { + background-color: #f0f4ff; + } + + } + + .ant-menu-light .ant-menu-submenu-title { + color: #f0f4ff; + + @{dark-selector} & { + color: #000; + } + } + + .ant-menu-light .ant-menu-item { + color: #f0f4ff; + + @{dark-selector} & { + color: #000; + } + } + + .ant-menu-light .ant-menu-item-selected { + background-color: #181d29; + // color: #fff; + color: #000; + + @{dark-selector} & { + background-color: #f0f4ff; + color: #000; + } + + } + + .ant-menu-light:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):active { + background-color: #181d29; + + @{dark-selector} & { + background-color: #f0f4ff; + } + + } + } + + } + + .dumi-default-article .dumi-default-content:not([data-no-sidebar]) { + background-color: #070b13; + box-shadow: 0px 2px 4px 0px #000000ff; + + @{dark-selector} & { + background: #ffffff; + box-shadow: 0px 2px 4px 0px rgb(249, 249, 249); + } + } + + .markdown { + font-size: 16px; + color: #e4e9ec; + line-height: 30px; + letter-spacing: 0.61px; + font-weight: 300; + margin: 0 auto; + // line-height: 1.5; + + @{dark-selector} & { + font-size: 18px; + color: #1b1b1b; + line-height: 30px; + } + + p { + font-size: 16px; + margin: 0; + padding: 0; + letter-spacing: 0.61px; + line-height: 30px; + font-weight: 300; + } + + a { + color: #9999FF; + } + } + + .markdown th { + background-color: #828287; + + @{dark-selector} & { + background-color: #bcbec1; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } + } + + .dumi-default-content-tool { + color: #b5b5b5; + } + + .dumi-default-content-tool>dl dd>a { + color: #b5b5b5; + } + + .dumi-default-toc>li>a { + color: #b5b5b5; + } + + .dumi-default-source-code { + background: #2c2d2e; + border-radius: 4px; + + @{dark-selector} & { + background-color: #fbfcfd; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } + } + + .markdown *:not(pre) code { + background: #2c2d2e; + + @{dark-selector} & { + background: #f0f4f8; + } + } + + + .dumi-default-source-code>pre.prism-code { + color: #e4e9ec; + background: #2c2d2e; + + @{dark-selector} & { + color: #383a42; + background-color: #fbfcfd; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } + } + + .dumi-default-source-code-copy { + background: #2c2d2e; + } + + .dumi-default-article .dumi-default-content:not([data-no-sidebar]) { + padding: 10px 18px 48px 28px; + + + @{dark-selector} & { + padding: 55px; + } + } + + .markdown:not(:lang(zh)):not(:lang(ja)):not(:lang(kr)), + .markdown:not(:lang(zh)) { + letter-spacing: 0.61px; + } + +} diff --git a/.dumi/theme/slots/BlogDetails/index.tsx b/.dumi/theme/slots/BlogDetails/index.tsx new file mode 100644 index 0000000..a5fbdd6 --- /dev/null +++ b/.dumi/theme/slots/BlogDetails/index.tsx @@ -0,0 +1,34 @@ +import { useRouteMeta, useOutlet } from 'dumi'; +import React, { type FC } from 'react'; +import Content from 'dumi/theme/slots/Content'; +import './index.less'; +import Toc from 'dumi/theme/slots/Toc'; + +const BlogDetails: FC = () => { + const outlet = useOutlet(); + const { frontmatter: fm } = useRouteMeta(); + const { frontmatter } = useRouteMeta(); + return ( +
+
+
+
{frontmatter.time}
+
{frontmatter.title}
+
+
+
+ {fm.toc === 'content' && ( +
+
+ +
+
+ )} + + {
{outlet}
} +
+
+
+ ); +}; +export default BlogDetails; diff --git a/.dumi/theme/slots/Blogs/index.less b/.dumi/theme/slots/Blogs/index.less new file mode 100644 index 0000000..33bb54a --- /dev/null +++ b/.dumi/theme/slots/Blogs/index.less @@ -0,0 +1,300 @@ +@import (reference) '.dumi/theme/styles/variables.less'; + +.@{prefix}-blogs { + margin: -@s-header-height auto 0 auto; + // margin: 0 auto ; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + @media @mobile { + margin-top: -@s-header-height-m - 20; + padding-top: 160px; + height: 660px; + } + + +* { + position: relative; + } + + .banner { + position: relative; + padding-top: 30px; + height: 380px; + width: 100%; + box-sizing: border-box; + background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*H68hT641jX0AAAAAAAAAAAAADlHYAQ/original'); + background-repeat: no-repeat; + background-size: cover; + background-position: center; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + + @{dark-selector} & { + background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*mm_8QaNji70AAAAAAAAAAAAADlHYAQ/original'); + } + + .bannerContent { + padding: 0px 24px; + margin-top: 30px; + width: 900px; + color: #f8f9fa; + font-size: 2.7rem; + display: flex; + justify-content: center; + + img { + width: 150%; + } + } + } + + .link { + display: flex; + flex-direction: row; + justify-content: left; + align-items: center; + margin-top: 20px; + font-size: 16px; + color: #ffffff; + letter-spacing: 0.5px; + font-weight: 500; + } + + .content { + margin-top: 67px; + width: 1200px; + + .ant-tabs { + padding: 0 40px; + color: #ffffff; + } + + .ant-tabs .ant-tabs-tab { + color: #bfbfbf; + font-size: 16px; + + @{dark-selector} & { + color: #8a909a; + } + } + + .ant-tabs-top>.ant-tabs-nav::before { + border: 1px solid #3d3d53; + + @{dark-selector} & { + border: 1px solid #cccccc; + } + } + + .ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn { + color: #fff; + font-size: 16px; + + @{dark-selector} & { + color: #171616; + } + + } + + .ant-tabs .ant-tabs-ink-bar { + background-color: #5c6cf7; + } + + .ant-list-split.ant-list-something-after-last-item .ant-spin-container>.ant-list-items>.ant-list-item:last-child { + border-block-end: 1px solid #3d3d53; + + @{dark-selector} & { + border-block-end: 1px solid #cccccc; + } + } + + .list { + .item { + display: flex; + flex-direction: column; + align-items: unset; + padding: 32px 0; + border-bottom: 1px solid #3d3d53; + + @{dark-selector} & { + border-bottom: 1px solid #cccccc; + } + + .listTime { + font-size: 18px; + color: #67686e; + letter-spacing: 0.5px; + } + + .listTitle { + font-size: 24px; + color: #ffffff; + letter-spacing: 0.7px; + font-weight: 600; + + @{dark-selector} & { + color: #171616; + } + } + + .listDesc { + min-height: 90px; + font-size: 16px; + color: #fff5f5; + line-height: 30px; + margin: 13px 0 26px 0; + + @{dark-selector} & { + color: #1b1b1b; + } + } + } + + .ant-pagination .ant-pagination-item-active { + background-color: #262628; + border-radius: 3px; + + @{dark-selector} & { + background-color: #fff; + } + } + + .ant-pagination .ant-pagination-item-active { + border-color: #5c6cf7; + + @{dark-selector} & { + background-color: #fff; + border: 1px solid #b5b5b5; + border-radius: 3px; + } + } + + .ant-pagination .ant-pagination-item-active a { + color: #fff; + background-color: #5c6cf7; + + @{dark-selector} & { + background: #dee2fd; + border-radius: 3px; + } + } + + .ant-pagination .ant-pagination-item { + background-color: #262628; + border-radius: 3px; + color: #fff; + + @{dark-selector} & { + background-color: transparent; + border: 1px solid #b5b5b5; + } + } + + .ant-pagination .ant-pagination-item a { + color: #fff; + + @{dark-selector} & { + color: #5d5d5d; + } + } + + .ant-pagination .ant-pagination-disabled .ant-pagination-item-link { + background-color: #262628; + + @{dark-selector} & { + color: #b5b5b5; + background-color: transparent; + border: 1px solid #b5b5b5; + } + } + + .ant-pagination .ant-pagination-next .ant-pagination-item-link { + background-color: #262628; + color: #fff; + + @{dark-selector} & { + background-color: transparent; + border: 1px solid #b5b5b5; + color: #5d5d5d; + } + } + + .ant-pagination .ant-pagination-disabled .ant-pagination-item-link { + color: #bfbfbf; + + @{dark-selector} & { + background-color: transparent; + border: 1px solid #b5b5b5; + color: #b5b5b5; + } + } + + .ant-pagination .ant-pagination-next button { + color: #fff; + } + + .ant-pagination .ant-pagination-prev .ant-pagination-item-link { + background-color: #262628; + color: #bfbfbf; + + @{dark-selector} & { + color: #5d5d5d; + border: 1px solid #b5b5b5; + background-color: transparent; + } + } + + .ant-list-pagination { + margin-top: 60px; + } + } + + .slot { + display: flex; + color: #bfbfbf; + + .ant-btn { + padding: 4px 10px; + } + + .correct { + cursor: pointer; + color: #a8abff; + font-size: 16px; + + @{dark-selector} & { + color: #5c6cf7; + } + } + + .inverted { + cursor: pointer; + color: #bfbfbf; + font-size: 16px; + } + } + } + + p { + font-weight: 500; + text-align: center; + line-height: 72px; + margin-top: 0px; + font-size: 36px; + color: #ffffff; + letter-spacing: 1.21px; + + @{dark-selector} & { + color: @c-text-secondary-dark; + } + + @media @mobile { + font-size: 16px; + } + } +} diff --git a/.dumi/theme/slots/Blogs/index.tsx b/.dumi/theme/slots/Blogs/index.tsx new file mode 100644 index 0000000..acbfdde --- /dev/null +++ b/.dumi/theme/slots/Blogs/index.tsx @@ -0,0 +1,239 @@ +import { useRouteMeta, usePrefersColor, useLocale } from 'dumi'; +import React, { type FC, useMemo, useState } from 'react'; +import './index.less'; +import { Tabs, Button, List, Pagination } from 'antd'; +import type { TabsProps } from 'antd'; +import LearnMore from '../LearnMore'; + +type MyTabName = { + [key: string]: any; +}; +const SortList = (list: any, seq: string) => { + if (list?.length > 0) { + return seq === 'correct' ? list?.sort((a: any, b: any) => new Date(b?.time).getTime() - new Date(a?.time)?.getTime()) : list?.sort((a: any, b: any) => new Date(b?.time).getTime() - new Date(a?.time)?.getTime()); + }else { + return ''; + } +} +const Blogs: FC = () => { + const [color] = usePrefersColor(); + const locale = useLocale(); + const { frontmatter } = useRouteMeta(); + const [isCorrectClicked, setIsCorrectClicked] = useState(''); + const [isinvertedClicked, setIsinvertedClicked] = useState(''); + const [publish, setPublish] = useState(SortList(frontmatter?.publish, 'correct'));//发布 + const [develop, setDevelop] = useState(SortList(frontmatter?.develop, 'correct'));//开发 + const [products, setProducts] = useState(SortList(frontmatter?.products, 'correct'));//产品 + const [use, setUse] = useState(SortList(frontmatter?.use, 'correct'));//使用 + const [eventConsultation, setEventConsultation] = useState(SortList(frontmatter?.EventConsultation, 'correct'));//使用 + const [all, setAll] = useState(SortList(publish?.concat(develop, products, use), 'correct'));//全部 + const [tabKey, setTabKey] = useState('all'); + const tabName: MyTabName = { + publish: setPublish, + develop: setDevelop, + products: setProducts, + use: setUse, + eventConsultation: setEventConsultation + }; + const onChange = (key: string) => { + setTabKey(key); + }; + // 正序 + const correctClick = () => { + setIsCorrectClicked(color === 'dark' ? '#5c6cf7' : '#a8abff') + setIsinvertedClicked(color === 'dark' ? '#8a909a' : '#bfbfbf'); + if (tabKey === 'all') { + const correctAll = all?.sort((a: any, b: any) => new Date(b?.time)?.getTime() - new Date(a?.time)?.getTime()); + setAll(correctAll); + } else { + const correct = frontmatter[tabKey].sort((a: any, b: any) => new Date(b.time).getTime() - new Date(a.time).getTime()); + if (tabName[tabKey]) { + tabName[tabKey](correct); + } + } + }; + // 倒序 + const invertedClick = () => { + setIsinvertedClicked(color === 'dark' ? '#5c6cf7' : '#a8abff'); + setIsCorrectClicked(color === 'dark' ? '#8a909a' : '#bfbfbf'); + if (tabKey === 'all') { + const correctAll = all.sort((a: any, b: any) => new Date(a.time).getTime() - new Date(b.time).getTime()); + setAll(correctAll); + } else { + const correct = frontmatter[tabKey].sort((a: any, b: any) => new Date(a.time).getTime() - new Date(b.time).getTime()); + if (tabName[tabKey]) { + tabName[tabKey](correct); + } + } + }; + const items: TabsProps['items'] = [ + { + key: 'all', + label: locale.id === 'zh-CN' ? '全部' : 'All', + children: ( ( + +
{item.time}
+
{item.title}
+
{item.desc}
+ +
+ )} + pagination={{ + // hideOnSinglePage: true, + defaultCurrent: 1, + pageSize: 10, + align: 'center' + }} + />) + }, + { + key: 'publish', + label: locale.id === 'zh-CN' ? '发布' : 'Publish', + children: ( ( + +
{item.time}
+
{item.title}
+
{item.desc}
+ +
+ )} + pagination={{ + defaultCurrent: 1, + pageSize: 10, + align: 'center' + }} + />) + }, + { + key: 'develop', + label: locale.id === 'zh-CN' ? '技术' : 'Develop', + children: ( ( + +
{item.time}
+
{item.title}
+
{item.desc}
+ +
+ )} + pagination={{ + defaultCurrent: 1, + pageSize: 10, + align: 'center' + }} + />) + }, + { + key: 'products', + label: locale.id === 'zh-CN' ? '产品' : 'Products', + children: ( ( + +
{item.time}
+
{item.title}
+
{item.desc}
+ +
+ )} + pagination={{ + defaultCurrent: 1, + pageSize: 10, + align: 'center' + }} + />) + }, + { + key: 'use', + label: locale.id === 'zh-CN' ? '使用' : 'Use', + children: ( ( + +
{item.time}
+
{item.title}
+
{item.desc}
+ +
+ )} + pagination={{ + defaultCurrent: 1, + pageSize: 10, + align: 'center' + }} + />) + }, + { + key: 'Event Consultation', + label: locale.id === 'zh-CN' ? '活动咨询' : 'Event Consultation', + children: ( ( + +
{item.time}
+
{item.title}
+
{item.desc}
+ +
+ )} + pagination={{ + defaultCurrent: 1, + pageSize: 10, + align: 'center' + }} + />) + }, + ]; + const slot = ( +
+ + +
+ ) + + return ( +
+
+
+ +
+
+
+ +
+
+ ); +}; +export default Blogs; diff --git a/.dumi/theme/slots/CodeAnalysis/index.less b/.dumi/theme/slots/CodeAnalysis/index.less index 8e64a73..04b551e 100644 --- a/.dumi/theme/slots/CodeAnalysis/index.less +++ b/.dumi/theme/slots/CodeAnalysis/index.less @@ -47,6 +47,10 @@ color: #ffffff; letter-spacing: 1px; opacity: 0.8; + + @{dark-selector} & { + color: #171616; + } } .buttom { cursor: pointer; diff --git a/.dumi/theme/slots/CodeAnalysis/index.tsx b/.dumi/theme/slots/CodeAnalysis/index.tsx index fcd7dcd..1cf6e2e 100644 --- a/.dumi/theme/slots/CodeAnalysis/index.tsx +++ b/.dumi/theme/slots/CodeAnalysis/index.tsx @@ -1,15 +1,19 @@ -import { Link, useLocale, useSiteData, useRouteMeta } from 'dumi'; +import { useLocale, usePrefersColor, useRouteMeta } from 'dumi'; import './index.less'; import React, { type FC } from 'react'; import { SwapRightOutlined } from '@ant-design/icons'; const CodeAnalysis: FC = () => { const { frontmatter } = useRouteMeta(); + const [color] = usePrefersColor(); const locale = useLocale(); if (!('CodeAnalysis' in frontmatter)) return null; return
- +
{frontmatter.CodeAnalysis.title} diff --git a/.dumi/theme/slots/CodeGeneration/index.less b/.dumi/theme/slots/CodeGeneration/index.less index 86ff2aa..f0787e9 100644 --- a/.dumi/theme/slots/CodeGeneration/index.less +++ b/.dumi/theme/slots/CodeGeneration/index.less @@ -1,14 +1,8 @@ .code-Generation { - // margin-top: 71px; display: flex; justify-content: center; + padding-bottom: 73px; position: relative; - padding: 73px 0; - position: relative; - background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*BBG4RJuqfbMAAAAAAAAAAAAADlHYAQ/original'); - background-repeat: no-repeat; - background-size: cover; - background-position: center; .code-Generation-center { display: flex; @@ -83,6 +77,13 @@ color: #ffffff; letter-spacing: 1px; opacity: 0.8; + + @{dark-selector} & { + font-size: 16px; + color: #171616; + } + + } .buttom { @@ -109,11 +110,12 @@ position: absolute; bottom: 5px; } + margin-left: 8px; width: 25px; height: 25px; } - + &:hover { background-image: url("https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Pm85SKQpQ88AAAAAAAAAAAAADlHYAQ/original"); background-repeat: no-repeat; @@ -146,6 +148,11 @@ font-weight: 600; align-items: center; justify-content: center; + + @{dark-selector} & { + font-size: 18px; + color: #171616; + } } .generationButtomen-US { @@ -161,6 +168,10 @@ align-items: center; justify-content: center; + @{dark-selector} & { + font-size: 18px; + color: #171616; + } } } } @@ -188,11 +199,13 @@ .generationButtomzh-CN { border: 0 !important; background-image: linear-gradient(90deg, #6777ff 0%, #7647f3 100%); + color: #fff !important; } .generationButtomen-US { border: 0 !important; background-image: linear-gradient(90deg, #6777ff 0%, #7647f3 100%); + color: #fff !important; } } diff --git a/.dumi/theme/slots/CodeGeneration/index.tsx b/.dumi/theme/slots/CodeGeneration/index.tsx index e4bced7..8ba1600 100644 --- a/.dumi/theme/slots/CodeGeneration/index.tsx +++ b/.dumi/theme/slots/CodeGeneration/index.tsx @@ -1,4 +1,4 @@ -import { Link, useLocale, useSiteData, useRouteMeta } from 'dumi'; +import { useLocale, usePrefersColor, useRouteMeta, } from 'dumi'; import './index.less'; import React, { type FC } from 'react'; import "slick-carousel/slick/slick.css"; @@ -9,15 +9,16 @@ import { SwapRightOutlined } from '@ant-design/icons'; const CodeGeneration: FC = () => { const locale = useLocale(); const { frontmatter } = useRouteMeta(); + const [color] = usePrefersColor(); const settings = { dots: true, infinite: true, - speed: 500, + speed: 900, slidesToShow: 1, slidesToScroll: 1, - nextArrow: , - prevArrow: , - appendDots: dots => ( + nextArrow: , + prevArrow: , + appendDots: (dots: string | number | boolean | React.ReactElement> | Iterable | React.ReactPortal | null | undefined) => (
{ transform: 'translate(-50%, -50%)' }}> {dots}
), - customPaging: i => ( + customPaging: (i: number) => (
{ frontmatter?.CodeGeneration.map((item: any, index: number) => { @@ -53,9 +54,9 @@ const CodeGeneration: FC = () => {
{ - frontmatter?.CodeGeneration.map(item => { - return
- + frontmatter?.CodeGeneration.map((item: any, index: number) => { + return
+
{item.title} diff --git a/.dumi/theme/slots/ColorSwitch/index.less b/.dumi/theme/slots/ColorSwitch/index.less index 0a9c235..378167e 100644 --- a/.dumi/theme/slots/ColorSwitch/index.less +++ b/.dumi/theme/slots/ColorSwitch/index.less @@ -26,7 +26,6 @@ margin-inline-end: -15px; padding-right: 15px; // padding-inline: 15px; - // border-inline-start: 1px solid @c-border; @{dark-selector} & { diff --git a/.dumi/theme/slots/ColorSwitch/index.tsx b/.dumi/theme/slots/ColorSwitch/index.tsx index 95d2cc6..b90f89a 100644 --- a/.dumi/theme/slots/ColorSwitch/index.tsx +++ b/.dumi/theme/slots/ColorSwitch/index.tsx @@ -1,4 +1,4 @@ -import { useIntl, usePrefersColor, useSiteData, useLocation, useRouteMeta } from 'dumi'; +import { useIntl, usePrefersColor, useSiteData, } from 'dumi'; import React, { useEffect, useState, type FC } from 'react'; import './index.less'; @@ -34,7 +34,6 @@ const ICON_MAPPING = { auto: IconAuto, }; - const ColorSwitch: FC = () => { const { themeConfig: { @@ -44,18 +43,18 @@ const ColorSwitch: FC = () => { const intl = useIntl(); const [, prefersColor = defaultColor, setPrefersColor] = usePrefersColor(); const Icon = ICON_MAPPING[prefersColor]; - const { pathname } = useLocation(); - let slashIndex = pathname.indexOf("/"); - var path = (slashIndex !== -1) && (slashIndex < pathname.length - 1); - useEffect(() => { - !path && setPrefersColor('light'); - }, [pathname]) + // useEffect(() => { + // setPrefersColor(prefersColor); + // sessionStorage.setItem('prefersColortest', prefersColor); + // }, [prefersColor]) // 切换颜色模式的函数 + const switchColorMode = () => { // 根据当前模式切换到另一模式 const nextMode = prefersColor === 'light' ? 'dark' : 'light'; setPrefersColor(nextMode); + sessionStorage.setItem('prefersColortest', prefersColor); }; return ( { const { frontmatter } = useRouteMeta(); + const [color] = usePrefersColor(); const locale = useLocale(); if (!('DevOps' in frontmatter)) return null; return
@@ -17,7 +18,7 @@ const DevOps: FC = () => {
    {frontmatter.DevOps.map((item: any) => { return
  • window.open(item.link)}> - +
    {item.cardTitle}
    {item.description}
    diff --git a/.dumi/theme/slots/Header/index.less b/.dumi/theme/slots/Header/index.less index f4e4613..6ca4807 100644 --- a/.dumi/theme/slots/Header/index.less +++ b/.dumi/theme/slots/Header/index.less @@ -56,11 +56,12 @@ &-right { display: flex; justify-content: space-between; + .headerLineleft { width: 1px; background-color: #fff; height: 20px; - margin-right: 15px; + margin: 0 15px; @{dark-selector} & { background-color: #8590a0; @@ -180,21 +181,26 @@ } } - .dumi-default-search-bar { - margin-inline-start: 28px; - margin-inline-end: 0; - width: 140px; - height: 40px; - } - - .dumi-default-search-bar-input { - width: 140px; - height: 40px; - } - - .dumi-default-search-shortcut { - display: none; - } +// .dumi-default-search-bar { +// margin-inline-start: 0px; +// margin-inline-end: 0; +// width: 140px; +// height: 40px; +// } + +// .dumi-default-search-bar-input { +// width: 140px; +// height: 40px; +// border-radius: 10px; +// } +// .dumi-default-search-bar-input:focus { +// border-color: rgba(92, 108, 247, 0.5); +// background-color: #ffffff24; +// box-shadow: 0 0 0 3px rgba(92, 108, 247, 0.1); +// } +// .dumi-default-search-shortcut { +// display: none; +// } .dumi-default-icon>svg { width: 20px; diff --git a/.dumi/theme/slots/Header/index.tsx b/.dumi/theme/slots/Header/index.tsx index 072b774..8fadbd1 100644 --- a/.dumi/theme/slots/Header/index.tsx +++ b/.dumi/theme/slots/Header/index.tsx @@ -1,7 +1,7 @@ import type { SocialTypes } from '@/client/theme-api/types'; import { ReactComponent as IconClose } from '@ant-design/icons-svg/inline-svg/outlined/close.svg'; import { ReactComponent as IconMenu } from '@ant-design/icons-svg/inline-svg/outlined/menu.svg'; -import { useRouteMeta, useSiteData } from 'dumi'; +import { useRouteMeta, useSiteData, useLocation } from 'dumi'; import ColorSwitch from '../ColorSwitch'; import HeaderExtra from 'dumi/theme/slots/HeaderExtra'; import LangSwitch from 'dumi/theme/slots/LangSwitch'; @@ -16,7 +16,8 @@ const Header: FC = () => { const { frontmatter } = useRouteMeta(); const [showMenu, setShowMenu] = useState(false); const { themeConfig } = useSiteData(); - const hero = frontmatter.hero; + const { hash, pathname } = useLocation(); + const blogDet = pathname.includes("/blogDetails"); const socialIcons = useMemo( () => themeConfig.socialLinks @@ -29,7 +30,6 @@ const Header: FC = () => { : [], [themeConfig.socialLinks], ); - return (
    {
    -
    -
    {/* 文档信息下拉弹框 */} +
    + +
    {/* 导航➕国际化 */}
    -
    - + { + !blogDet && <> +
    + } + {/* 亮度显示 */} { - !hero && themeConfig.prefersColor.switch && + themeConfig.prefersColor.switch && }
    {socialIcons.map((item) => ( @@ -63,7 +67,8 @@ const Header: FC = () => {
    { window.open('https://modelscope.cn/organization/codefuse-ai') }}>
    - {/* */} +
    +
    {/* 移动端导航栏 */} diff --git a/.dumi/theme/slots/Hero/index.less b/.dumi/theme/slots/Hero/index.less index 9bb87a6..901b234 100644 --- a/.dumi/theme/slots/Hero/index.less +++ b/.dumi/theme/slots/Hero/index.less @@ -6,8 +6,28 @@ height: 100%; display: flex; flex-direction: column; - justify-content: center; - background-color: #04040e; + // background-color: #04040e; + position: relative; + background: url(https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*GXCzTqeCn-QAAAAAAAAAAAAADlHYAQ/original); + background-repeat: no-repeat; + background-size: cover; + background-position: top; + width: 100vw; + top: 0; + left: 50%; + transform: translate(-50%); + + @{dark-selector} & { + background: url(https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*3r6wTK9KMQMAAAAAAAAAAAAADlHYAQ/original); + background-repeat: no-repeat; + background-size: cover; + background-position: top; + width: 100vw; + top: 0; + left: 50%; + transform: translate(-50%); + } + @media @mobile { margin-top: -@s-header-height-m - 20; @@ -22,37 +42,38 @@ .banner { position: relative; height: 100vh; + // width: 100vw; text-align: center; box-sizing: border-box; - background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*jv_PRqNyheQAAAAAAAAAAAAADlHYAQ/original'); + background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*4hf5Tb5Rtd8AAAAAAAAAAAAADlHYAQ/original'); background-repeat: no-repeat; background-size: cover; - background-position: center; + background-position: bottom; display: flex; align-items: center; justify-content: center; flex-direction: column; + + @{dark-selector} & { + background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*faXFT6UtWckAAAAAAAAAAAAADlHYAQ/original'); + } + + .bannerDesc { + font-size: 45px; + color: #ccd8ff; + letter-spacing: 5.27px; + text-align: center; + + @{dark-selector} & { + font-size: 45px; + color: #1b1b1b; + letter-spacing: 5.27px; + text-align: center; + } + } } - // &::before { - // content: ''; - // position: absolute; - // display: block; - // top: 0; - // left: 0; - // right: 0; - // bottom: 0; - // opacity: 0.8; - // pointer-events: none; - // background: no-repeat center/cover; - // background-image: url('https://mdn.alipayobjects.com/huamei_v98cj4/afts/img/A*PpkBT7PHhsYAAAAAAAAAAAAADo6VAQ/original'); - // // background-image: url('https://gw.alipayobjects.com/zos/bmw-prod/a6c3488a-994c-4dd3-8e92-2324d9a1ca48/l9dmd9wl_w2858_h1864.png'); - - // @{dark-selector} & { - // opacity: 1; - // } - // } - - p { + + p { font-weight: 300; text-align: center; line-height: 72px; diff --git a/.dumi/theme/slots/Hero/index.tsx b/.dumi/theme/slots/Hero/index.tsx index 0c4be60..149f539 100644 --- a/.dumi/theme/slots/Hero/index.tsx +++ b/.dumi/theme/slots/Hero/index.tsx @@ -20,6 +20,7 @@ const Hero: FC = () => { )} {frontmatter.hero!.description && (

    )} @@ -30,21 +31,6 @@ const Hero: FC = () => { - {/* {Boolean(frontmatter.hero!.actions?.length) && ( -

    - {frontmatter.hero!.actions!.map(({ text, link }) => - /^(\w+:)\/\/|^(mailto|tel):/.test(link) ? ( - - {text} - - ) : ( - - {text} - - ), - )} -
    - )} */}
    ); }; diff --git a/.dumi/theme/slots/HeroTitle/index.less b/.dumi/theme/slots/HeroTitle/index.less index 1f1a8bc..24d541f 100644 --- a/.dumi/theme/slots/HeroTitle/index.less +++ b/.dumi/theme/slots/HeroTitle/index.less @@ -14,7 +14,7 @@ img { margin: 0 auto; - width: 755px; + width: 1100px; } @media @mobile { diff --git a/.dumi/theme/slots/IntelligentInference/index.less b/.dumi/theme/slots/IntelligentInference/index.less index abb1f0c..8ca50a5 100644 --- a/.dumi/theme/slots/IntelligentInference/index.less +++ b/.dumi/theme/slots/IntelligentInference/index.less @@ -47,6 +47,11 @@ color: #ffffff; letter-spacing: 1px; opacity: 0.8; + + @{dark-selector} & { + font-size: 16px; + color: #171616; + } } .buttom { cursor: pointer; diff --git a/.dumi/theme/slots/IntelligentInference/index.tsx b/.dumi/theme/slots/IntelligentInference/index.tsx index 96b947e..2435d6c 100644 --- a/.dumi/theme/slots/IntelligentInference/index.tsx +++ b/.dumi/theme/slots/IntelligentInference/index.tsx @@ -1,4 +1,4 @@ -import { useLocale, useRouteMeta } from 'dumi'; +import { useLocale, useRouteMeta, usePrefersColor } from 'dumi'; import './index.less'; import React, { type FC } from 'react'; import { SwapRightOutlined } from '@ant-design/icons'; @@ -6,6 +6,7 @@ import { SwapRightOutlined } from '@ant-design/icons'; const IntelligentInference: FC = () => { const { frontmatter } = useRouteMeta(); const locale = useLocale(); + const [color] = usePrefersColor(); if (!('IntelligentInference' in frontmatter)) return null; return
    @@ -22,7 +23,12 @@ const IntelligentInference: FC = () => {
    - +
    }; diff --git a/.dumi/theme/slots/LangSwitch/index.tsx b/.dumi/theme/slots/LangSwitch/index.tsx index f9a2c6b..aebcbe8 100644 --- a/.dumi/theme/slots/LangSwitch/index.tsx +++ b/.dumi/theme/slots/LangSwitch/index.tsx @@ -6,9 +6,11 @@ import { useLocale, useLocation, useSiteData, + usePrefersColor, } from 'dumi'; import React, { useEffect, useState, type FC } from 'react'; import './index.less'; +import { set } from 'lodash'; type ILocaleItem = ReturnType['locales'][0]; @@ -24,16 +26,16 @@ function getTargetLocalePath({ const clearPath = 'base' in current ? // handle '/en-US/a' => '/a' or '/en-US' => '' => '/' - pathname.replace(current.base.replace(/\/$/, ''), '') || '/' + pathname.replace(current.base.replace(/\/$/, ''), '') || '/' : pathname.replace(new RegExp(`${current.suffix}$`), ''); return 'base' in target ? `${ - // for `/` base, strip duplicated leading slash - target.base.replace(/\/$/, '') + // for `/` base, strip duplicated leading slash + target.base.replace(/\/$/, '') }${clearPath}` - // for `/` clearPath, strip duplicated ending slash - .replace(/([^/])\/$/, '$1') + // for `/` clearPath, strip duplicated ending slash + .replace(/([^/])\/$/, '$1') : `${clearPath}${target.suffix}`; } @@ -52,7 +54,9 @@ const SingleSwitch: FC<{ locale: ILocaleItem; current: ILocaleItem }> = ({ return ( - {locale.name} + + {locale.name} + ); }; diff --git a/.dumi/theme/slots/LearnMore/index.less b/.dumi/theme/slots/LearnMore/index.less new file mode 100644 index 0000000..fc66507 --- /dev/null +++ b/.dumi/theme/slots/LearnMore/index.less @@ -0,0 +1,36 @@ +.buttom { + z-index: 1111 !important; + cursor: pointer; + width: 150px; + height: 37px; + background-image: url("https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*eMQHT670srQAAAAAAAAAAAAADlHYAQ/original"); + background-repeat: no-repeat; + background-size: contain; + background-position: center; + border-radius: 7px; + color: #a8abff; + display: flex; + align-items: center; + justify-content: center; + position: relative; + + .anticon { + svg { + width: 30px; + height: 23px; + position: absolute; + bottom: 5px; + } + margin-left: 8px; + width: 25px; + height: 25px; + } + + &:hover { + background-image: url("https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Pm85SKQpQ88AAAAAAAAAAAAADlHYAQ/original"); + background-repeat: no-repeat; + background-size: contain; + background-position: center; + color: #fff; + } +} diff --git a/.dumi/theme/slots/LearnMore/index.tsx b/.dumi/theme/slots/LearnMore/index.tsx new file mode 100644 index 0000000..da7b700 --- /dev/null +++ b/.dumi/theme/slots/LearnMore/index.tsx @@ -0,0 +1,23 @@ +import { useLocale, history } from 'dumi'; +import './index.less'; +import React, { type FC } from 'react'; +import { SwapRightOutlined } from '@ant-design/icons'; +const LearnMore: FC<{ children: string, link: string }> = (props) => { + const locale = useLocale(); + const handleClick = (link: string) => { + if (link.indexOf('http') === -1) { + history.push(link); + window.scrollTo({ top: 0 }); + } else { + window.open(link, '_blank') + } + }; + return ( +
    handleClick(props.link)}> + {locale.id === 'zh-CN' ? props.children : 'Learn more'} + +
    + ); +}; +export default LearnMore; + diff --git a/.dumi/theme/slots/Logo/index.less b/.dumi/theme/slots/Logo/index.less index 4f97c7f..c90d4ab 100644 --- a/.dumi/theme/slots/Logo/index.less +++ b/.dumi/theme/slots/Logo/index.less @@ -8,6 +8,7 @@ line-height: 1; font-weight: bold; text-decoration: none; + margin-right: 40px; @{dark-selector} & { color: @c-text-dark; diff --git a/.dumi/theme/slots/Navbar/index.tsx b/.dumi/theme/slots/Navbar/index.tsx index af8c1a0..7d36c35 100644 --- a/.dumi/theme/slots/Navbar/index.tsx +++ b/.dumi/theme/slots/Navbar/index.tsx @@ -44,7 +44,7 @@ const NavbarItem: FC<{ data: ReturnType[0] }> = ({ data-docs={isDevDocs} > {isDevDocs ? ( - + ) : ( )} @@ -56,7 +56,6 @@ const NavbarItem: FC<{ data: ReturnType[0] }> = ({ activePath && pathname.startsWith(activePath) ? { className: 'active' } : {}; - return data.link ? ( <> @@ -147,9 +146,12 @@ const NavbarChildrenContent: FC = () => { const Navbar: FC = () => { const nav = useNavData(); + // 删除导航中博客详情数据 + const filteredNav = nav.filter(item => item.title !== 'blogDetails'); + return (
      - +
    ); diff --git a/.dumi/theme/slots/PerformanceEvaluation/index.less b/.dumi/theme/slots/PerformanceEvaluation/index.less index 3ae8cba..6f07c80 100644 --- a/.dumi/theme/slots/PerformanceEvaluation/index.less +++ b/.dumi/theme/slots/PerformanceEvaluation/index.less @@ -2,6 +2,10 @@ margin-top: 100px; display: flex; justify-content: center; + + @{dark-selector} & { + margin-bottom: 150px; + } .Performance-center { display: flex; @@ -64,6 +68,10 @@ background-size: cover; background-position: center; + @{dark-selector} & { + background-image: url('https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*4scPTrdP_xIAAAAAAAAAAAAADlHYAQ/original'); + } + img { margin: 21px auto 41px auto; border-radius: 5px; @@ -78,6 +86,11 @@ font-size: 16px; color: #ffffff; letter-spacing: 1px; + + @{dark-selector} & { + font-size: 16px; + color: #171616; + } } } } diff --git a/.dumi/theme/slots/PerformanceEvaluation/index.tsx b/.dumi/theme/slots/PerformanceEvaluation/index.tsx index 73184c8..7cffaf7 100644 --- a/.dumi/theme/slots/PerformanceEvaluation/index.tsx +++ b/.dumi/theme/slots/PerformanceEvaluation/index.tsx @@ -1,4 +1,4 @@ -import { Link, useLocale, useSiteData, useRouteMeta } from 'dumi'; +import { Link, useLocale, usePrefersColor, useRouteMeta } from 'dumi'; import './index.less'; import React, { type FC } from 'react'; import { SwapRightOutlined } from '@ant-design/icons'; @@ -6,6 +6,7 @@ import { SwapRightOutlined } from '@ant-design/icons'; const PerformanceEvaluation: FC = () => { const { frontmatter } = useRouteMeta(); const locale = useLocale(); + const [color] = usePrefersColor(); if (!('PerformanceEvaluation' in frontmatter)) return null; return
    @@ -13,7 +14,7 @@ const PerformanceEvaluation: FC = () => { {frontmatter.PerformanceEvaluation.title}
    window.open(frontmatter.PerformanceEvaluation.link)}> - {locale.id==='zh-CN'?'了解更多':'Learn more'} + {locale.id === 'zh-CN' ? '了解更多' : 'Learn more'}
    @@ -22,7 +23,10 @@ const PerformanceEvaluation: FC = () => { {frontmatter.PerformanceEvaluation.description}
diff --git a/.dumi/theme/slots/SearchBar/index.less b/.dumi/theme/slots/SearchBar/index.less index 7808c55..956f902 100644 --- a/.dumi/theme/slots/SearchBar/index.less +++ b/.dumi/theme/slots/SearchBar/index.less @@ -18,7 +18,7 @@ margin-top: 1px; inset-inline-start: 16px; width: 16px; - fill: @c-text-note; + fill:#fff; transform: translateY(-50%); @{dark-selector} & { @@ -27,20 +27,21 @@ } &-input { - width: 140px; - height: 40px; + width: 150px; + height: 35px; padding: 0; padding-inline-start: 40px; padding-inline-end: 12px; color: @c-border; font-size: 14px; border: 1px solid @c-border; - border-radius: 20px; + border-radius: 10px; box-sizing: border-box; outline: none; transition: all 0.3s; background-color: transparent; + @{dark-selector} & { color: @c-text-dark; border-color: @c-border-dark; @@ -48,12 +49,14 @@ &:focus { border-color: fade(@c-primary, 50%); - background-color: rgba(249, 247, 247, 0.45); + background-color: rgba(249, 247, 247, 0.15); box-shadow: 0 0 0 3px fade(@c-primary, 10%); + @{dark-selector} & { - border-color: fade(@c-primary-dark, 50%); - background-color: @c-site-bg-dark; + color: #3d3b3b; + border-color: #8590a0; + background-color: #d9ddff; box-shadow: 0 0 0 3px fade(@c-primary-dark, 10%); } } @@ -102,12 +105,12 @@ width: 540px; max-height: 460px; margin-top: 18px; - background-color: #fff; - border-radius: 8px; + background-color: lighten(@c-site-bg-dark, 60%); + border-radius: 15px; box-shadow: 0 4px 30px rgba(0, 0, 0, 20%); @{dark-selector} & { - background-color: lighten(@c-site-bg-dark, 6%); + background-color: #fff; } &::before { @@ -119,10 +122,11 @@ width: 0; height: 0; border: 8px solid transparent; - border-bottom-color: #fff; + border-bottom-color: lighten(@c-site-bg-dark, 6%); + @{dark-selector} & { - border-bottom-color: lighten(@c-site-bg-dark, 6%); + border-bottom-color: #fff; } } @@ -133,6 +137,13 @@ overscroll-behavior: contain; -webkit-overflow-scrolling: touch; border-radius: inherit; + background: #05030d; + border-radius: 13px; + box-shadow: 1px 2px 4px 0px #7275c580; + padding: 15px 10px; + @{dark-selector} & { + background: #FFF; + } } } @@ -155,7 +166,7 @@ &-content { position: absolute; top: 60px; - background-color: #fff; + background-color: lighten(@c-site-bg-dark, 6%); width: 500px; padding: 12px; box-sizing: border-box; @@ -167,7 +178,8 @@ flex-direction: column; @{dark-selector} & { - background-color: lighten(@c-site-bg-dark, 6%); + background-color: #fff; + } } diff --git a/.dumi/theme/slots/SearchBar/index.tsx b/.dumi/theme/slots/SearchBar/index.tsx index 9b70fa1..fe50b9d 100644 --- a/.dumi/theme/slots/SearchBar/index.tsx +++ b/.dumi/theme/slots/SearchBar/index.tsx @@ -4,10 +4,10 @@ import { ReactComponent as IconSearch } from '@ant-design/icons-svg/inline-svg/o import { useSiteSearch } from 'dumi'; import SearchResult from 'dumi/theme/slots/SearchResult'; import React, { useEffect, useRef, useState, type FC } from 'react'; -import { Input } from './Input'; +import { Input } from './input'; import { Mask } from './Mask'; import './index.less'; -export { Input as SearchInput } from './Input'; +export { Input as SearchInput } from './input'; export { Mask as SearchMask } from './Mask'; const isAppleDevice = /(mac|iphone|ipod|ipad)/i.test( @@ -99,15 +99,17 @@ const SearchBar: FC = () => { onChange={(keywords) => setKeywords(keywords)} ref={inputRef} /> - {symbol} K + {/* {symbol} K */} {keywords.trim() && focusing && !modalVisible && (
+ )} + { diff --git a/.dumi/theme/slots/SearchResult/index.less b/.dumi/theme/slots/SearchResult/index.less new file mode 100644 index 0000000..13b2219 --- /dev/null +++ b/.dumi/theme/slots/SearchResult/index.less @@ -0,0 +1,174 @@ +@import (reference) '../../styles/variables.less'; + +.@{prefix}-search-result { + + >dl { + margin: 2px 0; + + >dt { + height: 30px; + padding: 0 16px; + font-weight: bold; + font-size: 14px; + line-height: 30px; + color: #d9d8d8e0; + background-color: #181d29; + + @{dark-selector} & { + color: @c-text-secondary-dark; + background-color: #f1f5fe; + } + + &:first-child { + margin-top: -2px; + } + + +dd { + margin-top: 2px; + } + } + + >dd { + margin: 0 4px; + padding: 2px 0; + + +dd { + border-top: 1px dashed @c-border-light; + + @{dark-selector} & { + border-top-color: @c-border-less-dark; + } + } + + +dt { + margin-top: 2px; + } + + >a { + position: relative; + display: flex; + height: 60px; + flex-direction: column; + justify-content: center; + padding-top: 6px; + padding-bottom: 8px; + padding-inline-start: 54px; + padding-inline-end: 12px; + text-decoration: none; + box-sizing: border-box; + border-radius: 4px; + + &[data-active], + &:hover { + background-color:#181d29; + + @{dark-selector} & { + background-color: #f1f5fe; + } + + >h4, + >p { + // color: #fff; + color: #9999FF; + + @{dark-selector} & { + color: rgb(92, 108, 247); + } + } + + >svg { + // fill: #fff; + fill: #9999FF; + + @{dark-selector} & { + // fill: darken(#fff, 20%); + fill: rgb(92, 108, 247); + } + } + } + + >svg { + position: absolute; + top: 14px; + inset-inline-start: 14px; + width: 32px; + height: 32px; + fill: darken(@c-border, 5%); + + @{dark-selector} & { + fill: lighten(@c-border-dark, 5%); + } + } + + >h4, + >p { + margin: 0; + line-height: 1.4; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + + >h4 { + // color: @c-text-secondary; + color: #fff; + font-size: 14px; + + @{dark-selector} & { + color: #1b1b1b; + } + } + + >p { + margin-top: 2px; + font-size: 13px; + color: @c-text-note; + + @{dark-selector} & { + color: @c-text-note-dark; + } + + &:empty { + display: none; + } + } + } + } + } + + mark { + + padding: 0 2px; + border-radius: 2px; + color: rgb(147, 145, 71); + background-color: rgb(56, 37, 6); + + @{dark-selector} & { + color: rgb(72, 70, 7); + background-color: rgb(255, 249, 197); + } + } + + .@{prefix}-search-empty { + display: flex; + height: 140px; + align-items: center; + justify-content: center; + color: @c-text-note; + font-size: 16px; + + @{dark-selector} & { + color: @c-text-note-dark; + } + + >svg { + margin-inline-end: 8px; + width: 48px; + fill: lighten(@c-text-note, 20%); + + @{dark-selector} & { + fill: darken(@c-text-note-dark, 20%); + } + } + } +} diff --git a/.dumi/theme/slots/SearchResult/index.tsx b/.dumi/theme/slots/SearchResult/index.tsx new file mode 100644 index 0000000..c885fbc --- /dev/null +++ b/.dumi/theme/slots/SearchResult/index.tsx @@ -0,0 +1,229 @@ +import { ReactComponent as IconInbox } from '@ant-design/icons-svg/inline-svg/outlined/inbox.svg'; +import animateScrollTo from 'animated-scroll-to'; +import { + FormattedMessage, + history, + Link, + useLocation, + type useSiteSearch, +} from 'dumi'; +import React, { + Fragment, + useCallback, + useEffect, + useState, + type FC, +} from 'react'; +import './index.less'; + +const IconTitle: FC = () => { + return ( + + + + + + ); +}; + +const IconPage: FC = () => { + return ( + + + + ); +}; + +const IconContent: FC = () => { + return ( + + + + ); +}; + +const IconDemo: FC = () => { + return ( + + + + ); +}; + +const ICONS_MAPPING = { + title: IconTitle, + page: IconPage, + content: IconContent, + demo: IconDemo, +}; + +type ISearchResult = ReturnType['result']; + +type ISearchFlatData = ( + | { + type: 'title'; + value: Pick; + } + | { + type: 'hint'; + activeIndex: number; + value: ISearchResult[0]['hints'][0]; + } +)[]; + +const Highlight: FC<{ + texts: ISearchResult[0]['hints'][0]['highlightTexts']; +}> = (props) => { + return ( + <> + {props.texts.map((text, idx) => ( + + {text.highlighted ? {text.text} : text.text} + + ))} + + ); +}; + +const useFlatSearchData = (data: ISearchResult) => { + const update = useCallback((): [ISearchFlatData, number] => { + let activeIndex = 0; + const ret: ISearchFlatData = []; + + data.forEach((item) => { + if (item.title) { + ret.push({ + type: 'title', + value: { + title: item.title, + }, + }); + } + item.hints.forEach((hint) => { + ret.push({ + type: 'hint', + activeIndex: activeIndex++, + value: hint, + }); + }); + }); + + return [ret, activeIndex]; + }, [data]); + const [flatData, setFlatData] = useState(update); + + useEffect(() => { + setFlatData(update); + }, [data]); + + return flatData; +}; + +const SearchResult: FC<{ + data: ISearchResult; + loading: boolean; + onItemSelect?: (item: ISearchResult[0]['hints'][0]) => void; +}> = (props) => { + const [data, histsCount] = useFlatSearchData(props.data); + const [activeIndex, setActiveIndex] = useState(-1); + const { pathname } = useLocation(); + + const onItemSelect = (item: ISearchResult[0]['hints'][0]) => { + props.onItemSelect?.(item); + + const url = new URL(item?.link, location.origin); + if (url?.pathname === pathname && !url.hash) { + setTimeout(() => { + animateScrollTo(0, { + maxDuration: 300, + }); + }, 1); + } + }; + + useEffect(() => { + const handler = (ev: KeyboardEvent) => { + // TODO: scroll into view for invisible items + if (ev.key === 'ArrowDown') { + setActiveIndex((activeIndex + 1) % histsCount); + } else if (ev.key === 'ArrowUp') { + setActiveIndex((activeIndex + histsCount - 1) % histsCount); + } else if (ev.key === 'Enter' && activeIndex >= 0) { + const item = data.find( + (item) => item.type === 'hint' && item.activeIndex === activeIndex, + )!.value as ISearchResult[0]['hints'][0]; + + history.push(item.link); + onItemSelect?.(item); + (document.activeElement as HTMLInputElement).blur(); + } + + if (['Escape', 'Enter'].includes(ev.key)) { + setActiveIndex(-1); + } + }; + + document.addEventListener('keydown', handler); + return () => document.removeEventListener('keydown', handler); + }); + + let returnNode: React.ReactNode = null; + + if (props.loading) { + returnNode = ( +
+ + +
+ ); + } else if (props.data.length) { + returnNode = ( +
+ {data.map((item, i) => + item.type === 'title' ? ( +
{item.value.title}
+ ) : ( +
+ onItemSelect?.(item.value)} + > + {React.createElement(ICONS_MAPPING[item.value.type])} +

+ +

+

+ +

+ +
+ ), + )} +
+ ); + } else { + returnNode = ( +
+ + +
+ ); + } + + return ( +
setActiveIndex(-1)} + // for ux, only hide result when mouse up + onMouseDownCapture={(ev) => ev.preventDefault()} + onMouseUpCapture={() => { + (document.activeElement as HTMLInputElement).blur(); + }} + > + {returnNode} +
+ ); +}; + +export default SearchResult; diff --git a/.dumi/theme/slots/Toc/index.less b/.dumi/theme/slots/Toc/index.less index a3351be..0d19fd5 100644 --- a/.dumi/theme/slots/Toc/index.less +++ b/.dumi/theme/slots/Toc/index.less @@ -47,7 +47,7 @@ border-inline-start: 2px solid @c-border; @{dark-selector} & { - border-inline-start-color: @c-border-dark; + border-inline-start-color:#d0d5d8; } &:empty { diff --git a/.dumi/theme/slots/Toc/index.tsx b/.dumi/theme/slots/Toc/index.tsx index e8e07f2..fc3a3a2 100644 --- a/.dumi/theme/slots/Toc/index.tsx +++ b/.dumi/theme/slots/Toc/index.tsx @@ -23,6 +23,7 @@ import './index.less'; const Toc: FC = () => { const { pathname, search, hash } = useLocation(); + const blogDet = pathname.includes("/blogDetails");; const meta = useRouteMeta(); const tabMeta = useTabMeta(); const { loading } = useSiteData(); @@ -35,6 +36,7 @@ const Toc: FC = () => { const { themeConfig } = useSiteData(); const showEditLink = themeConfig.editLink && frontmatter.filename; const showLastUpdated = themeConfig.lastUpdated && frontmatter.lastUpdated; + const [Istool, setIstool] = useState(true); const memoToc = React.useMemo(() => { let toc = meta.toc; if (tabMeta) { @@ -44,7 +46,7 @@ const Toc: FC = () => { return toc.filter(({ depth }) => depth > 1 && depth < 4); }, [meta, tabMeta]); const locale = useLocale(); - + useEffect(() => { // wait for page component ready (DOM ready) if (!loading) { @@ -78,25 +80,28 @@ const Toc: FC = () => { return ( <> -
-
-
- {' '} - {/* */} - -
-
- - {' '} - - -
-
-
+ { + !blogDet &&
+
+
+ {' '} + {/* */} + +
+
+ + {' '} + + +
+
+
+ } + {sectionRefs.length ? ( <> diff --git a/.dumi/theme/styles/variables.less b/.dumi/theme/styles/variables.less index 9ff5748..5102d99 100644 --- a/.dumi/theme/styles/variables.less +++ b/.dumi/theme/styles/variables.less @@ -1,5 +1,5 @@ @prefix: dumi-default; -@s-content-width: 1200px; +@s-content-width: 1000px; @s-content-padding: 48px; @s-sidebar-width: 248px; @s-header-height: 100px; diff --git a/.dumi/tsconfig.json b/.dumi/tsconfig.json index 3294314..88a399e 100644 --- a/.dumi/tsconfig.json +++ b/.dumi/tsconfig.json @@ -1,9 +1,11 @@ { "compilerOptions": { - "jsx": "react", + "jsx": "react" }, "extends": "../tsconfig.json", - "include": [ - "**/*" - ] + "include": ["**/*"], + "paths": { + "@/*": ["./src/*"], + "@@/*": ["./src/.umi/*"] + } } diff --git a/.dumirc.ts b/.dumirc.ts index 251bcc7..f63546e 100644 --- a/.dumirc.ts +++ b/.dumirc.ts @@ -21,5 +21,7 @@ export default defineConfig({ mfsu: false, resolve: { forceKebabCaseRouting: false, - } + }, + extraRemarkPlugins: ['remark-math'], + extraRehypePlugins: ['rehype-katex'] }); diff --git a/.gitignore b/.gitignore index 5e00b62..33d9ddd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules .dumi/tmp .dumi/tmp-production .DS_Store -cp_docs.sh \ No newline at end of file +.node +package-lock.json diff --git a/docs/blogDetails/001.en-US.md b/docs/blogDetails/001.en-US.md new file mode 100644 index 0000000..a2dbbfd --- /dev/null +++ b/docs/blogDetails/001.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-06-05' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/001.zh-CN.md b/docs/blogDetails/001.zh-CN.md new file mode 100644 index 0000000..83f353f --- /dev/null +++ b/docs/blogDetails/001.zh-CN.md @@ -0,0 +1,54 @@ +--- +title: 'ACL 2024|D2LLM:将Causal LLM改造成向量搜索模型的黑科技' +time: '2024-06-05' +toc: content +--- + +Thank you for your interest in the Codefuse project. We warmly welcome any suggestions, opinions (including criticisms), comments, and contributions to the Codefuse project. + +Your suggestions, opinions, and comments on Codefuse can be directly submitted through GitHub Issues. + +There are many ways to participate in the Codefuse project and contribute to it: code implementation, test writing, process tool improvement, documentation enhancement, and more. We welcome any contributions and will add you to our list of contributors. + +Furthermore, with enough contributions, you may have the opportunity to become a Committer for Codefuse. + +For any questions, you can contact us for timely answers through various means including WeChat, Gitter (an instant messaging tool provided by GitHub), email, and more. + +## Getting Started + +If you are new to the Codefuse community, you can: + +- Follow the Codefuse GitHub repository. +- Join related WeChat groups for Codefuse to ask questions at any time; + +Through the above methods, you can stay up-to-date with the development dynamics of the Codefuse project and express your opinions on topics of interest. + +## Contributation Ways + +This contribution guide is not just about writing code. We value and appreciate help in all areas. Here are some ways you can contribute: + +- Documentation +- Issues +- Pull Requests (PR) + +### Improve Documentation + +Documentation is the main way for you to understand Codefuse and is also where we need the most help! + +By browsing the documentation, you can deepen your understanding of Codefuse and also help you grasp the features and technical details of Codefuse. If you find any issues with the documentation, please contact us in time; + +If you are interested in improving the quality of the documentation, whether it is revising an address of a page, correcting a link, or writing a better introductory document, we are very welcoming! + +Most of our documentation is written in markdown format. You can directly modify and submit documentation changes in the docs/ directory on GitHub. For submitting code changes, please refer to Pull Requests. + +### If You Discover a Bug or Issue + +If you discover a bug or issue, you can directly submit a new Issue through GitHub Issues, and someone will handle it regularly. For more details, see Issue Template.[Issue Template](/contribution/issue) + +You can also choose to read and analyze the code to fix it yourself (it is best to communicate with us before doing so, as someone might already be working on the same issue), and then submit a Pull Request. + +### Modify Code and Submit a PR (Pull Request) + +You can download the code, compile, install, and deploy to try it out (you can refer to the compilation documentation to see if it works as you expected). If there are any issues, you can directly contact us, submit an Issue, or fix it yourself by reading and analyzing the source code. For more details, see[How to Submit a PR.](/contribution/pr) + +Whether it's fixing a bug or adding a feature, we warmly welcome it. If you wish to submit code to Doris, you need to fork the code repository to your project space on GitHub, create a new branch for your submitted code, add the original project as an upstream, and submit a PR. The method for submitting a PR can be referenced in the Pull Request documentation. diff --git a/docs/blogDetails/20231101.en-US.md b/docs/blogDetails/20231101.en-US.md new file mode 100644 index 0000000..4206a4d --- /dev/null +++ b/docs/blogDetails/20231101.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2023-12-11' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20231101.zh-CN.md b/docs/blogDetails/20231101.zh-CN.md new file mode 100644 index 0000000..f2cae6a --- /dev/null +++ b/docs/blogDetails/20231101.zh-CN.md @@ -0,0 +1,7 @@ +--- +title: '在 Visual Studio Code 中使用 CodeFuse' +time: '2023-11-01' +toc: content +--- + +https://codefuse.yuque.com/eoxx1u/codefuse/vscode-extension diff --git a/docs/blogDetails/20231211.en-US.md b/docs/blogDetails/20231211.en-US.md new file mode 100644 index 0000000..4206a4d --- /dev/null +++ b/docs/blogDetails/20231211.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2023-12-11' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20231211.zh-CN.md b/docs/blogDetails/20231211.zh-CN.md new file mode 100644 index 0000000..13c4cb8 --- /dev/null +++ b/docs/blogDetails/20231211.zh-CN.md @@ -0,0 +1,62 @@ +--- +title: '蚂蚁CodeFuse新版发布,前端能力优化,支持安卓开发' +time: '2023-12-11' +toc: content +--- + +蚂蚁百灵研发助手 CodeFuse 插件发布新版,本版本新增支持 Android Studio,并针对 JavaScript、TypeScript 等前端语言优化了模型效果,同时还将输出 Token 增加到最多 1024 个。 + +目前 CodeFuse 处于邀请测试阶段,欢迎各位开发者前往官网申请资格参与测试。在之前已安装插件的用户需要下载最新版本,才可享受 CodeFuse 插件最新能力。 + +CodeFuse 产品官网:[https://codefuse.yuque.com/](https://link.zhihu.com/?target=https%3A//codefuse.yuque.com/) + +# 新版功能更新一览 + +## 新增 Android Studio 支持 + +CodeFuse 插件新增兼容 Android Studio,目前支持的 IDE 达到 11 款,包括 Visual Studio Code、IDEA 等主流 IDE。在官网下载安装对应的插件即可使用。 +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*CtcTRabVhgMAAAAAAAAAAAAADlHYAQ/original) + +## 优化前端代码能力 + +新版插件针对 JavaScript、TypeScript 等前端语言优化了模型效果,提升代码补全的准确率。据蚂蚁内部使用情况统计,前端代码生成的采纳率相比旧版提升了 20%。 +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*g0T-T7MiwzMAAAAAAAAAAAAADlHYAQ/original) + +如上例子所示,根据注释,CodeFuse 可直接生成较复杂的 JavaScript 完整函数,实现字符串匹配算法,并在测试中取得预期结果。 + +其它新功能包括:插件面板顶部新增“研发小蜜”产品答疑入口和“退出登录”功能;增加输出 Token,目前最大输出不超过 1024 Tokens;插件面板适配 VS Code 浅色主题等。 + +# CodeFuse 让研发变得更简单 + +10 月 24 日,蚂蚁百灵研发助手 CodeFuse 对外发布 IDE 插件,面向全体开发者开启邀请测试。蚂蚁很早就开始在代码智能生成领域发力,从零到一,最终打造了 CodeFuse。CodeFuse 已经率先在蚂蚁内部广泛使用,汲取工程师们的反馈不断成长,这些积累多年的实战经验也融合在 CodeFuse 的每一行代码里。 + +目前 CodeFuse 插件能力包括: + +1. 代码补全,基于海量数据提供实时地代码补全服务,提升编码效率。 +2. 代码优化,基于代码理解能力和静态源码分析能力,对选定代码段进行分析理解,提出优化和改进建议。 +3. 代码注释,通过智能分析,CodeFuse 可以准确解释代码含义、添加代码注释。 +4. 解释代码,基于大量高质量的代码数据训练,准确解释代码含义。 +5. 生成单测,智能生成具备业务语义的测试用例。 + +自 CodeFuse 对外发布以来,在开发者群体获得广泛反响。 + +有参与测试的用户表示,CodeFuse 生成代码的效果很好,基本能够满足需求。 +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*cbl1Q6k9JAcAAAAAAAAAAAAADlHYAQ/original) + +在蚂蚁内部,CodeFuse 更是成为很多工程师的日常必备工具,很多技术同学利用它提升工作效率,挖掘它的更多玩法。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*IFgxT7sY9B8AAAAAAAAAAAAADlHYAQ/original) + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*IFgxT7sY9B8AAAAAAAAAAAAADlHYAQ/original) + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*mDsYQ4Q9RRQAAAAAAAAAAAAADlHYAQ/original) + +更多使用实践,推荐阅读这篇对蚂蚁研发工程师悟鸣的用户访谈: + +新时代的程序员,已经在用大模型写代码了 + +# 邀测火热进行中 + +过去的一个多月时间,除了大家能够看到的新功能,在背后研发和产品同学也做出了很多不为人知的努力,以给大家提供更好的体验。CodeFuse 也将持续进化,让研发变得更简单。 + +CodeFuse 的邀请测试正在火热进行中,欢迎大家前往官网申请测试资格: diff --git a/docs/blogDetails/20231220.en-US.md b/docs/blogDetails/20231220.en-US.md new file mode 100644 index 0000000..b403385 --- /dev/null +++ b/docs/blogDetails/20231220.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2023-12-20 ' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20231220.zh-CN.md b/docs/blogDetails/20231220.zh-CN.md new file mode 100644 index 0000000..18ac361 --- /dev/null +++ b/docs/blogDetails/20231220.zh-CN.md @@ -0,0 +1,263 @@ +--- +title: 'DevOps-ChatBot:DevOps开源端到端智能AI助手' +time: '2023-12-20' +toc: content +--- + +## DevOps-ChatBot:DevOps 开源端到端智能 AI 助手 + +## 项目背景 + +随着 ChatGPT 等通用大模型以及各类垂直领域大模型的出现,各个领域的产品交互模式、用户信息获取模式都在逐步发生改变。但通用大模型自身存在的生成内容不可靠、信息内容不及时、领域任务不完善的问题始终存在,面向 DevOps 这个对于事实的准确性、信息的及时性、问题的复杂性、数据的安全性要求都比较高的领域,大模型该如何赋能?为此,我们发起并开源 DevOps-ChatBot 端到端 AI 智能助手,专为软件开发的全生命周期而设计:通过 DevOps 垂类知识库 + 知识图谱增强 + SandBox 执行环境等技术来保障生成内容的准确性、及时性并让用户交互修改代码编译执行,确保答案的可靠性;通过静态分析技术 + RAG 检索增强生成等技术来让大模型感知上下文,实现代码库级别的组件理解、仓库项目级的代码文件修改、生成,不单单只是函数片段级的代码补齐;通过完善链路级的 Multi-Agent 调度设计、协同知识库、代码库、工具库、沙盒环境,来让大模型可以实现 DevOps 领域复杂多步骤的任务;并且通过 DevOps 领域专属的领域模型和评测数据构建支持私有化部署来保障数据的安全性,以及特定任务的高可用性。 + +我们期望通过本项目逐步改变原有的开发运维习惯,从各处资料查询、独立分散平台操作的传统开发运维模式转变到大模型问答的智能化开发运维模式,让“天下没有难做的 Coder”。 + +GitHub 项目地址:[https://github.com/codefuse-ai/codefuse-chatbot](https://github.com/codefuse-ai/codefuse-chatbot) + +## 核心功能 + +项目整体架构简图如下: +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*74VETLyl6iUAAAAAAAAAAAAADlHYAQ/original) + +- 🕷️ Multi Source Web Crawl:网络爬虫,提供对指定 url 爬取相关信息的能力 +- 🗂️ Data Process:数据处理模块,提供文档加载器、数据清洗、文本切分的功能,处理和整合多源格式的数据文档 +- 🗄️ Text Embedding Index:文档分析核心,通过文档上传即可实现文档检索 +- 📈 Vector Database & Graph Database:向量数据库和图数据库,用于数据管理 +- 🧠 Multi-Agent Schedule Core:多智能体调度核心,通过简易配置即可构建所需交互智能体 +- 📝 Prompt Control:Prompt 控制与管理模块,定义 Agent 的上下文管理 +- 🚧 SandBox:沙盒模块,提供代码编译执行和动作执行的环境 +- 💬 LLM:智能体大脑,可支持多种开源模型和 LLM 接口范围 +- 🛠️ API Management:API 管理组件,快速兼容相关开源组件和运维平台 + +在上述功能模块的组装协同下,本项目核心差异技术、功能点: + +- 智能调度核心:体系链路完善的调度核心、多模式一键配置,详见 2.1 章节 +- 代码整库分析:仓库级代码理解、项目文件级代码编写生成,详见 2.2 章节 +- 文档分析增强:文档知识库结合知识图谱的检索、推理增强,详见 2.3 章节 +- 垂类专属知识:DevOps 专属知识库、垂类知识库自助一键构建,详见 2.4 章节 +- 垂类模型兼容:DevOps 领域小模型、DevOps 周边平台兼容,详见 2.5 章节 + +### Multi-Agent Schedule Core/智能调度核心 + +在处理复杂问题时,我们可以通过 ReAct 过程来选择、调用和执行工具反馈,同时实现多轮工具使用和多步骤执行。但对于更复杂的场景,例如复杂代码的开发,单一 LLM Agent 难以胜任。因此,社区开始发展出多 Agent 的组合玩法,比如专注于开发领域的 metaGPT、GPT-Engineer、chatDev 等项目,以及专注于自动化构建 Agent 和 Agent 对话的 AutoGen 项目。 +经过对这些框架的深入分析,发现大多数 Agent 框架的整体耦合度较高,其易用性和可扩展性较差。在预设场景中实现特定场景,但想要进行场景扩展却困难重重。因此,我们希望构建一个可扩展、易于使用的 Multi-Agent 框架,通过简易的配置即可辅助完成日常办公、数据分析、开发运维等各种通用任务。 +_ \* 本项目的 Mutli-Agent 框架汲取兼容了多个框架的优秀设计,比如 metaGPT 中的消息池(message pool)、autogen 中的代理选择器(agent selector)等。_ +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*ihweQJRBkzQAAAAAAAAAAAAADlHYAQ/original) +以下将从 6 个方面介绍 Multi Agent 框架核心要素: + +1. **Agent Communication**:Agent 之间有效的信息交流对于上下文管理以及问答效率提升至关重要。 + 1. 遵循简洁直观易于理解的链式对话原则,将 Agent 以线性方式排列串连成一个执行链路。 + 2. 借鉴 metaGPT 的 Message Pool 框架,允许 Agent 对 Message Pool 进行推送和订阅,使链路更加灵活。 +2. **Standard Operation Process(SOP)**:对 LLM 的生成结果进行标准化解析和处理。 + 1. 定义 Agent 的 Input 和 Output 范围,能够组装和解析相关 Action 和 Status,保证框架运行的稳定性。 + 2. 定义多种 SOP 标识,如 Tool、Planning、Coding、Answering、finished 等,满足 Agent 的基本需求。 +3. **Plan and Executor**:增加 LLM 的 Tool 使用、Agent 调度、代码的生成。设置了几种基本链路,例如: + 1. 单轮问答,也可以扩展到 CoT、ToT、GoT 等形式。 + 2. ReAct,基础的响应决策过程,模型设置 SOP 状态以终止循环。 + 3. TaskPlaning - Executor,任务完成即可结束。 +4. **Long-short term memory Management**:为了模拟人类团队协作过程,增加一个专门负责内容总结(类似于会议助理)的 Agent,对长期记忆进行总结并提更有效的信息进行传递。 +5. **Human-agent interaction**:面对复杂场景,由人类介入 Agent 交互过程并提供反馈,使 LLM 能准确理解人类的意图,从而更有效地完成任务。 +6. **Prompt Control and Management**:负责协调和管理各 Agent 间的 Prompt 交互,提升系统的复杂性控制和交互效率 + 1. Prompt 输入采用 Markdown 结构化设计,分为角色描述、用户问题与任务、相关检索信息、输出格式、历史记录与记忆管理等,提高 Prompt 的透明度和易操作性,简化用户交互。 + 2. 输出同样使用 Markdown 结构化设计,以实现清晰规范的结果展示,方便用户阅读和后续解析,支持系统扩展和与其他平台的集成。 + 3. 引入标准化的代码块隔离机制(使用三个反引号"```"),优化 Code 和 Json 数据输出与解析,增强用户的可读性和交互体验。 + +总体来说,这 6 个核心要素共同组成 Multi Agent 框架,确保 Agent 之间的协作更加紧密和高效,同时也能够适应更复杂的任务需求和更多样的交互场景。通过组合多个 Agent 链路来实现一个完整且复杂的项目上线场景(Dev Phase),如 Demand Chain(CEO)、Product Arguement Chain(CPO、CFO、CTO)、Engineer Group Chain(Selector、Developer1~N)、QA Engineer Chain(Developer、Tester)、Deploy Chain(Developer、Deploer)。 + +### Code Repo RAG/代码整库分析 + +现阶段 LLM 面向开发的主要使用在代码的生成、修复以及组件的理解任务上,通过各类网络文档类&代码类数据(计算机书籍、计算机论坛等)的收集、然后针对模型进行加训以及特定代码类任务微调来实现,以这条思路构建了各种开源/闭源的通用 LLM、专有 LLM。但这类大模型面临的一个挑战就是训练数据往往只包含某个时间节点之前的公开代码数据,针对频繁更新的开源/私有仓库存在数据信息的不及时以及 LLM 天然存在的幻觉,同时 LLM 往往无法感知代码仓库的上下文以及天然的代码库依赖结构,导致生成的结果往往不符合用户的要求。 + +我们首先通过对于周边开发工程师的调研,归纳开发中遇到的主要问题如下图所示,可以看到在开发的过程中,除开代码逻辑的开发(这往往占用的耗时并不长),现有代码库、依赖包的理解,代码检索、元信息查询等占用的时间也许更长(这里面没有列举需求的理解以及系分文档等的编写,这块也会作为接下来演进的重点): +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*yrVwRqQPF9QAAAAAAAAAAAAADlHYAQ/original) +针对如上问题,我们期望通过结合程序分析获取代码的逻辑结构并存入知识图谱,在此基础上通过 RAG 迭代查询增强获取必要的上下文信息,并结合 multi-agent 分角色扮演,来实现大模型和代码库的有机结合,做到让大模型真正成为面向实际业务使用的万能助手,而不仅仅是刷各种 benchmark 的工具。 +核心模块介绍: + +- 代码结构分析 + - 代码分析中,我们会针对代码原文进行清洗和去重(比如单测文件),这是为了保留住有价值的代码部分。然后我们会通过静态分析的手段,从代码库中挖掘到代码之间的依赖图,同时我们通过还会借助于大模型的理解能力来针对代码进行解读,在生成的结构化信息图谱中作为重要的补充。这些手段的目的都是要从代码库中将尽可能多的代码信息挖掘出来以供后续检索模块来通过不同的方式来检索信息。 +- 代码检索生成 + - 在代码检索模块中,我们当前提供了三种不同的检索模式,分别会针对用户问题的侧重点不同来自动选择最适合的检索模式。Cypher 检索生成重要面向用户对于代码库结构的理解(比如元信息查询等),图谱检索主要面向用户对于代码类&方法的检索定位以及代码的自动生成。由于程序分析整体的拓展性会比较差,面向新的编程语言、面向私有化的中间件等都会涉及到定制需求的开发,同时从人的角度出发,在开发的过程中并不会用到程序分析的信息,我们同时也在探索通过 multiagent 的模式,迭代搜索代码仓库获取上下文信息,同时有另其他 agent 来负责阶段性提炼总结信息以及结果生成等其他任务,目前还在实验中,敬请期待。 + +### Doc Repo RAG/文档分析增强 + +大模型具备强大的生成能力,但在涉及到专业领域知识问答(比如医疗、通讯等),以及私有知识问答(私域数据),容易出现幻觉导致生成的答案不可信。最直观的解决方案是通过将特定/私有领域的数据加训来增强模型相关的知识,但训练大模型开销巨大,且生成结果不稳定&幻觉仍然比较严重,第二条路是结合搜索(比如 Bing 的做法),但面向海量的私域文档以及领域的限定,单独构建搜索引擎仍然不是一条靠谱的路径。我们最终选择知识库外挂的手段,通过检索增强生成的方式,将与问题相关的数据从数据库中检索出来,作为额外知识输入到大模型中,保障结果的可靠性&实时性,同时避免训练开销。 + +如果更精准的搜索检索是本模块核心要解决的问题?为此,我们整体的架构图如下: + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*dTkVQpT5Xc8AAAAAAAAAAAAADlHYAQ/original) +整个 DocSearch 含有三种检索链路 + +1. 传统的文档向量数据库查询 + +文档向量数据库是当前最主流的知识库构建方法。其特点在于每一个原子单位是自然语言文档。在构建知识库时,需结合 Text Embedding 模型对文档进行 Embedding 并在向量数据库中存储。本项目采用私有化 Embedding 模型,支持其它私有部署和隐私相关场景,并提供其它专有模型接入和选择。在此之后,则需根据不同情况,选择不同的检索策略将知识库中相应的知识抽取出来,后续本项目将结合学术界上下文学习(in-context learning)的最新成果,提供多种数据库检索方式,包括 Similarity、Random 、Auto-CoT、Complex-CoT、Meta-CoT 等。 + +2. 知识图谱查询 + +知识图谱(Knowledge Graph)主要是用于描述现实世界中的实体、概念及事件间的客观关系,擅长处理事物之间的多种复杂关系网络,在搜索/问答/大数据分析中具有重要作用。本项目采用 Nebula 图数据库对知识图谱进行存储和管理,支持导入现有知识图谱进行进行知识检索。当只有文本数据时,也支持通过大模型的方式自动抽取实体和关系来生成知识图谱,从而挖掘出数据中多种复杂关系。同时我们在实际实验中观测到,在不少场景中,相比纯文本的搜索生成,通过图谱可以获得更精准的问答效果。 + +3. 知识图谱推理 + 向量数据查询 + +当用户同时存在文档数据库和知识图谱数据时,本项目也提供两者的融合搜索。具体的,对每篇文档提取 tag,然后根据用户的提问,知识图谱上搜索相关的 tag 同时基于其领域得到扩充到 tag 集合。最后,基于扩充版本的 tag 集合以及文档向量数据库中的相似度距离,检索出与原问题相关的文档。这种结合能有效的解决很多“行话”可能只有特定专业领域的人才熟悉,而大模型由于没有这个知识背景而检索出错误的结果,后续我们也会为 devOps 领域来构建专门的“行话图谱” +用户可以选择自己想要采用的链路,也可以三个都进行选择来获取三种不同的结果。 + +### DataHub Auto-Construction&DevOps DataHub/知识库构建&DevOps 知识库 + +如 2.3 章节的介绍,通过知识库外挂的手段可以很好的解决专有/私域知识问答的问题,构建智能助手/智能客服等业务应用。同时,我们介绍了增强检索生成的方案。接下来的核心问题是如何更好的构建知识库。 +直接梳理海量数据源并构建知识库时常常会面对以下问题: + +1. 数据的获取和整合:不同的数据源之间存在格式不一致、质量参差不齐的问题 +2. 数据清洗:在数据量巨大的情况下,如何自动化地识别和剔除错误、重复或无关紧要的数据 +3. 垂直领域知识的整合:在专业或技术性强的领域,知识库构建需要依赖于专业知识,从而使系统能够参照专业知识来自动化地理解复杂的术语和概念。 +4. 知识库的更新和维护:知识库需要定期更新,保持信息的准确性和时效 + +基于此,我们的整体架构如下:1)通过 Crawler 模块实数据的搜集;2)通过 Loader 模块实现多源异构数据的导入;3)Filter Func 模块实现数据的过滤清洗;4)TextAnalyzer 模块实现对数据的智能化分析;5)Pipeline 模块串联整个过程。 + +1. **Crawler/爬虫**:定期网络文档爬取,保障数据更新的及时性,由于 DevOps 数据的广泛分布,也期望大家能持续贡献网页来源 +2. **Loader/文档加载器**:处理和整合来自不同渠道的爬取数据,并支持用户私有文档库、代码库、知识图谱等的导入,灵活应对多样化的数据需求 +3. **Filter Func/清洗过滤**:通过对数据中的文本内容、代码段和特殊字符进行仔细的清洗和去重处理,确保后续分析的准确性和高效性。 +4. **TextAnalyzer/文本分析器**:进行深入的文本分类、信息提取、文档切割以及摘要和总结,这一模块是智能化处理的体现,它将复杂的文本数据转化为结构化(包含知识图谱)、易于理解的信息。 +5. **Pipeline/管道**:将上述模块紧密串联,形成连贯的处理流。优化数据处理的过程,实现了数据输入到清洗完毕输出的端到端自动化。 + +我们接下来会注重于 DevOps 领域数据的收集和构建,同时这条标准化的数据获取&清洗能力&智能化处理也期望为更多的私有知识库构建提供帮助。 + +### DevOps Model&Platform Compatible/DevOps 平台&模型兼容 + +随着大型语言模型(LLM)的出现,我们不仅见证了问题解决方式的变革,比如智能客服系统从依赖小规模模型微调和固定规则转向更为灵活的智能体交互,而且产品交互模式也正在经历重大的转变。我们期望和周边开源的 DevOps 平台打通兼容,通过 API 的注册、管理和执行能够实现对话式交互,驱动完成各种特定任务(数据查询、容器操作等)。 +同时我们也该意识到大模型目前并非适用于所有领域。在面对特定的领域任务,尤其是数值计算类任务(如异常检测/智能告警、组合优化/容器调度等),小型模型仍然占有独特的优势。它们在效果、计算效率和资源消耗方面经常领先于大型模型。因此,我们也通过将这些专门的模型以 API 的形式进行注册、管理和执行,来实现它们的集成和应用。为了能够让本项目快速兼容相关开源组件和运维平台,我们通过 python 注册模板可快速接入各种 Restful API 的注册和执行,也可以转换为 Swagger 结构。 +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*dTkVQpT5Xc8AAAAAAAAAAAAADlHYAQ/original) +通过继承`BaseToolModel`类,可编写相关的 tool_name、tool_description、ToolInputArgs、ToolOutputArgs、run 等相关属性和方法即可实现工具的快速注册。 + +1. 通过 FastChat 启动私有模型的推理服务或者其它 Restful 风格的 API,如 Qwen2.0、文心一言等,也可以注册成可用工具,给到 LLM 进行调度使用 +2. 也可注册蚂蚁集团相关开源项目和运维平台的 API,通过 Multi-Agent 框架与 LLM 简单对话即可完成相关运维操作和 API 能力调用,帮你解决相关开发、运维问题! + +目前已封装工具清单如下:k-sgima 异常检测、代码检索、文档检索、duckduckgo 搜索、百度 ocr 识别、股票信息查询、天气查询、时区查询。 + +### 总结&未来展望 + +ChatGPT 面向公众开放将近一年的时间里,涌现了许多优秀的开源与闭源模型及框架。从今年 4 月份开始,我们团队便深入探索 DevOps 领域大模型和业务落地,这个过程中我们经历了不少挑战。从最初搜集内部文档、代码以及网络开源数据进行模型的加强训练,到现阶段模型与框架的紧密结合。我们认为大模型在 DevOps 领域最可靠的落地方式或者说在真正意义上替代人工完成任务,还需结合面向知识库&代码库的 RAG(增强事实问答和逻辑推理的能力),解决特定领域任务的专有能力(领域任务微调增强)以及逻辑推理&语义理解的通用能力。这正是我们构建 ChatBot 的初衷,我们通过完善链路级的 Multi-Agent 调度设计,协同知识库、代码库、工具库、沙盒环境,来让大模型能够在 DevOps 领域处理复杂的多步骤任务。 +目前我们开源的 DevOps 框架还处于初期,还有很多不完善的地方,接下来我们会在如下方面做核心演进。 +1)Multi-Agent Schedule Core/多智能体调度核心 + +- 通过 Agent-Selector 实现 Agent 的智能调度 +- 实现代码自动编写、代码测试等功能 +- 支持用户私人定制的个性化使用场景 + +2) Agent&Prompt 工程 + +- Agent Prompt 解耦,后续只需编写 Agent 的 Task Prompt,即可实现整体功能运转 +- 将知识库信息、代码库信息、搜索信息、工具信息、以及各种 Agent、Chain、Phase 的历史交互信息进行综合管理并构造 prompt +- 提供 Agent Manager,在 UI 上可实现 Agent、Chain、Phase 的定义、注册、串联 +- 通过 LLM 自动构建和编排 Phase、Chain、Agent 的交互逻辑 + +3) 知识库构建 + +- 提供数据获取、清洗、结构化管理等多种能力 +- 构建面向不同垂直领域的知识库数据 + +4) 知识库检索&知识图谱增强 + +- 基于用户提供的文档,实现文本类知识库构建功能,并提供 List Index、Vector Store Index 等多种文本知识库索引方式 +- 对用户查询提供多种修正方式,包括且不限于意图识别/意图补充/意图修复等 +- 结合学术界知识图谱的最新成果,提供多种知识图谱检索方式,包括 TOG(think on graph)等。 + +5) 代码整库分析 + +- 细化代码解析提取功能,丰富代码图谱 schema +- 知识图谱数据库选型+实现 +- 文档数据库选型+实现 + +* 为了减少本项目非核心工作的开发,避免重复造轮子,对 Github 上与 LLM 相关的热门项目进行调研分析后,通过复用以下项目(不局限于下图所展示的内容)来构建本项目的其它非核心组件。 + +- LLM 框架类 + - langchian:LangChain 是一个用于开发由语言模型驱动的应用程序框架。作为本项目的组件串联模块,负责 Prompt、LLM、Vector Database、Knowledge Graph Database 之间的交互调度。 +- LLM 模型类:可接入 Qwen、LLaMa、Opeani,作为 Agent 的大脑,提供文本问答、行为决策的能力 + - Qwen:阿里云研发的通义千问大模型系列的 70 亿参数规模的模型 + - LLaMa:是 Meta 发布的大型语言模型,旨在提供一种高性能、开源的文本生成工具。 + - Openai:提供 chatGPT 模型服务 +- 向量数据库 + - Faiss:faiss 是一个 Facebook AI 团队开源的库,针对高维空间中的海量数据(稠密向量),提供了高效且可靠的相似性聚类和检索方法。本项目基于此库支持知识库检索的功能 +- LLM 训练推理 + - FastChat:FastChat 是一个智能易用的大型语言模型推理服务。本项目可基于[FastChat](https://github.com/lm-sys/FastChat)为其它私有模型或涉及隐私的场景提供专有模型选择和部署支持,本项目默认使用 GPT-3.5-turbo +- 其他功能组件 + - SandBox:提供了一个交互验证环境(基于 Jupyter NoteBook),帮助用户判断 LLM 生成代码的真实性,并支持用户通过接口完成代码调整和内容交互。还可通过容器实现环境隔离,保证代码执行安全。 + +## 功能介绍 + +### 功能页面 + +**文本知识库管理 ** + +- 文本切换、文本向量化服务、知识库的向量检索服务 +- 提供多个知识库的创建、管理、下载等功能,支持 PDF、TXT、JSON、JSONL、MD 等文件的上传 +- 还支持爬虫进行实时 url 内容爬取功能,可自动对爬取数据进行自动清洗和知识库加载 + +**知识图谱管理** + +- 支持知识图谱文件上传和管理 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*0K2QRZfG8fQAAAAAAAAAAAAADlHYAQ/original) + +**代码知识库管理** + +- 支持通过 ZIP 上传代码文件 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*6X_5TKXf7hsAAAAAAAAAAAAADlHYAQ/original) +**代码知识库展示页面** + +- 展示这个代码知识库包含的代码文件数和节点数 +- 支持删除知识库功能 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Xk5ARofXIRgAAAAAAAAAAAAADlHYAQ/original) + +**基于 Agent 问答** +我们通过上述页面去构建文本知识库和代码知识库,在本项目中可采用 Multi-Agent 框架来构建多种多样的 Agent 链路,从而实现各种复杂场景的执行。 +目前我们提前封装了一些 Agent 场景,诸如 chatPhase、docChatPhase、searchChatPhase、codeChatPhase、toolReactPhase、codeReachPhase,可支撑知识库问答、代码问答、工具调用、代码执行等功能。 +同时每一个场景我们支持是否进行知识库检索、代码库检索、信息搜索等配置过程,同时可配置相关的工具以供工具进行调度使用。 +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Xk5ARofXIRgAAAAAAAAAAAAADlHYAQ/original) + +### 更多玩法 + +我们在构建 DevOps-ChatBot 的过程中发现这套体系化的能力,除了应用在 DevOps 领域,任何领域貌似也是适用的!大模型解决问题无外乎通过自身知识、知识库增强事实问答、API 解决特定领域任务、代码编程解决计算不足,同时在 Multi-Agent 的调度下可以延伸出很多有意思的玩法。以下玩法可以通过本项目的模块组装构建完成! + +#### 代码解释器(Code Interpreter) + +**场景描述**:上传一个数据文件,自动进行数据分析 +**演示 demo** +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*jZvxQJafZgUAAAAAAAAAAAAADlHYAQ/original)![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*FctISKMummQAAAAAAAAAAAAADlHYAQ/original) + +#### 工具使用 + +**场景描述**:查询某个服务器的基本时序,传入到监控工具中,并进行分析 +**演示 demo** +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*HZ4hSK2bezcAAAAAAAAAAAAADlHYAQ/original) + +#### 智能股票分析(工具+代码解释器) + +**场景描述**: 用户希望通过简单的自然语言查询来获取特定股票的详细信息,包括历史股价图表、市场表现和可能的市场走向。例如,用户想要了解贵州茅台的股票历史及未来走势。 +**演示 demo** +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*NfX4S5NTgxwAAAAAAAAAAAAADlHYAQ/original) + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*kFKoT4tKoggAAAAAAAAAAAAADlHYAQ/original) + +#### 根据上传代码生成测例 + +**场景描述:**针对代码库中的某个方法生成测试用例。导入代码库、选择检索方式为基于标签检索、询问问题 +**演示 demo** + +- 代码内容 +- ![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*lA13TboHhIcAAAAAAAAAAAAADlHYAQ/original) +- 不加代码知识库 + - ![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Sgt1TZ3EPrcAAAAAAAAAAAAADlHYAQ/original) +- 加代码知识库 + - ![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*29-tS46ZYSUAAAAAAAAAAAAADlHYAQ/original) + +## 关于 DevOpsGPT + +DevOpsGPT 是我们发起的一个针对 DevOps 领域大模型相关的开源项目,主要分为三个模块。本文介绍的 DevOps-ChatBot 是其中的问答机器人模块,其目标是基于 LLM 来实现 DevOps 领域 LLM 行业标准评测。此外,还有 DevOps-Model、DevOps-ChatBot 两个模块,分别为 DevOps 领域专属大模型和 DevOps 领域智能助手。我们的目标是在 DevOps 领域,包含开发、测试、运维、监控等场景,真正地结合大模型来提升效率、成本节约。我们期望相关从业者一起贡献自己的才智,来让“天下没有难做的 coder”,我们也会定期分享对于 LLM4DevOps 领域的经验&尝试。 +欢迎使用&讨论&共建 + +(1)ChatBot - 开箱即用的 DevOps 智能助手:[https://github.com/codefuse-ai/codefuse-chatbot](https://github.com/codefuse-ai/codefuse-chatbot) + +(2)Eval - DevOps 领域 LLM 行业标准评测:[https://github.com/codefuse-ai/codefuse-devops-eval](https://github.com/codefuse-ai/codefuse-devops-eval) + +(3)Model - DevOps 领域专属大模型:[https://github.com/codefuse-ai/CodeFuse-DevOps-Model](https://github.com/codefuse-ai/CodeFuse-DevOps-Model) diff --git a/docs/blogDetails/20240119.en-US.md b/docs/blogDetails/20240119.en-US.md new file mode 100644 index 0000000..ae8d642 --- /dev/null +++ b/docs/blogDetails/20240119.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-01-19' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240119.zh-CN.md b/docs/blogDetails/20240119.zh-CN.md new file mode 100644 index 0000000..5e56c77 --- /dev/null +++ b/docs/blogDetails/20240119.zh-CN.md @@ -0,0 +1,93 @@ +--- +title: 'MFTCoder 重磅升级v0.3.0发布,支持Mixtral等更多模型,支持收敛均衡, 支持FSDP' +time: '2024-01-19' +toc: content +--- + +## MFTCoder 简介 + +CodeFuse 在 2023 年 9 月开源了一种多任务微调框架——MFTCoder,它可以实现在多个任务上同时并行地进行微调。通过结合多种损失函数,我们有效地解决了多任务学习中常见的任务间数据量不平衡、难易不一和收敛速度不一致等挑战。大量实验结果显示,相较于单独对单个任务进行微调或者多任务混合为一后进行微调,我们的多任务微调方法表现更优。此外,MFTCoder 具备高效训练特征,包括提供高效的数据 Tokenization 模式和支持 PEFT 微调,能有效提升微调训练速度并降低对资源的需求。MFTCoder 是轻量的,简单清晰的,易于二次开发的,持续跟进 Cutting-Edge 技术的开源微调框架。 +今天,我们对 MFTCoder 进行重磅升级,比如对 Mixtral 这个开源 MoE 的 SOTA 的多任务微调的支持;再比如我们提供了之前论文中提到的收敛均衡技术:Self-Paced Loss。 +MFTCoder 已适配支持了更多的主流开源 LLMs,如 Mixtral、Mistral、Deepseek、 Llama、CodeLlama、Qwen、CodeGeeX2、StarCoder、Baichuan2、ChatGLM2/3、GPT-Neox 等。以 Deepseek-coder-33b-base 为底座,使用 MFTCoder 微调得到的 CodeFuse-Deepseek-33B 在 HumaneEval 测试中 pass@1 得分高达 78.65%(greedy decoding)。 +MFTCoder 的详细介绍在我们之前的公众号文章中:干货!MFTCoder 论文多任务微调技术详解 +MFTCoder 技术细节的论文已经放出到 Arxiv:https://arxiv.org/pdf/2311.02303.pdf; +新升级代码也已经开源到 GitHub:https://github.com/codefuse-ai/MFTCoder/tree/main/mftcoder_accelerate + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*DfeqTpXKE3gAAAAAAAAAAAAADlHYAQ/original) + +## v0.3.0 新特性 Hightlights + +● 首先,新版本已经适配到最新的 transformers v4.36.0, 它能带给我们更好的原生 modeling,进而可以在很多开源模型比如 llama 等训练中有更多的 Attention 实现选择,比如 FlashAttention2,torch 的 SDPA 和最基本的 naive Attention(eager 模式)。这样可以照顾到使用不同硬件的同学。对于最常用的 FlashAttention2, 适配最新的 v2.3.6,让 MFTCoder 可以有效利用最新的 FlashAttention,比如 sliding_window Attention, 进而支持类似 Mixtral 的全部特性。 +● 然后,MFTCoder-accelerate 框架在原有支持 Accelerate+DeepSpeed 的基础上,增加了对 FSDP 的支持,进而升级为 Accelerate + DeepSpeed/FSDP 模式,以便给开发者提供更多选择。DeepSpeed 对 LoRA/QLoRA 更适合,而 FSDP 在全量参数训练方面具备更快的性能。 +● 第三,我们也将 MFTCoder 支持的模型增加了 Mistral, Mixtral-8x7b,Deepseek-coder, Chatglm3 等新的主流开源模型。我们用新版 MFTCoder 训练的 CodeFuse-Mixtral-8x7B, 是通用自然语言大模型经过多代码任务微调后代码能力领先的。而我们用 MFTCoder 训练的 CodeFuse-DeepSeek-33B 更是可以在 BigCode Leaderboard 上以 41.62%的胜率排在目前第一名。 +● 最后,我们引入了 Self-Paced Loss, 作为 MFT 多任务微调收敛均衡的新 loss,它能为我们带来初步的收敛均衡,用过去窗口时间内验证损失来调整不同任务的权重,进而控制不同任务的收敛速度,以达到多个任务同时收敛的目的, 避免一些任务已经过拟合而另一些任务还未收敛。它的效果可以通过以下使用 self-paced loss 和原始 MFT loss 的收敛情况观察到。 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*KpugSL4CbT4AAAAAAAAAAAAADlHYAQ/original) + +## MFTCoder 提升 Mixtral-8x7B 混合专家模型的代码能力实践 + +CodeFuse-Mixtral-8x7B 模型地址: +https://modelscope.cn/models/codefuse-ai/CodeFuse-Mixtral-8x7B +https://huggingface.co/codefuse-ai/CodeFuse-Mixtral-8x7B + +### Mixtral-8x7B 底座代码能力总览 + +Mixtral-8x7B 是由 Mistral AI 开源的自然语言大模型。它是以 Mistral-7B 为基础,将 8 个 7B 模型通过稀疏混合专家(SMoE)模式混合到一起训练的 MoE 模型。作为一个 MoE 模型, Mixtral-8x7B 的每一层的 Attention 是 8 个 expert 共用的,而每个 expert 是一个单独的 FFN/MLP 模块, 通过一个 gate 进行路由,每次推理激活两个 expert。因此 Mixtral 尽管有 8x7B, 实际推理时相当于只用了 12B 的计算。缺点是 Mixtral-8x7B 对于显存的需求依然很大,相当于一个 46B 的模型。 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*m3WcQa0tHzwAAAAAAAAAAAAADlHYAQ/original) + +Sparse MoE: Switching transformer 原理图 来源: https://huggingface.co/blog/moe + +Mixtral-8x7B 本身是一个通用自然语言大模型,并没有对代码进行针对性的加训,但它自身的代码能力在一众非代码大模型中是领先的,基本和 CodeLLama-13B 这个代码大模型性能相当,我们可以将它和一些主流通用自然语言大模型在 HumanEval-X 数据集中五种语言的 Pass@1 评测结果对比如下(用 Greedy 解码统一测试): +| Model | Python| C++ | Java| JavaScript| Go| 平均| +| - | - | - | - | - | - | - | +| Mixtral-8x7B| 41.46% | 40.84% | 53.05% | 45.12% | 23.78%| 40.85%| +| Qwen-14B | 32.93%| 35.37%| 32.93%| 30.49% | 21.34%| 30.61%| +| Baichuan2-13B | 17.1%| 20.73% | 5.49% | 16.45% | 6.71%| 13.30%| +| CodeGeeX2-6B | 35.90%| 30.80%| 32.20%| 29.30%| 22.50%| 30.14%| +| StarCoder-15B | 33.57%| 30.22%| 30.79%| 31.55%| 17.62%| 28.75%| +| CodeLLama-13B | 43.29%| 41.46% | 38.41%| 34.76% | 29.27% | 37.44%| + +Mixtral-8x7B 的成功,为我们提供了关于 MoE 模型的很好地例子,证明了 MoE 模型是一个很好的趋势和方向。因此我们尝试对它进行多代码任务微调,看看它在微调后的代码能力提升如何。同时,Mixtral-8x7B 也为代码大模型使用 MoE 提供了很多值得借鉴的地方,尤其是多任务代码大模型与 MoE 的思路有很多重合之处。 + +### MFTCoder 多任务微调 Mixtral-8x7B + +借助 MFTCoder(v0.3.0)的多任务微调能力,我们可以使用多个代码任务数据集对 Mixtral-8x7B 进行多任务微调(MFT)。在任务选择上,我们精选了 3 个核心代码任务数据,即代码补全(Code Completion),代码生成(Text2Code), 单测生成(Unittest Generation)一共 60w 条指令问答数据。该数据组合包含代码生成的三个基础任务,用基础任务微调对齐过的模型,在各类未训练过的代码任务上也有不错的泛化能力。 +由于 Mixtral-8x7B 参数量比较大,尽管它是稀疏模型,实际计算仅仅类比 12B 模型,但是由于它依然需要 46B 模型所需要的显存,因此训练采用 MFTCoder 的多任务 QLoRA 微调模式,且代码任务属于相对复杂任务,我们对更多的模块进行微调,微调的模块我们采用和之前稍有区别的策略,只微调 Attention,相应的配置如下: + +```python +{ + "lora_rank": 96, + "lora_alpha": 32, + "lora_dropout": 0.05, + "targeting_modules": ["q_proj", "k_proj", "v_proj", "o_proj"] + } +``` + +对以上数据进行了约 5 个 Epoch 的训练到收敛。训练过程 loss 情况如下图所示: + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*J7mASosmm_4AAAAAAAAAAAAADlHYAQ/original) + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*IbFHTbBqW5oAAAAAAAAAAAAADlHYAQ/original) + +通过多任务微调,CodeFuse-Mixtral-8x7B 的各方面代码能力均有比较大的提升。 + +### CodeFuse-Mixtral-8x7B 模型效果 + +对 Mixtral-8x7B 进行多代码任务微调后,CodeFuse-Mixtral-8x7B 在 HumanEval-X 数据集中五种语言的 Pass@1 评测结果对比如下(用 Greedy 解码统一测试),我们同时用开源的通用自然语言大模型的 Qwen-14B 以及 CodeFuse-Qwen-14B 的代码能力做比较。 +|Model| Python| C++| Java| JavaScript| Go| 平均| +| - | - | - | - | - | - | - | +|CodeFuse-Mixtral-8x7B| |56.1% |50.6% |57.3% |56.7%| 43.3% |52.8%| +|Mixtral-8x7B |41.5%| 40.8% |53.1%| 45.1% |23.8% |40.9%| +|CodeFuse-Qwen-14B| 48.8% |41.5% |46.3% |38.4% |26.8% |40.4%| +|Qwen-14B |32.9% |35.4% |32.9% | 30.5%| 21.3%| 30.6%| + +可以看出, CodeFuse-Mixtral-8x7B 在 Mixtral-8x7B 的基础上,各语言代码能力(HumanEval-X)均有明显提高, 比 Mixtral-8x7B 平均 pass@1 提高 12%, 达到 40.9% -> 52.8%。这是目前开源的非代码大模型经过多任务代码微调后较为领先的。 +联系我们 +MFTCoder 最新版本 v0.3.0 已经开源,感兴趣的同学可以用版本 tag 或者持续跟踪 main 分支,本文中提到的模型和数据集也在陆续开源中,如果您喜欢我们的工作,欢迎试用、指正错误和贡献代码,可以的话请给我们的项目增加 Star 以支持我们。 + +● GitHub 项目主页:https://github.com/codefuse-ai/MFTCoder + +● HuggingFace 主页:https://huggingface.co/codefuse-ai + +● 魔搭社区主页:https://modelscope.cn/organization/codefuse-ai diff --git a/docs/blogDetails/20240123.en-US.md b/docs/blogDetails/20240123.en-US.md new file mode 100644 index 0000000..05591ab --- /dev/null +++ b/docs/blogDetails/20240123.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-01-23' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240123.zh-CN.md b/docs/blogDetails/20240123.zh-CN.md new file mode 100644 index 0000000..ec6c571 --- /dev/null +++ b/docs/blogDetails/20240123.zh-CN.md @@ -0,0 +1,200 @@ +--- +title: 'NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量化和推理优化实践' +time: '2024-01-23' +toc: content +--- + + + +# 概述 + +CodeFuse([https://github.com/codefuse-ai](https://github.com/codefuse-ai))是由蚂蚁集团开发的代码语言大模型,旨在支持整个软件开发生命周期,涵盖设计、需求、编码、测试、部署、运维等关键阶段。 + +为了在下游任务上获得更好的精度,CodeFuse 提出了多任务微调框架(MFTCoder),能够解决数据不平衡和不同收敛速度的问题。 + +通过对比多个预训练基座模型的精度表现,我们发现利用 MFTCoder [1,2] 微调后的模型显著优于原始基座模型。其中,尤为值得关注的是采用了 MFTCoder 框架,并利用多任务数据集进行微调的 CodeFuse-CodeLlama-34B[3] 模型,在 HumanEval 评估数据集中取得了当时的最好结果。具体来说,基于 CodeLlama-34b-Python 模型进行微调的 CodeFuse-CodeLlama-34B 在 HumanEval-python 上实现了 74.4% 的 pass@1(贪婪解码)。以下是完整的代码能力评估结果:
![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1722501246587-5332b483-888e-4fc4-bc23-6e9220386061.webp#clientId=u82881e86-50b2-4&from=paste&id=wAhTK&originHeight=577&originWidth=940&originalType=url&ratio=1.3499999046325684&rotation=0&showTitle=false&status=done&style=none&taskId=ud6b23dd2-bde3-4716-ad51-a5e7bc42b70&title=)
在代码补全、text2code、代码翻译、单测生成以及代码生成任务上,CodeFuse-CodeLlama-34B 全面超过 GPT-3.5;CodeFuse-CodeLlama-34B 能够在单测生成和代码补全(HumanEval )任务上超过 GPT-4。同时,上述微调模型、MFTCoder 训练框架和高质量代码数据集已经开源(github: _https://github.com/codefuse-ai_)。 + +然而,CodeFuse-CodeLlama-34B 的部署遇到了如下两个挑战: + +1)数据类型为 fp16 的 34B 模型,显存占用为 68 GB,至少需要 3 张 A10 才能加载模型,部署成本很高;
2)在模型推理的生成阶段,通常伴随着长条形的矩阵运算,此时计算量较小,不足以掩盖 GPU 的访存延迟,即 memory bound 问题,此时程序的性能受限于 GPU 带宽。 + +为了解决上述问题,我们利用 GPTQ 量化技术,在降低了部署成本的同时,也缓解了 GPU 的带宽压力 ,从而显著提升了推理速度。最终,CodeFuse-CodeLlama-34B 的 int4 量化模型可以部署在单张 A10 显卡上,推理速度可以达到 20 tokens/s (batch_size=1)。同时,相较于 fp16 数据精度的模型,通过算法上的优化,int4 量化引入的精度下降可以控制在 1% 以内。下面,我们从模型量化和测试两个方面展示我们是如何实现 CodeFuse-CodeLlama-34B 模型的 int4 量化部署的。另外,**TensorRT-LLM** 也支持了 CodeFuse 中基于 MFTCoder 训练的开源模型部署。 + + + +# CodeFuse-CodeLlama-34B int4 量化 + +这里我们使用 GPTQ [4] 技术对模型进行 int4 量化。GPTQ 是对逐层量化范式经典框架 OBQ(Optimal Brain Quantization)[5] 的高效实现,能够利用单张 A100-80G 在 4 小时内完成 OPT-175B 模型的量化,并且可以获得较好的准确率。 + +另外,我们这里采用了静态量化方式,即通过矫正数据离线地进行量化,得到诸如缩放因子和零点的量化参数,在推理时不再进行量化参数的更新。与之对应的是动态量化,会在模型推理的同时根据输入进行量化参数的调整。最后,我们这里进行的是 int4-weight-only 量化,即只对权重进行量化而不对层输入进行量化,即 W4A16 量化。 + + + +# GPTQ 算法 + +为了量化$Wij$权,OBQ 框架对层重建损失函数![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1723000191297-87b69bf5-9be6-4a39-9464-396430849fbc.webp#clientId=ud87ee46c-286d-4&from=paste&height=32&id=PLP3o&originHeight=98&originWidth=373&originalType=url&ratio=0.8999999761581421&rotation=0&showTitle=false&status=done&style=none&taskId=u10c28162-c320-4485-b675-c99c0ddbdf7&title=&width=119.99771118164062)进行二阶泰勒级数展开,同时假设在未量化的权重值处一阶梯度为零,从而得到如下优化问题:
![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1722501454354-c4e6bc0d-84f0-4de9-b253-3911aa7cbd40.webp#clientId=u82881e86-50b2-4&from=paste&height=43&id=I5jgE&originHeight=132&originWidth=1045&originalType=url&ratio=1.3499999046325684&rotation=0&showTitle=false&status=done&style=none&taskId=u6664b3e8-efbe-4cbf-869b-84593211ea9&title=&width=340.504638671875)
其中,![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1722501454335-09267d97-525f-40d7-93f8-bd9baa1d61da.webp#clientId=u82881e86-50b2-4&from=paste&height=34&id=Y8OKT&originHeight=114&originWidth=132&originalType=url&ratio=1.3499999046325684&rotation=0&showTitle=false&status=done&style=none&taskId=uadead43a-83a1-4180-93c7-b3494fa9090&title=&width=38.990753173828125)是所有未量化权重对应的 Hessian 矩阵。那么,量化误差以及权重更新值分别为\*\* + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1722501454654-bcc4059a-ee34-4991-8adf-208185b39f08.webp#clientId=u82881e86-50b2-4&from=paste&height=51&id=FzmP2&originHeight=123&originWidth=1080&originalType=url&ratio=1.3499999046325684&rotation=0&showTitle=false&status=done&style=none&taskId=u00531b47-c01a-4512-af11-2b3cd784b0c&title=&width=443.504638671875)
上面的两个公式意味着所有未量化权重需要通过![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1722501455310-e163b76b-abf9-4080-ba41-e062eea25f9e.webp#clientId=u82881e86-50b2-4&from=paste&height=34&id=VcmA4&originHeight=73&originWidth=156&originalType=url&ratio=1.3499999046325684&rotation=0&showTitle=false&status=done&style=none&taskId=u48a34256-5d5d-4d7b-b269-25f14582874&title=&width=72.99537658691406)更新以补偿量化带来的量化误差。同时,层重建损失函数可以按照输出通道(output channel, OC)分解为独立的子问题,例如:\*\* + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1722501455229-32270aed-42df-4336-9144-386663f17ccc.webp#clientId=u82881e86-50b2-4&from=paste&height=62&id=XBMXp&originHeight=133&originWidth=686&originalType=url&ratio=1.3499999046325684&rotation=0&showTitle=false&status=done&style=none&taskId=u98dc0a0a-58e9-43c5-a084-19ac1b65b66&title=&width=319.9907531738281)
其中 Hessian 矩阵为![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1722501455247-bdbf1b80-d884-4a52-bb14-98ef46fdbafa.webp#clientId=u82881e86-50b2-4&from=paste&height=35&id=m3gIu&originHeight=120&originWidth=439&originalType=url&ratio=1.3499999046325684&rotation=0&showTitle=false&status=done&style=none&taskId=uc99d7b90-4834-4e02-94a1-d7194c6ee80&title=&width=127.99305725097656)。为了充分利用 GPU 的能力,GPTQ 做了如下三个改进: + +1. 所有输出通道共享相同的量化顺序,从而使得行间共享同一份 Hessian 矩阵,大大减少了算法计算量。 +2. 使用一次 Cholesky 分解代替了在 GPTQ 每次迭代中对整个 Hessian 矩阵的逆矩阵的高斯消元迭代更新方式。既大大减少了计算量,又得以利用成熟 GPU 矩阵库中的 Cholesky 算法,且避免了迭代更新方式在矩阵运算中所带来的数值不稳定问题。 +3. 通过将整个计算过程由对单个输入通道进行更新,等效转变为划分 batch 并逐 batch 更新的方式,避免了每次量化对整个 Hessian 与权重矩阵的 GPU 读写操作,大大降低了 GPU 访存数量。 +4.
+ +上述的改进使得 GPTQ 可以有效提升 GPU 利用率,从而能够对大模型进行高效量化。 + + + +# int4-weight-only 量化 + +这里我们利用开源工具 AutoGPTQ(https://github.com/PanQiWei/AutoGPTQ) 进行量化,工具超参数如下:
![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1723000318807-8c3e6f80-2c80-429a-b381-d0d5e359c8c5.webp#clientId=ud87ee46c-286d-4&from=paste&id=uCeam&originHeight=469&originWidth=901&originalType=url&ratio=0.8999999761581421&rotation=0&showTitle=false&status=done&style=none&taskId=u998acc3f-f9da-4645-a0fa-a039f4a86cc&title=) + +利用 AutoGPTQ 进行模型加载和推理的例子如下: + +``` + +import os +import torch +import time +from modelscope import AutoTokenizer, snapshot_download +from auto_gptq import AutoGPTQForCausalLM + +os.environ["TOKENIZERS_PARALLELISM"] = "false" + +def load_model_tokenizer(model_path): + """ + Load model and tokenizer based on the given model name or local path of downloaded model. + """ + tokenizer = AutoTokenizer.from_pretrained(model_path, + trust_remote_code=True, + use_fast=False, + lagecy=False) + tokenizer.padding_side = "left" + tokenizer.pad_token_id = tokenizer.convert_tokens_to_ids("") + tokenizer.eos_token_id = tokenizer.convert_tokens_to_ids("") + + model = AutoGPTQForCausalLM.from_quantized(model_path, + inject_fused_attention=False, + inject_fused_mlp=False, + use_cuda_fp16=True, + disable_exllama=False, + device_map='auto' # Support multi-gpus + ) + return model, tokenizer + + +def inference(model, tokenizer, prompt): + """ + Uset the given model and tokenizer to generate an answer for the speicifed prompt. + """ + st = time.time() + inputs = prompt if prompt.endswith('\n') else f'{prompt}\n' + + input_ids = tokenizer.encode(inputs, + return_tensors="pt", + padding=True, + add_special_tokens=False).to("cuda") + with torch.no_grad(): + generated_ids = model.generate( + input_ids=input_ids, + top_p=0.95, + temperature=0.1, + do_sample=True, + max_new_tokens=512, + eos_token_id=tokenizer.eos_token_id, + pad_token_id=tokenizer.pad_token_id + ) + print(f'generated tokens num is {len(generated_ids[0][input_ids.size(1):])}') + outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) + print(f'generate text is {outputs[0][len(inputs): ]}') + latency = time.time() - st + print('latency is {} seconds'.format(latency)) + + +if __name__ == "__main__": + model_dir = snapshot_download('codefuse-ai/CodeFuse-CodeLlama-34B-4bits', revision='v1.0.0') + + prompt = 'Please write a QuickSort program in Python' + + model, tokenizer = load_model_tokenizer(model_dir) + inference(model, tokenizer, prompt) +``` + +
在做静态量化时,GPTQ 使用矫正数据集作为输入计算 Hessian 矩阵,从而更新未量化权重进而补偿量化带来的误差。如果推理阶段的输入和矫正数据集有偏差(bias),那么量化时用矫正数据得到的 Hessian 矩阵就无法完全反映推理输入,这会导致 GPTQ 的误差补偿失效(失效的程度和偏差成正比),出现量化模型在推理输入上量化误差变大的情况,进而导致量化模型的精度下降。 + +为了解决上述问题,对于微调模型,我们使用了一种数据分布对齐技术减少模型量化带来的损失。通过抽取训练数据(CodeFuse 开源的高质量代码数据集 evol)中的 Question 作为引导方式,利用原始模型生成 Answer,将 Question 和 Answer 拼接起来作为矫正数据;最终在 HumanEval Benchmarks 的 Python pass@1 取得了 73.8% 的准确率,相较于 bf16 模型仅有 0.6% 的精度损失。同时,在 CMNLI 和 C-Eval 两个数据集的精度损失也比较少。 + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1723000394111-431e70c1-b36f-495c-9656-23431e0458cc.webp#clientId=ud87ee46c-286d-4&from=paste&id=OLbf2&originHeight=247&originWidth=924&originalType=url&ratio=0.8999999761581421&rotation=0&showTitle=false&status=done&style=none&taskId=uedb25cd4-323c-4ec1-a6ca-f0d92f8186e&title=) + + + +# 构建 TensorRT 引擎 + +在通过 AutoGPTQ 可以得到 safetensors 格式的 int4 量化模型 [6] 后,我们的目标是构建单卡 TensorRT 引擎,同时保证 activation 是 fp16 的数据精度。通过 examples/llama/build.py 进行 TensorRT 引擎构建时,需要关注如下参数: + +- dtype:设置为 fp16 +- use_gpt_attention_plugin:设置为 fp16,构建引擎时利用 gpt a ttention plugin 并且数据精度为 fp16 +- use_gemm_plugin:设置为 fp16,构建引擎时利用 gemm_plugin 并且数据精度为 fp16 +- use_weight_only:触发 weight only 量化 +- weight_only_precision:设置为 int4 \_gptq,表示构建 W4A16 的 GPTQ 量化模型引擎 +- per_group:gptq 为 group-wise 量化,所以需要触发 per-group +- max_batch_size: TensorRT 引擎最大允许 batch size +- max_input_len:TensorRT 引擎最大允许输入长度 +- max_output_len:TensorRT 引擎最大允许输出长度 + +综上,我们在单卡 A10/A100 上构建 TensorRT 引擎的命令如下:\*\*
+ +``` +python build.py --model_dir "${model_dir}" \ + --quant_safetensors_path "${quant_safetensors_path}" \ + --dtype float16 \ + --use_gpt_attention_plugin float16 \ + --use_gemm_plugin float16 \ + --use_weight_only \ + --weight_only_precision int4_gptq \ + --max_batch_size 1 \ + --max_input_len 2048 \ + --max_output_len 1024 \ + --per_group \ + --output_dir "${engin_dir}" 2>&1 | tee dev_build.log +``` + + + +# 测试 + + + +## 性能 + +下面,我们主要测试了 batch size 为 1 时,不同的输入输出长度和量化精度情况下,TensorRT-LLM 在 A10/A100 上的推理速度表现。可以看到,在 A100 上,TensorRT-LLM 的 int4 相对 fp16,最高能够带来 2.4 倍的加速,相对 int8 最高也能带来 1.7 倍的加速。
![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1723000394177-dee04e8c-5829-48da-bb5d-08a6bf5d2e30.webp#clientId=ud87ee46c-286d-4&from=paste&id=hs565&originHeight=621&originWidth=940&originalType=url&ratio=0.8999999761581421&rotation=0&showTitle=false&status=done&style=none&taskId=u5a968c4f-9905-4794-a87d-91161ac8cec&title=)
_注意:以上性能测试均基于 TensorRT-LLM 的 0.6.1 版本_
\_
+ + +## 显存占用和结果测试 + +我们测量了模型加载后占用的显存占用情况,以及输入 2048/1024 tokens 并输出 1024/2048 tokens 时的显存使用情况;同时我们也测试了量化前后的精度情况,如下表所示: + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/webp/16756473/1723000394043-af99705c-73cb-49d3-aeec-8a88cd5e2324.webp#clientId=ud87ee46c-286d-4&from=paste&id=R4Qm7&originHeight=444&originWidth=967&originalType=url&ratio=0.8999999761581421&rotation=0&showTitle=false&status=done&style=none&taskId=u4b16a2c8-2bd5-4fb4-a08e-c2b009f9caa&title=) + +可见,4bit 量化后,显存占用大幅缩小,在一张 A10(24GB 显存)上就能部署 34B 的大模型,具备非常好的实用性。 + + + +# 模型演示 + +我们通过终端命令行 [7] 以及网页聊天机器人 [8] 两种不同的方式,展示我们最终的推理效果,具体细节可以访问开源的链接。 + + +## Cli Demo + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/gif/16756473/1723000394177-126fe769-271e-4719-a7ac-e29d03a3b193.gif#clientId=ud87ee46c-286d-4&from=paste&id=Ay3z7&originHeight=575&originWidth=1079&originalType=url&ratio=0.8999999761581421&rotation=0&showTitle=false&status=done&style=none&taskId=uf8b68be3-2377-4a3d-98c0-da986324fce&title=) + + + +# 总结 + +在这篇文章中,我们介绍了如何使用 **TensorRT-LLM** 来加速 CodeFuse 的推理性能。具体而言,我们按照顺序展示了如何使用 GPTQ Int4 量化方法、增强 GPTQ 量化算法精度的自动对齐技术、TensorRT-LLM int4 量化模型的使用方法以及相应的评估过程。通过 TensorRT-LLM 的支持,CodeFuse 实现了较低的推理延迟和优化的部署成本。欢迎大家关注 CodeFuse 获取最新发布的更高准确率的微调大模型。 + +参考资料:
[1] Liu, B., Chen, C., Liao, C., Gong, Z., Wang, H., Lei, Z., Liang, M., Chen, D., Shen, M., Zhou, H., Yu, H., & Li, J. (2023). MFTCoder: Boosting Code LLMs with Multitask Fine-Tuning. ArXiv, abs/2311.02303.
[2] Zhang, Z., Chen, C., Liu, B., Liao, C., Gong, Z., Yu, H., Li, J., & Wang, R. (2023). Unifying the Perspectives of NLP and Software Engineering: A Survey on Language Models for Code.
[3] https://huggingface.co/codefuse-ai/CodeFuse-CodeLlama-34B
[4] Frantar, E., Ashkboos, S., Hoefler, T., & Alistarh, D. (2022). GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers. ArXiv, abs/2210.17323.
[5] Frantar, E., Singh, S. P., Alistarh, D. (2022). Optimal Brain Compression: A Framework for Accurate Post-Training Quantization and Pruning. Advances in Neural Information Processing Systems, 35, 4475-4488.
[6] https://huggingface.co/codefuse-ai/CodeFuse-CodeLlama-34B-4bits
[7] Codefuse-ai: https://github.com/codefuse-ai
[8] Codefuse-chatbot: https://github.com/codefuse-ai/codefuse-chatbot diff --git a/docs/blogDetails/20240423.en-US.md b/docs/blogDetails/20240423.en-US.md new file mode 100644 index 0000000..559a21f --- /dev/null +++ b/docs/blogDetails/20240423.en-US.md @@ -0,0 +1,136 @@ +--- +title: 'Multi-Agent Framework MuAgent Unlocks New Paradigms in Code Development' +time: '2024-04-23' +toc: content +--- + +## Abstract + +For complex SOPs requiring constant redefinition of agents and numerous post-processing stages, this procedure can become cumbersome and challenging. Striving to lift this weight and accelerate the execution of SOP workflows,this system streamlines the construction process with a suite of core components, enabling a more convenient and rapid build procedure. It spares users the need to delve into the intricacies of internal prompt construction logic. At last, The paper highlights muAgent's implementation for automating Code Q&A functionalities within Java code repositories, enabling query execution, API documentation, and test case generation. + +### Introduction + +In these rapidly progressing times of informational prowess, we are witnessing the remarkable potential of Large Language Models (LLMs) in expertly navigating and disentangling intricate issues. However, challenges of a more sophisticated nature, such as untangling the knots in programming intricacies, often prove too intricate for a singular LLM Agent to tackle effectively. To bridge this gap, there has been an inspiring movement within the tech community towards the fusion of multiple Agents, orchestrating their collaborative talents to decipher these complex puzzles. + +At the core of a Multi-Agent system is the understanding that focus needs to extend beyond just developing the Agents—it must also include the strategic development of a Standard Operating Procedure (SOP) specifically designed for the task at hand. This approach is based on a deep comprehension of the task's unique requirements, ensuring the system is fine-tuned for peak performance. + +But how exactly does muAgent utilize multi-agent collaboration to complete tasks? As we know, the creation of an agent typically involves careful formulation of prompts, which are processed by the LLM for execution. The output received is then treated with specific logic before being integrated into the next agent's prompt, triggering its response. This cycle repeats until the completion of the task. For complex SOPs requiring constant redefinition of agents and numerous post-processing stages, this procedure can become cumbersome and challenging. + +Striving to lift this weight and accelerate the execution of SOP workflows, muAgent has been expertly equipped with some modules. These innovative features are designed to manage extensive interaction histories and simplify the prompt creation process. This process involves interpreting LLM outputs, enacting precise actions, and deftly managing the information cascade. + +### Modules + +
+ 图片 +
+ +Now, let's explore modules within muAgent. + +#### Communication + +The seamless flow and exchange of information are vital in enhancing the interactions between agents. To facilitate this crucial process, the structure for the dissemination of information has been carefully divided into distinct categories: System Content, Info Content, LLM Content, and LLM Parsed Content. + +System Content functions as the critical scaffold for metadata, providing a structural backbone that supports the entire information exchange framework. Moving deeper into the informational strata, Info Content serves as a treasure trove of auxiliary insights, ranging from expansive knowledge bases to nuanced tool understandings. LLM Content stands as the central conduit for data flow between agents, delivering unfiltered outputs that enable direct and immediate sharing of information. Finally, the refinement process culminates with LLM Parsed Content, where raw LLM outputs are transformed into a more navigable key-value format. + +By categorizing the exchange of information into these meticulously defined segments, the communication fabric among agents has been notably augmented. This strategic segmentation ensures the fluid and efficient transmission of crucial data, empowering each agent to excel in their designated functions with unprecedented cohesion and clarity. + +#### Memory Manager + +Memory plays a quintessential role in the advanced functionality of MuAgent, with its capabilities forming the cornerstone of intelligent data handling, enabling agents to navigate extensive databases with exceptional ease and accuracy. + +The feature of Storage Management is integral to this process. It acts as the vault for archiving the intricacies of dialogue, including the breadth of user inputs, the nuanced responses generated by LLMs, and the subtle observations captured during interactions. the sophisticated process of Information Compression can distill the sprawling chat history into a more streamlined context format. Memory Retrieval offering foundational search tools that swiftly hone in on critical pieces of information pertinent to ongoing inquiries. + +The amalgamation of these memory features within MuAgent not only streamlines the experience but also elevates the level of interactivity. + +#### Promt Manager + +At the heart of muAgent's formidable intellect lies the Prompt Manager, strategically designed to facilitate the harmonious interplay among various sophisticated models. This component is much like the central brain of the system, where it meticulously analyzes and refines complex business inquiries into focused prompts, perfectly suited for accurate guidance and effective problem-solving. The Prompt Manager within muAgent is divided into three main sections, each with its own distinctive purpose: System Prompt, Context Prompt, and Customized Prompt. + +The System Prompt encompass vital information like Role and Task definitions. This sets clear expectations and objectives for the model, laying the groundwork for its operations. Progressing to the Context Prompt, it introduces essential background or situational details necessary for the model to fully understand the nature of the inquiry. The Customized Prompt section is where specially crafted inputs meet explicit output guidelines, addressing the specific types of data the model needs to process and dictating the desired format or structure of the output. + +Through these three compartmentalized yet integrated segments, empowers muAgent to function as a versatile and intelligent facilitator of tasks, seamlessly adapting to varied user demands with unparalleled adeptness. + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*qrZMSpqYm5AAAAAAAAAAAAAADlHYAQ/original) + +#### Agent Type + +To meet the diverse requirements of interaction processes, muAgent provides a suite of specialized agent types, each with its core capabilities designed to enhance overall system productivity and user experience. + +Regarded as the workhorse of the muAgent ensemble, the BaseAgent boasts expertise in fundamental operations, such as overseeing question and answer exchanges, skillful tool utilization, and proficient code execution. The ReactAgent, true to its name, is well-versed in standardized ReAct flows, enabling it to deftly handle routine interchanges with structured, predefined reactions. The ExecutorAgent orchestrates the completion of these tasks in a methodical and sequential manner, providing systematic follow-through on the tasks at hand. With decision-making prowess, the SelectorAgent assumes the critical role of arbitration—determining which agent within the ensemble is best suited for responding to inquiries put forth by users or other agents. + +By delineating roles and responsibilities, muAgent ensures a user-focused approach to managing interactions and well equipped to offer tailored support across a broad spectrum of tasks and processes. + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*jgOpSopXqsEAAAAAAAAAAAAADlHYAQ/original) + +#### Ecosystem Components + +The muAgent framework is enriched by three pivotal Ecosystem Components that are integral to its operation: Retrieval, Tool, and Action. Retrieval can be envisioned as the erudite librarian of your digital consortium—a gatekeeper of information. Tool, on the other hand, is akin to a digital Swiss Army Knife—a comprehensive collection of utilities poised at the ready. Agents within the framework can register a variety of tools, seamlessly interfacing with the langchain Tool, thereby enhancing their practical capabilities manifold. Lastly, Action embodies the concrete steps, represents the dedicated tasks or the sequence of operations that the LLM is primed to carry out. + +With Retrieval providing the right information, Tool equipping the agent with necessary utilities, and Action orchestrating their use, muAgent transforms complex instructions into concrete, impactful results—ultimately setting a new standard in digital interaction and task automation. + +### Feature Demonstration + +To start using muAgent, you can typically install it using Python's package manager. `pip install codefuse-muaget` + +After installation, you are able to import and use the functionalities provided by the muAgent framework in your Python scripts and applications. + +Implementing Code Q&A Capabilities for Local Code Repositories within muAgent + +1、MuAgent now supports the integration of Java code repositories, which it proficiently transforms into vectorized data, graph-based structures, and conventional database content. + +```python +# initialize codebase +codebase_name = 'client_local' +code_path = "D://chromeDownloads/devopschat-bot/client_v2/client" + +use_nh = True +do_interpret = True +cbh = CodeBaseHandler(codebase_name, code_path, crawl_type='dir', use_nh=use_nh, local_graph_path=CB_ROOT_PATH, + llm_config=llm_config, embed_config=embed_config) +cbh.import_code(do_interpret=do_interpret) +``` + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/gif/12756561/1713256586827-399e4eaa-ce33-4495-97c4-af4eec0959f2.gif) + +2、After setting up the code repository, we can harness the power of language models to carry out queries and provide responses based on the codebase. + +```python +# +phase_name = "codeChatPhase" +phase = BasePhase( + phase_name, embed_config=embed_config, llm_config=llm_config, +) + +# +query_content = "remove 这个函数是做什么的" +query = Message( + role_name="user", role_type="human", input_query=query_content, + code_engine_name=codebase_name, score_threshold=1.0, top_k=3, cb_search_type="tag", + local_graph_path=CB_ROOT_PATH, use_nh=use_nh + ) +output_message3, output_memory3 = phase.step(query) +# print(output_message3) +print(output_memory3.to_str_messages(return_all=True, content_key="parsed_output_list")) +``` + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/gif/12756561/1713256600722-485371ca-e4f5-4323-9dae-9e7ffcf1b029.gif) + +3、Following the integration, a significant benefit we harness is the transformation of the code repository into API documentation, alongside the automatic generation of test cases. + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/gif/12756561/1713256612500-4341fa8b-f7c9-4664-8d4f-70a61be63731.gif) + +A visual demonstration can often make it easier to grasp the platform's capabilities. It would be beneficial to watch video to get a clearer understanding of how CodeFuse-Chatbot works in practice of Q&A features. + +> [https://www.youtube.com/watch?v=ex5sbwGs3Kg&ab_channel=HaotianZhu](https://www.youtube.com/watch?v=ex5sbwGs3Kg&ab_channel=HaotianZhu) + +The muAgent framework supports private customization. Whether it's a personalized LLM or a embedding service, the capability is at your fingertips! + +Join hands with the muAgent framework to unlock new potential in the programming world and experience an explosion of creativity! + +> Related Github Repos +> +> [1] https://github.com/codefuse-ai/CodeFuse-muAgent +> +> [2] [https://github.com/codefuse-ai/codefuse-chatbot](https://github.com/codefuse-ai/codefuse-chatbot) +> +> [3] [https://github.com/codefuse-ai](https://github.com/codefuse-ai) diff --git a/docs/blogDetails/20240423.zh-CN.md b/docs/blogDetails/20240423.zh-CN.md new file mode 100644 index 0000000..52cf58c --- /dev/null +++ b/docs/blogDetails/20240423.zh-CN.md @@ -0,0 +1,169 @@ +--- +title: '变革来袭!多Agent框架MuAgent带你解锁代码开发新姿势' +time: '2024-04-23' +toc: content +--- + +在这个信息技术爆炸的时代,我们都知道大型语言模型(LLM)拥有处理复杂问题的能力,但当遇到编程难题这种更高级的挑战时,单独的 LLM Agent 可能就不够看了。社区里动起了脑筋,玩出了新花样——组合多个 Agent 来应对高难度挑战!正如 Multi Agent 的构建过程所示,与其说我们是在设计 Agents,不如说是对当前需求的深入理解后去构建出一条专属于某个场景的 SOP。 + +> 功能演示:在 muAgent 里能够实现本地代码库的问答功能 + +1、能够支持 java 代码库导入,并转换成向量数据、图数据以及传统数据库的内容 + +```python +# delete codebase +codebase_name = 'client_local' +code_path = "D://chromeDownloads/devopschat-bot/client_v2/client" +# initialize codebase +use_nh = True +do_interpret = True +cbh = CodeBaseHandler(codebase_name, code_path, crawl_type='dir', use_nh=use_nh, local_graph_path=CB_ROOT_PATH, + llm_config=llm_config, embed_config=embed_config) +cbh.import_code(do_interpret=do_interpret) +``` + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/gif/12756561/1713256586827-399e4eaa-ce33-4495-97c4-af4eec0959f2.gif) + +2、在有了代码库之后,就可以基于语言模型来完成代码库问答 + +```python + +# +phase_name = "codeChatPhase" +phase = BasePhase( + phase_name, embed_config=embed_config, llm_config=llm_config, +) + +# +query_content = "remove 这个函数是做什么的" +query = Message( + role_name="user", role_type="human", input_query=query_content, + code_engine_name=codebase_name, score_threshold=1.0, top_k=3, cb_search_type="tag", + local_graph_path=CB_ROOT_PATH, use_nh=use_nh + ) +output_message3, output_memory3 = phase.step(query) +# print(output_message3) +print(output_memory3.to_str_messages(return_all=True, content_key="parsed_output_list")) +``` + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/gif/12756561/1713256600722-485371ca-e4f5-4323-9dae-9e7ffcf1b029.gif) + +3、下面,我们还可以基于代码库完成代码库转 API 文档工作,代码库自动生成测例的工作 + +![](https://intranetproxy.alipay.com/skylark/lark/0/2024/gif/12756561/1713256612500-4341fa8b-f7c9-4664-8d4f-70a61be63731.gif) + +> 那我们的 muAgent 是如何完成 multi-agent 的涉及工作的呢? + +🏗️【muAgent 框架大揭秘】 想象一下,你现在需要去用 LLM 来串联专属你的个性化业务场景 SOP 流程。那按照正常的 Agent 开发流程,我们首先需要定义每一个 Agent 的 Prompt,其次将 prompt 传入到 LLM 接口进行调用,并将当前 Agent 的输出进行特定逻辑的后处理,再合并到下一个 Agent 的 Prompt 上,去获取它的输出,重复上述流程直到任务完成。而当这个 SOP 流程较长和复杂时,反复定义这样的 Agent 以及多种后处理会显得过于繁琐。 + +那 muAgent 就是为了解决这个问题并帮助大家快速实现 SOP 的串联。为了快速定义了 Agent 交互链路,我们要理解 multi-agent 的核心过程就在于如何把上一个 agent 的输出给到下一个 agent 的输入,其中需要涉及到 llm 的输出、具体 action 的执行以及信息的解析处理。为此,muAgent 巧妙地设计了 Memory Manager 和 Prompt Manager 两个杀手级组件,能够管理长篇的聊天历史记录和自动化构筑 Prompts 。从而打造了一个扩展性满满、易用性爆表的多 Agent 超级框架! + +
+ 图片 +
+ +✨【四种 Agent 类型,满足你的一切幻想】在 Agent 层面,提供四种基本的 Agent 类型,对这些 Agent 进行 Role 的基础设定,可满足多种通用场景的交互和使用。所有的 Action 都由 Agent 执行。 + +- BaseAgent:基础功打得溜,问答、工具使用、代码执行样样行。 +- ReactAgent:标准 React 流,遇事不慌,标准反应流程轻松应对。 +- ExecutorAgent:对任务清单进行顺序执行,根据 User 或 上一个 Agent 编排的计划,完成相关任务,排个队,挨个干! +- SelectorAgent:挑三拣四,根据 User 或 上一个 Agent 的问题选择合适的 Agent,总能找到最合适的 Agent 回答用户需求。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*jgOpSopXqsEAAAAAAAAAAAAADlHYAQ/original) + +🔁【Communication 进化论】 信息如同血液,Agent 之间的通信变得前所未有的流畅,各类重要数据在 Agents 间如同接力赛跑,无缝传递! + +- System Content:用于存储管理当前 LLM 输出的时间,Role 信息等 +- Info Content:LLM 辅助信息,比如像知识库查询信息、代码库检索信息、工具信息、Agent 信息等 +- LLM Content:直接存储和传递 LLM 产生的信息 +- LLM Parsed Content:对 LLM 进行解析转成更易操作的 key-value 数据结构,方便对 LLM 内容进行过滤 +- Customized Content:用于管理自定义 action 产生的 key-value 数据内容,用于后续自定义 Prompt 模板的组装构建 + +🤖【Memory Manager 记忆强化】 你的虚拟开发团队记忆力惊人,不管是保存、压缩还是检索聊天历史,他们能在数据库的海洋中自如潜泳。 + +- 存储管理:在数据库或本地实现对 chat history 进行 save 和 load 管理,包括 user input、 llm output、observation ouput +- 信息压缩:对 chat history 进行关键信息压缩总结 summary context,比如说单文本概况、侧重不同角度进行文本概况、关键信息提取、多文本概况,作为 Prompt context +- 记忆检索:提供基础检索功能,检索 chat history 或者 Summary Context 中与问题相关信息,辅助问答 + +🛠️【Prompt Manager – 大脑核心】如何让多个大模型分工并协调好 LLM 并来引导它们产生期望的输出,其本质就是将业务问题抽象并拆解到可执行的 Prompt,让他们像处理业务问题一样精准执行。Prompt Manager 正是这个大脑——将各类 Prompts 巧妙组装,从而驱动 LLM Agents 发挥出惊人的生产力! + +muAgent 将 Prompt Manager 模块中分为 System Prompt、Context Prompt、Customized Prompt 三部分 + +- System Prompt 包括 Role Name、Role Description、Task 等,即希望模型执行的特定任务。 +- Context Prompt 包括 Doc Context、Code Context、Tool Context、Agent Context、Session Context 等,即希望模型理解的请求所需的背景信息。 +- Customized Prompt 则是 自定义的一些 Input 和 Ouput,即模型需要处理的数据和期望的输出类型或格式的信号。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*qrZMSpqYm5AAAAAAAAAAAAAADlHYAQ/original) + +💻【Retrieval、Tool、Action – 辅助生态组件,muAgent 框架的得力小助手】 + +- Retrieval:好比虚拟团队的知识库管理员,有求必应。集成了 Doc、Internet Search、Code Retrieval 三种检索信息的方式,定义了一个抽象 IMRetrieval 类,可支持开发者自定义个性化的知识库,来完成 Agent 的知识库注册。 +- Tool:工具百宝箱,任你挑选,一键调用解决问题。支持 Agent 完成 Tool 的注册和 langchain Tool 接口的直接使用。 +- Action:作为 LLM 具体要执行的动作或动作流,会包括 LLM 信息处理、知识检索、工具调用以及代码执行等一个综合性的复杂过程,只要下达指令,他们就能将计划变成现实。 + +🏡【私人定制不是梦】 更炫的是,muAgent 框架支持私有化定制,无论是个性化的 LLM 还是深情的嵌入式 Embedding 服务,只要你想,就能搞定! + +🌟 所以,还等什么?让我们一同携手 muAgent 框架,解锁编程世界的新潜力,体验创造力的大爆炸吧!🎉🎉🎉 + +通过 执行`pip install codefuse-muagent` 然后就能上手使用了 + +```python +from muagent.connector.agents import ReactAgent, SelectorAgent +from muagent.connector.schema import Role, Message, ChainConfig +from muagent.llm_models.llm_config import EmbedConfig, LLMConfig + + +llm_config = LLMConfig( + model_name=model_name, api_key=api_key, api_base_url=api_base_url, temperature=0.3, + stop="**Observation:**" +) + +embed_config = EmbedConfig( + embed_engine="model", embed_model=embed_model, embed_model_path=embed_model_path +) + +# 定义了基于react的tool agent +tool_role = Role(role_type="assistant", role_name="tool_reacter", prompt=REACT_TOOL_PROMPT) +tool_react_agent = ReactAgent(role=tool_role,chat_turn=3, + llm_config=llm_config, embed_config=embed_config, +) + +# 定义了基于react的code agent +code_role = Role(role_type="assistant", role_name="code_reacter", prompt=REACT_CODE_PROMPT) +code_react_agent = ReactAgent(role=code_role, chat_turn=3, + llm_config=llm_config, embed_config=embed_config, +) + +prompt = """#### Agent Profile +Your goal is to response according the Context Data's information with the role that will best facilitate a solution, taking into account all relevant context (Context) provided. +When you need to select the appropriate role for handling a user's query, carefully read the provided role names, role descriptions and tool list. +#### Response Output Format +**Thoughts:** think the reason step by step about why you selecte one role +**Role:** Select the role from agent names. +""" + +# 定义了一个groupAgent +role = Role(role_type="assistant", role_name="qaer", prompt=prompt) +base_agent = SelectorAgent(role=role,chat_turn=3, + llm_config=llm_config, embed_config=embed_config, + group_agents=[tool_react_agent, code_react_agent] +) + +# +question = "确认本地是否存在employee_data.csv,并查看它有哪些列和数据类型;然后画柱状图" +query = Message(role_type="user", role_name="user", input_query=question,tools=tools,) +output_message = base_agent.step(query) +print(output_message.role_content) +``` + +还可以支持 CodeFuse-Chatbot 的多种问答功能,CodeFuse-Chatbot 使用演示视频: + +[https://www.youtube.com/watch?v=ex5sbwGs3Kg&ab_channel=HaotianZhu](https://www.youtube.com/watch?v=ex5sbwGs3Kg&ab_channel=HaotianZhu) + +> 项目链接 +> +> [1] https://github.com/codefuse-ai/CodeFuse-muAgent +> +> [2] [https://github.com/codefuse-ai/codefuse-chatbot](https://github.com/codefuse-ai/codefuse-chatbot) +> +> [3] [https://github.com/codefuse-ai](https://github.com/codefuse-ai) diff --git a/docs/blogDetails/20240614.en-US.md b/docs/blogDetails/20240614.en-US.md new file mode 100644 index 0000000..b51c179 --- /dev/null +++ b/docs/blogDetails/20240614.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-06-14' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240614.zh-CN.md b/docs/blogDetails/20240614.zh-CN.md new file mode 100644 index 0000000..2e37a49 --- /dev/null +++ b/docs/blogDetails/20240614.zh-CN.md @@ -0,0 +1,606 @@ +--- +title: '2024年5月90篇代码大模型论文最全整理' +time: '2024-06-14' +toc: content +--- + +## 引言 + +本文整理 2024 年 5 月发布的 90 篇代码大模型相关论文,其中包括 17 篇发表在今年 ICLR 的论文。根据论文内容,我们将这些论文整理为了基座模型、代码微调、测试基准、代码 Agent、低资源语言处理、AI 代码安全与分析、人机交互、软件工程下游任务应用(包括代码生成、代码翻译、代码总结、代码修复、代码检索、SQL 生成、测试生成、漏洞检测、日志分析、需求工程)等主题。全文篇幅较长,建议电脑端阅读。 + +若您想了解其他时期的代码大模型论文,也欢迎关注我们的代码大模型综述 https://arxiv.org/abs/2311.07989 和 GitHub 开源项目 https://github.com/codefuse-ai/Awesome-Code-LLM。 + +## 编辑精选 + +Large Language Models Synergize with Automated Machine Learning +本文提出了一种新颖的机器学习程序合成方法,称为 Text-to-ML。该方法结合了大语言模型和自动机器学习技术,可以根据机器学习任务的文本描述,自动生成和优化完整的机器学习工作流程代码,包括数据准备、建模和后处理等环节。为了应对机器学习程序的长度和多样性,该方法采用了将程序分解为更小、更易管理的部分,并针对机器学习程序设计了测试技术和数值评估方法。实验结果表明,Text-to-ML 在生成机器学习程序方面优于现有方法,且自动机器学习技术可以显著提高生成程序的性能。 +发布日期:2024-05-06 +链接:https://arxiv.org/abs/2405.03727 +机构:University of Tokyo + +DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model +DeepSeek-V2 是 DeepSeek 系列最新的混合专家语言模型(MoE)。该模型在保证高效推理和经济训练成本的同时,达到了 236B 的总参数量,其中每个 token 激活 21B 参数,并支持 128K tokens 的上下文长度。此外,论文还引入了创新的 multi-head latent attention(MLA)和 DeepSeekMoE 架构,前者通过将 KV 缓存压缩为潜在向量来保证推理效率,后者则通过稀疏计算实现了经济成本下的强模型训练。与之前的 DeepSeek 67B 模型相比,DeepSeek-V2 在显著提升性能的同时,减少了 42.5%的训练成本,将 KV 缓存减少了 93.3%,并将最大生成吞吐量提高了 5.76 倍。 +发布日期:2024-05-07 +链接:https://arxiv.org/abs/2405.04434 +机构:DeepSeek-AI + +MHPP: Exploring the Capabilities and Limitations of Language Models Beyond Basic Code Generation +本文提出了一个新的数据集 Mostly Hard Python Problems (MHPP),用于更全面、深入地评估大型语言模型在函数级代码生成方面的能力。作者分析了现有的 HumanEval 和 MBPP 两个常用基准测试的局限性,发现它们在质量、难度和粒度方面存在不足。因此,他们创建了由 140 个独特的人工精心设计的问题组成的 MHPP 数据集,重点测试语言模型在理解规范和限制、进行多步推理以及有效应用编码知识方面的能力。通过在 22 个语言模型上进行初步评估,发现许多在 HumanEval 上 表现出色的模型在 MHPP 上难以取得类似的成功,突显出这些模型的各种局限性。 +发布日期:2024-05-19 +链接:https://arxiv.org/abs/2405.11430 +机构:University of Edinburgh, University of Hong Kong + +Multiple-Choice Questions are Efficient and Robust LLM Evaluators +本文基于当前最流行的四个大模型测评数据集 GSM8K、MATH、HumanEval、MBPP 构建了三个多项选择题格式的测试基准 GSM-MC、MATH-MC 和 PythonIO。对 GSM8K 和 MATH,作者收集 60 个开源模型在原始数据集上的错误答案构建选择题,并通过大量实验表明大模型在选择题格式的测试基准上得分与在生成式评估的测试基准上得分强相关,且对干扰选项设置和选项顺序具有相当的鲁棒性,而测试开销则减小了 30 倍。对于 HumanEval 和 MBPP 两个代码生成数据集,作者则构造了一个全新的 Python 程序输出预测测试基准,且实验表明大模型还有很大的提升空间。 +发布日期:2024-05-20 +链接:https://arxiv.org/abs/2405.11966 +机构:Shanghai Jiao Tong University + +AutoCoder: Enhancing Code Large Language Model with AIEV-Instruct +AutoCoder 是首个在 HumanEval 基准测试中超越 GPT-4 Turbo(2024 年 4 月版)和 GPT-4o 的大语言模型,实现了 90.9% 的 pass@1 得分。此外,AutoCoder 提供了比 GPT-4 Turbo 和 GPT-4o 更加通用的代码解释器,可以安装外部程序包。论文还提出了一种名为 AIEV-Instruct 的训练数据生成方法,结合了 agent 交互和外部代码执行验证,较之前的大规模代码数据集生成方法,减少了对大型专有模型的依赖,并提供了经过执行验证的代码数据集。 +发布日期:2024-05-23 +链接:https://arxiv.org/abs/2405.14906 +机构:University of Connecticut + +## 基座模型 + +Granite Code Models: A Family of Open Foundation Models for Code Intelligence +Granite 是在 116 种编程语言上训练的一系列大模型,大小有 3B、8B、30B 和 34B,其中 34B 模型训练数据量为 3.5T tokens,且是在 20B 模型训练 1.4T tokens 后使用 depth upscaling 扩展为 34B 继续训练。 +发布日期:2024-05-07 +链接:https://arxiv.org/abs/2405.04324 +机构:IBM Research + +GECKO: Generative Language Model for English, Code and Korean +GECKO 是在英语、韩语、代码语料上训练的 7B 双语开源模型,在 MMLU 上得分 28.3,在 HumanEval 上得分 17.7。 +发布日期:2024-05-24 +链接:https://arxiv.org/abs/2405.15640 +机构:KIFAI + +MAP-Neo: Highly Capable and Transparent Bilingual Large Language Model Series +MAP-Neo 是在英语、中文、代码语料上训练的双语开源模型,有 2B 与 7B 两个版本,其中 7B 模型训练数据量为 4.5T tokens,在 MMLU 上得分 58.1,GSM8K 得分 53.7,HumanEval 得分 23.8。本文还开源了预训练所使用的数据集 Matrix。 +发布日期:2024-05-29 +链接:https://arxiv.org/abs/2405.19327 +机构:M-A-P, University of Waterloo + +## 代码微调 + +AlchemistCoder: Harmonizing and Eliciting Code Capability by Hindsight Tuning on Multi-source Data +本文提出了 AlchemistCoder,一系列在多源数据上微调的代码大语言模型。作者创新性地揭示了多源代码语料库中固有的风格和质量冲突,并引入了具有事后重新标记的数据特定提示(称为 AlchemistPrompts)来协调不同的数据源和指令-响应对。此外,作者还提出将数据构建过程纳入微调数据中,作为代码理解任务,包括指令演变、数据筛选和代码审查。大量实验表明,AlchemistCoder 在同等规模的模型中处于领先地位,甚至可以与更大的模型相媲美或超越,展示了该方法在改进指令跟随能力和推进代码智能边界方面的有效性。 +发布日期:2024-05-29 +链接:https://arxiv.org/abs/2405.19265 +机构:Tongji University, Shanghai AI Laboratory + +From Symbolic Tasks to Code Generation: Diversification Yields Better Task Performers +本文通过一系列合成实验和真实世界的代码生成应用,探究了指令微调中影响语言模型理解和执行未见指令能力的关键因素。研究发现,即使每个任务的样本数量很少,只要提供足够多样化的任务集合,模型就能在训练分布之外表现出泛化性和鲁棒性。此外,在代码生成任务中,使用涵盖代码相关任务之外的更加多样化的指令集可以提升模型的性能。本文的结果表明,指令微调数据集的语义空间多样性是提高模型执行指令和完成任务能力的关键。 +发布日期:2024-05-30 +链接:https://arxiv.org/abs/2405.19787 +机构:University of Illinois Urbana-Champaign + +Unveiling the Impact of Coding Data Instruction Fine-Tuning on Large Language Models Reasoning +本文深入探究了在指令微调阶段,代码数据对大语言模型推理能力的影响。通过在不同编程数据比例、模型类别、模型规模和推理领域等方面进行全面分析,论文得出了几个重要结论:1)代码数据微调可以提升不同类别和规模 LLM 的整体推理能力;2)代码数据的效果因领域而异,但在每个领域内表现出一致的趋势;3)代码数据对不同模型家族的具体任务带来的好处大体相当,但指令微调数据集中的最佳代码数据比例因任务而异。这些发现为理解代码数据在 LLM 指令微调中的作用提供了有价值的见解。 +发布日期:2024-05-30 +链接:https://arxiv.org/abs/2405.20535 +机构:University of California, Santa Barbara + +## 测试基准 + +NaturalCodeBench: Examining Coding Performance Mismatch on HumanEval and Natural User Prompts +本文提出了一个新的代码合成基准测试集 NaturalCodeBench (NCB),旨在更好地反映真实编码任务中的复杂性和多样性。NCB 包含了来自在线编码服务的 402 个高质量的 Python 和 Java 编程问题,涵盖了 6 个不同的领域。此外,论文还介绍了一种半自动化的测试用例构建流程,与手动解决方案相比,效率提高了 4 倍以上。通过在 39 个大语言模型上进行系统实验,发现在 HumanEval 得分接近的模型在 NCB 上的性能差距仍然显著,表明现有模型缺乏对实际代码合成场景的关注或过度优化了 HumanEval。同时,即使是表现最好的 GPT-4 在 NCB 上的表现也远未达到满意的程度。 +发布日期:2024-05-07 +链接:https://arxiv.org/abs/2405.04520 +机构:Zhipu.AI + +Plot2Code: A Comprehensive Benchmark for Evaluating Multi-modal Large Language Models in Code Generation from Scientific Plots +本文提出了一个全面的视觉编码基准测试集合 Plot2Code,用于公平和深入地评估多模态大语言模型(MLLM)在将视觉图形转化为可执行代码方面的能力。论文作者精心收集了 132 个高质量的 matplotlib 图表,并为每个图表提供了相应的源代码和由 GPT-4 总结的描述性指令。此外,论文还提出了三个自动评估指标,包括代码通过率、文本匹配率和 GPT-4V 综合评分,以对输出代码和渲染图像进行细粒度评估。通过在 Plot2Code 上评估 14 个 MLLM,论文揭示了大多数现有的 MLLM 在处理文本密集型图表的视觉编码时存在困难,并严重依赖文本指令。这项工作有望为未来 MLLM 的发展提供指导。 +发布日期:2024-05-13 +链接:https://arxiv.org/abs/2405.07990 +机构:The University of Hong Kong + +Aligning LLMs through Multi-perspective User Preference Ranking-based Feedback for Programming Question Answering +本文提出了一个名为 ALMupQA 的新框架,旨在解决代码社区问答(CCQA)任务中的用户偏好多样性和新 API 偏好等挑战。ALMupQA 框架首先通过多角度偏好排序对齐(MPRA)综合考虑不同用户的偏好,然后引入了一个基于检索的上下文学习(RIL)模块,通过从问题库中检索相似问题的答案来缓解过时答案的问题。此外,论文还开发了一个名为 StaCCQA 的高质量多答案代码问答数据集。广泛的实验表明,与基础模型相比,ALMupQA 框架在准确性和用户偏好方面取得了显著改进,BLEU 提高了近 11%,BERTScore 和 CodeBERTScore 分别提高了 20%和 17.5%。 +发布日期:2024-05-27 +链接:https://arxiv.org/abs/2406.00037 +机构:University of Science and Technology of China + +## 代码 Agent + +SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering +本文提出了一个名为 SWE-agent 的系统,该系统为语言模型智能体提供了定制化的智能体-计算机接口(ACI),大幅提升了智能体自主使用计算机解决软件工程任务的能力。通过在 SWE-bench 和 HumanEvalFix 基准测试中取得远超先前非交互式语言模型的最佳性能,论文证实了 ACI 设计对智能体行为和性能的重要影响,为语言模型智能体这一新兴的终端用户群体开发专门的界面和工具奠定了基础。 +发布日期:2024-05-06 +链接:https://arxiv.org/abs/2405.15793 +机构:Princeton University + +MapCoder: Multi-Agent Code Generation for Competitive Problem Solving +本文提出了一种新的代码生成方法 MapCoder。它利用多个 LLM 智能体模拟人类开发者的程序合成过程,具体包含四个智能体,分别负责回忆相关示例、规划、代码生成和调试。通过在八个具有挑战性的问题解决和程序合成基准测试中进行全面实验,MapCoder 展现出卓越的代码生成能力,在多个数据集上取得了最先进的结果。此外,该方法在不同编程语言和问题难度下都表现出色。这项工作为复杂代码生成任务提供了一种新的思路。 +发布日期:2024-05-18 +链接:https://arxiv.org/abs/2405.11403 +机构:Bangladesh University of Engineering and Technology + +Fight Fire with Fire: How Much Can We Trust ChatGPT on Source Code-Related Tasks? +本文全面评估了 ChatGPT 在代码生成、代码补全和程序修复任务中的自我验证能力。研究发现,ChatGPT 常常错误地预测其生成的不正确代码是正确的,表现出自相矛盾的幻觉行为。提出引导性问题可以增强 ChatGPT 的自我验证能力,但 ChatGPT 生成的测试报告对于错误生成的代码和修复失败的解释大多不准确。这些发现为进一步利用 ChatGPT 进行研究或开发提供了启示。 +发布日期:2024-05-21 +链接:https://arxiv.org/abs/2405.12641 +机构:Zhejiang University + +SOAP: Enhancing Efficiency of Generated Code via Self-Optimization +本文提出了一个名为 SOAP 的自优化框架,可以利用执行开销信息来改进大型语言模型生成的代码效率。通过迭代式的自我优化,SOAP 能够显著提升生成代码的执行速度和内存使用效率。实验结果表明,在 EffiBench 测试中,优化后的代码执行时间减少了 87.1%,总内存消耗降低了 90.8%。这项工作为提高大型语言模型在代码生成任务中的实用性做出了重要贡献。 +发布日期:2024-05-24 +链接:https://arxiv.org/abs/2405.15189 +机构:The University of Hong Kong, University of Edinburgh + +Code Repair with LLMs gives an Exploration-Exploitation Tradeoff +本文提出了一种新的基于大语言模型的程序合成算法。该算法利用 Thompson 采样来平衡探索和利用,在循环不变式合成、视觉推理谜题和编程竞赛问题等多个领域取得了更好的效果,同时减少了对语言模型的调用次数。这一工作为如何利用大语言模型迭代优化和修复源代码提供了新的思路。 +发布日期:2024-05-26 +链接:https://arxiv.org/abs/2405.17503 +机构:Cornell University, Shanghai Jiao Tong University + +ReflectionCoder: Learning from Reflection Sequence for Enhanced One-off Code Generation +本文提出了一种名为 ReflectionCoder 的新方法,通过整合编译器反馈构建反射序列,有效提升了一次性代码生成的性能。此外,论文还提出了反射自蒸馏和动态掩码蒸馏技术,以更好地利用这些反射序列。实验结果表明,使用该方法微调后的模型在 HumanEval(+)、MBPP(+) 和 MultiPl-E 等基准测试中取得了最先进的性能,与 GPT-3.5-Turbo 和 Claude-3-opus 相当,甚至超过了早期的 GPT-4。这一方法不仅可应用于代码领域,还有望惠及其他注重最终结果且需要长推理路径的领域。 +发布日期:2024-05-27 +链接:https://arxiv.org/abs/2405.17057 +机构:Shanghai Jiao Tong University, SenseTime Research + +Training LLMs to Better Self-Debug and Explain Code +本文提出了一个训练框架,显著提高了大语言模型在代码生成领域的自我调试能力。作者观察到,对错误代码进行一系列解释,然后进行代码优化,可以帮助 LLM 更好地分析错误代码并进行改进。他们提出了一个自动化流程,通过生成大量解释和优化轨迹,并通过执行验证进行过滤,收集用于代码解释和优化的高质量数据集。在成功和失败的轨迹上进行监督微调(SFT)和强化学习(RL),并设计了一种新颖的奖励机制,同时考虑代码解释和优化质量。实验结果表明,该框架可以显著提高 LLM 的代码生成性能和迭代优化能力,并通过人工评估证实,经过训练的 LLM 可以生成更有用的代码解释,帮助开发人员更好地理解源代码中的错误。 +发布日期:2024-05-28 +链接:https://arxiv.org/abs/2405.18649 +机构:Purdue University, AWS AI Lab + +## 低资源语言 + +MEIC: Re-thinking RTL Debug Automation using LLMs +本文提出了一个名为 MEIC(Make Each Iteration Count)的新框架,用于利用大语言模型调试寄存器传输(RTL)代码。与传统的一次性 LLM 调试方法不同,MEIC 采用迭代过程,可有效识别和修正 RTL 代码中的语法和功能错误,同时能够管理 LLM 操作中固有的不确定性。论文还提供了一个包含 178 个常见 RTL 编程错误的开源数据集。实验结果表明,与有经验的工程师相比,该框架在调试过程中可以实现高达 48 倍的加速,对语法错误的修复率达到 93%,对功能错误的修复率达到 78%。 +发布日期:2024-05-10 +链接:https://arxiv.org/abs/2405.06840 +机构: Southeast University + +Tackling Execution-Based Evaluation for NL2Bash +本文提出了一种基于执行结果的评估方法,用于评估自然语言转 Bash 脚本(NL2Bash)任务中大语言模型生成代码的质量。作者设计并实现了一个用于 NL2Bash 任务的执行评估系统,并创建了一组 50 个提示词来评估一些流行的大型语言模型在该任务上的表现。此外,作者还分析了执行评估方法的几个优势和挑战,例如不同模型生成的语法不同但语义等价的 Bash 脚本,以及语法正确但语义错误的 Bash 脚本,并讨论了如何正确地捕获和处理这些情况。 +发布日期:2024-05-10 +链接:https://arxiv.org/abs/2405.06807 +机构:IBM Research + +Evaluating AI-generated code for C++, Fortran, Go, Java, Julia, Matlab, Python, R, and Rust +本文评估了 ChatGPT 3.5 和 4 版本在生成多种编程语言的科学计算代码方面的能力。研究发现,尽管 ChatGPT 能够生成可编译运行的代码,但不同编程语言的生成难度存在差异,并行代码对于 AI 来说也更具挑战性。这项研究为理解当前大型语言模型在科学计算领域的应用潜力提供了重要参考。 +发布日期:2024-05-21 +链接:https://arxiv.org/abs/2405.13101 +机构:Louisiana State University + +Optimizing Large Language Models for OpenAPI Code Completion +本文评估了 GitHub Copilot 在 OpenAPI 定义补全任务上的性能,并提出了一系列针对 CodeLlama 的优化方法,包括提示工程和微调技术,使其在参数量仅为 Codex 模型的 1/25 的情况下,在自定义的 OpenAPI 补全基准测试中实现了比 GitHub Copilot 高出 55.2% 的正确率,同时还改进了一种广泛使用的代码填充训练技术,解决了模型在提示上下文大小小于训练时使用的上下文大小时性能下降的问题,并公开了数据集、基准测试和模型微调代码。 +发布日期:2024-05-24 +链接:https://arxiv.org/abs/2405.15729 +机构:Kaunas University of Technology + +## AI 代码安全 + +Codexity: Secure AI-assisted Code Generation +本文提出了一个名为 Codexity 的安全代码生成框架,该框架集成了五个大语言模型。Codexity 利用静态分析工具(如 Infer 和 CppCheck)的反馈,来减少大语言模型生成的程序中的安全漏洞。在一个包含 751 个自动生成的易受攻击主题的真实基准测试中,该论文的评估结果表明,Codexity 可以防止 60% 的漏洞暴露给软件开发人员。这项工作有助于提高人工智能程序助手生成代码的安全性,减少引入漏洞的风险。 +发布日期:2024-05-07 +链接:https://arxiv.org/abs/2405.03927 +机构:National University of Singapore + +Measuring Impacts of Poisoning on Model Parameters and Embeddings for Large Language Models of Code +本文针对大语言模型在软件开发中的安全问题,特别是隐藏的后门攻击,提出了一种新的检测方法。通过分析模型的参数,包括注意力权重、偏差以及上下文嵌入,论文发现在中毒样本的上下文嵌入中存在明显的模式,而在注意力权重和偏差中没有显著差异。这项工作为通过分析参数和嵌入来进行白盒检测代码大型语言模型中的后门信号做出了贡献,推动了相关领域的研究进展。 +发布日期:2024-05-19 +链接:https://arxiv.org/abs/2405.11466 +机构:University of Houston + +## AI 代码分析 + +A Controlled Experiment on the Energy Efficiency of the Source Code Generated by Code Llama +本文对比了由大语言模型 CodeLlama 生成的代码和人类编写的代码在能耗效率方面的差异。通过在 C++、JavaScript 和 Python 三种语言上进行实验,作者发现 CodeLlama 生成代码的能耗效率很大程度上取决于所选择的编程语言和具体的编码问题,总体而言人类编写的代码能耗效率更高,但 JavaScript 是个例外。此外,即便明确要求 CodeLlama 生成节能的代码,其结果也并不理想,改变温度参数也不会影响生成代码的能耗。论文得出结论,使用 CodeLlama 生成的代码并不能保证能耗效率,因此开发者在将其集成到软件系统前,应当先评估代码的能耗效率。 +发布日期:2024-05-06 +链接:https://arxiv.org/abs/2405.03616 +机构:Vrije Universiteit Amsterdam + +ChatGPT Code Detection: Techniques for Uncovering the Source of Code +本文提出了一种新颖的方法,通过结合强大的嵌入特征(黑盒)和监督学习算法,包括深度神经网络、随机森林和极端梯度提升,以高达 98% 的准确率区分人工编写的代码和 ChatGPT 生成的代码。此外,论文还提供了白盒特征和可解释的贝叶斯分类器,以阐明代码来源之间的关键差异,从而提高了方法的可解释性和透明度。这项研究对于理解和减轻人工智能在代码生成中的潜在风险至关重要,特别是在高等教育、软件开发和竞争性编程的背景下。 +发布日期:2024-05-24 +链接:https://arxiv.org/abs/2405.15512 +机构:TH Köln + +Evaluation of the Programming Skills of Large Language Models +本文通过比较两个领先的大型语言模型 ChatGPT 和 Gemini 生成的编程代码质量,深入探讨了如何评估聊天机器人在处理复杂任务时的输出质量。论文选择编程代码作为研究对象,不仅因为这两个模型在代码生成方面表现出色,更因为编程代码的复杂性常常会上升到难以验证的程度,凸显了研究的重要性。通过结合真实案例和系统化数据集,这项研究旨在揭示大型语言模型在生成高质量编程代码方面的效能和可靠性,其结果将对软件开发乃至其他领域产生重大影响。 +发布日期:2024-05-23 +链接:https://arxiv.org/abs/2405.14388 +机构:University of Applied Sciences and Arts + +Uncovering LLM-Generated Code: A Zero-Shot Synthetic Code Detector via Code Rewriting +本文提出了一种新颖的零样本合成代码检测方法,利用代码与其重写变体之间的相似性来判断代码是否为大型语言模型生成的合成代码。作者基于合成代码与其重写版本之间差异较小的直觉,使用自监督对比学习训练了一个代码相似度模型。在两个合成代码检测基准测试中,该方法相较现有的面向通用文本的合成内容检测器有显著提升,在 APPS 基准测试中提高了 20.5%,在 MBPP 基准测试中提高了 29.1%。本文的贡献在于针对编程语言的独特语法结构和大量"低熵"词法单元,提出了一种专门用于检测合成代码的有效方法。 +发布日期:2024-05-25 +链接:https://arxiv.org/abs/2405.16133 +机构:Zhejiang University + +## 人机交互 + +Sketch Then Generate: Providing Incremental User Feedback and Guiding LLM Code Generation through Language-Oriented Code Sketches +本文提出了一种名为"面向语言的代码草图"的交互式方法,旨在改善人类与大语言模型在代码生成或编辑过程中的交互。该方法利用提示语句中固有的语言结构,并应用经典的自然语言处理技术,将提示语句转化为代码草图,为用户提供即时、增量的反馈。生成的代码草图不仅可以预览目标代码结构,还能引导语言模型生成期望的代码。这种方法增强了人类与语言模型之间的交互,使得用户能够更有效地编写出高质量的提示语句,从而提高代码生成的效率和质量。 +发布日期:2024-05-07 +链接:https://arxiv.org/abs/2405.03998 +机构:University of Minnesota + +Using AI Assistants in Software Development: A Qualitative Study on Security Practices and Concerns +本文研究了软件专业人员如何在安全软件开发中使用 AI 助手,以及由此产生的安全影响和考量。通过对软件工程师、团队负责人和安全测试人员的访谈,以及对 Reddit 上相关帖子的分析,论文发现尽管存在许多安全和质量问题,参与者仍广泛使用 AI 助手进行安全关键任务。他们对 AI 助手的不信任导致他们以类似于检查人工代码的方式检查 AI 建议,但预计未来 AI 助手会有所改进,因此会在安全任务中得到更多应用。论文提出了针对软件专业人员、AI 创建者和学术研究者的建议,以提高 AI 在软件开发中的安全性和适用性。 +发布日期:2024-05-10 +链接:https://arxiv.org/abs/2405.06371 +机构:CISPA Helmholtz Center for Information Security, Ruhr University Bochum + +Full Line Code Completion: Bringing AI to Desktop +本文 JetBrains 公司为 IntelliJ 平台开发的多词代码补全功能"Full Line Code Completion"。该功能可以在用户的本地设备上独立运行,生成语法正确的代码建议,满足了时间和内存消耗的限制,并符合代码补全引擎的设计原则。论文分享了在开发过程中使用的一些有用技术,以及离线和在线评估流程,帮助做出更好的决策。在线评估显示,使用该工具可以将 IDE 中由代码补全产生的代码量提高 1.5 倍。这一解决方案最初在研究人员的帮助下启动,并于 2023 年底集成到 PyCharm Pro 和 DataSpell 两个 JetBrains IDE 中,成功地将复杂的研究成果应用到实际产品中,为学术界和工业界之间搭建了桥梁。 +发布日期:2024-05-14 +链接:https://arxiv.org/abs/2405.08704 +机构:JetBrains + +Developers' Perceptions on the Impact of ChatGPT in Software Development: A Survey +本文通过对 207 名软件开发人员进行调查,深入探讨了 ChatGPT 等大型语言模型对软件开发实践和开发者观念的影响。研究揭示了 AI 工具如何影响软件质量、生产效率和工作满意度,同时也分析了开发者对 ChatGPT 未来发展的预期、对潜在失业风险的担忧,以及对监管措施的看法。这项研究有助于理解 AI 驱动工具在软件开发过程中的作用,为应对 AI 与软件工程交叉领域的挑战提供了重要见解。 +发布日期:2024-05-20 +链接:https://arxiv.org/abs/2405.12195 +机构:Federal University of Bahia + +A Transformer-Based Approach for Smart Invocation of Automatic Code Completion +本文解决了代码自动补全工具中的一个重要问题:何时向开发者提供代码补全建议。研究者开发了一个机器学习模型,可以根据代码上下文和可用的遥测数据准确预测何时调用代码补全工具。他们收集了一个包含 20 万次开发者与跨 IDE 代码补全插件交互的数据集,并训练了多个调用过滤模型。结果表明,他们的小规模 transformer 模型在保持较低延迟的同时显著优于基线。此外,研究者还探索了将额外的遥测数据直接集成到预训练的 transformer 中的搜索空间,并获得了有希望的结果。为了进一步证明他们的方法的实际潜力,研究者在线上环境中与 34 名开发者一起部署了该模型,并基于 7.4 万次实际调用提供了真实世界的见解。 +发布日期:2024-05-23 +链接:https://arxiv.org/abs/2405.14753 +机构:Delft University of Technology + +A Study on Developer Behaviors for Validating and Repairing LLM-Generated Code Using Eye Tracking and IDE Actions +本文通过对 28 名参与者的实验研究,探讨了开发者如何验证和修复由大型语言模型(如 GitHub Copilot)生成的代码,并分析了代码来源意识对这些过程的影响。研究发现,在没有明确信息的情况下,开发者通常无法识别代码的语言模型来源。尽管开发者对语言模型生成的代码采用类似的验证和修复策略,但表现出频繁在代码和注释之间切换、注意力集中不同以及倾向于删除和重写代码等行为。意识到代码的来源可以提高性能,增加搜索努力,更频繁地使用 Copilot,但同时也会增加认知负荷。这些发现加深了我们对开发者如何与语言模型生成的代码交互的理解,并为设计促进人与语言模型在软件开发中有效协作的工具提供了启示。 +发布日期:2024-05-25 +链接:https://arxiv.org/abs/2405.16081 +机构:University of Notre Dame + +Analyzing Chat Protocols of Novice Programmers Solving Introductory Programming Tasks with ChatGPT +本文研究了大学生在学习编程入门课程时如何使用 ChatGPT 等大型语言模型工具。研究者收集并分析了 213 名学生提交的 2335 条与 ChatGPT 的对话记录,从对话内容、频率、进展和其他使用模式等方面进行了研究。结果显示,学生与 ChatGPT 的互动方式多种多样,既有可能起到支持作用的,也有令人担忧的。通过了解学生与 ChatGPT 的互动方式,可以为未来高等教育中的编程入门课程提供教学实践和指导方面的参考。 +发布日期:2024-05-29 +链接:https://arxiv.org/abs/2405.19132 +机构:Nuremberg Tech + +Benchmarking the Communication Competence of Code Generation for LLMs and LLM Agent +探索了大型语言模型在代码生成任务中的交流能力。作者认为,优秀的软件工程师在面对不明确的需求和编码解决方案时,往往会提出澄清性问题,而大型语言模型在执行代码生成任务时也应该具备这种能力。为了评估语言模型在这方面的表现,作者创建了一个新的基准测试集 HumanEvalComm,并定义了交流率和良好问题率等新的评估指标。此外,作者还提出了一种新的语言模型代理方法 Okanagan,用于识别代码和描述中的模糊部分,并提出问题以进一步优化生成的代码。通过比较不同的代码语言模型和 Okanagan,作者讨论了评估结果,为大型语言模型在代码生成任务中的交流能力研究提供了新的见解。 +发布日期:2024-05-31 +链接:https://arxiv.org/abs/2406.00215 +机构:University of British Columbia + +# 软工下游任务 + +## 代码生成 + +CodeGRAG: Extracting Composed Syntax Graphs for Retrieval Augmented Cross-Lingual Code Generation +本文提出了一种名为 CodeGRAG 的方法,通过提取和总结代码块的控制流和数据流,弥补了编程语言与自然语言之间的差距。这种外部结构知识可以帮助大型语言模型更好地理解代码语法,并在不同编程语言之间架起桥梁。CodeGRAG 显著提高了大型语言模型在单轮代码生成任务中的性能,甚至可以在跨语言代码生成(如用 C++ 生成 Python 代码)中获得性能提升。 +发布日期:2024-05-03 +链接:https://arxiv.org/abs/2405.02355 +机构:Shanghai Jiao Tong University + +Prompt-based Code Completion via Multi-Retrieval Augmented Generation +本文提出了一个名为 ProCC 的代码补全框架,通过利用提示工程和上下文多臂老虎机算法,灵活地结合多个代码视角来改进代码补全效果。ProCC 首先采用基于提示的多检索器系统,利用大语言模型的知识从多个检索视角理解代码语义。然后,它采用自适应检索选择算法将代码相似度纳入决策过程,以确定最合适的检索视角供语言模型完成代码。实验结果表明,ProCC 在开源和私有领域的基准测试中,在 Exact Match 指标上分别比现有最佳技术提高了 8.6% 和 10.1%,同时还可以通过即插即用的方式增强微调模型的性能。 +发布日期:2024-05-13 +链接:https://arxiv.org/abs/2405.07530 +机构:Southern University of Science and Technology + +Model Cascading for Code: Reducing Inference Costs with Model Cascading for LLM Based Code Generation +本文提出了一种基于模型级联的方法,用于在代码补全任务中优化大语言模型的计算成本和准确性之间的平衡。作者提出让每个模型生成并执行一组测试用例,并使用测试结果作为级联阈值。与单一模型生成输出相比,该策略可以降低计算成本,同时提高准确性。此外,作者还引入了一种启发式方法来确定每个模型应生成的解决方案、测试用例和测试行数的最佳组合。这是首次在代码生成任务中使用模型级联来优化大语言模型的成本-准确性权衡。 +发布日期:2024-05-24 +链接:https://arxiv.org/abs/2405.15842 +机构:New York University + +Divide-and-Conquer Meets Consensus: Unleashing the Power of Functions in Code Generation +本文提出了一种名为 FunCoder 的代码生成框架,它采用分治策略和函数共识的方法来解决大型语言模型在生成满足复杂要求的程序时面临的挑战。FunCoder 通过递归地将子函数作为更小的目标进行分支,并通过识别程序行为的相似性形成共识来指定函数,从而减轻了错误传播的影响。实验结果表明,FunCoder 在多个数据集上优于现有的最先进方法,并且在较小的模型上也表现出优越性。此外,论文的分析揭示了所提出的动态函数分解能够处理复杂的需求,而函数共识在正确性评估方面优于自我测试。 +发布日期:2024-05-30 +链接:https://arxiv.org/abs/2405.20092 +机构:Harbin Institute of Technology + +## 仓库级代码生成 + +Contextual API Completion for Unseen Repositories Using LLMs +本文提出了一种新的技术,通过利用代码仓库中的全局和局部上下文信息,来缓解大型语言模型在 API 补全任务中由于缺乏真实世界、特定领域信息而导致的输出不一致问题。作者开发了一个名为 LANCE 的工具,针对 API 令牌补全和对话式 API 补全两种任务进行了优化。在作者提出的跨两种编程语言的基准测试 APIEval 中,LANCE 的平均准确率分别达到了 82.6% 和 76.9%,显著超过了 Copilot。这项研究表明,作者提出的轻量级上下文分析方法可以应用于多语言环境,无需语言特定的训练或微调,从而以最小的样本和努力达到高效的实现。 +发布日期:2024-05-07 +链接:https://arxiv.org/abs/2405.04600 +机构:University of British Columbia + +Dataflow-Guided Retrieval Augmentation for Repository-Level Code Completion +本文提出了一种名为 DraCo 的数据流引导的检索增强方法,用于仓库级别的代码补全任务。DraCo 通过扩展的数据流分析,将私有仓库解析为代码实体并建立它们之间的关系,形成特定于仓库的上下文图。在触发代码补全时,DraCo 能够从上下文图中精确地检索相关的背景知识,并生成格式良好的提示来查询代码语言模型。此外,论文还构建了一个更加多样化的 Python 数据集 ReccEval。实验结果表明,与现有最先进的方法相比,DraCo 在代码精确匹配率和标识符 F1 分数方面平均提高了 3.43% 和 3.27%,展现出了优越的准确性和适用效率。 +发布日期:2024-05-30 +链接:https://arxiv.org/abs/2405.19782 +机构:Nanjing University + +## 代码翻译 + +Towards Translating Real-World Code with LLMs: A Study of Translating to Rust +本文首次对大语言模型在将真实世界的代码翻译为 Rust 语言方面的能力进行了大规模的研究。作者评估了五个最先进的大型语言模型在代码翻译任务上的表现,并开发了一个名为 FLOURINE 的端到端代码翻译工具,该工具使用差分模糊测试来检查翻译后的 Rust 代码与原始源程序是否具有 I/O 等价性,从而消除了对预先存在的测试用例的需求。研究结果表明,表现最好的语言模型可以成功翻译 47% 的基准测试。 +发布日期:2024-05-19 +链接:https://arxiv.org/abs/2405.11514 +机构:MPI-SWS, University of Bristol + +## 代码总结 + +DocuMint: Docstring Generation for Python using Small Language Models +本文研究了小型语言模型在生成高质量文档字符串方面的有效性。研究人员通过数学公式和人工评估的方式,从准确性、简洁性和清晰度等方面对模型的性能进行了定量和定性的评估。此外,论文还引入了一个名为 DocuMint 的大规模微调数据集,其中包含 100,000 个样本。通过在 DocuMint 数据集上对 CodeGemma 2B 模型进行微调,该模型在所有指标上的性能都有显著提高,其中简洁性提高了 22.5%。这项研究为使用小型语言模型生成高质量的文档字符串提供了重要的实证支持。 +发布日期:2024-05-16 +链接:https://arxiv.org/abs/2405.10243 +机构:University of Tennessee + +Natural Is The Best: Model-Agnostic Code Simplification for Pre-trained Large Language Models +本文提出了一种名为 SlimCode 的模型无关的代码简化方法,用于简化输入给大语言模型的代码。与现有的基于 LLM 注意力分数过滤输入代码令牌的方法不同,SlimCode 依赖于输入代码令牌的性质,因此不受模型架构和预训练数据集的影响。通过在 CodeBERT、CodeT5 和 GPT-4 等 LLM 上进行实证研究,论文发现了代码删除率与训练时间节省率之间的线性关系,不同类别令牌对代码简化的影响差异显著,且这种影响与任务相关但与模型无关。此外,这些发现适用于范式提示工程和交互式上下文学习。实验结果表明,与现有技术相比,SlimCode 在代码搜索和摘要方面分别提高了 9.46% 和 5.15% 的性能,速度提高了 133 倍,并且在生成与原始代码相当的结果的同时,每次 GPT-4 API 查询的成本最多可降低 24%。 +发布日期:2024-05-18 +链接:https://arxiv.org/abs/2405.11196 +机构:Central University of Finance and Economics + +Large Language Models for Code Summarization +本文研究了最新的大语言模型在软件工程领域的应用,特别关注了这些模型在代码解释和总结方面的表现,同时也探讨了它们根据自然语言描述生成代码的能力。 +发布日期:2024-05-29 +链接:https://arxiv.org/abs/2405.19032 +机构:Eötvös Loránd University + +## 代码修复 + +A Systematic Literature Review on Large Language Models for Automated Program Repair +本文对 2020 年至 2024 年期间大型语言模型在自动程序修复领域的应用进行了系统性的文献综述。作者分析了 127 篇相关论文,从大语言模型、自动程序修复以及二者的结合角度出发,总结了目前大型语言模型在自动程序修复中的应用现状、面临的挑战以及未来的研究机会。论文不仅分类介绍了现有的主流大型语言模型及其在自动程序修复中的三种利用策略,还详细阐述了一些能够从大语言模型中获益的特定修复场景,如语义缺陷和安全漏洞等。此外,作者还讨论了将大语言模型与自动程序修复相结合时的几个关键方面,如输入形式和科学开源等,并指出了一系列有待探索的挑战以及未来研究的潜在方向。 +发布日期:2024-05-02 +链接:https://arxiv.org/abs/2405.01466 +机构:Nanjing University + +NAVRepair: Node-type Aware C/C++ Code Vulnerability Repair +本文提出了一种名为 NAVRepair 的新框架,用于修复 C/C++ 代码中的漏洞。该框架结合了从抽象语法树(AST)中提取的节点类型信息和错误类型,以更好地解决 C/C++ 漏洞修复的挑战。NAVRepair 采用类型分析来定位最小编辑节点(MEN),并根据不同的错误类型定制上下文信息收集。在离线阶段,它解析代码补丁以定位 MEN,并为每种 MEN 类型设计规则以提取相关的上下文信息。在在线修复阶段,它分析可疑代码,将其与来自通用弱点枚举(CWE)的漏洞类型模板相结合,并生成针对性的修复提示。该框架独立于任何特定的大语言模型,可以快速适应新的漏洞类型。大量实验验证了 NAVRepair 在辅助 LLM 准确检测和修复 C/C++ 漏洞方面取得了优异的结果,与现有的基于 LLM 的 C/C++ 漏洞修复方法相比,准确率提高了 26%。 +发布日期:2024-05-08 +链接:https://arxiv.org/abs/2405.04994 +机构:Harbin Institute of Technology + +Automated Program Repair: Emerging trends pose and expose problems for benchmarks +本文指出目前机器学习技术在自动程序修复领域的应用与早期工作存在重要差异,尤其是大语言模型的训练数据集可能包含评估时使用的问题,这可能导致评估结果无法泛化。因此,论文强调在使用机器学习技术进行自动程序修复时,评估和比较必须谨慎,以确保结果的有效性和泛化性。同时,论文也指出目前最流行的自动程序修复评估基准并非为机器学习技术设计,这进一步凸显了该问题的重要性。 +发布日期:2024-05-08 +链接:https://arxiv.org/abs/2405.05455 +机构:Arizona State University + +Automated Repair of AI Code with Large Language Models and Formal Verification +本文提出了一种利用大语言模型自动检测和修复神经网络代码中内存安全漏洞的方法。研究者们首先通过程序变异的方式扩充了现有的神经网络代码数据集 NeuroCodeBench,使其规模达到约 81k 个程序。然后,他们使用先进的软件验证器 ESBMC 对变异后的神经网络实现进行内存安全验证。一旦 ESBMC 发现漏洞,就调用大语言模型来修复源代码。在代码修复任务中,研究者比较了各种最先进的提示工程技术和一种重复调用大语言模型的迭代方法的性能。这项工作为提高下一代 AI 系统的安全性提供了新的思路和方法。 +发布日期:2024-05-14 +链接:https://arxiv.org/abs/2405.08848 +机构:The University of Manchester + +A Case Study of LLM for Automated Vulnerability Repair: Assessing Impact of Reasoning and Patch Validation Feedback +本文提出了一种名为 VRpilot 的基于大型语言模型的漏洞修复技术。VRpilot 在生成补丁候选之前使用了思维链提示来推理漏洞,并根据外部工具(如编译器、代码检查器、测试套件等)对先前生成的补丁的输出迭代地优化提示。通过与现有技术的比较,作者发现 VRpilot 在 C 语言和 Java 语言上分别平均生成了 14% 和 7.6% 更多正确的补丁。消融研究表明,推理和补丁验证反馈对于提高漏洞修复的性能至关重要。这项研究为推进大型语言模型在漏洞修复领域的应用提供了宝贵的经验和潜在方向。 +发布日期:2024-05-24 +链接:https://arxiv.org/abs/2405.15690 +机构:North Carolina State University + +## 代码检索 + +Refining Joint Text and Source Code Embeddings for Retrieval Task with Parameter-Efficient Fine-Tuning +本文提出了一种新的微调框架,利用参数高效微调技术和对比学习目标,在只调整少量模型参数的情况下,显著提升了代码-文本检索任务的性能。这一方法降低了计算资源需求,加快了微调速度,并通过在两个数据集上的广泛实验证明了其有效性。论文还就参数高效微调技术进行了全面的基准测试,弥补了现有文献中的不足。 +发布日期:2024-05-07 +链接:https://arxiv.org/abs/2405.04126 +机构:Innopolis University + +Typhon: Automatic Recommendation of Relevant Code Cells in Jupyter Notebooks +本文提出了一种名为 Typhon 的方法,旨在为 Jupyter notebook 自动推荐相关的代码单元。该方法通过对开发者的 markdown 描述单元进行标记化,并使用 BM25 排序函数或 CodeBERT 等文本相似度技术从数据库中查找最相似的代码单元。然后,该算法计算标记化查询与 markdown 单元之间的相似度距离,以向开发者返回最相关的代码单元。通过在 Kaggle 竞赛的 Jupyter notebook 上评估 Typhon 工具,作者发现该方法可以以中等精度推荐代码单元。这篇论文的方法和结果可以进一步改进 Jupyter notebook 中的代码单元推荐。 +发布日期:2024-05-15 +链接:https://arxiv.org/abs/2405.09075 +机构:Mahidol University + +## SQL 生成 + +CoE-SQL: In-Context Learning for Multi-Turn Text-to-SQL with Chain-of-Editions +本文提出了一种名为 CoE-SQL 的方法,旨在提高大语言模型在多轮文本到 SQL 生成任务中的推理能力。该方法利用了对话上下文的依赖性,通过引入编辑链,提示语言模型基于先前生成的 SQL 语句生成当前语句,只需进行少量修改操作。通过广泛的消融研究,确定了该方法的最佳配置。CoE-SQL 在 SParC 和 CoSQL 两个基准测试中稳定地超越了不同的上下文学习基线方法,使用大型语言模型达到了最先进的性能,并且与目前最优的微调模型具有竞争力。 +发布日期:2024-05-04 +链接:https://arxiv.org/abs/2405.02712 +机构:Shanghai Jiao Tong University + +Open-SQL Framework: Enhancing Text-to-SQL on Open-source Large Language Models +本文针对开源大语言模型在文本到 SQL 任务中遇到的问题,提出了一套系统化的方法。论文的主要贡献包括:全面评估了开源大语言模型在文本到 SQL 任务中的表现,提出了 openprompt 策略以更好地表示问题,并提出了新的监督微调策略。论文还探讨了思维链在分步推理中的好处,提出了 openexample 方法来增强小样本学习的效果。此外,论文还引入了一些节省令牌的技术,如可变长度的开放数据库模式、目标列截断和样本列截断,以应对大规模数据库带来的挑战。该方法显著提高了 Llama2-7B 和 CodeLlama-7B 在 BIRD-Dev 数据集上的性能,其中 CodeLlama-7B 的表现甚至超过了 GPT-4。 +发布日期:2024-05-04 +链接:https://arxiv.org/abs/2405.06674 +机构:Shenzhen University + +MCS-SQL: Leveraging Multiple Prompts and Multiple-Choice Selection For Text-to-SQL Generation +本文提出了一种新颖的基于大语言模型解决文本到 SQL 任务的方法。该方法利用多个提示来探索更广泛的答案搜索空间,并有效地聚合它们。通过使用多个提示对数据库模式进行稳健的细化,生成各种候选 SQL 查询,并基于置信度分数对候选查询进行过滤,最终通过呈现给 LLM 的多项选择获得最佳查询。在 BIRD 和 Spider 基准测试中,该方法分别实现了 65.5% 和 89.6% 的执行精度,显著优于以前的基于 ICL 的方法,并在 BIRD 上建立了新的 SOTA 性能,无论是在生成查询的准确性还是效率方面。 +发布日期:2024-05-13 +链接:https://arxiv.org/abs/2405.07467 +机构:Dunamu + +PromptMind Team at EHRSQL-2024: Improving Reliability of SQL Generation using Ensemble LLMs +本文针对电子健康记录中的文本到 SQL 转换任务(EHRSQL-2024),提出了两种利用大型语言模型进行提示和微调的方法。作者着重缩小了语言模型的现实世界知识与任务所需的领域特定知识之间的差距。实验结果表明,每种方法单独使用都能取得较高的执行准确率,而集成方法则能进一步提高生成的可靠性并减少错误。该论文中概述的方法旨在适用于强调准确性和可靠性的特定领域文本到 SQL 查询转换问题。 +发布日期:2024-05-14 +链接:https://arxiv.org/abs/2405.08839 +机构:无 + +LG AI Research & KAIST at EHRSQL 2024: Self-Training Large Language Models with Pseudo-Labeled Unanswerable Questions for a Reliable Text-to-SQL System on EHRs +本文提出了一种自训练策略,通过使用伪标记的不可回答问题来提高电子健康记录领域文本到 SQL 模型的可靠性。该方法包括两阶段的训练过程以及基于令牌熵和查询执行的过滤方法。作者在 EHRSQL 2024 共享任务中的出色表现证明了该方法的有效性,展示了通过更可靠的文本到 SQL 系统来改善医疗决策的潜力。 +发布日期:2024-05-18 +链接:https://arxiv.org/abs/2405.11162 +机构:LG AI Research, KAIST + +Before Generation, Align it! A Novel and Effective Strategy for Mitigating Hallucinations in Text-to-SQL Generation +本文针对大语言模型在文本到 SQL 转换任务中存在的幻觉问题,提出了一种新的策略——任务对齐(Task Alignment)。该策略鼓励大语言模型利用相似任务的经验,而不是从头开始执行任务,从而减轻模型泛化的负担,有效缓解幻觉问题。基于这一策略,作者提出了一个新的文本到 SQL 转换框架 TA-SQL。实验结果和全面分析证明了该框架的有效性和鲁棒性,在多个主流复杂数据集上显著提高了包括 GPT-4 在内的多个基线模型的性能。 +发布日期:2024-05-24 +链接:https://arxiv.org/abs/2405.15307 +机构:The University of Hong Kong + +CHESS: Contextual Harnessing for Efficient SQL Synthesis +本文提出了一种新的流水线方法,用于将自然语言问题转化为 SQL 查询。该方法通过引入分层检索、自适应模式修剪等技术,有效地检索相关数据和上下文,选择高效的模式,并生成正确且高效的 SQL 查询。作者在具有挑战性的跨领域 BIRD 数据集上进行了一系列消融实验,证明了所提出方法的有效性,并取得了最先进的性能表现。这项工作为利用大型语言模型解决实际复杂数据库中的文本到 SQL 转换问题提供了新的思路和方案。 +发布日期:2024-05-27 +链接:https://arxiv.org/abs/2405.16755 +机构:Stanford University + +## 测试生成 + +TOGLL: Correct and Strong Test Oracle Generation with LLMs +本文提出了一种基于大语言模型自动生成测试预言(test oracle)的新方法 TOGLL。通过在 SF110 数据集上微调七个代码大模型并使用六种不同的提示,研究人员发现 TOGLL 能够生成正确、多样且强大的测试预言,能够有效识别大量独特的 bug。在 25 个大型 Java 项目上的研究表明,与 EvoSuite 和现有最先进的神经方法 TOGA 相比,TOGLL 可以产生 3.8 倍以上正确的断言预言和 4.9 倍以上的异常预言,并且能够检测到 1023 个 EvoSuite 无法检测到的独特 bug,是 TOGA 的十倍以上。这项研究揭示了 LLM 在测试预言生成方面的巨大潜力。 +发布日期:2024-05-06 +链接:https://arxiv.org/abs/2405.03786 +机构:University of Virginia + +Leveraging Large Language Models for Automated Web-Form-Test Generation: An Empirical Study +本文对比研究了 11 种大语言模型在 146 个网页表单测试用例生成方面的有效性。研究发现,不同的大语言模型在生成测试用例的效果上存在差异,其中 GPT-4、GLM-4 和 Baichuan2 表现较好。相比 GPT-4,其他模型在生成合适的测试用例方面存在困难,导致成功提交率降低。此外,研究还发现,当设计的提示信息包含完整清晰的网页表单上下文信息时,所有模型都能生成更有效的测试用例。最后,论文为利用大语言模型指导自动化网页表单测试提供了一些见解。 +发布日期:2024-05-16 +链接:https://arxiv.org/abs/2405.09965 +机构:Macau University of Science and Technology + +Test Oracle Automation in the era of LLMs +本文探讨了利用大语言模型自动生成测试预言(test oracle)的潜力和挑战。作者指出,LLM 在自动测试生成和程序修复等软件测试任务中已经表现出色,因此有望用于自动化生成不同类型的测试预言。同时,论文也分析了在使用 LLM 进行测试预言自动化时,软件工程研究人员需要考虑的主要威胁,包括预言缺陷和数据泄露等问题。总的来说,这项研究为探索 LLM 在测试谕示自动化中的应用提供了新的视角和讨论方向。 +发布日期:2024-05-21 +链接:https://arxiv.org/abs/2405.12766 +机构:IMDEA Software Institute + +## 漏洞检测 + +DLAP: A Deep Learning Augmented Large Language Model Prompting Framework for Software Vulnerability Detection +本文提出了一个名为 DLAP 的新框架,结合了深度学习模型和大语言模型的优势,用于软件漏洞检测。与传统的深度学习模型相比,DLAP 不仅在漏洞检测性能上表现出色,而且可以为开发人员提供解释,帮助他们理解检测结果。实验评估结果证实,DLAP 在多个指标上优于现有的先进提示框架和微调方法。这项工作为改进软件漏洞检测提供了一种新的思路和方法。 +发布日期:2024-05-02 +链接:https://arxiv.org/abs/2405.01202 +机构:Nanjing University + +Bridging the Gap: A Study of AI-based Vulnerability Management between Industry and Academia +本文探讨了人工智能在自动化软件漏洞管理领域的研究进展与工业界实际应用之间存在的差距。作者通过讨论和实践经验,发现阻碍工业界采用学术界模型的三个主要障碍:可扩展性和优先级的复杂需求、有限的定制灵活性,以及不明确的财务影响。同时,缺乏广泛的真实世界安全数据和专业知识也显著影响了研究工作。论文提出了一系列未来方向,以帮助更好地理解行业期望,提高基于人工智能的安全漏洞研究的实用性,并推动工业界和学术界之间的协同关系。 +发布日期:2024-05-03 +链接:https://arxiv.org/abs/2405.02435 +机构:Meta + +Bridge and Hint: Extending Pre-trained Language Models for Long-Range Code +本文提出了一个名为 EXPO 的框架,用于扩展预训练语言模型以处理长程代码。EXPO 引入了两种创新的记忆机制:桥接记忆和提示记忆。桥接记忆使用标记机制连接长程代码中不连续的片段,帮助模型维持上下文连贯性。提示记忆通过集成 kNN 注意力层,自适应地选择全局上下文中的关键代码元素,如包导入等。这种双重记忆方法弥合了理解局部代码片段和维持全局代码连贯性之间的差距,从而增强了模型对长代码序列的总体理解。实验结果表明,EXPO 显著提高了预训练语言模型在 API 推荐和漏洞检测等代码智能任务上的性能。 +发布日期:2024-05-18 +链接:https://arxiv.org/abs/2405.11233 +机构:Harbin Institute of Technology + +Harnessing Large Language Models for Software Vulnerability Detection: A Comprehensive Benchmarking Study +本文探索了使用大语言模型来辅助检测源代码中的漏洞。作者测试了多个最先进的 LLM,并确定了最佳的提示策略,以充分利用 LLM 的能力。通过将 LLM 与传统的静态分析工具进行比较,作者发现 LLM 能够发现比传统工具更多的问题,在召回率和 F1 分数方面表现更好。这项研究的结果对负责确保代码无漏洞的软件开发人员和安全分析师具有重要意义。 +发布日期:2024-05-24 +链接:https://arxiv.org/abs/2405.15614 +机构:Tallinn University of Technology + +LLM-Assisted Static Analysis for Detecting Security Vulnerabilities +本文提出了一种创新的方法 IRIS,将大语言模型与静态分析相结合,以检测大型 Java 项目中的安全漏洞。作者还精心构建了一个新的数据集 CWE-Bench-Java,包含 120 个在实际 Java 项目中手工验证的安全漏洞。实验结果表明,IRIS 使用 GPT-4 可以检测出其中的 69 个漏洞,而最先进的静态分析工具只能检测到 27 个。此外,IRIS 还大大减少了误报的数量(最好的情况下可减少 80% 以上)。这项工作展示了大语言模型与传统程序分析技术相结合的巨大潜力。 +发布日期:2024-05-27 +链接:https://arxiv.org/abs/2405.17238 +机构:University of Pennsylvania + +## 日志分析 + +On the Influence of Data Resampling for Deep Learning-Based Log Anomaly Detection: Insights and Recommendations +本文研究了数据重采样方法对深度学习日志异常检测方法的影响。论文作者在三个数据集上评估了现有方法的性能,探讨了不同的正常数据与异常数据的重采样比例对十种数据重采样方法的影响。此外,作者还评估了使用最优重采样比例时,数据重采样方法的有效性。研究结果表明,过采样方法通常优于欠采样和混合方法,在原始数据上进行重采样优于在特征空间中进行重采样。论文建议通过过采样为少数类别生成更多数据,同时通过欠采样从多数类别中删除更少的数据。总的来说,这项研究为理解数据重采样方法与深度学习日志异常检测之间的复杂关系提供了宝贵的见解。 +发布日期:2024-05-06 +链接:https://arxiv.org/abs/2405.03489 +机构:City University of Hong Kong + +## 需求工程 + +MARE: Multi-Agents Collaboration Framework for Requirements Engineering +本文提出了一个名为 MARE 的创新框架,利用大语言模型在整个需求工程过程中进行协作。MARE 将需求工程过程划分为四个任务:引出、建模、验证和规格说明,每个任务由一个或两个特定的智能体执行,每个智能体可以执行多个动作。MARE 设计了一个工作空间,方便智能体上传生成的中间需求工件并获取所需信息。通过在五个公共案例、一个数据集和本工作创建的四个新案例上进行实验,并使用三个广泛使用的指标对生成的需求模型进行比较,结果表明 MARE 可以生成更正确的需求模型,并比现有最先进的方法提高 15.4%。对于生成的需求规格说明,本文从三个方面进行了人工评估,并提供了关于质量的见解。 +发布日期:2024-05-06 +链接:https://arxiv.org/abs/2405.03256 +机构:Peking University + +# ICLR 2024 专辑 + +5 月 7 日至 5 月 11 日,一年一度的人工智能盛会 ICLR 在奥地利维也纳召开。本期综述我们也收录了 17 篇来自今年 ICLR 的代码大模型相关论文。 + +Lemur: Harmonizing Natural Language and Code for Language Agents +本论文推出了 Lemur 和 Lemur-Chat,兼具自然语言和编程能力的开源模型。通过结合代码密集的预训练和指令微调,这些模型在文本和编码基准上的表现达到了开源模型的最先进水平,展示出在多种代理任务中的优越性,提供了开发高级开源代理的新思路。 +发布日期:2023-10-10 +链接:https://arxiv.org/abs/2310.06830 +机构:University of Hong Kong, Salesforce Research + +Code Representation Learning At Scale +本文提出代码表征模型 CodeSage,通过双阶段预训练方案,利用大量代码数据来提升代码表示学习。具体方法包括混合 MLM 和编码编程语言结构的训练,以及通过无监督方式构建困难负样本和困难正样本的对比学习。结果显示,该方法在众多下游任务中显著超越现有模型。同时,论文还通过详细消融实验分析了代码级别降噪方案、困难样本的重要性、双模态对比学习对跨语言语义搜索的提升,以及预训练方案对模型尺寸和任务表现的影响。 +发布日期:2024-02-02 +链接:https://arxiv.org/abs/2402.01935 +机构:AWS AI Labs + +WizardCoder: Empowering Code Large Language Models with Evol-Instruct +本文提出了 WizardCoder,通过将 Evol-Instruct 方法应用到代码领域,对代码大模型进行复杂指令微调。实验结果表明,WizardCoder 在四个主要代码生成基准测试(HumanEval、HumanEval+、MBPP、DS-1000)上的表现显著优于所有其他开源的代码大模型,并且在 HumanEval 和 HumanEval+ 测试中甚至超越了最大的闭源模型(Anthropic 的 Claude 和 Google 的 Bard)。 +发布日期:2023-06-14 +链接:https://arxiv.org/abs/2306.08568 +机构:Microsoft + +OctoPack: Instruction Tuning Code Large Language Models +本文通过利用 Git 提交记录中代码变更和人类指令的自然结构,对大语言模型进行指令微调,提出了一个名为 CommitPack 的数据集,包含 4TB 的 Git 提交记录,涵盖 350 种编程语言。实验结果表明在 StarCoder 模型上使用 CommitPack 数据集进行微调后,在 HumanEval 上达到了 46.2% 的 pass@1 成绩,以及在扩展后的 HumanEvalPack 基准测试中表现优异,证明了 CommitPack 在推广到更多编程语言和任务上的优势。 +发布日期:2023-08-14 +链接:https://arxiv.org/abs/2308.07124 +机构:BigCode + +At Which Training Stage Does Code Data Help LLMs Reasoning? +本文探讨了在训练大语言模型时,不同阶段引入代码数据对模型推理能力的影响。研究结果表明:1)在预训练阶段引入代码和文本混合数据可以显著提升 LLM 的推理能力,几乎不影响其他任务的表现;2)在指令微调阶段,引入代码数据可以赋予 LLM 特定任务的推理能力;3)通过动态混合策略逐步引入代码和文本数据,有助于 LLM 在训练过程中逐步学习推理能力。这些发现有助于更好地理解和应用 LLM 在科学问答和法律支持等领域的推理能力。 +发布日期:2023-09-28 +链接:https://arxiv.org/abs/2309.16298 +机构:National University of Defense Technology + +LLM-Assisted Code Cleaning For Training Accurate Code Generators +本文主要探讨了代码数据质量对代码生成模型的影响。作者提出了一种新的数据清理管道,通过重命名变量、将复杂代码模块化分解以及插入基于自然语言的计划来提升现有程序的结构和可读性。实验结果表明,与直接在原始数据集上进行微调相比,在经过其清理和优化的模块化程序数据集上进行微调能提升最高达 30%的性能。此外,研究还发现即使使用更少量但质量更高的数据,经过清理的数据模型在表现上也优于原始完整数据集模型,并且在与闭源的 AlphaCoder 模型对比中也表现优异。 +发布日期:2023-11-25 +链接:https://arxiv.org/abs/2311.14904 +机构:University of California, Berkeley + +B-Coder: Value-Based Deep Reinforcement Learning for Program Synthesis +本文提出了一种基于价值方法的代码生成新方法——B-Coder(贝尔曼编码器)。论文采用了强化学习(RL)和大模型相结合的手段,通过预训练语言模型初始化 RL 代理,并引入保守的贝尔曼算子来简化训练。它采用基于值函数的方法,而不是传统的基于策略方法。同时,论文展示了如何利用学习到的值函数后处理生成的程序。实验表明,B-Coder 在处理编程合成任务时达到了最先进的性能,且无需复杂的奖励设计,验证了基于价值的 RL 方法的有效性。 +发布日期:2023-10-04 +链接:https://arxiv.org/abs/2310.03173 +机构:University of Illinois Chicago, ByteDance Inc. + +Solving Challenging Math Word Problems Using GPT-4 Code Interpreter with Code-based Self-Verification +本文探讨了代码对大语言模型(如 GPT-4)的数学推理能力提升的影响,尤其是通过引入不同的代码使用频率限制。研究发现,GPT-4 Code Interpreter 的成功主要归功于其生成和执行代码、评估代码执行结果以及修正错误解答的能力。在此基础上,作者提出了一种新颖且有效的提示方法,即基于代码的自我验证(CSV),用于进一步提高 GPT-4 在数学推理方面的性能。该方法使用 0-shot 提示词,鼓励模型使用代码自我验证答案,并在验证结果为“错误”时自动修改解答。使用这种方法,GPT-4 Code Interpreter 在 MATH 数据集上的 0-shot 准确率显著提升,从 53.9% 提高到 84.3%。 +发布日期:2023-08-15 +链接:https://arxiv.org/abs/2308.07921 +机构:The Chinese University of Hong Kong + +MathCoder: Seamless Code Integration in LLMs for Enhanced Mathematical Reasoning +本文通过生成包含数学问题及其代码解决方案的新颖高质量数据集(MathCodeInstruct),并结合定制的监督微调和推理方法,来微调开源语言模型,从而提升其数学推理能力。最终基于微调 LLaMA-2 得到的 MathCoder 模型在 MATH 和 GSM8K 数据集上的表现超越了现有的开源模型,甚至超过了 ChatGPT-3.5、PaLM-2 和 GPT-4 的表现。 +发布日期:2023-10-05 +链接:https://arxiv.org/abs/2310.03731 +机构:The Chinese University of Hong Kong + +CodeChain: Towards Modular Code Generation Through Chain of Self-revisions with Representative Sub-modules +本文提出了一个名为 CodeChain 的新框架,用于改进大语言模型在复杂编程任务中的表现。通过引导模型生成模块化代码并使用自我修正链的方式,CodeChain 显著提升了生成代码的模块性和正确性。具体方法包括思维链提示生成模块化代码、提取和聚类生成的子模块,以及利用这些模块重新生成代码。实验证明,CodeChain 在多个编程基准测试上取得了显著的性能提升,并且适用于不同的大模型。论文还进行了消融研究,分析了不同提示方法、聚类数目、模型大小等因素对效果的影响。 +发布日期:2023-10-13 +链接:https://arxiv.org/abs/2310.08992 +机构:Salesforce Research + +Is Self-Repair a Silver Bullet for Code Generation? +本主要研究了大语言模型在自我修复代码方面的性能,发现当考虑修复成本时,性能提升往往有限,且在数据子集之间差异很大。作者认为这是由于模型提供反馈的能力受限,通过使用更强的模型来提高反馈质量,观察到更大的性能提升。此外,一项小型研究表明,即使是最强的模型,自我修复仍然远远落后于人类调试所能达到的效果。 +发布日期:2023-06-16 +链接:https://arxiv.org/abs/2306.09896 +机构:MIT, Microsoft Research + +An interpretable error correction method for enhancing code-to-code translation +本文提出了一种新的方法,名为 kNN-ECD,它结合了最近邻搜索和关键值错误校正数据存储器,用于重写 TransCoder-ST 生成的不正确的程序翻译。此外,论文还提出了 kNN-ECS_m,这是一种采用串联连接的分布式结构,利用 m 个不同的专家进行多轮错误校正。这种方法能够提高程序翻译的准确性,并克服基于 Transformer 的代码翻译模型的固有限制,例如需要大量的新训练资源和结果的不可解释性。 +发布日期:2024-01-16 +链接:https://openreview.net/forum?id=fVxIEHGnVT¬eId=CyxZE2UbHF +机构:Heidelberg University + +Coeditor: Leveraging Contextual Changes for Multi-round Code Auto-editing +本文提出了一种面向代码编辑任务的生成式语言模型 Coeditor。与现有模型关注代码生成不同,Coeditor 专注于基于同一代码库中的近期更改来预测对代码区域的编辑。该模型采用行差异格式表示代码变更,并利用静态分析形成大型自定义模型上下文,确保预测所需信息的可用性。在单轮单编辑任务中, Coedito r 明显优于 GPT-3.5 和其他代码补全模型。在多轮多编辑场景下,通过迭代条件化用户编辑可进一步提高性能。作者开源了代码、数据和模型权重,并发布了基于该模型的 VSCode 扩展,以促进未来研究和实际应用。 +发布日期:2023-05-29 +链接:https://arxiv.org/abs/2305.18584 +机构:University of Texas at Austin + +RepoBench: Benchmarking Repository-Level Code Auto-Completion Systems +本文提出了一个新的基准测试集 RepoBench,用于评估仓库级别的代码自动补全系统。与现有的测试集不同,RepoBench 专注于更加复杂和真实的多文件编程场景,支持 Python 和 Java 两种语言。RepoBench 包含三个相互关联的评估任务:检索其他文件中最相关的代码片段作为跨文件上下文,利用跨文件和文件内上下文预测下一行代码,以及结合检索和下一行预测的复杂任务。通过 RepoBench 可以更全面地比较不同自动补全系统的性能,并推动其不断改进。 +发布日期:2023-06-05 +链接:https://arxiv.org/abs/2306.03091 +机构:University of California, San Diego + +SWE-bench: Can Language Models Resolve Real-World GitHub Issues? +本文提出了一个名为 SWE-bench 的软件工程问题评估框架,用于评估下一代语言模型在实际软件开发中的能力。该框架包含了从 12 个流行的 Python 仓库中提取的 2,294 个真实 GitHub 问题和相应的合并请求。论文发现,目前最先进的语言模型在解决这些软件工程问题上的表现还很有限,突显了软件工程领域对语言模型的能力还有更高的要求,有助于评估和推动语言模型发展。 +发布日期:2023-10-10 +链接:https://arxiv.org/abs/2310.06770 +机构:Princeton University + +A Real-World WebAgent with Planning, Long Context Understanding, and Program Synthesis +本文提出了一个名为 WebAgent 的智能体系统,它结合了大语言模型 Flan-U-PaLM 和 HTML-T5,可以根据自然语言指令自主完成在真实网站上的任务。WebAgent 通过把指令分解为子指令,总结长 HTML 文档为与任务相关的片段,并生成 Python 程序来执行网页操作。实验表明,该模块化方案可以将在真实网站上的成功率提高 50%以上,HTML-T5 在各种 HTML 理解任务上表现最佳,在 MiniWoB 网页自动化基准测试中比先前方法高出 18.7%,并在 Mind2Web 离线任务规划评估中取得了最先进的性能。 +发布日期:2023-07-24 +链接:https://arxiv.org/abs/2307.12856 +机构:Google DeepMind + +Learning Performance-Improving Code Edits +本文提出了一个利用大语言模型进行高层程序优化的框架。作者收集了一个包含超过 77,000 对人类程序员提交的 C++ 程序优化数据集,并设计了基于 gem5 全系统模拟器的环境来可靠地评估程序优化的影响。此外,作者提出了多种适应代码优化的策略,包括基于检索的少样本提示、思维链、性能条件生成和基于自我博弈的合成数据增强等。结合这些技术,该模型在八次生成中实现了平均 6.86 倍的加速,高于单个程序员的平均优化水平(3.66 倍)。利用该模型的最快生成结果,作者将数据集上可能达到的最快加速上限刷新为为 9.64 倍,超过了使用人类提交的最快结果(9.56 倍)。 +发布日期:2023-02-15 +链接:https://arxiv.org/abs/2302.07867 +机构:University of Pennsylvania + +## 联系我们 + +我们团队的多项工作,包括综述、模型、数据集,都在陆续开源中。如果您喜欢我们的工作,欢迎试用、指正错误和贡献代码,可以的话请给我们的项目增加 Star、引用我们的论文以支持我们。 + +- 代码大模型综述(覆盖 900 篇论文):https://arxiv.org/abs/2311.07989 +- GitHub 项目:https://github.com/codefuse-ai/Awesome-Code-LLM +- HuggingFace 主页:https://huggingface.co/codefuse-ai +- 魔搭社区主页:https://modelscope.cn/organization/codefuse-ai diff --git a/docs/blogDetails/20240703.en-US.md b/docs/blogDetails/20240703.en-US.md new file mode 100644 index 0000000..3ec649a --- /dev/null +++ b/docs/blogDetails/20240703.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-07-03' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240703.zh-CN.md b/docs/blogDetails/20240703.zh-CN.md new file mode 100644 index 0000000..c404cb7 --- /dev/null +++ b/docs/blogDetails/20240703.zh-CN.md @@ -0,0 +1,103 @@ +--- +title: 'ACL 2024 | CoCA:自注意力的缺陷与改进' +time: '2024-07-03' +toc: content +--- + +近年来,在大语言模型(LLM)的反复刷屏过程中,作为其内核的 Transformer 始终是绝对的主角。然而,随着业务落地的诉求逐渐强烈,有些原本不被过多关注的特性,也开始成为焦点。例如:在 Transformer 诞生之初,被视为天然具备的长度外推能力,随着相关研究的深入,人们发现,传统的 Transformer 架构在训练长度之外无一例外表现出糟糕的推理性能。 + +在本文中,作者从一个全新的视角,剖析了造成这种糟糕表现的可能原因,并给出了相应的解决方案。文章主要聚焦于 Self-Attention ([Vaswani et al., 2017](https://arxiv.org/abs/1706.03762))与 RoPE ([Su et al., 2021](https://arxiv.org/abs/2104.09864))的碰撞,后者是近年较多开源模型所采用的位置编码方式,例如:LLaMA ([Touvron et al., 2023a](https://www.semanticscholar.org/paper/LLaMA%3A-Open-and-Efficient-Foundation-Language-Touvron-Lavril/57e849d0de13ed5f91d086936296721d4ff75a75)) 和 Qwen ([Bai et al., 2023](https://arxiv.org/abs/2309.16609))。 + +论文已被 ACL 2024 接收, 技术细节可以查看预印版本:[https://arxiv.org/abs/2309.08646](https://arxiv.org/abs/2309.08646) + +![截屏2024-06-17 16.21.02.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*7ClNRrgZZIMAAAAAAAAAAAAADlHYAQ/original) + +# 引言 + +在自注意力 ([Vaswani et al., 2017](https://arxiv.org/abs/1706.03762))诞生之初,长度外推被认为是一种理所当然的能力。然而,随着实际应用的不断验证,这在事实上是有难度的,进而产生了一系列相关的优化工作。 +现有工作通常聚焦于 2 个方向:注意力模块和位置编码,并有一系列优秀的工作产生。如:Longformer ([Beltagy et al., 2020](https://arxiv.org/abs/2004.05150))、StreamingLLM ([Xiao et al., 2023](https://arxiv.org/pdf/2309.17453))、LM-Infinite ([Han et al., 2023](https://arxiv.org/pdf/2308.16137))、Alibi ([Press et al., 2021](https://arxiv.org/abs/2108.12409))、Position Interpolation (PI) ([Chen et al., 2023](https://arxiv.org/abs/2306.15595))、NTK-aware Scaled RoPE ([bloc97, 2023](https://www.reddit.com/r/LocalLLaMA/comments/14lz7j5/ntkawa))、CLEX ([Chen et al., 2024](https://openreview.net/forum?id=wXpSidPpc5))等。 +本文从一个全新的视角,揭示了自注意力与位置编码之间的内在联系(尤其是如今广泛应用的 RoPE)。自注意力之中,查询和键之间天然存在的夹角,将位置编码引入了意料之外的困境,尤其是对具有关键信息的邻近位置的估计,存在不符合预期的异常行为。文章以此为切入,提出了相应的解决方案。 +主要贡献如下: + +- 揭示了自注意力与位置编码之间的一种异常行为 +- 提出了 Collinear Constrained Attention (CoCA)以解决上述问题 +- 实验表明 CoCA 在长上下文处理能力比常规自注意力具有显著优势 +- 开源了一份 CoCA 高效实现,不会增加现有计算和空间复杂度 + +![截屏2024-06-17 17.23.55.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*RGBdRqgFy7IAAAAAAAAAAAAADlHYAQ/original) + +Fig. 1. CoCA model architecture. + +# 背景 + +## 旋转位置编码 + +理论完备性和简洁的实现,使 RoPE 成为了多数开源模型的选择。RoPE 通过旋转矩阵来编码每一个 Token 的位置信息,并利用查询和键的旋转复合,来实现相对位置的表达。 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*yBvhRYZruQcAAAAAAAAAAAAADlHYAQ/original) +Fig. 2. rotary position embedding.([Su et al., 2021](https://arxiv.org/abs/2104.09864)) + +## 异常行为 + +在 Transformer 模型中,核心思想是计算 query 和 key 之间的关系。注意力机制使用这些关系来决定模型应该“关注”输入序列中的哪些部分。而 RoPE 利用旋转矩阵来编码位置信息的过程中,存在以下潜在的异常行为,如图 3 所示: + +- 情况(b)和(c):这是符合预期的行为,因为 query 和 key 之间注意力得分随着 m 和 n 的距离变大而逐渐减小,符合“近大远小”的先验假设。 +- 情况(a)和(d):这是发生异常的行为,因为在最邻近的 Token 处,注意力得分预期之外的衰减,模型为了补偿这种衰减,必须在训练阶段给邻近 Token 补偿额外的增益,进而在长度外推过程中产生训练/推理的不一致。 + +![截屏2024-06-17 17.29.34.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*ZmBfS43iFt8AAAAAAAAAAAAADlHYAQ/original) +Fig. 3. Anomalous Behavior between RoPE and Attention Matrices. + +# CoCA 实现 + +## 共线约束 + +基于上述观察,一个很自然的想法是让 Self-Attention 中的 query 和 key 初始夹角为 0,这是论文中共线约束(Collinear Constrained Attention)的由来。 +详细的推导和公式,这里不进行一一展开,读者可以阅读原文进行深入理解,这里只给出核心公式: + +![截屏2024-06-17 19.10.09.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*U5lXQaHKuSIAAAAAAAAAAAAADlHYAQ/original) + +与原始的 Self-Attention 和 RoPE 相比,上述公式表达了 CoCA 的核心:即在第 m 个 query 和第 n 个 key 之间建立联系,使它们的任意一个二维切片共线,从而保证 query 和 key 初始夹角为 0。 + +## 松弛约束 + +然而,上述共线约束所导出的精确解仅仅在理论上可行,实际操作过程中,由于空间复杂度的问题,并不能够实现。为此,文章中给出了一种“对偶”实现,并证明了两者的等价性。 +核心公式如下: + +![截屏2024-06-17 19.18.34.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*lo-0TpDys6oAAAAAAAAAAAAADlHYAQ/original) + +文章中证明了“对偶”实现施加以下额外约束后,等价于理论精确解: + +![截屏2024-06-17 19.21.47.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*fxviT5VszsMAAAAAAAAAAAAADlHYAQ/original) + +最后,文章移除该额外约束,并得到 CoCA 的最终实现,这是松弛约束(Slack Constraint)的由来。 + +# 实验结果 + +## 长文本能力 + +文章分别评估了重新训练和基于 LLaMA 微调 2 种方式,在 PG-19 数据集 ([Rae et al., 2019](https://arxiv.org/abs/1911.05507))和 ([Mohtashami & Jaggi, 2023](https://arxiv.org/abs/2305.16300)) 提出的密钥检索综合评估任务,均表明 CoCA 相比常规的 Self-Attention 在长文本能力上具有显著优势。 + +![截屏2024-06-17 19.29.53.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*FofDTZnnWdYAAAAAAAAAAAAADlHYAQ/original) +Fig. 4. Experiment Results. + +## 消融实验 + +文章对比了松弛约束和非松弛版本的模型,得到了一些出人意料的结果:即尽管模型结构一致,但松弛约束具有更大的上下文窗口,且不影响模型表达能力。 + +![截屏2024-06-17 19.35.14.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*yguNQoXWMWcAAAAAAAAAAAAADlHYAQ/original) +Fig. 5. Ablation study. + +# 总结 + +文章提出了一种新的自注意力架构,以解决 RoPE 和原始 Self-Attention 之间的异常行为。这是首次对自注意力机制中查询和键的相对位置的深入研究,并由此发现了此前被忽视的位置编码异常。文章进一步导出了 CoCA 的松弛实现,并在大量实验上表明了该方法在长文本扩展上的优越性。同时,CoCA 与其他优化方法的兼容性,也为其未来的实用价值提供了基础。 + +CoCA 开源地址:[https://github.com/codefuse-ai/Collinear-Constrained-Attention](https://github.com/codefuse-ai/Collinear-Constrained-Attention) + +# 致谢 + +本文属于 CodeFuse 模型创新成果,想了解更多 CodeFuse 详情和互动交流,欢迎加入 CodeFuse 技术交流群。 +同时感谢来自 Moonshot AI Ltd 的苏剑林和 Sangfor Technology 的黄忠强,在论文修改过程中提出的宝贵建议。 + +# 参考文献 + +CoCA 预印版本:[https://arxiv.org/abs/2309.08646](https://arxiv.org/abs/2309.08646) diff --git a/docs/blogDetails/20240705.en-US.md b/docs/blogDetails/20240705.en-US.md new file mode 100644 index 0000000..d57f251 --- /dev/null +++ b/docs/blogDetails/20240705.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-07-05' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240705.zh-CN.md b/docs/blogDetails/20240705.zh-CN.md new file mode 100644 index 0000000..2479b6b --- /dev/null +++ b/docs/blogDetails/20240705.zh-CN.md @@ -0,0 +1,143 @@ +--- +title: 'ACL 2024|D2LLM:将Causal LLM改造成向量搜索模型的黑科技' +time: '2024-07-05' +toc: content +--- + +语义搜索任务的主要挑战是创建既准确又高效的模型来精准定位与用户查询相关的句子。基于 BERT 风格的双编码器因为可以使用预先计算的嵌入表示时效率很高,但它们往往会错过句子对的微妙关系。相反,基于 GPT 风格的大语言模型(LLM)采用交叉编码器的设计且能够捕捉到这些微妙关系,但它们的计算量通常很大,阻碍了实际应用。 +我们提出了一种结合了以上两者的优点的用于语义搜索的分解和蒸馏大型语言模型 D2LLM。我们将交叉编码器分解为一个高效的双编码器,双编码器集成了多头注意力池化模块,另外,通过一个交互模拟模块,模型实现了对细微语义关系的理解。我们使用对比、排序和特征模仿技术将 LLM 的知识蒸馏到该模型中。实验表明,D2LLM 在三项任务的指标上超过了五个领先的基准模型,特别是在自然语言推理(NLI)任务的性能至少提高了 6.45%。 + +## TLDR + +我们提出了一种混合型语义搜索模型,通过分解大语言模型和从大语言模型中蒸馏知识,实现了双编码器的运行效率与交叉编码器的理解准确性的折中。 + +## 简介 + +本文源于蚂蚁集团与华东师范大学的校企合作项目,目前已被 ACL 2024 main 会议接收。ACL(Association for Computational Linguistics)会议是自然语言处理领域的顶级国际会议之一,是自然语言处理领域唯一的 CCF-A 类会议。 +arXiv:[http://arxiv.org/abs/2406.17262](http://arxiv.org/abs/2406.17262) +github:[https://github.com/codefuse-ai/D2LLM](https://github.com/codefuse-ai/D2LLM) + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*aK2-QINLc6YAAAAAAAAAAAAADlHYAQ/original) + +语义搜索是自然语言处理的关键组成部分,它通过挖掘文本的底层语义关联对大量文本进行筛选,以找到与用户查询最匹配的内容。这种技术超越了传统的非语义方法如 TF-IDF 和 BM25,解决了词汇不匹配问题,提供了更准确的文本匹配,对信息检索[1]、问答系统[2]、推荐系统[3]等多个领域产生了深远影响。 +表 1:双编码器与交叉编码器的对比 + +| | 优点 | 缺点 | +| ---------- | -------------------- | ---------------------- | +| 双编码器 | 效率高,表示可预计算 | 忽略句子对间的关系 | +| 交叉编码器 | 关注句子对间的关系 | 效率低,表示不可预计算 | + +表 2:Bert 式双编码器与 LLM 式交叉编码器的对比 + +| | 优点 | 缺点 | +| ---------------- | -------------------- | ---------------------------- | +| Bert 式双编码器 | 效率高,表示可预计算 | 忽略句子对间的关系,泛化性弱 | +| LLM 式交叉编码器 | 准确性高,泛化性强 | 效率低,表示不可预计算 | + +语义搜索方法大体上分为两种:双编码器和交叉编码器。前者分别对查询和段落进行表征提取,然后再计算它们之间的联系,这种方法效率高,且表示可预计算。后者将查询和段落联系起来,将它们构成一个整体,再分析两者之间的联系,这种方法往往能更好地建模句子对的关系(表 1)。以这两种方法作为基础,目前表现较为优秀的方法包括 BERT 式双编码器[4,5,6],以及基于大语言模型(LLM)的交叉编码器。BERT 式双编码器可以对查询和段落转换成向量并快速比较相似度,但这种方法可能牺牲准确度,忽略了句子对间细微的语义联系。此外,双编码器通常需要经过一个复杂的、分阶段的训练过程[7],并且在新领域的泛化能力有限。LLM 式交叉编码器可以联合处理查询和段落,提供更细致的文本关系分析,并表现出优异的零样本学习能力[8,9],且不需要在特定领域训练就能迅速适应新任务,但带来的高准确性通常以牺牲效率为代价。此外,由于不能预先缓存段落向量,该方法需要对每个查询都和每个段落都进行重新推理(表 2)。 +为了结合双编码器的速度和交叉编码器的准确性,我们引入了 D2LLM 解决方案(图 1)。D2LLM 通过先进的蒸馏技术,将交叉编码器的复杂性分解为更简单的模型—一个双编码器、一个多头注意力池(PMA)和一个交互模拟模块(IEM)。这使得查询和段落的嵌入向量可以高效生成并存储,同时确保了模型能够适应各种搜索任务。通过从教师模型(LLM)中蒸馏知识,D2LLM 兼具了高速和高准确率。 +本文提出了三点主要改进,并进行了相关实验: + +1. 我们引入了 D2LLM,这是一种新的语义搜索解决方案,它将双编码器的速度与基于 LLM 的交叉编码器的准确性相结合。该方法将复杂的交叉编码器分解为更易于管理的学生模型。 +2. 我们通过全面的知识蒸馏策略将教师的专业知识迁移给学生模型,包括对比模仿、排序模仿和特征模仿技术。 +3. 实验结果表明,D2LLM 在三个基准任务中的表现优于五种领先方法,尤其显著地比排名第二的 LLaRA 提高了 14.39%,在 NLI 任务中比经过大量微调的基准模型 BGE 模型领先 6.45%。 + +## 算法 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Xep2Tqk3eZoAAAAAAAAAAAAADlHYAQ/original) +图 1:我们的语义搜索解决方案 +我们的算法整体框架如图 1 所示,主要包括教师模型、学生模型、以及三种知识蒸馏策略。以下对每一个模块进行详细说明。 + +### 教师模型 + +教师模型的目标是准确判断一个查询$X_i$和一个段落$X_j$是否匹配。我们充分利用 LLM 的零样本学习能力,通过提示工程设计提示$P$来引导 LLM 对查询-段落对进行分析。如图 1 左上角所示,我们为对称和非对称搜索设计了提示$P^\text{sym}$和 $P^\text{asym}$。选择的提示与查询-段落对 $(X_i, X_j)$结合在一起,促使 LLM 生成“是”或“否”的回答。LLM 为回应生成了一个表示$\bm{y}_{ij}$以及通过对“是”和“否”词元的 logits 值进行 softmax 计算,得到 LLM 的预测概率$s_{ij}^\mathcal{T}$。 + +### 学生模型 + +学生模型以双编码器的架构分别处理查询和段落,并通过 Pooling by Multihead Attention (PMA) 和 Interaction Emulation Module (IEM) 模拟提示信息和查询-段落-提示的关系。 +PMA 模块通过聚合来自查询$X_i$和文段$X_j$的信息,为每个 token 生成一个独特的嵌入向量。PMA 以可学习向量$\bm q$作为锚点,根据它与查询$\bm q$的相似度从$L$个 token 中提取信息,实现了基于注意力的聚合,这种方法比传统的聚合方法更灵活。PMA 部分的形式化定义如下: +$\begin{align} + +\bm y*i^\text{agg} &= \text{PMA}*{\bm q}(Y*i)=\text{LN}(\bm h +\text{FFN}(\bm h)),\\ +\bm h &=\text{LN}(\text{MHA}(\bm q, Y_i, Y_i)+\bm q), +\end{align}$ +其中LN为层归一化操作,FFN为前馈神经网络。MHA为多头自注意力机制。IEM在PMA生成查询和文段的独立向量后,隐式编码提示信息,并计算查询和段落的交互分数。具体而言,IEM先将查询和段落嵌入拼接并输入到多层感知器(MLP)进行处理,MLP设计有两个分支以处理不同类型的提示,从而获得学生模型的logits$z*{ij}^\mathcal{S}$和分数$s\_{ij}^\mathcal {S}$。形式化定义为: +$\begin{align} + +\bm y\_{ij}^\mathcal{S} &= f_2(f_1([\bm y_i^{\text{agg}},\bm y_j^{\text{agg}}])) +\end{align}$ + +### 蒸馏策略 + +知识蒸馏旨在将教师模型的能力传授给学生模型。为此,我们专注于三项训练目标:对比学习、排名学习和特征模仿。 + +#### 对比模仿 + +针对特定查询 $X_i$,我们准备了一组正样本 $\mathbb D^+$(相关段落)和负样本 $\mathbb D^-$(非相关段落)。负样本集包括批次内负样本和基于 BM25 与现有双编码器评估得到的困难负样本, $\mathbb D^- = \mathbb D_I^- \cup \mathbb D_H^-$。对比模仿(CI)损失函数为: +$\begin{align} +\mathcal L^\text{CI} = -\frac{1}{|\mathbb D^+|}\sum_{j\in\mathbb D^+}\log\frac{\exp(s_{ij}^\mathcal{T}z_{ij}^\mathcal{S}/\tau)}{\sum_{k\in\mathbb D^{-}}\exp((1-s_{ik}^\mathcal{T})z_{ik}^\mathcal{S}/\tau)} +\end{align}$ + +其中$\tau$是温度参数,$s_{ij}^\mathcal{T}$是教师模型对于样本对 $(X_i,X_j)$评估为“是”的概率分数,$z_{ij}^\mathcal{S}$是学生模型对应的分数。与传统对比损失不同的是,该损失利用教师模型的分数 $s^\mathcal{T}$来处理样本间的相关性差异,给较易的负样本分配更高的训练权重。尽管一些困难负样本可能是潜在的正样本,但该改进后的损失可以有效应对这种情况,相比传统对比学习提供了一个更稳健的训练环境。 + +#### 排序模仿 + +排序模仿旨在让学生模型区分正样本与困难负样本,以及简单负样本与困难负样本,使得学生能够具备教师模型的排序能力。 +首先,为了让学生和教师对正样本及困难负样本的排序同步,我们的目标是最大化它们 logits 之间的皮尔逊相关系数。损失定义如下: +$\mathcal{L}^\text{RI}_{PH} = 1 - \text {corr}(\bm z_i^\mathcal{T}, \bm z_i^\mathcal{S}),$ +该损失函数的输入为教师和学生模型对正样本和困难负样本的预测 logits 构成的向量。由于 LLM 对批次内的简单负样本之间的相关性排序通常不具有意义,因此这一部分我们没有将它们考虑在内。 +另一方面,具备区分困难负样本和简单负样本也是重要的。事实上,困难负样本往往与查询有一定语义联系,而简单负样本没有。为了强调这点,我们引入了针对这两组样本的附加损失: +$\mathcal L^\text{RI}_{HI} = - \frac{1}{|\mathbb D_H^-||\mathbb D_I^-|}\sum_{j\in\mathbb D_H^-}\sum_{k\in\mathbb D_I^-} \lambda_{jk}\log(\sigma(z_{ij}^\mathcal{S} - z_{ik}^\mathcal{S})),$ +其中$\lambda_{jk}$是使用归一化折扣累积增益(NDCG)来确定的权重。该损失确保学生模型会对困难负样本相比简单负样本拥有更高的得分。此外,即使在批次内负样本中混有难负样本,该损失仍能让学生模型在教师的指导下稳定训练。 + +#### 特征模仿 + +特征模仿强调从特征的角度让学生模型去模仿教师模型。首先,我们为一个批次内的所有查询-段落对计算教师的相似度矩阵: +$\begin{align} +r_{ijk}^\mathcal{T} = \text{similarity}(\bm y_{ij}^\mathcal{T}, \bm y_{ik}^\mathcal{T}), \forall j,k\in\mathbb D^+\cup\mathbb D_H^-, +\end{align}$ +其中 $\text{similarity}$表示余弦相似度,然后对学生模型进行相同的过程以获得 $r_{ijk}^\mathcal S$。该损失的目标是最小化教师和学生的相似度矩阵之间的差异的 L2 范数,损失定义为: +$\begin{align} +\mathcal L^\text{FI} = |\bm r_i^\mathcal{T} - \bm r_i^\mathcal{S}|_2^2. +\end{align}$ +这种方法指导学生模仿教师表示的关系模式,实现更深层次的知识迁移。 + +## 实验 + +我们以 Qwen-7B-Chat 作为模型底座,主要在自然语言处理数据的自然语言推断(NLI)、语义相似度检测(STS)、信息检索(IR)任务上验证我们的算法。使用的数据集包括:SNLI-zh、NLI-zh、T2Ranking、DuReader、cMedQAv2、mMarco 数据集。我们使用六个评测指标来评估性能:准确率(ACC)、平均精确率)(AP)、精确率(Prec.)、召回率(Recall)、皮尔逊相关系数(Pear.)、斯皮尔曼相关系数(Spear.)。我们在 8 张 80G A100 上运行训练。 + +### 实验结果 + +表 1:NLI 任务实验结果 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*d-pdSrE0yokAAAAAAAAAAAAADlHYAQ/original) + +表 2:STS 任务实验结果 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*tEEqSrMYm9sAAAAAAAAAAAAADlHYAQ/original) + +表 3:IR 任务实验结果 + +![image.png](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*pcyMR7_bjQcAAAAAAAAAAAAADlHYAQ/original) + +我们首先对所有方法在自然语言推理(NLI)任务的表现进行了研究。D2LLM 模型在所有指标和所有测试数据集上均超越了在 0.3M 样本集上训练的所有竞争对手。值得注意的是,它的平均表现比排名第二的 LLaRA 方法高出 14.39%,比在 1 亿个相关样本上微调的 BGE 高出 6.45%。此外,D2LLM 有效地缩小了完整的双编码器 LLMs(LLM-be)和交叉编码器 LLMs(LLM-ce)之间的差距。尽管原始的 LLM-be 作为双编码器由于文本生成和嵌入之间的不匹配而表现不佳,基于交叉编码器的教师模型 LLM-ce 却能够通过利用 LLMs 从句子对中合成信息来发挥出色的表现。我们的蒸馏方法成功地将知识从教师转移到学生,将原先效果不佳的 LLM-be 转变为精通 NLI 的工具。在语义文本相似性(STS)和信息检索(IR)任务上,D2LLM 在大多数情况下(超过了在相同数据集上训练的其他方法。原始 BGE 则保持着稳定的领先地位。值得注意的是,即使是教师模型 LLM-ce,也落后于 BGE,这凸显了 D2LLM 在某些情况下的欠佳表现。但重要的是,教师模型 LLM-ce 并没有为 STS 特别微调。为了解决这个问题,我们使用 LoRA 方法对教师模型在 STS 领域进行了微调,仅使用 0.3M 数据进行微调就为教师带来了平均 7.17%的提升。在 LLM-ce-ft 的基础上,我们训练了学生模型,即 D2LLM-ft,相比原始 D2LLM 增长了 1.69%。此外,现在的 D2LLM-ft 显着优于其他在相同 0.3M 样本集上训练的方法,至少平均高出 17.42%。这证实了,尽管在任务的初始表现欠佳,LLMs 强大的适应能力意味着通过相对较小的数据集进行微调可以显著提升教师和随后的学生的性能。总结而言,无论是在自然语言推理还是语义文本相似性及信息检索任务中,D2LLM 都展示出了卓越的性能,即使是在数据量较少的情况下也能通过微调取得显著成效,这体现了大型语言模型的强大适应力和潜力。 + +### 总结 + +本研究提出了 D2LLM,一种创新的模型蒸馏方法,从大型语言模型(LLM)中提炼知识,构建一个用于语义搜索的高效的学生模型。D2LLM 通过深入地理解其教师模型,并运用专门设计的模块与损失函数,将教师模型的能力以更紧凑的形式封装。实验结果显示,D2LLM 成功地结合了交叉编码器的高准确性和双编码器的操作效率。 + +## 关于我们 + +我们是蚂蚁集团的 AI native 团队,负责蚂蚁蚂蚁集团平台工程的智能化,团队成立 3 年以来,在在 ICLR、NeurIPS、KDD 等顶会论发表论文 20 余篇,参与获得两次蚂蚁技术最高奖 T-Star,1 次蚂蚁集团最高奖 SuperMA。团队常年招聘研究型实习生,同时现在也有社招 HC,有做 NLP,大模型,多模态,图神经网络的同学欢迎联系lijg.zero@antgroup.com。 + +## 参考文献 + +- [1] Zhu, Yutao, et al. "Large language models for information retrieval: A survey." arxiv preprint arxiv:2308.07107 (2023). +- [2] Allam, Ali Mohamed Nabil, and Mohamed Hassan Haggag. "The question answering systems: A survey." International Journal of Research and Reviews in Information Sciences (IJRRIS) 2.3 (2012). +- [3] Hu, Linmei, et al. "Graph neural news recommendation with unsupervised preference disentanglement." Proceedings of the 58th annual meeting of the association for computational linguistics. 2020. +- [4] Wang, Liang, et al. "Text embeddings by weakly-supervised contrastive pre-training." arxiv preprint arxiv:2212.03533 (2022). +- [5] Xiao, Shitao, et al. "C-pack: Packaged resources to advance general chinese embedding." arxiv preprint arxiv:2309.07597 (2023). +- [6] Li, Zehan, et al. "Towards general text embeddings with multi-stage contrastive learning." arxiv preprint arxiv:2308.03281 (2023). +- [7] Wang, Liang, et al. "Improving text embeddings with large language models." arxiv preprint arxiv:2401.00368 (2023). +- [8] Wei, Jason, et al. "Finetuned language models are zero-shot learners." arxiv preprint arxiv:2109.01652 (2021). +- [9] Kojima, Takeshi, et al. "Large language models are zero-shot reasoners." Advances in neural information processing systems 35 (2022): 22199-22213. diff --git a/docs/blogDetails/20240706.en-US.md b/docs/blogDetails/20240706.en-US.md new file mode 100644 index 0000000..d70a0b7 --- /dev/null +++ b/docs/blogDetails/20240706.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-07-06' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240706.zh-CN.md b/docs/blogDetails/20240706.zh-CN.md new file mode 100644 index 0000000..8363e0c --- /dev/null +++ b/docs/blogDetails/20240706.zh-CN.md @@ -0,0 +1,770 @@ +--- +title: '2024年6月118篇代码大模型论文最全整理' +time: '2024-07-06' +toc: content +--- + +## 引言 + +本文整理 2024 年 6 月全球各大高校与科研机构发布的 118 篇代码大模型相关论文。根据论文内容,我们将这些论文整理为了基座模型与与训练数据、## 代码微调、测试基准、代码 Agent、低资源语言处理、AI 代码安全与分析、人机交互、软件工程下游任务应用(包括代码生成、代码总结、代码表征、SQL 生成、软件测试、漏洞检测、日志分析、软件建模)等主题。全文篇幅较长,建议电脑端阅读。 + +若您想了解其他时期的代码大模型论文,也欢迎关注我们的代码大模型综述 https://arxiv.org/abs/2311.07989 和 GitHub 开源项目 https://github.com/codefuse-ai/Awesome-Code-LLM。 + +## 编辑精选 + +CodeR: Issue Resolving with Multi-Agent and Task Graphs +本文提出了一个名为 CodeR 的多智能体框架,用于自动修复和解决代码仓库中报告的错误,以及添加新功能。CodeR 采用预定义的任务图来指导修复过程。在 SWE-bench lite 数据集上,CodeR 仅提交一次就能解决 28.33%的问题。论文还分析了 CodeR 各项设计对性能的影响,为该研究方向的进一步发展提供了见解。CodeR 的提出有望提高软件开发和维护的效率。 +发布日期:2024-06-03 +链接:https://arxiv.org/abs/2406.01304 +机构:Huawei + +DataComp-LM: In search of the next generation of training sets for language models +本文提出了一个用于语言模型受控数据集实验的测试平台 DCLM。作者提供了一个从 Common Crawl 中提取的 240T tokens 的标准语料库,有效的预训练方法以及广泛的 53 个下游评估任务。通过在 DCLM 上进行的大量实验,作者发现基于模型的过滤对于构建高质量的训练集至关重要。由此产生的数据集 DCLM-Baseline 能够使用 2.6T 训练 tokens 将一个 7B 参数的语言模型从头训练到 MMLU 上的 64% 的 5-shot 准确率,与之前最先进的开放数据语言模型 MAP-Neo 相比,在计算量减少 40% 的情况下,MMLU 上的性能提高了 6.6 个百分点。该基线模型在 MMLU 上的表现与 Mistral-7B-v0.3 和 Llama 3 8B 相当,在 53 个自然语言理解任务上的平均表现也与 Llama 3 8B 相似,但训练所需的计算量却减少了 6.6 倍。这些结果突出了数据集设计对语言模型训练的重要性,为进一步研究数据策展提供了一个起点。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11794 +机构:University of Washington, Apple + +DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence +DeepSeek-Coder-V2 是基于 DeepSeek-V2 4T tokens 检查点做了 6T tokens 加训获得的模型,显著提高了代码和数学推理能力,同时在一般语言任务上保持相当的性能。与之前的版本相比,DeepSeek-Coder-V2 在代码相关任务、推理和通用能力方面都有重大进展,支持的编程语言从 86 种扩展到 338 种,上下文长度从 16K 扩展到 128K。在标准基准测试中,DeepSeek-Coder-V2 在代码和数学基准测试方面优于 GPT4-Turbo、Claude 3 Opus 和 Gemini 1.5 Pro 等闭源模型。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11931 +机构:DeepSeek-AI + +Long Code Arena: a Set of Benchmarks for Long-Context Code Models +本文文针对现有的代码处理基准数据集规模有限的问题,提出了一个名为 Long Code Arena 的大型代码处理基准套件,包含六个需要项目级上下文的代码处理任务。这些任务涵盖了代码生成的各种方面,例如基于库的代码生成、CI 构建修复、项目级代码补全、提交信息生成、错误定位以及模块摘要等。论文为每个任务提供了经过人工验证的测试数据集、评估套件以及基于流行大语言模型的开源基线解决方案,方便其他研究人员使用和学习。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11612 +机构:JetBrains Research + +ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools +本文回顾了 ChatGLM 家族的发展历史与最新进展,并重点介绍了 GLM-4 模型,开源了 GLM-4 9B。这些模型在大规模中英文语料上进行预训练,并通过监督微调和人类反馈学习等多阶段后训练过程实现了高质量的对齐。实验结果表明,GLM-4 在通用评测、指令遵循、长文本任务和中文对齐等方面表现出色,与 GPT-4 和 Claude 等先进模型相当甚至超越。此外,论文还介绍了 GLM-4 All Tools 模型,它能够理解用户意图并自主决定使用各种工具来完成复杂任务。 +发布日期:2024-06-18 +链接:https://arxiv.org/abs/2406.12793 +机构:Zhipu AI, Tsinghua University + +LiveBench: A Challenging, Contamination-Free LLM Benchmark +本文提出了一个名为 LiveBench 的新型基准测试,旨在克服现有基准测试中存在的测试集污染和人工评估/LLM 评估问题。LiveBench 通过引入从最近信息来源(如数学竞赛、arXiv 论文、新闻文章和数据集)提取的实时问题,并利用客观地面真实值自动评估答案,来构建一个不易受污染且难度更大的基准测试,从而更准确地衡量大模型的能力。 +发布日期:2024-06-27 +链接:https://arxiv.org/abs/2406.19314 +机构:Abacus.AI + +## 基座模型与预训练数据 + +Skywork-MoE: A Deep Dive into Training Techniques for Mixture-of-Experts Language Models +Skywork-MoE 是一个拥有 146B 总参数量和 16 个专家的高性能混合专家(MoE)大语言模型。研究发现,在选择从头训练还是从已有的密集型检查点(Skywork-13B)进行再循环训练时,需要同时考虑现有检查点的性能和 MoE 训练预算。本文还突出了两种创新技术:门控 logit 归一化和自适应辅助损失系数,前者可以提高专家的多样性,后者允许针对不同层调整辅助损失系数。实验结果证实了这些方法的有效性。利用这些技术和见解,经过在 SkyPile 语料库的浓缩子集上进行再循环训练,Skywork-MoE 在各种基准测试中都表现出色。 +发布日期:2024-06-03 +链接:https://arxiv.org/abs/2406.06563 +机构:Kunlun Inc. + +Zyda: A 1.3T Dataset for Open Language Modeling +本文构建了一个名为 Zyda 的开放许可数据集,包含 1.3T token,该数据集通过整合多个知名开源数据集构建而成。论文对数据进行了严格的过滤和去重处理,确保了数据集的高质量。评估表明 Zyda 不仅在质量上与其他开放数据集如 Dolma、FineWeb 和 RefinedWeb 相媲美,还显著提高了 Pythia 模型套件中同类模型的性能。论文中严格的数据处理方法极大地提高了 Zyda 的有效性,甚至优于其子集中的最佳数据集在独立使用时的表现。 +发布日期:2024-06-04 +链接:https://arxiv.org/abs/2406.01981 +机构:Zyphra + +Xmodel-LM Technical Report +Xmodel-LM 是一个 1.1B 参数量的中英双语模型,在 2T tokens 上进行预训练,在各基准测试中表现都超越相似大小的开源模型。 +发布日期:2024-06-05 +链接:https://arxiv.org/abs/2406.02856 +机构:XiaoduoAI + +GEB-1.3B: Open Lightweight Large Language Model +GEB-1.3B 是一个 1.3B 参数量的中英双语模型,在 550B tokens 上进行预训练,可在 CPU 上进行高效推理。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.09900 +机构:GEB + +HARE: HumAn pRiors, a key to small language model Efficiency +本文提出了一个利用人类先验知识构建数据集的原则,用于在资源受限的情况下提高小型语言模型的训练效率。该原则强调在保证语义多样性和数据质量一致性的同时,避免数据泄露,从而训练出高性能的小型语言模型。作者基于这一原则训练了一个名为 HARE-1.1B 的小型语言模型,并通过在大规模基准数据集上的广泛实验证明了该原则的有效性。这项研究为从人类先验知识的角度出发,在资源受限的环境下高效训练语言模型提供了新的见解。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11410 +机构:LiteAI China Telecom Guizhou Branch + +Nemotron-4 340B Technical Report +Numotron-4 340B 是迄今为止最大的开源模型。本模型在各种评估基准测试中表现出色,并且可以部署在单个配备 8 张 H100 的 DGX 机器上上。作者认为,社区可以在各种研究和商业应用中受益于这些模型,特别是在生成合成数据以训练更小的语言模型方面。值得注意的是,在模型对齐过程中使用的数据中,超过 98%是合成生成的,展示了这些模型在生成合成数据方面的有效性。为了进一步支持开放研究并促进模型开发,作者还开源了在模型对齐过程中使用的合成数据生成流水线。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11704 +机构:NVIDIA + +CodeGemma: Open Code Models Based on Gemma +CodeGemma 模型由 Gemma 加训 500B tokens 并微调获得,微调后的 7B 模型报告结果为:HumanEval 60.4,MBPP 55.2,GSM8K 47.3,MATH 22.3。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11409 +机构:Google LLC + +The FineWeb Datasets: Decanting the Web for the Finest Text Data at Scale +本文推出了一个名为 FineWeb 的 15T token 的大模型预训练数据集,它基于 96 个 Common Crawl 快照,并通过精心设计的去重和过滤策略提高了模型性能。论文还细致地记录了 FineWeb 的构建过程,并通过消融实验分析了各种设计选择的影响。此外,论文还发布了 FineWeb-Edu,一个从 FineWeb 中提取的 1.3T token 教育文本数据集,用于训练在知识和推理密集型任务中表现优异的语言模型。作者开源了了 FineWeb、FineWeb-Edu 以及数据处理代码和所有消融实验模型,为研究人员提供更深入的预训练数据集构建和模型训练方法的理解。 +发布日期:2024-06-25 +链接:https://arxiv.org/abs/2406.17557 +机构:Hugging Face + +YuLan: An Open-source Large Language Model +本文介绍了 12B 开源大模型玉兰的开发过程。论文详细阐述了玉兰的训练方法,包括使用多语言数据进行预训练、通过指令微调和人类对齐提升模型能力,以及采用分阶段的课程学习框架帮助模型学习复杂和长尾知识。最终,玉兰在英语和中文基准测试中取得了与当前最先进模型相当的性能,为从零开始开发大型语言模型提供了全面的技术路线图。 +发布日期:2024-06-28 +链接:https://arxiv.org/abs/2406.19853 +机构:Renmin University of China + +## 代码微调 + +PLUM: Preference Learning Plus Test Cases Yields Better Code Language Models +本文提出了一个新的基于偏好学习的框架 PLUM,用于增强代码语言模型的性能。作者通过生成测试用例、采样候选解并根据测试结果创建偏好数据集,最后使用偏好学习算法训练模型。实验结果表明,PLUM 显著提升了现有代码语言模型在 HumanEval 和 MBPP 等基准测试中的表现,即使是在目前最先进的开源语言模型 CodeQwen-1.5-7B-Chat 上也取得了进步。此外,PLUM 与有监督微调(SFT)阶段互补,展现出协同效应。本文还探讨了偏好学习在代码大模型中的关键成功因素和潜在益处。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.06887 +机构:University of Illinois Urbana-Champaign + +Unlock the Correlation between Supervised Fine-Tuning and Reinforcement Learning in Training Code Large Language Models +本文探究了代码生成领域中监督微调 (SFT) 和强化学习 (RL) 之间的关联性。通过构建一个包含基本函数和合成函数的训练集,研究发现 SFT 需要同时使用基本函数和少量合成函数才能实现泛化能力,而 RL 可以进一步增强模型对目标领域的泛化能力,即使使用相同的训练提示词。此外,从头开始训练 RL 可以缓解 SFT 阶段带来的过拟合问题。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.10305 +机构:ByteDance + +Measuring memorization in RLHF for code completion +本文分析了基于人类反馈的强化学习 (RLHF) 过程中训练数据记忆的现象。研究发现,与直接微调相比,RLHF 显著降低了奖励模型和强化学习阶段记忆训练数据的概率,但如果在 RLHF 的微调阶段已经记忆了数据,那么这些数据在大多数情况下仍然会被记忆。该研究重点关注代码补全模型,并揭示了在使用 RLHF 对大模型进行对齐时,训练数据记忆可能带来的隐私风险。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11715 +机构:Google DeepMind + +Code-Optimise: Self-Generated Preference Data for Correctness and Efficiency +本文文提出了 Code-Optimise 框架,它通过利用自生成偏好数据,将代码的正确性(通过或失败)和运行时间(快或慢)都作为学习信号,从而训练代码语言模型生成既正确又高效的代码。Code-Optimise 框架轻量级且鲁棒,能够动态选择解决方案以减少过拟合,同时避免依赖更大模型来获取学习信号。该框架在保持较高代码正确率的同时,显著降低了代码运行时间,并在不同领域的数据集上都取得了显著效果,同时还缩短了代码长度,降低了推理成本。 +发布日期:2024-06-18 +链接:https://arxiv.org/abs/2406.12502 +机构:Huawei Noah’s Ark Lab + +UniCoder: Scaling Code Large Language Model via Universal Code +本文提出了一个名为 UniCode 的通用代码中间表示,通过将算法步骤用编程语言中的赋值运算符、条件运算符和循环等语法描述,并以此训练一个名为 UniCoder 的多任务学习模型。该模型通过在代码生成过程中加入通用代码,使模型能够更好地理解自然语言指令并生成高质量的代码。实验证明,UniCoder 在代码翻译和生成任务中显著优于现有的基于思维链的提示方法,展现了伪代码结构提示的有效性。 +发布日期:2024-06-24 +链接:https://arxiv.org/abs/2406.16441 +机构:Beihang University + +Applying RLAIF for Code Generation with API-usage in Lightweight LLMs +本文将 AI 反馈强化学习(RLAIF)应用于提升轻量级语言模型的代码生成能力,特别是针对需要编写 API 调用这一具有挑战性的任务。该框架利用更强大的语言模型(例如 GPT-3.5)的反馈,通过特殊的提示策略训练奖励模型,从而使小型语言模型在代码生成时更精准、更符合预期。实验证明,该框架显著提升了模型的代码生成性能,尤其是小型模型的表现甚至超越了参数量更大的模型,展现了 RLAIF 在提升轻量级语言模型的代码生成能力方面的潜力。 +发布日期:2024-06-28 +链接:https://arxiv.org/abs/2406.20060 +机构:Apple + +## 测试基准 + +AICoderEval: Improving AI Domain Code Generation of Large Language Models +本文构建了一个名为 AICoderEval 的数据集,该数据集专注于基于 HuggingFace、PyTorch 和 TensorFlow 等 AI 领域真实世界任务,并提供了全面的评估指标和完整的测试程序,用于增强大语言模型在特定任务代码生成方面的能力。此外,论文还提出了一个基于代理的框架 CoderGen,以帮助大语言模型在 AICoderEval 上生成与真实世界任务相关的代码,并在此基础上训练了一个名为 AICoder 的更强大的任务特定代码生成模型。实验结果表明了 CoderGen 在提高大语言模型的任务特定代码生成能力方面的有效性,且 AICoder 的表现优于当前的代码生成大语言模型,证明了 AICoderEval 基准的高质量。 +发布日期:2024-06-07 +链接:https://arxiv.org/abs/2406.04712 +机构:AutoAgents.ai + +RepoQA: Evaluating Long Context Code Understanding +本文提出了一个名为 RepoQA 的基准测试,用于评估大语言模型在长代码上下文理解方面的能力。与传统的针对原始文本的评估方法不同,RepoQA 专注于评估模型对代码仓库的理解。作者构建了一个名为 Searching Needle Function (SNF) 的任务,要求模型根据自然语言描述搜索相应的函数。RepoQA 是一个多语言和全面的基准测试,包含了来自 5 种现代编程语言的 50 个流行仓库中的 500 个代码搜索任务。通过在 RepoQA 上评估 26 个通用和特定于代码的大语言模型,作者发现了开放和专有模型之间仍然存在差距,不同的模型擅长不同的编程语言,以及模型在没有注释的情况下可能更好地理解代码。 +发布日期:2024-06-10 +链接:https://arxiv.org/abs/2406.06025 +机构:University of Illinois Urbana-Champaign + +Can AI Beat Undergraduates in Entry-level Java Assignments? Benchmarking Large Language Models on JavaBench +本文提出了一个全新的 Java 编程基准测试集 JavaBench,用于评估大语言模型在面向对象编程方面的能力。与现有的基准测试集相比,JavaBench 填补了以下三个方面的空白:编程语言的不平衡、代码粒度的不平衡以及缺乏对高级特性的考察。论文还提出了一个系统化的评估设计,涵盖了不同的上下文设置、合成策略和粒度,并使用分层指标进行评估。通过大量实验,论文发现大语言模型在项目级别的 Java 编程方面远远落后于本科生,同时也发现使用方法签名作为提示上下文可能是项目级代码生成的理想平衡点。 +发布日期:2024-06-10 +链接:https://arxiv.org/abs/2406.12902 +机构:The Hong Kong University of Science and Technology + +McEval: Massively Multilingual Code Evaluation +本文提出了一个大规模的多语言代码基准测试集 McEval,其包含了 40 种编程语言的一万六千个测试样本。该基准测试集旨在评估代码大语言模型在多语言场景下的能力,并推动相关研究的发展。此外,论文还介绍了一个基于 McEval-Instruct 语料库训练的多语言编程模型 mCoder,用于支持多语言编程语言的生成。通过在 McEval 上的广泛实验,论文揭示了开源模型和封闭源代码语言模型(如 GPT 系列模型)在众多语言上仍存在较大差距,表明在这一领域还有很长的研究路要走。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07436 +机构:Beihang University + +VersiCode: Towards Version-controllable Code Generation +本文文提出了一个名为 VersiCode 的新数据集,用于评估大语言模型生成与特定库版本相符的代码的能力。该数据集包含 300 个库的 2000 多个版本,跨越了 9 年时间。论文设计了两个评估任务:版本特定的代码补全和依赖版本的代码编辑,并通过实验验证了现有的大语言模型在处理版本特定代码生成任务上的局限性。VersiCode 数据集为研究人员提供了新的工具,能够更深入地了解大语言模型在代码生成方面的能力和局限性,并为未来的研究方向提供了新的方向。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07411 +机构:Monash University, Nanjing University of Posts and Telecommunications + +Towards more realistic evaluation of LLM-based code generation: an experimental study and beyond +本文针对现有评估大语言模型代码生成能力方法的缺陷,提出了一个全新的、基于软件项目动态演化的评估框架。该框架首先构建了一个包含演化信息、可自动执行的代码生成数据集,并根据代码依赖关系进行分类,更全面地评估模型在不同依赖关系下生成函数的能力。研究结果表明,忽略代码演化会导致对 LLM 性能评估结果的高估,并提出了一些更真实的评估 LLM 代码生成能力的建议。该论文还构建了一个共享的代码生成工具箱,为未来的研究提供便利。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.06918 +机构:Sun Yat-sen University + +VulDetectBench: Evaluating the Deep Capability of Vulnerability Detection with Large Language Models +本构建了一个名为 VulDetectBench 的基准数据集,专门用于评估大语言模型在程序漏洞检测方面的能力。研究人员通过五个难度递增的任务,全面评估了模型识别、分类和定位漏洞的能力。研究结果表明,尽管现有模型在识别和分类漏洞方面可以达到 80%以上的准确率,但在更具体的漏洞分析任务中表现不佳,准确率低于 30%,难以提供有价值的辅助信息用于专业漏洞挖掘。该基准有效地评估了不同模型在漏洞检测任务中不同层次的能力,为未来研究和提升代码安全领域提供了基础。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07595 +机构:Fudan University, Huazhong University of Science and Technology + +BookSQL: A Large Scale Text-to-SQL Dataset for Accounting Domain +本文针对现有自然语言接口到数据库数据集的不足,提出了一个名为 BookSQL 的大规模文本到 SQL 数据集,专注于财务和会计领域。该数据集包含 10 万条自然语言查询-SQL 对和 100 万条记录的会计数据库,旨在为开发能够理解和处理财务领域自然语言查询的模型提供新的训练数据。研究人员还对现有模型进行了实验,发现这些模型在处理 BookSQL 数据集时存在显著的性能差距,表明需要针对该领域开发更专业化的模型。 +发布日期:2024-06-12 +链接:https://arxiv.org/abs/2406.07860 +机构:Indian Institute of Technology Kanpur + +ChartMimic: Evaluating LMM's Cross-Modal Reasoning Capability via Chart-to-Code Generation +本文提出了一个名为 ChartMimic 的新基准测试,它旨在评估多模态大模型在视觉基础代码生成方面的能力。ChartMimic 使用信息密集的视觉图表和文本指令作为输入,要求大模型 生成相应的图表渲染代码。该基准测试包含 1000 个由人类精心策划的(图表、指令、代码)三元组,代表了科学论文中不同领域(例如物理学、计算机科学、经济学等)的真实图表使用案例。这些图表涵盖了 18 种常规类型和 4 种高级类型,分为 191 个子类别。此外,论文还提出了多级评估指标,以对输出代码和渲染的图表进行自动和全面的评估。与现有的代码生成基准测试不同,ChartMimic 重点评估达模型协调视觉理解、代码生成和跨模态推理等认知能力的融合能力。对 3 个私有模型和 11 个开放权重模型的评估突出了 ChartMimic 带来的巨大挑战。即使是先进的 GPT-4V 和 Claude-3-opus 的平均得分分别只有 73.2 和 53.7,表明还有很大的改进空间。论文认为,ChartMimic 将激励大模型的开发,推动人工智能的通用化发展。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.09961 +机构:Tsinghua University, The Chinese University of Hong Kong + +CoSQA+: Enhancing Code Search Dataset with Matching Code +本提出了一个名为 CoSQA+ 的新代码搜索数据集,它通过将高质量的自然语言查询与多个合适的代码片段配对,解决了现有代码搜索数据集存在的查询不真实或代码匹配不准确以及仅使用一对一配对等问题。论文利用大语言模型自动完成配对标注、过滤和代码生成,并通过实验表明 CoSQA+ 的质量优于 CoSQA,在 CoSQA+ 上训练的模型表现更好。此外,论文还提出了一种新的评价指标 MMRR 来评估一对多代码搜索的性能。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11589 +机构:Sun Yat-sen University + +REPOEXEC: Evaluate Code Generation with a Repository-Level Executable Benchmark +本文提出了一个新的基准测试 RepoExec,用于评估大规模代码生成模型在仓库级别上生成可执行和功能正确的代码的能力。论文探索了一个受控场景,开发者指定必要的代码依赖关系,挑战模型准确地集成这些依赖关系。实验表明,预训练的基座模型在正确性方面优于指令微调后的模型,但后者在利用提供的依赖关系和展示调试能力方面表现更好。此外,论文还引入了一个新的指令微调数据集,重点关注代码依赖关系,并证明在该数据集上微调的代码生成模型能够更有效地利用这些依赖关系。RepoExec 旨在提供一个全面的评估方法,评估代码功能性和与开发者意图的一致性,为在实际场景中应用更可靠和适用的代码生成模型铺平了道路。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11927 +机构:FPT Software AI Center + +ScenEval: A Benchmark for Scenario-Based Evaluation of Code Generation +本文提出了一种评估机器学习模型的新方法,通过构建带有元数据的基准测试数据集,并使用测试态射根据元数据过滤测试用例,形成不同场景下的测试数据集。作者以大语言模型在代码生成任务中的表现为例,构建了一个名为 ScenEval 的基准测试集,并用其评估了 ChatGPT 在 Java 代码生成方面的性能。实验结果表明,ChatGPT 的表现随着编码任务复杂度的增加而下降,在多线程、数据结构算法和递归方法等高级主题上表现最弱。ChatGPT 生成的 Java 代码在代码行数上往往比参考解决方案短得多,但如果生成的代码是正确的,则在圈复杂度和认知复杂度等指标上往往更复杂;如果生成的代码不正确,则复杂度可能低于参考解决方案。 +发布日期:2024-06-18 +链接:https://arxiv.org/abs/2406.12635 +机构:Oxford Brookes University + +CodeRAG-Bench: Can Retrieval Augment Code Generation? +本文文探讨了检索增强生成(RAG)技术在代码生成任务中的应用。作者构建了一个全面的评估基准 CodeRAG-Bench,涵盖了基本编程、开放领域和仓库级别的代码生成问题。通过从竞赛解决方案、在线教程、库文档、StackOverflow 帖子和 GitHub 仓库中检索上下文信息,研究发现检索高质量的上下文可以显著提高代码生成的性能。然而,当前的检索器在词汇重叠有限的情况下仍然难以获取有用的上下文,生成器也难以在上下文长度有限或整合额外上下文的能力不足时取得改进。该论文为促进面向代码的 RAG 方法的进一步发展提供了一个有效的测试平台。 +发布日期:2024-06-20 +链接:https://arxiv.org/abs/2406.14497 +机构:Carnegie Mellon University + +Bug In the Code Stack: Can LLMs Find Bugs in Large Python Code Stacks +本文提出了一个新的基准测试集合 Bug In The Code Stack (BICS),用于评估大语言模型在识别大型源代码中简单语法错误方面的能力。通过对不同模型在代码环境中的表现进行评估,论文揭示了以下三个关键见解:与文本环境相比,代码环境对于信息检索任务构成了更大的挑战;不同模型之间存在显著的性能差异;较长的上下文长度与性能下降之间存在明显的相关性,但不同模型之间性能下降的程度有所不同。这项研究强调了在将大语言模型进一步开发用于程序合成时,需要确保模型能够理解语法并编写语法正确的代码。 +发布日期:2024-06-21 +链接:https://arxiv.org/abs/2406.15325 +机构:University of Waterloo + +BigCodeBench: Benchmarking Code Generation with Diverse Function Calls and Complex Instructions +本文提出了一个名为 BigCodeBench 的基准测试,该测试挑战大语言模型在 139 个库和 7 个领域中使用多个函数调用作为工具来解决 1140 个精细编程任务的能力。此外,本文还提出了一种面向自然语言的 BigCodeBench 变体,BigCodeBench-Instruct,该变体自动将原始文档字符串转换为只包含基本信息的简短指令。通过评估 60 个 LLMs,结果表明 LLMs 目前还不具备精确地遵循复杂指令并使用函数调用的能力,得分仅为 60%,远低于人类的 97%表现。这些结果突出这一领域需要进一步的发展。 +发布日期:2024-06-22 +链接:https://arxiv.org/abs/2406.15877 +机构:Monash University + +RES-Q: Evaluating Code-Editing Large Language Model Systems at the Repository Scale +本文提出了一个名为 RES-Q 的基于自然语言指令的基准测试,用于评估基于大语言模型的代码仓库编辑系统。RES-Q 包含 100 个从真实 GitHub 提交中衍生出的仓库编辑任务,可以更全面地评估模型的能力。作者使用 RES-Q 评估了多个最先进的大模型,发现尽管它们在传统的 HumanEval 基准测试上的表现相差不大,但在 RES-Q 上却有明显差异,表明 RES-Q 能够在传统基准测试趋于饱和时区分模型能力。此外,作者还研究了 token 效率、与现有基准测试的性能关系以及开源与闭源大模型之间的差异。 +发布日期:2024-06-24 +链接:https://arxiv.org/abs/2406.16801 +机构:Qurrent AI + +## 代码 Agent + +Multi-Agent Software Development through Cross-Team Collaboration +本文提出了一个名为跨团队协作(Cross-Team Collaboration,CTC)的可扩展多团队框架,旨在解决大语言模型在软件开发中多智能体协作过程中存在的问题。通过该框架,多个协作团队可以在跨团队协作环境中共同提出各种决策,并相互交流见解,从而实现更优质的内容生成。实验结果表明,该框架在软件开发和故事生成等领域相较于现有基准方法有显著提升,证明了该框架的有效性和广泛适用性。这项工作为大语言模型智能体指明了跨团队协作的新范式,有望推动其在软件开发等领域的显著发展。 +发布日期:2024-06-13 +链接:https://arxiv.org/abs/2406.08979 +机构:Zhejiang University, Tsinghua University + +AgileCoder: Dynamic Collaborative Agents for Software Development based on Agile Methodology +本文提出了一个名为 AgileCoder 的多智能体系统,它将敏捷开发方法整合到软件开发流程中,赋予不同智能体特定角色,例如产品经理、开发者和测试人员,并通过迭代的冲刺方式协同开发软件。该系统还引入了一个动态代码图生成模块,能够根据代码库的更新动态创建代码依赖图,帮助智能体更好地理解代码库,从而提高代码生成和修改的精确度。实验结果表明,AgileCoder 在性能上超越了现有的基准模型,展现了多智能体系统在复杂软件工程环境中的潜力,并为软件开发领域树立了一个新的标准。 +发布日期:2024-06-16 +链接:https://arxiv.org/abs/2406.11912 +机构:FPT Software AI Center + +MASAI: Modular Architecture for Software-engineering AI Agents +本文提出了一种模块化的软件工程人工智能(MASAI)架构,通过将复杂问题划分为多个子问题,并由不同的大语言模型驱动的子代理来解决,每个子代理具有明确的目标和策略。这种模块化架构的优势在于可以针对不同子代理采用和调整不同的问题解决策略,使子代理能够从仓库中分散的不同信息源收集信息,并避免不必要的长轨迹,从而降低成本和减少无关上下文。在具有挑战性的 SWE-bench Lite 数据集上,MASAI 取得了最高的性能表现,证明了其有效性。论文还对 MASAI 与其他代理方法进行了全面评估,分析了设计决策的影响及其对 MASAI 成功的贡献。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11638 +机构:Microsoft Research India + +CodeNav: Beyond tool-use to using real-world codebases with LLM agents +本文文提出了一种名为 CodeNav 的 LLM 代理,它能够自动索引和搜索代码库中从未见过的代码片段,并将其用于解决用户查询。与需要预先手动描述工具才能使用的 LLM 代理不同,CodeNav 能够自动识别和导入相关代码片段,并利用它们逐步生成解决方案并进行执行反馈。论文通过案例研究展示了 CodeNav 的能力,并通过实验比较了直接使用代码与使用预先定义的工具的效果,最终证实了代码使用在解决用户查询方面的优势。 +发布日期:2024-06-18 +链接:https://arxiv.org/abs/2406.12276 +机构:Allen Institute for AI + +## 低资源语言与 DSL + +VerilogReader: LLM-Aided Hardware Test Generation +本文探索了将大语言模型集成到覆盖率导向测试生成(CDG)过程中的方法。通过让 LLM 充当 Verilog 代码阅读器,准确理解代码逻辑,从而生成能够到达未探索代码分支的测试激励。作者设计了一个 Verilog 基准测试套件,将该框架与随机测试进行比较,实验表明在 LLM 理解范围内的设计上,该框架优于随机测试。此外,论文还提出了优化 LLM 理解范围和准确性的提示工程方法。 +发布日期:2024-06-03 +链接:https://arxiv.org/abs/2406.04373 +机构:Peking University + +VHDL-Eval: A Framework for Evaluating Large Language Models in VHDL Code Generation +本文提出了一个全面的评估框架,用于评估大语言模型在 VHDL 代码生成任务中的性能。作者构建了一个包含 202 个问题的 VHDL 评估数据集,并使用专门设计的自验证测试平台来评估生成的 VHDL 代码的功能正确性。通过对不同大语言模型及其变体进行初步评估,研究结果突显了现有大语言模型在 VHDL 代码生成方面面临的重大挑战,表明仍有很大的改进空间。这项研究强调了专门针对 VHDL 进行监督微调代码生成模型的必要性,为寻求高效代码生成解决方案的 VHDL 设计人员提供了潜在的益处。 +发布日期:2024-06-06 +链接:https://arxiv.org/abs/2406.04379 +机构:IBM Research + +Benchmarking Generative Models on Computational Thinking Tests in Elementary Visual Programming +本文构建了一个新的基准测试数据集,用于评估生成式模型在计算思维和问题解决方面的能力。研究发现,尽管当前最先进的模型在各种领域的基准测试中表现出色,但在面对小学生水平的问题解决任务时却难以胜任。为了提高模型的性能,作者提出了一种新颖的合成数据生成方法,通过捕捉不同技能水平的符号信息,从而生成全面的数据集。这种方法有助于改进模型在视觉编程领域中的计算思维能力。论文的研究成果为提升生成式模型的计算思维水平提供了新的思路和方向。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.09891 +机构:MPI-SWS + +Program Synthesis Benchmark for Visual Programming in XLogoOnline Environment +本文提出了一个新的视觉编程程序合成基准测试,其包含了 85 个基于 Logo 语言,需要结合空间规划、基础编程和逻辑推理等技能的真实世界任务。研究发现当前最先进的模型如 GPT-4V 和 Llama3-70B 在这些任务上表现不佳。论文接着提出了一种精调流程,通过利用包含超过 80000 个任务的大规模合成训练数据集来提高模型性能。此外,论文还展示了如何利用模拟器驱动的反馈来设计训练数据分布的课程。结果表明,精调后的 Llama3-8B 模型显著超越了 GPT-4V 和 Llama3-70B 模型,并且论文还对模型在不同技能维度的专业知识进行了深入分析。该基准测试将公开发布,以便未来研究人员在视觉编程中的程序合成领域进行研究。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11334 +机构:MPI-SWS + +DocCGen: Document-based Controlled Code Generation +本文提出了一种名为 DocCGen 的框架,旨在解决大语言模型在结构化领域专用语言 (DSL) 生成方面的局限性。DocCGen 通过将 NL-to-Code 任务分解为两步来利用企业的 DSL 文档资源。首先,它根据 NL 查询匹配库文档,识别出正确的库。然后,它利用从库文档中提取的模式规则来约束解码过程。在 Ansible YAML 与 Bash 两种编程语言上的实验结果表明,DocCGen 在各种规模的语言模型上都取得了显著提升,有效地降低了结构化代码中的语法和语义错误。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11925 +机构:IIT Bombay, IBM Research + +Qiskit HumanEval: An Evaluation Benchmark For Quantum Code Generative Models +本文提出了一个新的数据集 Qiskit HumanEval,用于评估大语言模型生成量子代码的能力。该数据集包含了超过 100 个量子计算任务,每个任务都有一个提示、一个标准解决方案、一个全面的测试用例和一个难度等级。论文系统地评估了一组大语言模型在生成可执行量子代码方面的表现,结果表明使用大语言模型生成量子代码是可行的,并为量子代码生成领域设立了一个新的基准,鼓励进一步探索和开发基于生成式人工智能的工具。 +发布日期:2024-06-20 +链接:https://arxiv.org/abs/2406.14712 +机构:IBM Research + +DistiLRR: Transferring Code Repair for Low-Resource Programming Languages +本文提出了一种名为 Distilling Low-Resource Repairs (DistiLRR) 的方法,用于将高资源语言中代码修复模型的推理和代码生成能力迁移到低资源语言模型上。实验结果表明 DistiLRR 在低资源语言上显著优于基线模型,但在高资源语言上的表现则与基线模型相似。论文进一步分析发现,代码修复效果与推理质量之间的相关性不如预期强,特别是在低资源语言环境下,基础模型对编程语言的理解不足,导致代码修复效果在不同资源语言之间存在差异。 +发布日期:2024-06-21 +链接:https://arxiv.org/abs/2406.14867 +机构:University of California, Santa Barbara + +AssertionBench: A Benchmark to Evaluate Large-Language Models for Assertion Generation +本文提出了一个名为 AssertionBench 的新基准,用于量化评估大模型在硬件断言生成方面的有效性。该基准包含 100 个经过精心挑选的 Verilog 硬件设计和由 GoldMine 和 HARM 生成的正式验证断言。通过使用 AssertionBench,论文比较了最先进的 LLM,评估了它们在推断功能正确的断言方面的有效性,并展示了 LLM 之间的性能差异、使用更多上下文示例在生成更高比例的功能正确断言方面的优势,以及基于 LLM 的断言生成器有很大的改进空间。 +发布日期:2024-06-26 +链接:https://arxiv.org/abs/2406.18627 +机构:University of Illinois Chicago + +## AI 代码安全与分析 + +An LLM-Assisted Easy-to-Trigger Backdoor Attack on Code Completion Models: Injecting Disguised Vulnerabilities against Strong Detection +本文提出了 CodeBreaker,一个利用大语言模型进行代码补全模型后门攻击的框架。与以往攻击方式不同,CodeBreaker 利用 LLM 对恶意代码进行转换,使其能够隐藏在代码中并逃避现有安全检测。该框架能够在多种场景下有效攻击代码补全模型,并通过广泛的实验和用户研究验证了其优越性,突出了当前代码补全模型安全机制的不足,并强调了加强防御措施的必要性。 +发布日期:2024-06-10 +链接:https://arxiv.org/abs/2406.06822 +机构:University of Connecticut + +Validating LLM-Generated Programs with Metamorphic Prompt Testing +本文提出了一种名为“变形提示测试”的新方法,用于解决大语言模型生成代码质量和正确性问题。该方法基于一个直观观察:正确的代码片段之间总是存在内在一致性,而有缺陷的代码片段则可能缺乏这种一致性。因此,通过对给定提示进行语义改写,生成多个版本的代码,并交叉验证这些代码之间的语义关系,就能检测出其中可能存在的错误。研究结果表明,该方法能够识别出 GPT-4 生成的 75%错误程序,误报率仅为 8.6%。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.06864 +机构:The University of Texas at San Antonio + +Where Do Large Language Models Fail When Generating Code? +本文对六种主流大语言模型在代码生成任务上产生的错误代码片段进行了实证研究。通过开放式编码和主题分析,论文构建了一个全面的代码生成错误分类法,从语义特征和语法特征两个维度对所有 558 个错误代码片段进行了标注。研究结果表明,不同的大语言模型在语义和语法特征上表现出不同的错误分布。此外,论文还分析了不同错误特征与提示长度、代码长度和测试通过率等因素之间的相关性。最后,论文强调了大语言模型在代码生成过程中可能面临的挑战,并为未来利用大语言模型实现可靠的代码生成提供了启示。 +发布日期:2024-06-13 +链接:https://arxiv.org/abs/2406.08731 +机构:University of Alberta + +From Effectiveness to Efficiency: Comparative Evaluation of Code Generated by LCGMs for Bilingual Programming Questions +本文构建了一个全面的评估框架,用于评估大型代码生成模型在处理不同自然语言输入时生成代码的质量差异。论文作者构建了一个包含 52 个双语编程问题的测试集,并开发了自动化的输入生成器。此外,他们通过采样更大的单元测试用例来增强正确性验证,并通过分析相对于输入规模增长的执行时间来估计代码性能。使用该框架,作者对六个最先进的大型代码生成模型进行了实证研究。研究结果表明,这些模型生成的代码在平均 10.5%的任务上表现出不同的双语正确性,而在正确代码中,有 39.5%表现出不同的双语性能差异。这些发现表明,大型代码生成模型在处理不同语言输入时,可能无法一致地生成高质量的代码,为未来的研究方向提供了启示。 +发布日期:2024-06-02 +链接:https://arxiv.org/abs/2406.00602 +机构:Xi’an Jiaotong University + +How Efficient is LLM-Generated Code? A Rigorous & High-Standard Benchmark +本文开发了一个严谨且高标准的基准测试 ENAMEL,用于评估大语言模型在生成高效代码方面的能力。论文作者提出了一种新的效率度量指标 eff@k,该指标将 pass@k 从正确性推广到效率,并适当处理右截断执行时间。此外,他们通过 Rao-Blackwell 方法得出了 eff@k 的无偏差和方差减少的估计量,并提供了数值稳定的实现。为了设置高标准的效率评估,作者聘请人类专家设计最佳算法和实现作为效率的参考解决方案,其中许多比 HumanEval 和 HumanEval+ 中现有的典型解决方案更加高效。为确保严格的评估,作者还聘请人类专家策划强大的测试用例生成器,以过滤错误代码并区分次优算法。使用 ENAMEL 基准测试对 30 个流行的大语言模型进行广泛研究表明,这些模型在生成专家级高效代码方面仍有不足。通过使用问题集的两个子集,作者证明了这种缺陷是由于当前的大语言模型在设计高级算法方面存在困难,并且几乎没有优化意识。 +发布日期:2024-06-10 +链接:https://arxiv.org/abs/2406.06647 +机构:University of Illinois Urbana–Champaign + +We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs +本文揭示了大语言模型在生成代码时产生的“包幻觉”现象,这种现象源于 LLM 在代码生成过程中出现的错误,导致代码推荐出现错误的包。研究人员通过对多种编程语言、环境和参数进行全面评估,发现 19.7%的生成代码存在包幻觉问题,并分析了其根源。论文还探讨了通过检索增强生成、自我检测反馈和监督微调等方法来缓解包幻觉现象,取得了一定效果。然而,研究表明,包幻觉是一个系统性和持续性问题,对代码大模型的可靠性提出了重大挑战。 +发布日期:2024-06-12 +链接:https://arxiv.org/abs/2406.10279 +机构:University of Texas at San Antonio + +How and Why LLMs Use Deprecated APIs in Code Completion? An Empirical Study +本文首次评估了基于大语言模型的代码补全中废弃 API 的使用情况,从模型、提示和库的角度来揭示废弃 API 使用的现状和根本原因。论文提出了两种轻量级的修复方法,ReplaceAPI 和 InsertPrompt,可以作为未来研究减轻废弃 API 使用的基线方法。此外,论文还为未来将库演化与大语言模型驱动的软件开发相结合的研究提供了启示。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.09834 +机构:Nanyang Technological University + +GitHub Copilot: the perfect Code compLeeter? +本文全面评估了 GitHub Copilot 在 LeetCode 问题集上生成代码的质量。研究者开发了一个自动化框架,对 Copilot 在 Java、C++、Python3 和 Rust 四种编程语言下的表现进行了评估,考察了代码生成阶段的可靠性、生成代码的正确性与编程语言、问题难度和主题的关系,以及代码的时间和内存效率。通过大规模的实验,论文得出了一些有价值的结论,如 Copilot 在 Java 和 C++ 中的表现优于 Python3 和 Rust,排名最高的建议并不总是最佳选择等。此外,论文还发现 Copilot 生成的代码效率高于普通程序员,为 Copilot 的实际应用提供了有益的参考。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11326 +机构:KU Leuven + +A Critical Study of What Code-LLMs (Do Not) Learn +本文通过对代码大模型的注意力图和隐藏表示进行细粒度分析,发现尽管这些模型在编码辅助任务中表现出色,但它们仍然存在局限性。研究表明,代码大模型只编码输入 token 的特定子集之间的关系,即语法 token 之间和标识符之间的关系,但无法编码语法 token 和标识符之间的关系。此外,与预训练模型相比,微调后的模型对这些关系的编码更差,并且参数数十亿的大模型编码的代码信息明显少于仅有数亿参数的模型。这一发现有助于理解代码语言大模型的内部工作原理及其局限性。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11930 +机构:Technische Universität Darmstadt + +Where Are Large Language Models for Code Generation on GitHub? +本文通过分析 GitHub 上的真实项目,深入研究了大语言模型生成的代码在实际软件开发中的应用情况。研究发现,ChatGPT 和 Copilot 是目前 GitHub 上最常用的代码生成工具,但其生成的代码主要集中在小型、个人或小型团队开发的项目中,并且代码片段通常较短、复杂度较低。此外,与人类编写的代码相比,LLM 生成的代码在项目中所占比例较小,修改频率也更低,而因 bug 导致的修改更是少之又少。论文还指出,LLM 生成的代码注释信息较为简略,缺乏对代码生成过程、人工修改以及测试状态的描述。研究结果为研究人员和软件开发者提供了宝贵的洞察,可以帮助他们更好地理解 LLM 在实际软件开发中的应用现状和局限性。 +发布日期:2024-06-27 +链接:https://arxiv.org/abs/2406.19544 +机构:Zhejiang University + +NLPerturbator: Studying the Robustness of Code LLMs to Natural Language Variations +本文研究了大语言模型在代码生成任务中对自然语言描述变化的鲁棒性,发现 LLM 对自然语言描述的细微变化非常敏感,即使是看似无害的修改也会影响代码生成效果。研究者总结了 18 种自然语言描述的扰动类别和 3 种组合,并开发了一个自动化框架 NLPerturbator 来模拟这些扰动。实验结果表明,扰动后的提示会导致代码生成性能显著下降,平均下降 4.8%到 6.1%,最高可达 21.2%。该研究强调了增强 LLM 对真实场景中自然语言描述变化的鲁棒性以及仔细构建提示的重要性。 +发布日期:2024-06-28 +链接:https://arxiv.org/abs/2406.19783 +机构:Zhejiang University + +## 人机交互、交互式编程 + +Learning Task Decomposition to Assist Humans in Competitive Programming +本文提出了一种新的方法,通过将复杂的语言模型生成的解决方案自动分解为多个简单的子任务,以帮助人们更容易理解和修复有缺陷的解决方案。作者引入了一个称为"辅助价值"(AssistV)的新目标函数,用于衡量人类修复分解后解决方案的可行性和速度。通过收集人类在不同分解解决方案上的修复经验数据,并将其作为上下文示例,该方法学会了批评、改进和排序分解后的解决方案,以改进 AssistV。在竞赛编程问题的验证中,该方法使非专家解决的问题数量提高了 33.3%,速度提高了 3.3 倍,使他们能够与没有辅助的专家相匹敌。 +发布日期:2024-06-07 +链接:https://arxiv.org/abs/2406.04604 +机构:Tsinghua University + +Impact of AI-tooling on the Engineering Workspace +本文利用 Jellyfish 平台分析了 AI 驱动的开发工具对工程师工作流程和工作环境的影响。通过观察 Copilot 用户在编码时间分配、工单规模、周期时间、代码评审过程等方面的变化,研究发现使用 Copilot 后,写代码时间占比平均减少 3%,个别用户减少高达 15%;工单规模平均减少 16%,周期时间减少 8%。此外,代码评审过程也有所改变,评论更加全面详细。尽管并非所有参与公司都观察到所有假设的变化,但有些公司的工作流程瓶颈减少了 33%,有一家公司将 17%的精力从维护和支持工作转移到了产品增长举措上。这项研究首次利用来自多个公司的数据,超越了简单的生产力和满意度衡量,并考虑了实际的工程设置,强调了不同公司从 Copilot 的使用中获益程度不同,以及在研究工程工作和工作流程的具体方面而非总体时,变化可能较为微妙。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07683 +机构:Jellyfish.co + +Using AI-Based Coding Assistants in Practice: State of Affairs, Perceptions, and Ways Forward +本文通过对 481 名程序员进行大规模调查,研究了人工智能助手在软件开发活动和阶段中的具体使用情况。结果表明,开发人员使用人工智能助手的情况因活动和阶段而异,他们认为编写测试和自然语言工件是最不愉快的活动,并希望将其委托给人工智能助手。此外,论文还分析了开发人员不使用助手的原因,除了信任和公司政策等一般因素外,还有一些可以解决的问题,如缺乏项目规模上下文和对助手的认识不足。这些全面而具体的结果可以指导未来的研究,以满足用户对人工智能助手的实际需求。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07765 +机构:JetBrains Research + +Requirements are All You Need: From Requirements to Code with LLMs +本文提出了一种针对软件开发过程的定制化大语言模型。该模型结合了与软件开发、需求分析、面向对象设计和测试驱动开发相关的知识、启发式方法和指令,能够模拟资深软件工程师的专业知识。论文还引入了一种名为"渐进式提示"的方法,允许软件工程师以循序渐进的方式与该模型进行交互。通过这种方法,模型可以逐步处理软件开发任务,包括解释需求文档、提取功能需求、创建面向对象模型,并根据面向对象设计生成单元测试和代码。论文通过一个关于 Web 项目开发的案例研究,展示了该模型在理解复杂用户需求并产生稳健的设计和代码解决方案方面的能力,突出了将大语言模型集成到软件开发工作流程中以显著提高效率和质量的潜力。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.10101 +机构:Texas Christian University + +Instruct, Not Assist: LLM-based Multi-Turn Planning and Hierarchical Questioning for Socratic Code Debugging +本文文提出了 TreeInstruct,一种基于状态空间规划的代码调试教学代理,通过提出探究性问题,引导学生独立识别和解决错误。它能够根据学生对问题的回答和当前知识状态动态构建问题树,有效地解决独立和依赖性错误,并在多轮交互中提供更有效的指导。论文还构建了一个包含 150 个代码问题、错误解决方案和修复方案的多 bug 数据集,并在基准测试和真实世界案例研究中验证了 TreeInstruct 的有效性,表明它比现有方法更有效地引导学生进行代码调试。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11709 +机构:University of Illinois at Urbana-Champaign + +CREF: An LLM-based Conversational Software Repair Framework for Programming Tutors +本文评估了大语言模型在程序修复任务中的表现,并提出了一个新的会话式半自动修复框架 CREF。作者首先引入了一个全新的基准测试数据集 TutorCode,避免了数据泄露问题。通过在 TutorCode 上评估 12 个大语言模型的修复性能,作者发现导师指导是最有效的辅助信息。基于这一发现,作者提出了 CREF 框架,通过与导师的互动和利用历史错误响应的对话,显著提高了大语言模型的修复能力。此外,作者还在真实的教育场景中应用了 CREF,证明了其在减轻导师工作量和提升学生学习体验方面的有效性,展示了该框架在促进其他软件工程任务中的应用前景。 +发布日期:2024-06-20 +链接:https://arxiv.org/abs/2406.13972 +机构:Yanshan University + +Transforming Software Development: Evaluating the Efficiency and Challenges of GitHub Copilot in Real-World Projects +本文究评估了使用 GitHub Copilot 在产品开发生命周期中的效率提升、改进领域和新兴挑战。作者识别了 15 项软件开发任务,并通过针对大型专有代码库的实际项目评估了 Copilot 的好处。研究结果表明,Copilot 可以显著减少开发人员的工作量,节省高达 50%的时间用于代码文档和自动完成,以及 30-40%的时间用于重复的编码任务、单元测试生成、调试和配对编程。然而,Copilot 在处理复杂任务、大型函数、多文件和专有上下文方面存在问题,特别是在 C/C ++ 代码方面。我们预计在云优先的软件开发生命周期中,与编码相关的任务将减少 33-36%的时间。本研究旨在量化生产力改进、识别表现不佳的场景、检查实际好处和挑战、调查不同编程语言之间的性能差异,并讨论与代码质量、安全性和开发人员体验相关的新兴问题。 +发布日期:2024-06-25 +链接:https://arxiv.org/abs/2406.17910 +机构:Cisco Systems Inc + +# 软工下游任务 + +### 代码生成 + +A Survey on Large Language Models for Code Generation +本文对大语言模型在代码生成领域的最新进展进行了全面而深入的综述。作者从数据处理、最新进展、性能评估和实际应用等多个方面对 LLM 在代码生成中的发展进行了系统的讨论。此外,论文还对 LLM 在代码生成领域的演化历程进行了回顾,并使用广泛认可的 HumanEval 和 MBPP 基准测试对 LLM 在代码生成能力上的渐进式提升进行了实证比较。最后,作者指出了学术界与实际开发之间存在的关键挑战和机遇。 +发布日期:2024-06-01 +链接:https://arxiv.org/abs/2406.00515 +机构:The Hong Kong University of Science and Technology (Guangzhou) + +A Lightweight Framework for Adaptive Retrieval In Code Completion With Critique Model +本文提出了一种轻量级的评估方法 CARD,用于评估检索在代码补全任务中的必要性,并从多个预测结果中选择最佳答案。CARD 可以无缝集成到任何基于检索增强生成的代码补全系统中,显著提高了效率和准确性,有效减少了检索次数和延迟,并可泛化到不同的语言模型、检索器和编程语言。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.10263 +机构:Huawei Technologies Co., Ltd + +Is Programming by Example solved by LLMs? +探究了大语言模型在 Programming-by-Examples(PBE)任务上的表现。研究发现,尽管预训练模型在 PBE 任务上效果不佳,但经过微调后,在训练数据分布内的测试问题上可以取得很高的性能。论文分析了模型成功和失败的原因,并尝试改进模型在数据分布外的泛化能力。总的来说,大语言模型在典型的 PBE 任务上取得了重大进展,有望提高 PBE 系统的灵活性和适用性,但也存在一些不足之处。 +发布日期:2024-06-12 +链接:https://arxiv.org/abs/2406.08316 +机构:Cornell University + +Benchmarks and Metrics for Evaluations of Code Generation: A Critical Review +本文对用于评估大语言模型生成代码能力的现有研究进行了批判性综述,重点关注了评估中使用的基准数据集和指标。作者分析了现有方法的优缺点,并提出了未来研究的方向,旨在推动这一领域的发展。 +发布日期:2024-06-18 +链接:https://arxiv.org/abs/2406.12655 +机构:Oxford Brookes University + +MPCODER: Multi-user Personalized Code Generator with Explicit and Implicit Style Representation Learning +本文提出了一种名为 MPCoder 的多用户个性化代码生成方法。该方法利用显式编码风格残差学习捕捉语法代码风格标准,同时通过隐式风格学习捕捉语义代码风格约定。此外,论文还提出了一种多用户风格适配器,通过对比学习更好地区分不同用户的隐式特征表示,最终实现多用户的个性化代码生成。论文还提出了一种新的评估指标,用于估计不同编码风格代码之间的相似性。实验结果表明了该方法在这一新颖任务上的有效性。 +发布日期:2024-06-25 +链接:https://arxiv.org/abs/2406.17255 +机构:Zhejiang University + +### 仓库级代码生成 + +How to Understand Whole Software Repository? +提出了一种名为 RepoUnderstander 的新型自动软件工程方法,旨在指导代理全面理解整个软件仓库。作者首先以自顶向下的方式将整个仓库的关键信息压缩到仓库知识图谱中,以降低仓库的复杂性。然后,通过提出基于蒙特卡洛树搜索的仓库探索策略,赋予代理理解整个仓库的能力。此外,为了更好地利用仓库级知识,作者指导代理进行总结、分析和规划,使其能够操纵工具动态获取信息并生成补丁来解决现实世界中的 GitHub 问题。广泛的实验证明了所提出的 RepoUnderstander 的优越性和有效性,与 SWE-agent 相比,它在 SWE-bench Lite 基准测试中实现了 18.5%的相对改进。 +发布日期:2024-06-03 +链接:https://arxiv.org/abs/2406.01422 +机构:Alibaba Group + +R2C2-Coder: Enhancing and Benchmarking Real-world Repository-level Code Completion Abilities of Code Large Language Models +本文提出了一种名 为 R2C2-Coder 的方法,用于增强和评测代码大语言模型在实际应用中的代码库级代码补全能力。R2C2-Coder 包括两个部分:R2C2-Enhance 和 R2C2-Bench。其中,R2C2-Enhance 通过构建候选检索池并为每个补全位置从检索池中组装提示,来充分利用项目代码库中的广泛上下文信息。基于 R2C2-Enhance,作者构建了一个更具挑战性和多样性的基准测试 R2C2-Bench,其中还提出了一种上下文扰动策略,以更好地模拟真实世界中的代码库级代码补全任务。在多个基准测试中的广泛结果证明了 R2C2-Coder 的有效性。 +发布日期:2024-06-03 +链接:https://arxiv.org/abs/2406.01359 +机构:Alibaba Group + +Enhancing Repository-Level Code Generation with Integrated Contextual Information +本文提出了一种名为 CatCoder 的新型代码生成框架,专门针对静态类型编程语言。CatCoder 通过整合相关代码和类型上下文,增强了仓库级别的代码生成能力。它利用静态分析器提取类型依赖关系,并将这些信息与检索到的代码合并,为大语言模型创建全面的提示。在包含 199 个 Java 任务和 90 个 Rust 任务的基准测试中,CatCoder 在 pass@k 得分方面比 RepoCoder 基线高出 17.35%。此外,CatCoder 在各种大语言模型上展现出了一致的性能提升,证明了其广泛的适用性和实用性。 +发布日期:2024-06-05 +链接:https://arxiv.org/abs/2406.03283 +机构:Zhejiang University + +On The Importance of Reasoning for Context Retrieval in Repository-Level Code Editing +本文将上下文检索任务从仓库级代码编辑流水线的其他组件中解耦出来,并通过单独针对上下文检索进行实验,为定义该组件的优缺点以及推理在其中所起的作用奠定了基础。实验结果表明,虽然推理有助于提高所收集上下文的精确度,但它仍然缺乏识别上下文充分性的能力。此外,本文还概述了专用工具在上下文收集过程中的最终作用。 +发布日期:2024-06-06 +链接:https://arxiv.org/abs/2406.04464 +机构:JetBrains Research + +GraphCoder: Enhancing Repository-Level Code Completion via Code Context Graph-based Retrieval and Language Model +本文提出了一种名为 GraphCoder 的代码补全框架,旨在解决现有的大语言模型在特定代码库的代码补全任务上表现不佳的问题。GraphCoder 通过构建代码上下文图(CCG)来更准确地捕获补全目标的上下文信息,并采用由粗到细的检索过程,从当前代码库中定位与补全目标上下文相似的代码片段。实验结果表明,与基准的基于检索的方法相比,GraphCoder 在代码匹配和标识符匹配方面平均实现了更高的精确匹配,同时使用更少的时间和空间,证明了该方法的有效性和效率。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07003 +机构:Peking University + +STALL+: Boosting LLM-based Repository-level Code Completion with Static Analysis +本文首次系统地研究了在基于大语言模型的仓库级代码补全任务中集成静态分析的有效性和效率。研究者实现了一个名为 STALL+ 的框架,支持在代码补全流程的不同阶段灵活集成多种静态分析策略。通过在最新的仓库级代码补全基准测试 CrossCodeEval 上进行广泛实验,研究发现在提示阶段集成文件级依赖关系效果最好,而在后处理阶段集成效果最差。此外,静态分析对动态语言和静态语言的改进效果不同,例如对 Java 来说提示阶段与解码阶段集成的组合最佳,而对 Python 来说提示阶段与后处理阶段集成的组合最佳。最后,研究还发现了检索增强生成与静态分析集成之间的互补性以及组合后的成本效益。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.10018 +机构:Fudan University + +Hierarchical Context Pruning: Optimizing Real-World Code Completion with Repository-Level Pretrained Code LLMs +本文针对代码大模型在实际开发场景中遇到的问题进行研究,通过实验分析发现,保持文件之间的拓扑依赖关系和增加代码文件内容可以提高代码完成的准确性;去除所有依赖文件中的具体函数实现不会显著降低代码完成的准确性。基于此,本文提出了一种名为 Hierarchical Context Pruning (HCP) 的策略,以构建具有高信息含量的完成提示。该策略在函数级别对代码库进行建模,保持代码文件之间的拓扑依赖关系,同时去除大量不相关的代码内容,显著减少了代码库级别的代码完成输入长度。实验结果表明,该方法可以显著提高代码补全的准确性,同时大幅度减少输入长度。 +发布日期:2024-06-26 +链接:https://arxiv.org/abs/2406.18294 +机构:Chinese Academy of Sciences + +### SQL 生成 + +DeTriever: Decoder-representation-based Retriever for Improving NL2SQL In-Context Learning +本文提出了一种新颖的示范检索框架 DeTriever,用于解决在上下文学习中如何选择最有益的示范样本这一问题。DeTriever 通过学习大语言模型隐藏状态的加权组合,克服了外部检索器和语言模型之间表示能力的差异。同时,论文还提出了一种基于输出查询相似性的代理分数,用于估计样本的相对效益,从而优化示范样本的选择过程。在两个流行的自然语言转 SQL 基准测试中,DeTriever 显著优于现有的最先进基线方法,展示了其在单样本自然语言转 SQL 任务中的优异表现。 +发布日期:2024-06-12 +链接:https://arxiv.org/abs/2406.07913 +机构:The University of British Columbia + +Next-Generation Database Interfaces: A Survey of LLM-based Text-to-SQL +本文综述了基于大语言模型的自然语言问题生成 SQL 语句的研究现状和进展。论文首先概述了文本到 SQL 任务面临的挑战以及该领域的发展历程,然后详细介绍了评估文本到 SQL 系统性能的数据集和指标。作者系统分析了最新的基于大语言模型的文本到 SQL 研究成果,讨论了该领域仍然存在的挑战,并对未来的研究方向提出了展望。该综述全面梳理了大语言模型在文本到 SQL 任务中的应用现状,为相关研究提供了有益参考。 +发布日期:2024-06-12 +链接:https://arxiv.org/abs/2406.08426 +机构:Jinan University, The Hong Kong Polytechnic University + +RH-SQL: Refined Schema and Hardness Prompt for Text-to-SQL +本文提出了一种基于精炼模式和难度提示的文本到 SQL 方法,通过过滤低相关度的模式信息以及使用语言模型识别查询难度生成提示,在保持性能的同时降低了存储和训练成本。该方法适用于任何序列到序列的语言模型,在 Spider 数据集上的实验取得了 82.6%的优异执行准确率,展示了该方法的有效性和实际应用价值。这一研究为提高文本到 SQL 任务的实用性提供了新的思路。 +发布日期:2024-06-13 +链接:https://arxiv.org/abs/2406.09133 +机构:Central South University + +QDA-SQL: Questions Enhanced Dialogue Augmentation for Multi-Turn Text-to-SQL +本文针对大语言模型在多轮 Text-to-SQL 任务中的局限性,提出了一种名为 QDA-SQL 的新颖数据增强方法,该方法利用大语言模型生成多种类型的多轮问答对,并引入验证和校正机制来处理复杂的多轮 Text-to-SQL 任务。实验证明,QDA-SQL 能够提升微调模型的 SQL 语句准确率,并增强其处理多轮 Text-to-SQL 任务中复杂、无法回答的问题的能力。 +发布日期:2024-06-15 +链接:https://arxiv.org/abs/2406.10593 +机构:Harbin Institute of Technology + +End-to-end Text-to-SQL Generation within an Analytics Insight Engine +本文介绍了一种基于大语言模型的 Text-to-SQL 生成流水线的设计与实现,该流水线针对当前数据访问民主化进程中面临的问题提供了解决方案。通过预先处理阶段的知识提取、查询生成时的外部知识调用、以及基于 CTE(公共表表达式)的层次化 SQL 查询分解策略,系统能有效支持高复杂度 SQL 查询的自动生成,满足即席查询的低延迟需求,并理解和处理领域特定术语。此外,该系统还包括一个适应性框架,通过反馈机制不断更新外部知识,以持续提升查询生成的质量。文章概述了整个端到端方法,并强调了推理过程中生成 SQL 的关键操作。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.12104 +机构:Distyl AI + +MAGIC: Generating Self-Correction Guideline for In-Context Text-to-SQL +本文提出了 MAGIC,一种新的多智能体方法,用于自动生成文本到 SQL 自校正指南。MAGIC 利用三个专门的智能体:管理者、校正者和反馈者,通过对训练集中基于 LLM 方法的错误进行协作,迭代地生成和改进针对 LLM 错误的自校正指南,模拟人类的流程,但无需人工参与。实验表明,MAGIC 生成的指南优于人类专家制定的指南,并提高了自校正的解释性,为分析 LLM 在自校正中的失败和成功原因提供了见解。该论文还公开发布了所有智能体交互数据,为自动生成自校正指南研究提供了一个合成数据集。 +发布日期:2024-06-18 +链接:https://arxiv.org/abs/2406.12692 +机构:Microsoft + +SQLFixAgent: Towards Semantic-Accurate SQL Generation via Multi-Agent Collaboration +本文提出了一种名为 SQLFixAgent 的多智能体协作框架,用于检测和修复文本到 SQL 解析中出现的错误 SQL 语句。该框架通过核心智能体 SQLRefiner 和两个辅助智能体 SQLReviewer 和 QueryCrafter 协同工作,利用橡胶鸭子调试法识别 SQL 语句和用户查询之间的潜在语义不匹配,并生成多个候选修复方案,最终选择最合适的 SQL 语句进行修复。实验结果表明,该框架显著提高了基线模型的执行准确率,尤其是在 Bird 基准测试中提升超过 3%,并且在代币效率方面也表现更优。 +发布日期:2024-06-19 +链接:https://arxiv.org/abs/2406.13408 +机构:Soochow University + +Unmasking Database Vulnerabilities: Zero-Knowledge Schema Inference Attacks in Text-to-SQL Systems +本文提出了一种零知识框架,能够通过精心设计的自然语言问题,从文本到 SQL 模型中提取数据库模式信息。该框架无需任何数据库先验知识,通过分析模型对问题的 SQL 输出,成功重建了数据库表名,对于专门训练的文本-SQL 模型,F1 得分达到 0.75,而对于生成式语言模型,F1 得分更是高达 0.96。这项研究揭示了文本到 SQL 模型的潜在安全隐患,并为理解和防范此类模型的安全漏洞提供了重要参考。 +发布日期:2024-06-20 +链接:https://arxiv.org/abs/2406.14545 +机构:The University of Texas at San Antonio + +### 用户界面设计 + +PosterLLaVa: Constructing a Unified Multi-modal Layout Generator with LLM +本文提出了一个统一的自动图形布局生成框架,利用多模态大语言模型来适应不同的设计任务。该方法采用结构化文本和视觉指令调优来生成满足特定视觉和文本约束的布局,包括用户定义的自然语言规范。研究者在公共多模态布局生成基准测试中进行了广泛的实验,取得了最先进的性能,证明了该方法的有效性。此外,考虑到现有数据集在捕捉现实世界图形设计的复杂性方面的局限性,他们还提出了两个新的数据集,用于更具挑战性的任务(用户约束生成和复杂的海报),进一步验证了该模型在实际应用中的实用性。这种方法具有更高的可访问性和适应性,可以进一步实现大规模图形设计任务的自动化。 +发布日期:2024-06-05 +链接:https://arxiv.org/abs/2406.02884 +机构:Hong Kong Polytechnic University, Tencent PCG + +UICoder: Finetuning Large Language Models to Generate User Interface Code through Automated Feedback +本文提出了一个利用自动化反馈来提升大语言模型生成高质量 UI 代码能力的新方法。该方法通过使用原始模型自生成大量合成数据集,然后利用编译器和多模态模型对数据进行筛选、评分和去重,最终得到一个精炼的高质量数据集。通过对该数据集进行微调,论文作者成功提升了多个开源 LLM 的性能,使其在自动化指标和人类偏好方面都超越了其他可下载的基线模型,并接近了大型私有模型的水平。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07739 +机构:Carnegie Mellon University, Apple Inc. + +GUICourse: From General Vision Language Models to Versatile GUI Agents +本文论文提出了一个名为 GUICourse 的全新数据集,旨在训练基于视觉的 GUI 代理,使其能更好地理解和操作图形界面。该数据集包含 GUIEnv、GUIAct 和 GUIChat 三个部分,分别用于增强视觉语言模型的 OCR 和定位能力,以及其对 GUI 组件和交互方式的知识。实验证明,使用 GUICourse 训练的 GUI 代理在常见的 GUI 任务上表现优于基线模型,即使参数量较小的代理也能有效完成单步和多步 GUI 操作。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11317 +机构:Renmin University of China, Tsinghua University + +Identifying User Goals from UI Trajectories +本文研究了如何通过观察用户在图形界面上的操作轨迹来推断用户的意图,旨在为自动代理提供更个性化和主动的交互体验。论文提出了一个新的评价指标来衡量两个任务描述在特定用户界面环境下的同义性,并利用该指标以及 Android-In-The-Wild 和 Mind2Web 数据集进行实验,比较了人类和 GPT-4、Gemini-1.5 Pro 等模型在识别用户意图方面的表现。结果表明,Gemini 的表现优于 GPT,但仍落后于人类,表明该领域还有很大的提升空间。 +发布日期:2024-06-20 +链接:https://arxiv.org/abs/2406.14314 +机构:Google Research + +Automatically Generating UI Code from Screenshot: A Divide-and-Conquer-Based Approach +本文提出了一种名为 DCGen 的自动设计到代码转换方法,它通过将网页截图分割成可管理的片段,生成每个片段的描述,然后将它们重新组合成完整的 UI 代码,从而提高了设计到代码转换的准确性和效率。与现有方法相比,DCGen 在视觉相似性方面取得了显著改进,并首次引入了一种基于分治策略的,关注网页设计片段的提示式 UI 代码生成方法。 +发布日期:2024-06-24 +链接:https://arxiv.org/abs/2406.16386 +机构:The Chinese University of Hong Kong + +Web2Code: A Large-scale Webpage-to-Code Dataset and Evaluation Framework for Multimodal LLMs +本文针对当前的多模态大语言模型(MLLM)在理解网页截图和生成对应 HTML 代码方面存在不足的问题,提出了 Web2Code,一个新的网页到代码的大型数据集,以及一个用于评估 MLLM 在网页理解和 HTML 代码翻译能力的框架。Web2Code 通过利用预训练的 LLM 来增强现有的网页到代码数据集,并生成多样化的新的网页图像,进而为 MLLM 的指令微调提供更丰富的数据。论文通过实验验证了 Web2Code 数据集的有效性,并希望该工作能够促进更通用、适用于网页内容生成和任务自动化的 MLLM 的开发。 +发布日期:2024-06-28 +链接:https://arxiv.org/abs/2406.20098 +机构:MBZUAI + +## 代码表征 + +Toward Exploring the Code Understanding Capabilities of Pre-trained Code Generation Models +本文首次探索了如何将预训练的代码生成模型的知识迁移到代码理解任务中,显著降低了训练成本。作者研究了使解码器模型获得稳健代码表示的有效策略,并提出了一种名为 CL4D 的对比学习方法,以增强解码器模型的表示能力。通过全面的实验,证明了该方法在代码搜索和克隆检测等理解任务上达到了最先进的性能。作者的分析表明,该方法有效地减少了表示空间中语义相同样本之间的距离。这些发现表明,使用解码器结构的模型有可能统一代码理解和生成任务。 +发布日期:2024-06-18 +链接:https://arxiv.org/abs/2406.12326 +机构:International Digital Economy Academy + +Aligning Programming Language and Natural Language: Exploring Design Choices in Multi-Modal Transformer-Based Embedding for Bug Localization +本文研究了代码缺陷定位模型中嵌入技术的影响,通过评估 14 种不同嵌入模型,发现预训练策略对嵌入质量有着显著影响。此外,嵌入模型对数据的熟悉程度也对缺陷定位模型的性能产生重要影响,尤其是在训练和测试数据来自不同项目时,定位模型的表现会发生较大波动。该研究为代码缺陷定位模型的嵌入技术设计提供了重要参考,帮助开发者更好地理解和利用嵌入模型,提升缺陷定位模型的性能。 +发布日期:2024-06-25 +链接:https://arxiv.org/abs/2406.17615 +机构:University of Waterloo + +## 代码优化 + +Should AI Optimize Your Code? A Comparative Study of Current Large Language Models Versus Classical Optimizing Compilers +本文比较了 GPT-4.0 和 CodeLlama-70B 两种大语言模型与传统优化编译器在代码优化方面的优劣,并通过定制的基准测试套件评估了它们的性能。研究发现,大语言模型尽管有潜力超越现有的优化编译器,但在处理大规模代码时容易产生错误,需要自动验证机制。CodeLlama-70B 表现优于 GPT-4.0,能够实现高达 2.1 倍的加速,而传统编译器中 CETUS 表现最佳,实现了 1.9 倍的加速。此外,论文还发现两种提示方法(Chain of Thought 和 Instruction Prompting)的性能没有显著差异。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.12146 +机构:University of Delaware + +Iterative or Innovative? A Problem-Oriented Perspective for Code Optimization +本文提出了一种新的面向问题的优化对构建方法,用于增强大语言模型在代码优化方面的能力。与之前基于同一程序员针对同一问题的迭代提交构建优化对的方法不同,该方法允许整合来自不同程序员解决同一问题的各种巧妙思路,使得大语言模型能够进行全局算法创新,而不局限于局部性能改进。实验结果表明,采用面向问题的优化对可以显著提升大语言模型的优化能力。同时,作者还识别出面向问题视角下的性能瓶颈,并通过模型合并进一步克服瓶颈,最终将程序优化率和加速比提升到了新的水平。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11935 +机构:Zhejiang University + +## 逆向工程 + +WaDec: Decompile WebAssembly Using Large Language Model +本文提出了一种新颖的方法 WaDec,通过微调大语言模型来解释和反编译 WebAssembly 二进制代码,生成更高层次、更易理解的源代码表示。WaDec 在多个指标上明显优于当前最先进的工具,包括代码膨胀率、重编译率、重新执行率、输出一致性以及抽象语法树编辑距离、圈复杂度和余弦相似度等。这项工作为 WebAssembly 反编译提供了一种新的有效方法,提高了反编译输出的可读性和可用性。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11346 +机构:Huazhong University of Science and Technology + +## 代码解释 + +Exploring the Efficacy of Large Language Models (GPT-4) in Binary Reverse Engineering +本文研究了大语言模型,特别是 GPT-4,在二进制逆向工程中的能力。通过结构化的实验方法,研究人员分析了 LLM 在解释和解释人工编写和反编译代码方面的性能。研究涵盖了两个阶段:第一个阶段是基本代码解释,第二个阶段是更复杂的恶意软件分析。关键发现表明 LLM 在一般代码理解方面具有熟练程度,但在详细的技术和安全分析方面的有效性有所不同。该研究强调了 LLM 在逆向工程中的潜力和当前局限性,为未来应用和改进提供了重要见解。此外,研究人员还检查了他们的实验方法,例如评估方法和数据约束,这为该领域的未来研究活动提供了技术展望。 +发布日期:2024-06-09 +链接:https://arxiv.org/abs/2406.06637 +机构:University of Calgary + +Identifying Inaccurate Descriptions in LLM-generated Code Comments via Test Execution +本文提出了一种新的验证软件注释准确性的方法——文档测试。作者发现目前的大语言模型生成的注释中有相当一部分存在不准确的问题,而现有的代码-注释一致性检测技术无法有效地检测出这些不准确的注释。为了解决这一问题,作者提出利用大语言模型根据注释生成测试用例,通过运行这些测试用例来验证注释的准确性。实验表明,该方法与注释准确性有稳健的统计关系,在现有技术难以奏效的情况下取得了进展。定性评估也表明,该方法有望获得开发者的信任,同时也突显出当前实现的局限性。 +发布日期:2024-06-21 +链接:https://arxiv.org/abs/2406.14836 +机构:KAIST + +MALSIGHT: Exploring Malicious Source Code and Benign Pseudocode for Iterative Binary Malware Summarization +本文提出了一种新颖的代码摘要框架 MALSIGHT,能够通过探索恶意源代码和良性伪代码来迭代生成二进制恶意软件的描述。该框架首先构建了第一个恶意软件摘要集 MalS 和 MalP,并对这些摘要集进行了手动精炼。然后在训练阶段,对代码模型 MalT5 进行调优,使其能够在 MalS 数据集和良性伪代码数据集上运行。在测试阶段,将伪代码函数逐步输入到 MalT5 中以获取摘要。此外,还提出了一个新的评估基准 BLEURT-sum,用于衡量摘要的质量。实验结果表明,该框架有效,且提出的 MalT5 仅需 0.77B 参数即可实现与更大的 ChatGPT3.5 相当的性能。 +发布日期:2024-06-26 +链接:https://arxiv.org/abs/2406.18379 +机构:Beijing University of Posts and Telecommunications + +## 漏洞检测 + +Generalization-Enhanced Code Vulnerability Detection via Multi-Task Instruction Fine-Tuning +本文提出了一个名为 VulLLM 的新框架,利用多任务学习和大语言模型来挖掘代码漏洞的深层特征。VulLLM 通过引入漏洞定位和漏洞解释两个辅助任务,并结合 GPT-4 的生成能力,使模型能够理解复杂漏洞模式,从而避免过度依赖单个任务的表面特征,提高对真实世界场景中漏洞检测的泛化能力和鲁棒性。在六个大型数据集上的实验结果表明 VulLLM 在有效性、泛化性和鲁棒性方面都超越了七个最先进的模型。 +发布日期:2024-06-06 +链接:https://arxiv.org/abs/2406.03718 +机构:Huazhong University of Science and Technology + +Security Vulnerability Detection with Multitask Self-Instructed Fine-Tuning of Large Language Models +本文提出了一种名为 MSIVD 的新技术,通过整合多任务序列到序列 LLM 和用图神经网络编码的程序控制流图,实现了基于序列到分类的漏洞检测。该技术受到思维链提示和 LLM 自指令的启发,通过多任务自指令微调,能够同时利用代码和漏洞程序的解释性指标训练 LLM 和 GNN,最终在 BigVul 和 PreciseBugs 数据集上取得了比现有最佳 LLM 漏洞检测方法更高的性能。这项工作表明,结合代码和解释性指标训练 LLM 和 GNN,是提高 LLM 漏洞检测能力,并使其能够推广到未见过数据的新方向。 +发布日期:2024-06-09 +链接:https://arxiv.org/abs/2406.05892 +机构:Carnegie Mellon University + +M2CVD: Multi-Model Collaboration for Code Vulnerability Detection +本文提出了一个名为 M2CVD 的多模型协作漏洞检测方法,旨在利用大语言模型在分析漏洞语义方面的优势,提高代码模型的漏洞检测精度。该方法通过协作流程,首先利用代码模型对项目代码的理解来增强 LLM 生成的漏洞语义描述的质量,然后使用改进后的语义描述来提高代码模型的检测精度。实验结果表明,M2CVD 在真实数据集上显著优于基线方法,并且可以扩展到其他 LLM 和代码模型,提升其漏洞检测能力。 +发布日期:2024-06-10 +链接:https://arxiv.org/abs/2406.05940 +机构:Peking University + +Towards Effectively Detecting and Explaining Vulnerabilities Using Large Language Models +本文提出了一种名为 LLMVulExp 的新框架,利用大语言模型来进行漏洞检测和解释。该框架通过针对漏洞解释进行专门的微调,不仅能够识别代码中的漏洞类型,还能分析代码上下文,生成漏洞原因、位置和修复建议。研究结果表明,LLMVulExp 能够有效地使 LLM 执行漏洞检测和解释,并通过使用链式思维(CoT)等高级策略来指导 LLM 专注于易受攻击的代码,从而取得了良好的结果。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.09701 +机构:Zhejiang University + +Vul-RAG: Enhancing LLM-based Vulnerability Detection via Knowledge-level RAG +这篇论文提出了一种新的基于大语言模型的漏洞检测技术 Vul-RAG。该技术利用知识级别的检索增强生成框架,通过三个阶段检测给定代码中的漏洞。首先,从现有的 CVE 实例中通过大语言模型提取多维度知识,构建漏洞知识库。其次,对于给定的代码片段,根据功能语义从构建的知识库中检索相关的漏洞知识。最后,通过推理检索到的漏洞知识的漏洞原因和修复方案,利用大语言模型检查给定代码片段的漏洞。在构建的基准数据集 PairVul 上的评估表明,Vul-RAG 在准确率和成对准确率方面分别比所有基线提高了 12.96%和 110%。此外,用户研究表明,Vul-RAG 生成的漏洞知识可以作为高质量的解释,将人工检测的准确率从 0.60 提高到 0.77。 +发布日期:2024-06-17 +链接:https://arxiv.org/abs/2406.11147 +机构:Fudan University + +## 软件测试 + +DLLens: Testing Deep Learning Libraries via LLM-aided Synthesis +本文提出了一种名为 DLLens 的新型深度学习库差分测试技术。DLLens 利用大语言模型合成深度学习库 API 的有效对应物,并结合静态分析方法提取 API 执行路径的约束条件,从而生成多样化的测试输入。通过在 TensorFlow 和 PyTorch 上的评估,DLLens 展现了优于现有技术的 API 对应物合成能力、约束条件提取能力以及缺陷检测能力。此外,DLLens 还成功发现了这两个深度学习库中的 56 个缺陷,其中 41 个为此前未知,突显了该技术在提升深度学习库质量方面的重要价值。 +发布日期:2024-06-12 +链接:https://arxiv.org/abs/2406.07944 +机构:The Hong Kong University of Science and Technology + +Exploring Fuzzing as Data Augmentation for Neural Test Generation +本文提出了一种新的数据增强技术 FuzzAug,结合了模糊测试和大语言模型的优点,在保持增强数据中有效程序语义的同时,为被测函数提供更多样化的输入,帮助模型将嵌入函数动态行为的正确输入与被测函数关联起来。通过在神经测试生成数据集上使用 FuzzAug 来训练最先进的代码生成模型,证明了该技术的有效性,生成的测试用例准确性提高了 11%,分支覆盖率提高了一倍。FuzzAug 可应用于各种数据集,用于训练高级代码生成模型,提高其在自动化软件测试中的实用性,展示了使用动态分析结果增强神经测试生成的好处。 +发布日期:2024-06-12 +链接:https://arxiv.org/abs/2406.08665 +机构:University of California, Davis + +An Exploratory Study on Using Large Language Models for Mutation Testing +本文系统地研究了大语言模型在生成高效软件变异体方面的表现。通过在两个 Java 基准测试集上进行的大规模实证研究,作者发现与现有方法相比,大语言模型生成的变异体更加多样化,且在行为上更接近真实缺陷。在一个专门为评估基于学习的方法而收集的新缺陷集上,大语言模型生成的变异体的缺陷检测能力比现有方法高出约 18%。此外,作者还探讨了替代性提示工程策略以及大语言模型生成不可编译变异体的根本原因,为在变异测试领域应用大语言模型提供了宝贵的见解。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.09843 +机构:Beijing Jiaotong University + +Mokav: Execution-driven Differential Testing with LLMs +本文提出了一种名为 Mokav 的工具,利用大语言模型生成差异暴露测试(DET)以检测程序功能差异。Mokav 通过迭代提示 LLM 生成新的测试输入,并根据先前测试的执行结果提供反馈,最终生成能够揭示程序差异的 DET。实验结果表明,Mokav 在检测程序功能差异方面显著优于现有方法,能够为大量程序对生成 DET,展现了其强大的能力。 +发布日期:2024-06-14 +链接:https://arxiv.org/abs/2406.10375 +机构:KTH Royal Institute of Technology + +Code Agents are State of the Art Software Testers +本文主要研究了利用大语言模型构建代码代理来将用户问题转化为测试用例的能力。研究人员设计了一个基于 GitHub 仓库的基准数据集,包含真实的用户问题、修复补丁和黄金测试用例。研究结果表明,LLM 在生成相关测试用例方面表现良好,尤其是那些用于代码修复的代码代理比专门用于测试生成的系统表现更出色。此外,论文还利用测试用例的生成率和覆盖率等指标对代码修复系统进行了更细致的分析。最后,研究发现生成的测试用例可以有效地过滤代码修复建议,从而提高了 SWE-Agent 的精确度。 +发布日期:2024-06-18 +链接:https://arxiv.org/abs/2406.12952 +机构:ETH Zurich + +CasModaTest: A Cascaded and Model-agnostic Self-directed Framework for Unit Test Generation +本提出了一种名为 CasModaTest 的级联式、模型无关的端到端单元测试生成框架,旨在克服现有基于机器学习的单元测试生成方法的局限性。CasModaTest 通过两个级联阶段生成完整的单元测试:测试前缀生成和测试断言生成。它利用手动构建的大规模演示池提供高质量的测试前缀和测试断言示例,最终自动组装生成的测试内容并进行编译和执行,以检查其有效性。实验结果表明,与现有方法相比,CasModaTest 在准确率和焦点方法覆盖率方面均取得了显著提升,并且在不同的开源大模型上也表现出优异的性能。 +发布日期:2024-06-22 +链接:https://arxiv.org/abs/2406.15743 +机构:Zhejiang University + +An Empirical Study of Unit Test Generation with Large Language Models +本问首次对开源大模型在自动生成单元测试方面的能力进行了全面的实证研究。研究者通过对比五种不同结构和参数规模的开源 LLM,并结合多种提示策略,评估了其在 17 个 Java 项目上的表现。研究发现,提示策略对 LLM 的性能有显著影响,开源 LLM 的表现与商业化的 GPT-4 和传统测试工具 Evosuite 相比各有优劣,并揭示了基于 LLM 的单元测试生成技术存在的局限性。论文最终总结了一系列指导未来研究和实践应用的建议。 +发布日期:2024-06-26 +链接:https://arxiv.org/abs/2406.18181 +机构:Tianjin University + +## 日志分析 + +Log Parsing with Self-Generated In-Context Learning and Self-Correction +本文提出了一种名为 AdaParser 的日志解析框架,该框架利用大语言模型的强大能力,并结合自生成上下文学习 (SG-ICL) 和自校正机制,实现了更准确、更适应性的日志解析。AdaParser 创新性地引入了一个模板校正器,可以利用 LLM 修正其生成的模板中的潜在解析错误,并通过动态候选集来适应不断变化的日志数据,在各种评估指标上都显著优于现有方法,即使在零样本场景下也表现出色。 +发布日期:2024-06-05 +链接:https://arxiv.org/abs/2406.03376 +机构:Peking University + +Stronger, Cheaper and Demonstration-Free Log Parsing with LLMs +本文提出了一个名为 LogBatcher 的基于大语言模型的日志解析器,它无需训练过程或标注数据,通过将日志进行聚类划分,并利用缓存匹配机制和针对日志解析的批量提示上下文,有效地提高了日志解析的效率和效果,并在 16 个公共日志数据集上验证了其有效性。 +发布日期:2024-06-10 +链接:https://arxiv.org/abs/2406.06156 +机构:Chongqing University + +ULog: Unsupervised Log Parsing with Large Language Models through Log Contrastive Units +本文提出了 ULog,一种基于无监督大语言模型的日志解析方法,可以有效地解决现有日志解析方法依赖大量标注数据的问题。ULog 通过分析多个参数部分不同的日志之间的对比关系,利用大语言模型强大的语义理解能力,实现了高效、无需标注的日志解析,并在多个大型公共数据集上取得了优于现有方法的性能。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07174 +机构:The Chinese University of Hong Kong + +Anomaly Detection on Unstable Logs with GPT Models +本文研究了在软件演化过程中日志不稳定情况下,如何使用大语言模型来进行异常检测。研究表明,经过微调的 LLM (GPT-3) 在处理不稳定日志时,与传统的监督学习方法相比表现略好,尤其是在日志序列变化程度较高的情况下。论文还对比了提示工程 (GPT-4) 和微调两种方法,结果表明,微调在稳定和不稳定日志上都表现出显著的性能优势,为 LLM 在该领域中的有效应用提供了宝贵的见解。 +发布日期:2024-06-11 +链接:https://arxiv.org/abs/2406.07467 +机构:University of Ottawa + +## 软件建模 + +Leveraging Large Language Models for Software Model Completion: Results from Industrial and Public Datasets +本文提出了一种基于检索增强生成的大模型方法,用于支持软件模型开发过程中的模型补全。该方法利用大语言模型、模型历史记录和检索增强生成技术,能够有效地为模型补全提供推荐。实验结果表明,大语言模型在模型补全方面具有很大的潜力,能够在实际工业数据集中实现 62.30% 的语义正确补全率,以及在模拟模型库中实现高达 86.19% 的类型正确补全率。特别地,大语言模型的泛化推理能力对于处理样本稀缺、噪声或完全没有样本的概念非常有用。 +发布日期:2024-06-25 +链接:https://arxiv.org/abs/2406.17651 +机构:Siemens AG + +## 联系我们 + +我们团队的多项工作,包括综述、模型、数据集,都在陆续开源中。如果您喜欢我们的工作,欢迎试用、指正错误和贡献代码,也可以给我们的项目增加 Star、引用我们的论文以支持我们。 + +- 代码大模型综述(覆盖 900 篇论文):https://arxiv.org/abs/2311.07989 +- GitHub 项目:https://github.com/codefuse-ai/Awesome-Code-LLM +- HuggingFace 主页:https://huggingface.co/codefuse-ai +- 魔搭社区主页:https://modelscope.cn/organization/codefuse-ai diff --git a/docs/blogDetails/20240805.en-US.md b/docs/blogDetails/20240805.en-US.md new file mode 100644 index 0000000..246fc1e --- /dev/null +++ b/docs/blogDetails/20240805.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-08-05' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240805.zh-CN.md b/docs/blogDetails/20240805.zh-CN.md new file mode 100644 index 0000000..35c0900 --- /dev/null +++ b/docs/blogDetails/20240805.zh-CN.md @@ -0,0 +1,1172 @@ +--- +title: '2024年7月117篇代码大模型论文最全整理' +time: '2024-08-05' +toc: content +--- + +## 引言 + +本文整理 2024 年 7 月全球各大高校与科研机构发布的 117 篇代码大模型相关论文,其中包括 12 篇发表于今年 ICML 的论文。根据论文内容,我们将这些论文整理为了基座模型、代码微调、测试基准、代码 Agent、低资源语言处理、AI 代码安全与分析、人机交互、软件工程下游任务应用(包括代码生成、代码翻译、代码优化、SQL 生成、漏洞检测与修复、软件测试、代码审核、用户界面设计)等主题。全文篇幅较长,建议电脑端阅读。 + +若您想了解其他时期的代码大模型论文,也欢迎关注我们的代码大模型综述 https://arxiv.org/abs/2311.07989 和 GitHub 开源项目 https://github.com/codefuse-ai/Awesome-Code-LLM,以及往期回顾: + +- 2024 年 5 月 90 篇代码大模型论文最全整理 +- 2024 年 6 月 118 篇代码大模型论文最全整理 + +## 编辑精选 + +### Qwen2 Technical Report + +本文介绍了 Qwen2 系列开源大模型和多模态模型,涵盖了从 0.5B 到 72B 参数的模型,以及密集模型和混合专家模型。Qwen2 在语言理解、生成、多语言能力、编码、数学和推理等方面超越了大多数先前的开源模型,并在各种基准测试中展现出与闭源模型相媲美的性能:基座模型 MMLU 84.2,GPQA 37.9,HumanEval 64.6,GSM8K 89.5,BBH 82.4;微调模型 MT-Bench 9.1,Arena-Hard 48.1,LiveCodeBench 35.7。 + +发布日期:2024-07-15 + +链接:https://arxiv.org/abs/2407.10671 + +机构:Alibaba Group + +### Apple Intelligence Foundation Language Models + +本文介绍了苹果公司为其智能功能开发的基座大模型 AFM,包括一款针对设备高效运行而设计的 3B 参数模型(AFM-on-device)和一款针对私有云计算而设计的更大规模服务器模型(AFM-server),两者都经历了 6.3T tokens 的预训练、1T tokens 的代码与数学加训以及额外 100B tokens 的长上下文训练。这些模型旨在以高效、准确和负责任的方式执行各种任务。论文详细阐述了模型架构、训练数据、训练过程、模型推理优化以及评估结果,并重点介绍了苹果公司对负责任人工智能的关注以及相关原则在模型开发中的应用。 + +发布日期:2024-07-29 + +链接:https://arxiv.org/abs/2407.21075 + +机构:Apple + +### The Llama 3 Herd of Models + +本文介绍了 Llama 家族的最新模型 Llama 3.1 系列,在今年四月发布的 Llama 3 基础上增加了对多语言、工具调用、128K 长上下文的支持,同时也在 8B 与 70B 之外发布了一个 405B 的新模型。实验表明 Llama 3 在多项任务上的表现可与 GPT-4 等领先模型相媲美。论文还发布了用于输入输出安全的 Llama Guard 3 以及将图像、语音、视频等多模态功能整合到 Llama 3 中的实验结果 +发布日期:2024-07-31 +链接:https://arxiv.org/abs/2407.21783 +机构:Llama Team, AI @ Meta + +### Code Less, Align More: Efficient LLM Fine-tuning for Code Generation with Data Pruning + +本文探讨了针对代码大模型的数据剪枝方法。研究者提出了结合多种聚类和剪枝指标的技术,来有选择地减少训练数据,同时不影响生成代码的准确性和功能性。实验表明,合成训练数据中存在显著的冗余,仅使用 10%的数据进行训练就能在很大程度上保持基准性能。更有趣的是,适度精简训练数据还能持续改善基准结果。这些剪枝策略不仅降低了所需的计算资源,还提高了整体代码生成质量。该研究为提高代码大模型的训练效率提供了新的思路,对于优化模型训练过程和提升代码生成质量具有重要意义。 + +发布日期:2024-07-06 + +链接:https://arxiv.org/abs/2407.05040 + +机构:NVIDIA + +### CoIR: A Comprehensive Benchmark for Code Information Retrieval Models + +本文提出了一个名为 CoIR 的代码信息检索基准,它包含十个精心收集的代码数据集,涵盖了七个不同领域的八个检索任务,旨在为代码检索系统的评估提供一个全面而鲁棒的工具。该基准通过提供一个用户友好的 Python 框架,以及与其他流行基准(如 MTEB 和 BEIR)相同的架构,简化了代码检索研究工作流程。研究者通过使用该基准评估了九个常用的检索模型,并发现即使是当前最先进的系统在执行代码检索任务方面也面临着巨大挑战,从而激发了代码检索领域的研究,并为进一步开发和探索更强大的代码检索系统提供了有力支撑。 + +发布日期:2024-07-03 + +链接:https://arxiv.org/abs/2407.02883 + +机构:Huawei Noah’S Ark Lab + +### 基座模型 + +Gemma 2: Improving Open Language Models at a Practical Size +Gemma 2 是 DeepMind 推出的第二代 Gemma 模型,有 2B、9B、27B 三个大小,分别预训练 2T、8T、13T tokens,且两个较小模型由 27B 模型蒸馏获得。在 MMLU、GSM8K、ARC、HellaSwag 等测试基准上的评估表明,Gemma 2 27B 的性能超越相似大小的其他模型(如 Qwen1.5 32B),甚至与更大的模型(LLaMA-3 70B)表现相当。 + +发布日期:2024-06-27 + +链接:https://storage.googleapis.com/deepmind-media/gemma/gemma-2-report.pdf + +机构:Google DeepMind + +### Narrow Transformer: Starcoder-Based Java-LM For Desktop + +本文介绍了一个名为 NT-Java-1.1B 的开源专业化 Java 语言模型。该模型基于 StarCoderBase-1.1B 构建,专门用于 Java 编程任务,填补了之前研究主要集中在 Python 等语言上的空白。NT-Java-1.1B 在 MultiPL-E Java 代码基准测试中表现出色,超越了其基础模型和大多数同等规模的模型。此外,论文还开发了量化版本的模型,使其适合在开发者桌面部署,解决了代码大模型需要专门硬件的问题。 + +发布日期:2024-07-04 + +链接:https://arxiv.org/abs/2407.03941 + +机构:Infosys Limited + +### H2O-Danube3 Technical Report + +本文文提出了 H2O-Danube3 4B 和 500M 小型语言模型系列。这些模型使用高质量的网页数据进行训练,并在多个学术、聊天和微调基准测试中表现出极具竞争力的指标。得益于紧凑的架构,H2O-Danube3 可以高效地在现代智能手机上运行,即使在移动设备上也能实现本地推理和快速处理能力。所有模型在 Apache 2.0 许可下开源,进一步增强大语言模型的可用性。 + +发布日期:2024-07-12 + +链接:https://arxiv.org/abs/2407.09276 + +机构:H2O.ai + +### Scaling Granite Code Models to 128K Context + +本文将 Granite 代码模型的有效上下文窗口拓展到了 128K tokens。为实现这一目标,研究人员通过逐渐增加其 RoPE 基频,并结合代码仓库级别的文件打包和长上下文数据的长度上采样,对 Granite 3B/8B 代码模型进行了轻量级的持续预训练,将上下文长度从 2K/4K 扩展到 128K。此外,论文还发布了支持长上下文的指令微调模型,这些模型是在长上下文基础模型上进一步微调得到的,训练数据包含了短上下文和长上下文的问答对。与原始的短上下文 Granite 代码模型相比,拓展后的模型在长上下文任务上取得了显著的改进,且没有在常规代码补全基准(如 HumanEval)上出现明显的性能下降。 +发布日期:2024-07-18 +链接:https://arxiv.org/abs/2407.13739 +机构:IBM Research + +### ALLaM: Large Language Models for Arabic and English + +本文提出了 ALLaM,一系列用于支持阿拉伯语技术生态系统的阿拉伯语大模型。ALLaM 在训练过程中充分考虑了语言对齐和知识迁移的价值,通过在阿拉伯语和英语混合文本上进行预训练,模型学习了阿拉伯语,并有效地将英语知识迁移到阿拉伯语,同时避免了对英语的灾难性遗忘。此外,论文还强调了利用平行/翻译数据来促进语言之间知识对齐的有效性。最后,论文展示了对人类偏好的广泛对齐可以显著提升语言模型的性能,即使模型规模较小,也能够比规模更大但对齐质量较低的模型表现更好。ALLaM 在各种阿拉伯语基准测试中取得了最先进的性能,包括 MMLU Arabic, ACVA 和 Arabic Exams。与基础模型相比,对齐后的模型在阿拉伯语和英语方面均取得了提升。 +发布日期:2024-07-22 +链接:https://arxiv.org/abs/2407.15390 +机构:Saudi Data and AI Authority + +### SeaLLMs 3: Open Foundation and Chat Multilingual Large Language Models for Southeast Asian Languages + +本文提出了 SeaLLMs 3,一个基于 Qwen 2 专门针对东南亚语言做了增强的大语言模型。它涵盖了该地区多种语言,包括英语、汉语、印尼语、泰语、越南语、缅甸语、马来语、爪哇语等,并通过高效的语言增强技术和专门构建的指令微调数据集,在保持高性能和多功能性的同时降低了训练成本。SeaLLMs 3 在世界知识、数学推理、翻译和指令遵循等任务中表现出色,在同等规模的模型中取得了最先进的性能,并强调了包容性 AI 的重要性,为东南亚语言和文化社区提供了先进的语言模型技术。 +发布日期:2024-07-29 +链接:https://arxiv.org/abs/2407.19672 +机构:DAMO Academy, Alibaba Group + +## 代码微调 + +Brevity is the soul of wit: Pruning long files for code generation +本文文针对大语言模型代码生成任务中的数据清洗问题进行了研究。研究发现,简单地剔除过长代码文件能够显著提升模型训练效率和性能,甚至优于基于 embedding 的复杂方法。该方法在训练效率方面可提升两倍,并在 HumanEval 上提升 3.5%。然而,该方法可能会导致模型对长代码文件的困惑度上升,这引发了对代码生成模型评价方法的思考。 +发布日期:2024-06-29 +链接:https://arxiv.org/abs/2407.00434 +机构:UCL + +### InverseCoder: Unleashing the Power of Instruction-Tuned Code LLMs with Inverse-Instruct + +本文提出了一种名为 INVERSE-INSTRUCT 的方法,通过利用代码本身生成指令来进一步提升指令微调的代码大模型。该方法基于一个关键观察:将代码(形式语言)翻译成自然语言(非形式语言)比反过来更容易。INVERSE-INSTRUCT 利用代码大模型生成代码片段的摘要,从而生成高质量的指令。通过将原始数据集与自生成指令进行组合,该方法能够有效地提升代码大模型指令微调后的能力,并在多个代码生成任务中取得优于现有模型的结果。 +发布日期:2024-07-08 +链接:https://arxiv.org/abs/2407.05700 +机构:Chinese Academy of Scienc + +### Curriculum Learning for Small Code Language Models + +本文发现,课程学习可以显著提升小规模代码语言模型在代码执行任务上的准确率,尽管它对代码补全的影响并不明显。研究人员通过提出一种新的代码难度评估指标,并设计一种新的课程学习时间表,证明了课程学习方法在训练代码语言模型上的有效性,为未来研究代码语言模型的课程学习应用提供了新的思路。 +发布日期:2024-07-14 +链接:https://arxiv.org/abs/2407.10194 +机构:Ecole nationale Supérieure d’Informatique + +### Genetic Instruct: Scaling up Synthetic Generation of Coding Instructions for Large Language Models + +本文提出了一种名为 Genetic-Instruct 的方法法,利用自指令学习,从少量种子数据中生成大量合成指令,从而提高大语言模型的代码生成能力。该方法能够有效地扩展指令生成过程,并且在多个代码生成模型的微调实验中,使用合成指令训练的模型表现出显著的性能提升。 +发布日期:2024-07-29 +链接:https://arxiv.org/abs/2407.21077 +机构:NVIDIA + +## 测试基准 + +### CodeUpdateArena: Benchmarking Knowledge Editing on API Updates + +本文提出了一个名为 CodeUpdateArena 的基准测试,用于评估大语言模型在代码领域的知识编辑能力。该基准测试关注大模型如何更新其对 API 函数的知识,以适应不断演化的代码库和 API 变化。研究者创建了一个包含 670 个程序合成示例的数据集,涵盖了对 7 个不同 Python 包中 54 个函数的各种类型的更新。这个基准测试不仅要求模型理解更新后的函数语法,还需要正确推理其语义。实验结果表明,现有的知识编辑技术在这方面还有很大的改进空间。这项工作填补了代码大模型知识更新研究的空白,为未来在这一领域的方法开发提供了重要基础。 + +发布日期:2024-07-08 + +链接:https://arxiv.org/abs/2407.06249 + +机构:The University of Texas at Austin + +### On Leakage of Code Generation Evaluation Datasets + +本文探讨了当今大模型背景下代码生成测试集的污染问题。作者识别并验证了三种可能的污染来源:直接数据泄露、通过合成数据的间接泄露以及模型选择过程中对评估集的过度拟合。针对这些发现,作者创建了一个包含 161 个提示及其对应 Python 解决方案的新数据集。 + +发布日期:2024-07-10 + +链接:https://arxiv.org/abs/2407.07565 + +机构:Cohere + +### NoviCode: Generating Programs from Natural Language Utterances by Novices + +这篇论文提出了一个名为 NoviCode 的新型自然语言编程任务,旨在解决现有文本到代码模型无法有效地将非技术用户提供的自然语言描述转化为包含复杂流程(例如 API 访问和循环、条件、序列等控制结构)的可执行程序的问题。论文还构建了一个新的基准测试集,通过评估生成的程序代码的实际功能执行结果来衡量模型的有效性。实验结果表明,NoviCode 是一个具有挑战性的代码合成任务,并且使用自然语言指令生成复杂代码超出了当前文本到代码范式的能力。此外,论文还提出了一种新的方法,通过将自然语言语句与代码的组合层次结构进行对齐,显著提高了大语言模型在这个任务上的性能,优于传统的端到端文本到代码方法。 + +发布日期:2024-07-15 + +链接:https://arxiv.org/abs/2407.10626 + +机构:Bar-Ilan University + +### Case2Code: Learning Inductive Reasoning with Synthetic Data + +本文提出了一种“Case2Code”任务,通过生成程序的输入输出转换,让模型从这些示例中推断出程序的实现代码,考察大语言模型进行归纳推理的能力。论文首先验证了目前的大模型在 Case2Code 任务上表现不佳,随后利用合成数据训练模型,结果表明这种归纳推理训练不仅提升了模型在 Case2Code 任务上的表现,还显著增强了其各种代码能力,证明了合成数据在学习归纳推理方面的巨大潜力。 +发布日期:2024-07-17 +链接:https://arxiv.org/abs/2407.12504 +机构:Fudan University + +### SciCode: A Research Coding Benchmark Curated by Scientists + +本文提出了一种名为 SciCode 的科学编码基准测试,它通过整合 16 个自然科学领域的科学家和人工智能研究人员的意见,构建了 80 个具有挑战性的科学研究问题,并将其分解成 338 个子问题。每个子问题都涉及知识回忆、推理和代码生成,需要模型具备解决真实科学问题的能力。论文发现,即使是目前最先进的语言模型也难以解决大部分问题,表明科学人工智能仍然有巨大的发展空间。SciCode 为评估大语言模型在科学研究中的应用提供了宝贵的资源,并为未来科学人工智能的发展方向提供了新的视角。 + +发布日期:2024-07-18 + +链接:https://arxiv.org/abs/2407.13168 + +机构:University of Illinois Urbana-Champaign + +### ECCO: Can We Improve Model-Generated Code Efficiency Without Sacrificing Functional Correctness? + +本文提出了 ECCO,一个可复现的基准测试,用于评估基于大语言模型的代码生成效率,涵盖了自然语言驱动的代码生成和基于历史的代码编辑两种范式。论文深入研究了三种最有希望的基于大模型的方法,发现虽然大多数方法在提高代码效率的同时会降低功能正确性,但加入执行信息通常有助于保持功能正确性,而自然语言反馈则更能提升效率。论文发布了 ECCO 基准测试,为未来研究大语言模型生成高效代码提供支持。 + +发布日期:2024-07-19 + +链接:https://arxiv.org/abs/2407.14044 + +机构:Carnegie Mellon University + +### Generating Unseen Code Tests In Infinitum + +本文提出了一个生成代码任务测试集变体的方法,该方法可以跨任务和编程语言进行推广,并可应用于内部代码库。该方法可以持续生成测试数据,从而缓解测试集数据泄露到训练数据的问题。论文还实现了一个名为“自回归”的 Python 代码生成任务测试集,专门用于辅助调试和跟踪 LLM 回归测试过程中模型生成的变化。 +发布日期:2024-07-29 +链接:https://arxiv.org/abs/2407.19772 +机构:IBM Research AI + +Assessing Programming Task Difficulty for Efficient Evaluation of Large Language Models +本文提出了一个名为 HardEval 的框架,用于评估大语言模型在编程任务中的难度。该框架通过分析不同模型对同一任务的多种提示的回答,来计算每个任务的难度评分。研究结果表明,现有的代码生成基准测试中,只有不到三分之一的任务对 LLM 来说是困难的。论文进一步分析了难点任务的特征,并据此创建了新的困难任务,旨在帮助研究人员和开发者更好地评估和改进大模型。 + +发布日期:2024-07-30 + +链接:https://arxiv.org/abs/2407.21227 + +机构:Polytechnique Montréal + +### WebApp1K: A Practical Code-Generation Benchmark for Web App Development + +本文提出 WebApp1K,一个用于评估大语言模型开发网页应用程序能力的代码生成基准。该基准简单易用,可用来校准大模型输出并帮助其逐步提高代码正确性和功能性。论文报告了使用该基准测试最新的大模型的结果,发现开源模型的表现令人印象深刻,紧随 GPT-4o 和 Claude 3.5。此外,模型大小与代码正确性之间存在很强的关联,但目前还没有发现任何提示技巧能够普遍提升所有模型的性能,或者显著提高单个模型的性能。 + +发布日期:2024-07-30 + +链接:https://arxiv.org/abs/2408.00019 + +机构:ONEKQ Lab + +## 代码 Agent + +### INDICT: Code Generation with Internal Dialogues of Critiques for Both Security and Helpfulness + +本文提出了 INDICT 框架,旨在通过内部对话机制来提升代码生成大模型的安全性和帮助性。框架由安全型和帮助型两个批评者组成,它们通过外部知识库(如代码片段、网络搜索和代码解释器)对任务和生成的代码进行分析,并在代码生成和执行阶段分别提供预先和事后指导。研究结果表明,INDICT 可以有效提升模型输出代码的安全性和帮助性,显著提高代码质量。 + +发布日期:2024-06-23 + +链接:https://arxiv.org/abs/2407.02518 + +机构:Salesforce Research + +### Agentless: Demystifying LLM-based Software Engineering Agents + +本文提出了一种名为“Agentless”的无代理方法,用于自动解决软件开发问题。与复杂的基于代理的方案相比,Agentless 通过简单的定位和修复两阶段流程来实现目标,避免了让大模型决定未来行动或使用复杂工具。在流行的 SWE-bench Lite 基准测试中,Agentless 表现出更高的性能和更低的成本,证明了这种简单的可解释技术在自动软件开发中具有被忽视的潜力。论文期望 Agentless 能够为自动软件代理设定新的基准,并启发未来在这方面的发展。 + +发布日期:2024-07-01 + +链接:https://arxiv.org/abs/2407.01489 + +机构:University of Illinois Urbana-Champaign + +### DotaMath: Decomposition of Thought with Code Assistance and Self-correction for Mathematical Reasoning + +本文介绍了一种名为 DotaMath 的新型大语言模型系列,旨在解决复杂的数学问题。DotaMath 的创新之处在于它结合了思维分解、代码辅助和自我纠正的方法来进行数学推理。该模型通过将复杂任务分解为简单的逻辑子任务,利用代码解决这些子任务,从代码解释器获取详细反馈,并进行自我反思和纠正。研究者通过注释多样的交互式工具使用轨迹并在 GSM8K 和 MATH 数据集上进行查询演化,生成了一个包含 574K 查询-响应对的指令微调数据集 DotaMathQA。基于此数据集的模仿学习训练产生了一系列 DotaMath 模型,这些模型在各种领域内和领域外的基准测试中都表现出色。特别是,DotaMath-deepseek-7B 模型在 MATH 数据集上达到了 64.8%的优秀表现,在 GSM8K 上达到了 86.7%的成绩。此外,该模型在一系列领域内外的基准测试中保持了强劲的竞争力(平均 80.1%)。这项研究为解决复杂数学问题开辟了新的途径,为未来的数学推理研究提供了有价值的参考。 + +发布日期:2024-07-04 + +链接:https://arxiv.org/abs/2407.04078 + +机构:Qwen Team, Alibaba Inc. + +### CIBench: Evaluating Your LLMs with a Code Interpreter Plugin + +本文提出了一种名为 CIBench 的交互式评估框架,用于全面评估大语言模型在数据科学任务中使用代码解释器的能力。该框架通过模拟真实的交互式工作流程,并利用连续的交互式 IPython 会话,构建了一个评估数据集和两种评估模式,以评估 LLM 在有无人类帮助的情况下,使用代码解释器解决问题的能力。论文对 24 个 LLM 进行了广泛的实验,并对未来 LLM 在代码解释器利用方面的改进提供了宝贵的见解。 + +发布日期:2024-07-15 + +链接:https://arxiv.org/abs/2407.10499 + +机构:Shanghai Artificial Intelligence Laboratory + +### PyBench: Evaluating LLM Agent on various real-world coding tasks + +本文介绍了 PyBench,一个包含五个真实世界任务类别的基准测试,用于评估大语言模型代理在代码解释器帮助下解决实际代码任务的能力。与现有基准测试相比,PyBench 更全面地涵盖了各种日常代码任务,并要求 LLM 代理具备更强大的 Python 包理解、推理能力以及代码反馈整合能力。论文发现现有的开源 LLM 在解决这些任务方面存在困难,并通过分析和实验证明了在 PyBench 上取得良好效果所需具备的综合能力。作者还训练了一个名为 PyLlama3 的 8B 参数模型,在 PyBench 上取得了优异的性能,超越了许多更大规模的模型。 + +发布日期:2024-07-23 + +链接:https://arxiv.org/abs/2407.16732 + +机构:Renmin University of China + +### AppWorld: A Controllable World of Apps and People for Benchmarking Interactive Coding Agents + +本文提出了一种名为 AppWorld 的新基准,用于评估能够处理日常生活数字化任务(例如,为家庭订购杂货)的自主代理。与现有基准不同,AppWorld 不仅包含模拟现实生活中的 9 个应用程序和 457 个 API,还提供 750 个复杂且自然的任务,需要代理生成复杂的代码并与环境交互。AppWorld 引入了基于状态的单元测试,可以评估代理代码的鲁棒性和安全性,并避免意外的负面影响。论文发现,即使是 GPT-4 等最先进的语言模型也难以解决 AppWorld 中的大多数任务,这表明该基准可以有效地推动交互式编码代理的研究发展。 + +发布日期:2024-07-26 + +链接:https://arxiv.org/abs/2407.18901 + +机构:Stony Brook University + +### AdaCoder: Adaptive Prompt Compression for Programmatic Visual Question Answering + +本文提出了 AdaCoder,一个用于视觉程序化模型的自适应提示压缩框架。AdaCoder 通过将预定义的提示根据问题类型进行压缩,减少了用于生成代码的提示长度,从而提高了视觉问答模型的效率和性能,同时无需额外训练,可适配不同的大语言模型。 + +发布日期:2024-07-28 + +链接:https://arxiv.org/abs/2407.19410 + +机构:Tokyo Institute of Technology + +## 低资源语言与 DSL + +### ITERTL: An Iterative Framework for Fine-tuning LLMs for RTL Code Generation + +本文提出了一个名为 ITERTL 的迭代训练范式,用于提高大语言模型生成 RTL 代码的能力。该方法通过在每次迭代中从模型生成的样本中采样并进行训练,有效地减少了模型与训练样本之间的分布差异,使其能够探索更广泛的生成空间并获得更全面的反馈。实验结果表明,ITERTL 在 VerilogEval 评估数据集上取得了优异的性能,即使使用更少的参考样本也能达到甚至超越最先进的开源模型,并在数据量受限的情况下为 LLM 生成 RTL 代码提供了可行方案。 + +发布日期:2024-06-28 + +链接:https://arxiv.org/abs/2407.12022 + +机构:Chinese Academy of Sciences + +### A Comparative Study of DSL Code Generation: Fine-Tuning vs. Optimized Retrieval Augmentation + +本文针对大语言模型在领域特定语言(DSL)代码生成中面临的挑战,即自定义函数名称导致的幻觉和语法错误,提出了一种基于检索增强生成(RAG)的优化方法。研究人员创建了一个包含 700 多个公开 API 的自动化任务 DSL 数据集,并使用该数据集微调了 Codex 模型。结果表明,微调模型在代码相似度方面表现最佳,而优化后的 RAG 模型在相似度指标上与之相当。尽管两者在编译率方面仍存在语法错误,但 RAG 模型表现略好。另一方面,RAG 模型在 API 名称和 API 参数键的幻觉率方面略逊于微调模型。该论文表明,优化后的 RAG 模型能够媲美微调模型,并在处理新的、未知的 API 方面具有优势。 + +发布日期:2024-07-03 + +链接:https://arxiv.org/abs/2407.02742 + +机构:Microsoft Corporation + +### ConCodeEval: Evaluating Large Language Models for Code Constraints in Domain-Specific Languages + +本文评估了大语言模型在理解和执行代码形式约束方面的能力。研究者提出了两个新颖的任务,用于评估 LLM 在五种不同表示形式下处理硬约束和软约束的能力。研究结果表明,无论这些约束在预训练数据中占比如何,LLM 都难以完全理解各种表示形式的约束。虽然模型在理解 JSON、YAML 和自然语言表示的约束方面表现较好,但在处理 XML 和 Python 语言表示的约束时仍然存在困难。这项研究为理解 LLM 在处理领域特定语言(DSL)中的约束时的局限性提供了宝贵见解,为未来改进 LLM 在代码生成和约束处理方面的能力指明了方向。 + +发布日期:2024-07-03 + +链接:https://arxiv.org/abs/2407.03387 + +机构:IBM Research + +### AutoBench: Automatic Testbench Generation and Evaluation Using LLMs for HDL Design + +本文提出了一个名为 AutoBench 的系统,它是首个基于大语言模型的数字电路设计测试台生成器。AutoBench 只需要被测设计(DUT)的描述就能自动生成全面的测试台,大大提高了硬件验证的效率。该系统采用混合测试台结构和自检系统,并引入了一个自动化的测试台评估框架,从多个角度评估生成的测试台质量。实验结果表明,与直接使用 LLM 生成测试台的基准方法相比,AutoBench 在测试台通过率上实现了 57%的提升,对于 75 个顺序电路,其测试台通过率是基准方法的 3.36 倍。这项研究为数字电路设计中的自动化测试台生成提供了一种高效的解决方案,有望显著减少设计师在验证过程中的工作量。 + +发布日期:2024-07-04 + +链接:https://arxiv.org/abs/2407.03891 + +机构:Technical University of Munich + +### CodeV: Empowering LLMs for Verilog Generation through Multi-Level Summarization + +本文针对现代处理器设计中日益复杂的成本问题,提出了一种基于指令微调的大型语言模型 CodeV,专门用于生成 Verilog 代码。与以往直接生成代码的方式不同,CodeV 利用 LLM 强大的概括能力,通过多级摘要将 Verilog 代码转换为自然语言描述,再将描述转换为代码。这种方法克服了现有模型在 Verilog 代码生成方面表现不佳的缺陷,在多个指标上显著优于现有开源和商业模型,为自动化的处理器设计提供了新的解决方案。 + +发布日期:2024-07-15 + +链接:https://arxiv.org/abs/2407.10424 + +机构:Chinese Academy of Science + +### Large Language Model for Verilog Generation with Golden Code Feedback + +本文提出了一种新的方法来提高开源大语言模型在自然语言到 Verilog RTL 代码生成任务上的性能。研究者使用了基于正确代码反馈的强化学习技术来增强预训练模型的能力。通过利用开源数据和基础模型,他们的方法在性能上大幅超越了现有的最佳模型,特别是他们的 6.7B 参数模型甚至优于 13B 和 16B 的模型。此外,论文还深入分析了直接微调的局限性和强化学习的训练动态,指出开发与 Verilog 代码固有并行语义相一致的全面监督信号对于有效生成代码至关重要。 + +发布日期:2024-07-21 + +链接:https://arxiv.org/abs/2407.18271# + +机构:City University of Hong Kong + +### AutoVCoder: A Systematic Framework for Automated Verilog Code Generation using LLMs + +本文提出了一个名为 AutoVCoder 的开源框架,旨在提高大语言模型在生成 Verilog 等 RTL 代码时的语法和功能正确性。该框架整合了三项创新技术:高质量硬件数据集生成方法、两轮 LLM 微调方法以及特定领域的检索增强生成(RAG)机制。实验结果表明,AutoVCoder 在 Verilog 代码生成方面的性能优于工业和学术界的大模型。具体而言,与 BetterV 相比,AutoVCoder 在 EvalMachine 和 EvalHuman 基准测试中的功能正确性分别提高了 0.5%和 2.2%;与 RTLCoder 相比,在 RTLLM 基准测试中的语法正确性和功能正确性均提高了 3.4%。 + +发布日期:2024-07-21 + +链接:https://arxiv.org/abs/2407.18333 + +机构:Shanghai Jiao Tong University + +### OriGen:Enhancing RTL Code Generation with Code-to-Code Augmentation and Self-Reflection + +本文提出了一个名为 OriGen 的开源框架,旨在解决现有开源 LLM 在 RTL 代码生成方面性能落后于商业模型的困境。通过结合知识蒸馏的代码增强方法和基于编译器反馈的自我反省机制,OriGen 能够生成高质量的大规模 RTL 代码,并有效纠正语法错误。在实验中,OriGen 在 RTL 代码生成任务中显著超越了其他开源模型,并在自我反省能力方面也超过了 GPT-4,为开源领域提供了一个高性能、安全可靠的 RTL 代码生成方案。 + +发布日期:2024-07-23 + +链接:https://arxiv.org/abs/2407.16237 + +机构:Peking University + +## AI 代码安全与分析 + +### Beyond Functional Correctness: Investigating Coding Style Inconsistencies in Large Language Models + +本文通过对比主流代码生成模型生成的代码和人类开发者编写的代码,系统地分析了代码生成模型和人类开发者在代码风格方面的差异,并总结了代码风格不一致的分类。论文还深入研究了这种差异的潜在原因,并提出了一些缓解问题的方法,为提升代码生成模型的代码风格一致性提供了理论依据和实践指导。 + +发布日期:2024-06-29 + +链接:https://arxiv.org/abs/2407.00456 + +机构:Sun Yat-sen University + +### Is Your AI-Generated Code Really Secure? Evaluating Large Language Models on Secure Code Generation with CodeSecEval + +本文研究了大语言模型在代码生成和修复方面的安全问题。作者发现,由于 LLM 的训练数据来自未经清理的开源代码库,例如 GitHub,导致模型在代码生成和修复过程中容易忽略安全漏洞,从而产生存在安全漏洞的代码。为了解决这个问题,作者构建了一个名为 CodeSecEval 的数据集,涵盖了 44 种关键漏洞类型,并提出了多种策略来利用漏洞信息和不安全代码解释来缓解这些安全漏洞。研究结果表明,目前 LLM 在代码安全方面的表现还有待提升,特别是对于某些类型的漏洞,模型的性能较差。论文的结论表明,这项研究将推动软件工程领域对代码安全问题的关注,并为训练和使用 LLM 提供更安全的方案,从而促进更安全和可信的模型部署。 + +发布日期:2024-07-02 + +链接:https://arxiv.org/abs/2407.02395 + +机构:South China University of Technology + +### An Empirical Study on Capability of Large Language Models in Understanding Code Semantics + +本文提出了一个名为 EMPICA 的综合框架,用于系统性地评估代码大模型在理解代码语义方面的能力。EMPICA 通过对输入代码进行控制性修改或转换,然后检查模型的响应来实现这一目标。研究者认为,对于所有软件工程任务,代码大模型应该对语义等价的代码输入保持鲁棒性,同时对非等价的输入保持敏感性。实验结果显示,最先进的代码大模型在不同任务和转换操作中的鲁棒性和敏感性存在显著差异。此外,模型对语义保持转换的鲁棒性优于对语义非保持转换的敏感性。这些发现突显了增强模型理解代码语义能力的必要性,特别是在敏感性方面。通过这项研究,论文为评估和改进代码大模型的语义理解能力提供了一个新的视角和方法。 + +发布日期:2024-07-04 + +链接:https://arxiv.org/abs/2407.03611 + +机构:VNU University of Engineering and Technology + +### Code Hallucination + +本文深入研究了大语言模型在代码生成过程中出现的幻觉问题。作者首先定义并分类了多种代码幻觉类型,并通过手动方式使用 LLM 生成了这些幻觉代码样本。论文还提出了一种名为 HallTrigger 的技术,利用 LLM 的三种动态属性来构造提示,从而有效地触发模型产生任意的代码幻觉,而无需访问模型的架构或参数。通过对流行的黑盒模型进行实验,作者证明了 HallTrigger 的有效性,并强调了 LLM 幻觉对软件开发的广泛影响。 + +发布日期:2024-07-05 + +链接:https://arxiv.org/abs/2407.04831 + +机构:Cisco Research + +### Looking into Black Box Code Language Models + +本文深入研究了代码大模型中前馈层的作用和特性。研究者使用了两个先进的代码大模型(Codegen-Mono 和 Ploycoder)以及三种常用编程语言(Java、Go 和 Python)进行实验。他们探究了前馈层中存储概念的组织方式、这些概念的可编辑性,以及不同层和输入上下文大小对输出生成的影响。研究发现模型的低层捕捉语法模式,高层编码抽象概念和语义;在不影响模型性能的情况下可以编辑前馈层中的特定概念;初始层充当"思考"层,而后续层对预测下一个代码 token 至关重要;早期层可以准确预测较小的上下文,但较大的上下文需要后期关键层的贡献。这些发现有助于更好地理解、调试和测试代码大模型。 + +发布日期:2024-07-05 + +链接:https://arxiv.org/abs/2407.04868 + +机构:University of Kentucky + +### What's Wrong with Your Code Generated by Large Language Models? An Extensive Study + +本文通过对多种大语言模型进行实证研究,揭示了现有的代码生成方法在应对复杂问题时存在的局限性,并分析了代码生成错误的类型和根源。研究发现,模型在生成更复杂代码时会面临挑战,且倾向于生成更短但更复杂的代码。论文还提出了一个新的无训练迭代方法,利用自批评机制让模型根据错误类型和编译器反馈来修正生成的代码,有效地降低了错误率,表明了模型在处理复杂问题方面具有显著潜力。 + +发布日期:2024-07-08 + +链接:https://arxiv.org/abs/2407.06153 + +机构:Fudan University + +### Prompting Techniques for Secure Code Generation: A Systematic Investigation + +本文研究了不同提示技术对大语言模型生成安全代码的影响。研究者首先通过系统性文献综述识别了现有的可用于代码生成任务的提示技术。然后,他们选取了一部分技术,在 GPT-3、GPT-3.5 和 GPT-4 模型上进行了安全代码生成的评估。研究结果对代码生成的提示技术进行了分类,并针对安全代码生成任务调整和评估了部分技术。特别的,他们发现使用递归批评和改进(RCI)技术后,所测试的大模型生成的代码中的安全弱点显著减少。这项研究为大模型生成代码的安全性讨论提供了宝贵的见解,对推进提示驱动编程的发展具有重要意义。 + +发布日期:2024-07-09 + +链接:https://arxiv.org/abs/2407.07064 + +机构:Hamburg University of Technology + +### DeepCodeProbe: Towards Understanding What Models Trained on Code Learn + +本文文提出了一种名为 DeepCodeProbe 的探测方法,用来评估用于软件维护任务的机器学习模型的语法和表示学习能力。研究发现,尽管小模型能够捕捉到抽象的语法表示,但其对编程语言语法的理解能力有限。增大模型容量可以提升语法学习能力,但也会带来训练时间增加和过拟合等问题。DeepCodeProbe 还识别了模型从训练数据中学习到的特定代码模式,并提供了提高代码模型性能和可解释性的最佳实践建议。 + +发布日期:2024-07-11 + +链接:https://arxiv.org/abs/2407.08890 + +机构:Polytechnique Montreal + +### Towards More Trustworthy and Interpretable LLMs for Code through Syntax-Grounded Explanations + +本文提出了 ASTrust,一种面向代码大模型的可解释性方法。ASTrust 通过将模型置信度与编程语言的语法结构联系起来,生成可解释的代码生成解释。该方法基于抽象语法树(AST),将模型置信度分配给 AST 中的不同语法结构,从而为开发者提供更直观的模型预测解释,提升了对 LLM 的信任度。通过可视化工具,ASTrust 可以帮助开发者理解模型在代码片段和大型数据集上的预测行为,并为实际应用提供了宝贵的参考。 + +发布日期:2024-07-12 + +链接:https://arxiv.org/abs/2407.08983 + +机构:William & Mary + +### Benchmarking Language Model Creativity: A Case Study on Code Generation + +本文提出了一种新的框架,用以量化大型语言模型的创造力,该框架将创造力定义为收敛思维和发散思维的结合。论文通过“否定式提示”技术,逐步增加限制条件,迫使模型采用新的策略,从而提高模型的创造性;并通过 NeoGauge 指标来评估模型在收敛思维和发散思维上的表现。论文应用该框架对 Codeforces 编程问题进行了分析,发现即使是最先进的模型,GPT-4,在创造力方面仍无法达到人类水平。该论文还实验了多种高级推理策略,但没有观察到创造力的显著提升。论文同时发布了 NeoCoder 数据集,供后续研究人员使用。 + +发布日期:2024-07-12 + +链接:https://arxiv.org/abs/2407.09007 + +机构:Johns Hopkins University + +### TAPI: Towards Target-Specific and Adversarial Prompt Injection against Code LLMs + +本文提出了一种名为“目标特定对抗性提示注入”(TAPI)的新攻击模式,针对目前广泛应用于代码编程的代码大模型。TAPI 通过在外部代码中注入包含恶意指令的不可读注释作为触发器,在用户使用代码大模型完成代码时,模型会生成攻击者指定的恶意代码片段,从而实现特定目标的攻击。该方法继承了后门攻击和对抗攻击的优点,克服了现有攻击方法的局限性,能够高效且隐蔽地攻击代码大模型,对现实世界中的代码生成工具构成潜在威胁。 + +发布日期:2024-07-12 + +链接:https://arxiv.org/abs/2407.09164 + +机构:Zhejiang University + +### On Mitigating Code LLM Hallucinations with API Documentation + +本文针对软件工程领域中 API 幻觉问题,提出了一种名为 CloudAPIBench 的新基准测试,用于评估 API 幻觉发生的频率。该论文发现大语言模型在处理低频 API 时表现不佳,并提出了一种文档增强生成 (DAG) 方法来提升低频 API 的性能。为了避免 DAG 对高频 API 的负面影响,论文进一步提出了一种智能触发 DAG 的策略,以平衡低频和高频 API 的性能,最终提高 API 调用的可靠性。 + +发布日期:2024-07-13 + +链接:https://arxiv.org/abs/2407.09726 + +机构:Amazon Web Services + +### Uncovering Weaknesses in Neural Code Generation + +本文系统评估了五个大语言模型在代码生成任务上的表现,并通过分析生成代码的质量,提出了九种代码生成模型弱点分类。研究发现,大语言模型在代码生成任务中普遍存在着不准确的提示、遗漏关键语义以及 API 使用不当等问题,这些问题在不同基准数据集和模型规模中表现出不同的严重程度。这项研究为代码生成领域的研究者指明了未来研究的方向,并提供了更精准的基准数据集子集,以支持更深入的分析。 + +发布日期:2024-07-13 + +链接:https://arxiv.org/abs/2407.09793 + +机构:Beihang University + +### MaPPing Your Model: Assessing the Impact of Adversarial Attacks on LLM-based Programming Assistants + +本文提出了“恶意编程提示(MaPP)”攻击,证明攻击者可以通过在编程任务提示中添加少量文字,诱使大语言模型在生成看似正确的代码的同时,也植入安全漏洞。研究发现,MaPP 攻击对各种 LLM 都有效,并且即使最先进的商业模型也无法完全免疫。这项工作强调了在使用 LLM 辅助编程时,需要保护提示信息免受恶意操作,并对生成的代码进行严格的审计。 + +发布日期:2024-07-12 + +链接:https://arxiv.org/abs/2407.11072 + +机构:University of Oregon + +### Beyond Correctness: Benchmarking Multi-dimensional Code Generation for Large Language Models + +本文提出了 RACE 基准测试,它从可读性、可维护性、正确性和效率四个维度全面评估了大型语言模型生成代码的质量。与现有的代码生成能力评估方法不同,RACE 考虑了用户需求的差异性,设计了不同类型的用户需求来衡量模型生成符合用户要求的优质代码的能力。通过对 18 个代表性模型的评估,论文发现当前大型语言模型生成高质量代码的能力仍无法满足软件开发的要求,可读性是衡量生成代码整体质量的关键指标,大多数模型倾向于特定的代码风格。这些发现有助于研究人员更深入地理解当前大型语言模型的代码生成能力,并为未来模型的改进指明方向。 + +发布日期:2024-07-16 + +链接:https://arxiv.org/abs/2407.11470 + +机构:Chinese Information Processing Laboratory + +### A Performance Study of LLM-Generated Code on Leetcode + +本文通过分析 LeetCode 数据集,评估了大语言模型在代码生成方面的效率,并将其性能与人类编写的解决方案进行了对比。研究发现,不同大模型生成的代码在性能上基本一致,并且平均而言,大模型生成的代码比人类编写的代码更高效。论文还探讨了使用 LeetCode 作为基准数据集的利弊,以及数据污染和平台测量可靠性等问题。研究结果为深入了解大模型在代码生成方面的能力以及未来优化提供了重要参考。 + +发布日期:2024-07-31 + +链接:https://arxiv.org/abs/2407.21579 + +机构:Univ. Lille + +## 人机交互、交互式编程 + +### The GPT Surprise: Offering Large Language Model Chat in a Massive Coding Class Reduced Engagement but Increased Adopters Exam Performances + +本文通过一项涉及 5831 名来自 146 个国家的学生的在线编程课程的大规模随机对照试验,研究了通用大语言模型如 GPT-4 对编程教育的影响。研究发现,虽然 LLM 的使用对使用者的考试成绩有积极影响,但整体上 LLM 的推广导致了考试参与率的显著下降,以及其他形式的课程参与度的下降。然而,这种下降受学生所在国家的影响,对来自人类发展指数较低的国家学生的考试参与率反而有所提升。研究结果表明,LLM 在入门编程课程中可能存在积极作用,但也存在潜在的参与度下降问题,其对学生学习成功的长期影响尚不明确。这项研究强调需要进一步研究,以更好地了解未来 LLM 在课堂上的应用和整合可能产生的影响。 + +发布日期:2024-04-25 + +链接:https://arxiv.org/abs/2407.09975 + +机构:Stanford University + +### Let the Code LLM Edit Itself When You Edit the Code + +本文提出了一种名为“Positional Integrity Encoding” (PIE) 的方法,用于解决代码生成模型在实时代码编辑场景中遇到的效率和准确性权衡问题。PIE 巧妙地利用旋转位置编码,移除会导致时间混乱的关键缓存中的旋转矩阵,并重新应用正确的旋转矩阵,从而确保了 token 之间位置关系的准确性,且仅需一次矩阵乘法操作。实验结果表明,PIE 在各种模型规模和代码编辑任务中,能够将计算开销降低超过 85%,同时有效地保持了模型的性能。 + +发布日期:2024-07-03 + +链接:https://arxiv.org/abs/2407.03157 + +机构:Peking University + +### Enhancing Computer Programming Education with LLMs: A Study on Effective Prompt Engineering for Python Code Generation + +本文研究了利用大语言模型和提示工程来改善计算机编程教育的潜力。通过对不同教育需求的提示工程策略进行系统分类,以及设计评估框架,该论文探索了如何提升大语言模型解决复杂编程问题的能力。研究结果表明,精心设计的提示策略可以显著提高大语言模型在编程教育中的效力,并为教师和学生提供了优化基于大语言模型的学习体验的框架。 + +发布日期:2024-07-07 + +链接:https://arxiv.org/abs/2407.05437 + +机构:Mercy University + +### I Need Help! Evaluating LLM's Ability to Ask for Users' Support: A Case Study on Text-to-SQL Generation + +本文以文本到 SQL 生成为例,研究了大语言模型主动寻求用户帮助的能力。论文提出了评估性能提升和用户负担之间权衡的指标,并探讨了大语言模型是否能够判断何时需要寻求帮助以及在不同信息可用性水平下的性能。实验结果表明,在没有外部反馈的情况下,许多大模型难以识别其对额外支持的需求。该研究强调了外部信号的重要性,并为未来改进寻求支持策略的研究提供了见解。 + +发布日期:2024-07-20 + +链接:https://arxiv.org/abs/2407.14767 + +机构:Appier AI Research + +### How Novice Programmers Use and Experience ChatGPT when Solving Programming Exercises in an Introductory Course + +本文着重于探讨生成式人工智能(GenAI)工具,尤其是 ChatGPT,在入门编程课程中对学生的实际应用。通过对德国大学 298 名学生的调查研究,该论文分析了学生使用 ChatGPT 的模式和对其感知,揭示了学生在编程学习中如何利用 ChatGPT 辅助解决问题,以及他们对该工具的评价。研究结果不仅有助于理解学生在编程课程中使用 GenAI 工具的实际情况,也为教育工作者和高校制定适应 GenAI 时代教学和评估方式提供了重要参考。 + +发布日期:2024-07-30 + +链接:https://arxiv.org/abs/2407.20792 + +机构:Nuremberg Tech + +## 软工下游任务 + +### 代码生成 + +Revisiting the Impact of Pursuing Modularity for Code Generation +本文研究了模块化编程在基于大语言模型的代码生成工具中的作用。研究人员发现,与传统的观点相反,模块化并不是提高代码生成模型性能的关键因素。论文提出了一个新的指标来量化代码的模块化程度,并通过实验结果分析了 LLM 在代码生成时对模块化代码和非模块化代码没有明显偏好的原因。 + +发布日期:2024-07-16 + +链接:https://arxiv.org/abs/2407.11406 + +机构:Hanyang University + +### Evaluating Long Range Dependency Handling in Code Generation Models using Multi-Step Key Retrieval + +本文通过一系列多步骤的键检索任务,评估了多种代码生成模型处理长距离依赖的能力。研究发现,当函数引用在提示中定义较后的其他函数时,模型性能显著下降。同时,使用滑动窗口注意力机制的模型在处理超出单个窗口大小的引用时也存在困难。论文通过使用调用图信息进行简单的提示修改,将多步骤检索性能提高了三倍。该研究揭示了长上下文性能的不同方面,并为代码补全工具的提示构造策略提供了启示。 + +发布日期:2024-07-23 + +链接:https://arxiv.org/abs/2407.21049 + +机构:Apple + +### RLCoder: Reinforcement Learning for Repository-Level Code Completion + +本文提出了一种名为 RLCoder 的新型强化学习框架,用于提升代码库级别的代码补全效果。RLCoder 通过迭代地评估检索到的代码内容对目标代码的困惑度,来学习检索有用的代码信息,无需依赖人工标注数据。该框架还引入了停止信号机制,让检索器能够自主决定何时检索以及保留哪些候选代码,进一步提升了代码补全的效果。实验表明,RLCoder 在 CrossCodeEval 和 RepoEval 数据集上显著优于现有的方法,取得了 12.2%的 EM 提升。 + +发布日期:2024-07-28 + +链接:https://arxiv.org/abs/2407.19487 + +机构:Sun Yat-sen University + +### When to Stop? Towards Efficient Code Generation in LLMs with Excess Token ### Prevention + +本文提出了 CodeFast,一种针对代码生成任务的代码大模型推理加速方法。通过训练一个轻量级模型 GenGuard 来预测何时停止推理,CodeFast 能有效地识别并避免生成不必要的冗余代码,从而显著提升推理速度,同时保持代码质量。实验表明,CodeFast 在不同代码大模型和代码生成数据集上均能有效地提升推理速度,加速比高达 452%。 + +发布日期:2024-07-29 + +链接:https://arxiv.org/abs/2407.20042 + +机构:Sun Yat-sen University + +## 代码翻译 + +### LASSI: An LLM-based Automated Self-Correcting Pipeline for Translating Parallel Scientific Codes + +本文提出了一种名为 LASSI 的自动化流水线框架,用于解决科学和工程领域大模型训练数据来源的问题。LASSI 利用现有的闭源或开源 LLM,通过引导提示实现自动增强,将代码翻译成不同的并行编程语言,并通过自校正循环来解决编译和执行过程中遇到的错误,从而提高翻译的准确性和效率。论文通过将 OpenMP 和 CUDA 之间的现有 GPU 基准进行双向翻译,验证了 LASSI 的有效性。结果表明,LASSI 在生成可执行的并行代码方面取得了显著效果,80%的 OpenMP 到 CUDA 翻译和 85%的 CUDA 到 OpenMP 翻译产生了预期输出,并且约 78%的 OpenMP 到 CUDA 翻译和 62%的 CUDA 到 OpenMP 翻译的运行时间与原始基准代码相差 10%以内或更快。 + +发布日期:2024-06-30 + +链接:https://arxiv.org/abs/2407.01638 + +机构:University of Illinois Chicago + +### Rectifier: Code Translation with Corrector via LLMs + +本文文提出了一个名为 Rectifier 的通用代码翻译错误修正模型,该模型可以从现有的预训练大语言模型产生的错误中学习,并广泛应用于修正任何 LLM 生成的代码翻译错误。Rectifier 能够有效地修复代码翻译过程中出现的各种错误,包括编译错误、运行时错误、功能错误和非终止执行错误。实验结果表明,Rectifier 在 C++、Java 和 Python 之间进行代码翻译时展现出良好的修复能力,同时还具有跨语言的鲁棒性。 + +发布日期:2024-07-10 + +链接:https://arxiv.org/abs/2407.07472 + +机构:Zhejiang University + +### Enhancing Code Translation in Language Models with Few-Shot Learning via Retrieval-Augmented Generation + +本文提出了一种利用少样本学习和基于检索的技术来提升代码翻译质量的新方法。该方法通过动态检索已有的代码翻译示例来为模型提供上下文信息,从而提高模型对复杂代码翻译任务的理解和处理能力。与传统的微调方法相比,该方法能够利用现有的代码库或本地存储的代码语料库,实现对不同翻译任务的动态适应,无需进行大量重新训练。实验表明,该方法在不同数据集上均优于传统的零样本方法,尤其是在 Fortran 和 CPP 之间的代码翻译中表现出色。 + +发布日期:2024-07-29 + +链接:https://arxiv.org/abs/2407.19619 + +机构:Los Alamos National Laboratory + +## 代码优化 + +### Meta Large Language Model Compiler: Foundation Models of Compiler Optimization + +本文介绍了 Meta Large Language Model Compiler (LLM Compiler),一套专门为代码优化任务设计的预训练模型。LLM Compiler 基于 Code Llama 构建,通过大规模训练和指令微调,增强了对编译器中间表示、汇编语言和优化技术的理解。该模型在 546B LLVM-IR 和汇编代码 token 上进行了训练,并以开放的商业许可证发布,提供 7B 和 13B 两种参数规模。论文还展示了模型在代码大小优化和反汇编任务上的优秀表现。LLM Compiler 的发布为编译器优化领域的学术研究和工业应用提供了一个可扩展、经济高效的基础,填补了大模型在代码和编译器优化领域应用的空白。 + +发布日期:2024-06-27 + +链接:https://arxiv.org/abs/2407.02524 + +机构:Meta AI + +## SQL 生成 + +### Lucy: Think and Reason to Solve Text-to-SQL + +本文针对大模型在处理大型企业数据库查询时面临的挑战提出了一种新的解决方案。研究者分析了 LLM 在处理复杂数据库结构时的困难,并提出了一个创新的框架,结合了 LLM 理解自然语言问题的能力和自动推理技术处理复杂数据库约束的优势。这种方法在零样本文本到 SQL 转换的复杂基准测试中表现优于现有最先进的技术,为提高大模型在大规模企业数据库环境中的应用效果提供了新的思路。 + +发布日期:2024-07-06 + +链接:https://arxiv.org/abs/2407.05153 + +机构:VMware Research + +### ESM+: Modern Insights into Perspective on Text-to-SQL Evaluation in the Age of Large Language Models + +本文改进了评估文本到 SQL 生成任务性能的指标。作者发现现有的评估指标不足以准确衡量基于大语言模型的未经微调的模型性能。因此,他们分析了两个主要指标:测试套件执行准确率(EXE)和精确集合匹配准确率(ESM),并提出了改进的 ESM+ 指标。对 9 个大语言模型的性能比较显示 ESM+ 显著降低了假阳性和假阴性率,提供了更稳定可靠的评估。 + +发布日期:2024-07-10 + +链接:https://arxiv.org/abs/2407.07313 + +机构:Emory University + +### RB-SQL: A Retrieval-based LLM Framework for Text-to-SQL + +本文提出了一个名为 RB-SQL 的新型检索式大语言模型框架,用于上下文提示工程在文本到 SQL 任务中的应用。该框架由三个模块组成,专注于检索简洁的表格和列作为模式,并为上下文学习提供有针对性的示例。与之前仅关注使用专门的 SQL 生成提示来提高大语言模型推理能力的方法不同,RB-SQ L 特别注重数据库的预处理和有价值信息的提取,以实现更高效的提示工程。这种方法能够更好地处理包含大量表格和列的大型数据库。在 BIRD 和 Spider 等公开数据集上的实验结果表明,RB-SQL 在性能上优于几个具有竞争力的基线模型,证明了其在文本到 SQL 任务中的有效性。 + +发布日期:2024-07-11 + +链接:https://arxiv.org/abs/2407.08273 + +机构:Beihang University + +### AI-Assisted SQL Authoring at Industry Scale + +本文提出了一个名为 SqlCompose 的模型,将生成式 AI 应用于数据分析领域,解决 SQL 语法声明性、表格模式和非线性写作等挑战。该研究通过内部 SQL 基准测试和对 Llama 模型的微调,开发出 SqlComposeSA 和 SqlComposeFIM 两个模型,分别针对 SQL 语法和非线性写作问题,并在性能上显著优于基础模型。研究表明,专门针对特定任务的较小模型可以比通用的大型模型表现更出色,并在 Meta 内部获得广泛应用,帮助数据科学家和软件工程师提高 SQL 编写效率。 + +发布日期:2024-07-18 + +链接:https://arxiv.org/abs/2407.13280 + +机构:Meta Platforms Inc. + +### SQLfuse: Enhancing Text-to-SQL Performance through Comprehensive LLM Synergy + +本文介绍了一个 SQLfuse 系统,它将开源大型语言模型与一系列工具相结合,以提高文本到 SQL 转换的准确性和易用性。通过四个模块,包括模式挖掘、模式链接、SQL 生成和 SQL 评判,SQLfuse 不仅可以生成复杂的 SQL 查询,还能通过持续的优化来提高查询质量。该系统在 Spider 排行榜上取得了领先的成绩,并已在蚂蚁集团等公司投入使用,证明了开源大模型在各种商业环境中的实用价值。 + +发布日期:2024-07-19 + +链接:https://arxiv.org/abs/2407.14568 + +机构:Ant Group + +### A Survey on Employing Large Language Models for Text-to-SQL Tasks + +本文综述了大语言模型在文本到 SQL 任务中的应用,涵盖了基准数据集、提示工程、微调方法和未来的研究方向。作者旨在通过分析大模型的最新进展,帮助读者深入了解文本到 SQL 任务的现状和未来发展趋势,并促进该领域进一步发展。 + +发布日期:2024-07-21 + +链接:https://arxiv.org/abs/2407.15186 + +机构:Peking University + +### Towards Automated Data Sciences with Natural Language and SageCopilot: Practices and Lessons Learned + +本文提出了 SageCopilot,一个将自然语言指令转化为可执行 SQL 脚本并自动完成数据科学流程的系统。它将大语言模型、自治代理和语言用户界面相结合,并采用在线和离线两阶段设计,利用诸如思维链和提示调优等技术,实现了更优异的端到端性能,能够生成或执行脚本,并提供可视化的结果。 + +发布日期:2024-07-21 + +链接:https://arxiv.org/abs/2407.21040 + +机构:Baidu Inc. + +### Evaluating LLMs for Text-to-SQL Generation With Complex SQL Workload + +本文通过对比分析 TPC-DS、BIRD 和 Spider 三种文本到 SQL 基准测试,发现 TPC-DS 的查询结构复杂度远高于其他两个基准测试,突显了开发更复杂基准测试以模拟现实场景的必要性。研究者还利用 11 个不同的语言模型根据 TPC-DS 的查询描述生成 SQL 语句,发现目前最先进的生成式 AI 模型在生成精确的决策查询方面表现不足,生成的查询精度不足以满足现实世界应用需求。 + +发布日期:2024-07-28 + +链接:https://arxiv.org/abs/2407.19517 + +机构:Ontario Tech University + +## 漏洞检测与修复 + +### Supporting Cross-language Cross-project Bug Localization Using Pre-trained Language Models + +本文提出了一种新颖的基于预训练语言模型的 bug 定位技术,具有跨项目和跨语言的泛化能力。该方法利用对比学习来增强 bug 报告和源代码的表示,并结合提交信息和代码片段进行排序。为了实现实际部署,论文还引入了知识蒸馏技术来减小模型大小。这种方法通过整合代码片段和提交信息分析,提高了 bug 定位的准确性,并且在未见过的代码库中也能有效识别 bug。此外,论文提出了一种兼容 CPU 的解决方案,以应对计算资源限制。 + +发布日期:2024-07-03 + +链接:https://arxiv.org/abs/2407.02732 + +机构:Oracle Labs + +### ALPINE: An adaptive language-agnostic pruning method for language models for code + +本文提出了一种名为 ALPINE 的自适应编程语言无关的剪枝技术,旨在显著减少代码语言模型的计算开销。ALPINE 作为一个可插拔层,可以与所有基于 Transformer 的模型集成。它通过自适应压缩输入序列,将序列大小减小至原始大小的三分之一,从而显著降低计算负载。研究在两个软件工程任务上进行了实验,结果表明 ALPINE 可以平均减少 50%的浮点运算次数,58.1%的内存占用,并提高 28.1%的吞吐量,同时将二氧化碳排放减少高达 44.85%。值得注意的是,ALPINE 在保持高达 98.1%原始预测性能的同时实现了这些计算资源的减少。这项研究不仅展示了 ALPINE 在提高代码语言模型资源效率和可访问性方面的潜力,同时也揭示了源代码分析语料库中存在的冗余和噪声信息,为软件开发中采用语言模型的可持续性做出了贡献。 + +发布日期:2024-07-04 + +链接:https://arxiv.org/abs/2407.04147 + +机构:Dalhouise University + +### Tactics, Techniques, and Procedures (TTPs) in Interpreted Malware: A Zero-Shot Generation with Large Language Models + +本文提出了一种名为 GENTTP 的零样本方法,用于从解释型恶意软件包中提取攻击战术、技术和程序(TTP)。该方法利用大语言模型自动生成 TTP,输入为恶意软件包,输出为欺骗性战术和执行战术。研究者通过两个数据集验证了 GENTTP 的有效性,并基于 3700 多个 PyPI 恶意软件的 TTP 构建了一个基于大模型的聊天机器人。此外,论文还对恶意软件的 TTP 进行了大规模的定量分析,发现许多开源软件恶意包共享相对稳定的 TTP,以及 TTP 反映了基于恶意软件攻击的特征,并且与攻击者的意图相关联。这项研究为解释型恶意软件分析引入了 MITRE ATT&CK 框架,为理解和防御软件供应链攻击提供了新的视角和工具。 + +发布日期:2024-07-11 + +链接:https://arxiv.org/abs/2407.08532 + +机构:Beijing JiaoTong University + +### Towards Practical and Useful Automated Program Repair for Debugging + +本文文提出了一个名为 PracAPR 的交互式程序修复系统,旨在提高程序修复技术的实用性、有效性和可利用性,并将其融入日常调试过程。PracAPR 不同于传统的程序修复方法,不需要测试套件或程序重新执行,而是通过与开发者交互,获取问题描述,利用测试无关的流分析技术定位错误,并结合大语言模型和策略驱动的全局修复方法生成补丁。此外,PracAPR 还利用模拟轨迹比较来进行补丁验证,进一步提高了修复效率。该系统旨在为开发者提供有效的修复建议,帮助他们更加便捷高效地进行调试。 + +发布日期:2024-07-12 + +链接:https://arxiv.org/abs/2407.08958 + +机构:Wuhan University + +### SCoPE: Evaluating LLMs for Software Vulnerability Detection + +本文研究了 CVEFixes 数据集,特别是 C/C++ 子集。论文提出了一种名为 SCoPE 的源代码处理引擎,可以用来减少 C/C++ 函数的大小并进行规范化,从而对 CVEFixes 数据集进行精炼。论文利用精炼后的数据集对三个预训练的语言模型进行微调,评估了 SCoPE 对软件漏洞检测的有效性。结果表明,SCoPE 成功地识别出评估子集中 905 个重复项,语言模型的结果也证实了其在软件漏洞检测方面的适用性,最佳模型的 F1 分数达到 53%。 + +发布日期:2024-07-19 + +链接:https://arxiv.org/abs/2407.14372 + +机构:Porto School of Engineering + +Comparison of Static Application Security Testing Tools and Large Language Models for Repo-level Vulnerability Detection +本文通过比较 15 种 SAST 工具和 12 种大语言模型,对软件漏洞检测领域进行了深入研究。研究发现,SAST 工具虽然在检测率上表现不佳,但误报率较低;而大型语言模型则能够检测出 90% 到 100% 的漏洞,但误报率很高。论文还尝试将 SAST 工具和大语言模型结合,以降低各自的缺点。这项研究不仅分析了当前软件漏洞检测领域的进展,也为未来方向提供了新的思路。 +发布日期:2024-07-23 +链接:https://arxiv.org/abs/2407.16235 +机构:Singapore Management University + +### Code Structure-Aware through Line-level Semantic Learning for Code Vulnerability Detection + +本文提出了一种新的代码漏洞检测方法,该方法特别注重保留和利用代码的结构信息。研究者开发了一种改进的代码文本处理流程,保留了结构元素如换行符和空格,以便在建模过程中保持代码的行级结构信息和语义信息。同时,他们提出了一种新的网络架构——代码结构感知网络(CSLS),该网络通过行级语义学习,整合了全局漏洞感知、行结构感知和敏感行感知三个关键组件。实验结果表明,这种新的代码预处理流程显著提高了现有基线模型的性能,而提出的网络架构在漏洞检测方面的准确性也超越了新建立的基准。这项研究强调了结构信息在提高代码漏洞检测模型效能方面的重要性。 + +发布日期:2024-07-26 + +链接:https://arxiv.org/abs/2407.18877 + +机构:Peking University + +### A Study of Using Multimodal LLMs for Non-Crash Functional Bug Detection in Android Apps + +本文探索了利用大语言模型作为测试先知来检测安卓应用程序中非崩溃功能性(NCF)bug 的可能性。研究者对 71 个有详细记录的 NCF bug 进行了全面的实证研究,结果表明大模型在 NCF bug 检测方面的表现优于现有工具,达到了 49%的检测率。此外,研究团队利用大模型作为测试先知,在 64 个安卓应用程序中成功检测到 24 个此前未知的 NCF bug,其中 4 个已得到确认或修复。尽管研究也发现了大模型在性能下降、内在随机性和误报方面的一些局限性,但总体上突显了大模型在安卓 NCF bug 检测中的潜力,为移动应用 GUI 测试领域提供了新的视角和方法,有望改进传统 GUI 测试技术在 NCF bug 检测方面的不足。 + +发布日期:2024-07-26 + +链接:https://arxiv.org/abs/2407.19053 + +机构:University of Cincinnati + +### EaTVul: ChatGPT-based Evasion Attack Against Software Vulnerability Detection + +本文揭示了深度学习模型在软件漏洞检测中容易受到对抗攻击的弱点,并提出了一种名为 EaTVul 的攻击方法。EaTVul 通过识别重要样本和特征,利用 ChatGPT 生成对抗样本,并采用模糊遗传算法筛选种子数据,最终成功率高达 83%,甚至在样本大小为 4 时达到 100%。研究结果强调了在软件漏洞检测中防御对抗攻击的重要性。 + +发布日期:2024-07-27 + +链接:https://arxiv.org/abs/2407.19216 + +机构:CSIRO’s Data61 + +### ThinkRepair: Self-Directed Automated Program Repair + +本文提出了一种名为 ThinkRepair 的基于大语言模型的自导式程序修复方法,该方法通过两个阶段来解决程序修复问题:收集阶段和修复阶段。收集阶段通过提示工程自动收集各种思维链,形成修复前的知识库。修复阶段则通过选择少量样本进行小样本学习,并与大模型进行自动交互,并根据测试结果进行反馈,来完成程序修复。实验结果表明,ThinkRepair 在修复程序错误方面表现优异,在 Defects4J 和 QuixBugs 数据集上均取得了显著的性能提升,修复了更多的错误,并显著超越了现有的最先进的程序修复方法。 + +发布日期:2024-07-30 + +链接:https://arxiv.org/abs/2407.20898 + +机构:Zhejiang University + +### Automated Software Vulnerability Static Code Analysis Using Generative Pre-Trained Transformer Models + +本文评估了开源 GPT 模型在识别 C 和 C++ 代码中脆弱代码语法方面的有效性,发现这些模型在完全自动化漏洞扫描方面效果不佳,因为假阳性和假阴性率太高。然而,这些模型在一些测试案例中表现出令人惊讶的自动化漏洞检测能力,尤其是在某些情况下超越了随机抽样,并能识别出脆弱代码的具体行,尽管成功率较低。最有效的 GPT 模型是 Llama-2-70b-chat,在特定测试案例中实现了完美的召回率和精确率,成功识别了脆弱代码行和对应的 CWE 号码。 + +发布日期:2024-07-31 + +链接:https://arxiv.org/abs/2408.00197 + +机构:Sandia National Laboratories + +## 克隆检测 + +### Assessing the Code Clone Detection Capability of Large Language Models + +本文比较了 GPT-3.5 和 GPT-4 在代码克隆检测任务上的表现。结果表明,GPT-4 在所有克隆类型上都优于 GPT-3.5,并且它们的准确率与代码相似度呈正相关。尽管 GPT 模型在识别 LLM 生成的代码克隆方面表现更好,但总体准确率仍需改进。研究强调了持续提升 LLM 能力,特别是识别代码克隆并降低其对自身生成代码克隆的敏感性的重要性,因为随着软件工程师越来越多地使用 LLM 支持的代码生成和重构工具,这一问题可能会变得更加突出。 + +发布日期:2024-07-02 + +链接:https://arxiv.org/abs/2407.02402 + +机构:University of Galway + +## 代码表征 + +### CodeCSE: A Simple Multilingual Model for Code and Comment Sentence Embeddings + +本文提出了一种名为 CodeCSE 的对比学习模型,用于在同一空间中学习代码函数及其描述的嵌入表示,填补了现有文献中缺乏现成的函数嵌入模型的空白。研究人员通过代码搜索任务对 CodeCSE 进行了评估,结果表明 CodeCSE 的多语言零样本方法在效果上可以与针对特定语言微调的 GraphCodeBERT 模型相媲美。这一创新为代码搜索、代码克隆检测等代码相关任务提供了新的解决方案,有望推动相关领域的研究和应用发展。 + +发布日期:2024-07-08 + +链接:https://arxiv.org/abs/2407.06360 + +机构:Eastern Michigan University + +## 软件测试 + +### Large-scale, Independent and Comprehensive study of the power of LLMs for test case generation + +本文文全面评估了大语言模型在单元测试生成方面的有效性,通过对四个 LLM 和五种提示工程技术进行研究,分析了 690 个 Java 类生成的 216,300 个测试用例。结果表明,LLM 在测试生成方面展现出潜力,但测试正确性仍需提升。该研究比较了 LLM 与传统方法的优缺点,为 LLM 在软件工程领域应用的进一步研究提供了方向。 + +发布日期:2024-06-28 + +链接:https://arxiv.org/abs/2407.00225 + +机构:University of Luxembourg + +### Augmenting LLMs to Repair Obsolete Test Cases with Static Collector and Neural Reranker + +本文提出了一种名为 SynBCIATR 的新方法,用于自动修复由代码变更导致的过时测试用例。该方法设计了一种精确而简洁的测试修复导向上下文(TROCtx)构建方法,通过静态分析技术收集与变更相关的代码信息,并使用重排序查询来识别最相关的上下文。这种方法不仅提高了修复的准确性,还显著减少了大语言模型产生的幻觉。实验结果表明,SynBCIATR 在文本匹配和意图匹配指标上都优于基准方法,并将幻觉减少了 57.1%。这项研究为解决软件演化过程中测试代码与生产代码不同步的问题提供了一个有效的解决方案。 + +发布日期:2024-07-04 + +链接:https://arxiv.org/abs/2407.03625 + +机构:Chinese Academy of Sciences + +### Harnessing the Power of LLMs: Automating Unit Test Generation for High-Performance Computing + +本文提出了一种针对并行高性能计算软件(特别是科学应用)的自动化单元测试生成方法。该方法利用了大语言模型的代码生成能力,并针对这类软件的复杂逻辑和并行处理特点进行了优化。实验结果表明,大模型能够生成大部分正确且全面的单元测试,尽管仍然存在一些局限性,如重复断言和空测试用例。 + +发布日期:2024-07-06 + +链接:https://arxiv.org/abs/2407.05202 + +机构:University Of Houston + +### Beyond Code Generation: Assessing Code LLM Maturity with Postconditions + +本文提出了一种基于后置条件生成问题的代码大模型成熟度模型,以更全面地评估代码大模型的能力。该模型通过让 LLM 理解代码语义和自然语言,并生成明确的后置条件来测试其能力。研究者还利用该模型扩展了 EvalPlus 数据集,构建了一个后置条件测试基准,并评估了多个开源模型,揭示了提高代码大模型性能所需的改进方向。 + +发布日期:2024-07-19 + +链接:https://arxiv.org/abs/2407.14118 + +机构:Nanjing University + +### SelfPiCo: Self-Guided Partial Code Execution with LLMs + +本文提出了一个名为 SelfPiCo 的新框架,利用大型语言模型 Code Llama,通过交互式循环动态指导部分代码执行。该框架利用少量样本的上下文学习和思维链推理,结合对 Code Llama 模型的微调来提取人类知识和逻辑推理。SelfPiCo 能够从代码执行结果中持续学习并逐步优化预测结果,在开源代码和 Stack Overflow 片段中分别成功执行了 72.7%和 83.3%的代码行,并在实际应用中成功检测到 18 个和 33 个运行时类型错误,展现了其在软件调试和测试中的潜力和实际应用价值。 + +发布日期:2024-07-24 + +链接:https://arxiv.org/abs/2407.16974 + +机构:Zhejiang University + +### Evaluating Large Language Models in Detecting Test Smells + +本文研究了大语言模型在自动检测测试代码异味方面的潜力,通过评估 ChatGPT-4、Mistral Large 和 Gemini Advanced 等模型,发现这些模型在识别多种类型的测试代码异味方面表现出一定的潜力,尤其 ChatGPT-4 的识别能力最为突出,这表明大模型有可能成为识别测试代码异味的有力工具。 + +发布日期:2024-07-27 + +链接:https://arxiv.org/abs/2407.19261 + +机构:Federal University of Campina Grande + +### An LLM-based Readability Measurement for Unit Tests' Context-aware Inputs + +本文提出了一个名为 C3 的工具,用于衡量自动化测试的输入可读性。与现有方法不同,C3 利用大语言模型从源代码中提取原始类型参数的可读性上下文,并检查测试输入是否与这些上下文一致。论文还开发了 EvoSuiteC3,利用 C3 提取的上下文来帮助 EvoSuite 生成更可读的测试输入。实验结果表明,C3 在识别可读性上下文方面表现良好,并且 EvoSuiteC3 生成的字符串类型输入的可读性明显优于传统工具,表明 C3 可以有效提高自动化测试的可读性。 + +发布日期:2024-07-31 + +链接:https://arxiv.org/abs/2407.21369 + +机构:ShanghaiTech University + +### Chat-like Asserts Prediction with the Support of Large Language Model + +本文提出了一种名为 Chat-like execution-based Asserts Prediction(CLAP)的新方法,利用大语言模型来生成 Python 项目的有意义的断言语句。CLAP 通过精心设计的提示,结合角色扮演、思维链和单次学习技术,并与语言模型和 Python 解释器进行多次交互,从而生成有效的断言语句。论文还构建了一个从 GitHub 提取的 Python 断言语句数据集。实验结果表明,CLAP 在单断言语句生成方面达到了 64.7%的准确率,在整体断言语句生成方面达到了 62%的准确率,优于现有方法。此外,论文还分析了生成错误的断言语句,并探讨了 CLAP 在自动化 Python 单元测试生成方面的潜在帮助。研究结果表明,CLAP 有潜力通过更实用的应用场景为软件工程社区提供帮助。 + +发布日期:2024-07-31 + +链接:https://arxiv.org/abs/2407.21429 + +机构:Monash University + +## 代码总结 + +### ESALE: Enhancing Code-Summary Alignment Learning for Source Code Summarization + +本文文提出了一种基于摘要导向任务的新方法来改进代码摘要。它利用多任务学习范式,在三个摘要导向任务上训练编码器,以增强其学习代码-摘要对齐的能力,包括单向语言建模、掩码语言建模和动作词预测。与主要在代码片段中预测掩码标记的预训练模型不同,该方法设计了单向语言建模和掩码语言建模来预测摘要中的掩码词,并引入领域特定的动作词预测任务来增强编码器学习动作词和代码片段之间对齐的能力。实验表明,该方法表现显著优于基线方法。 + +发布日期:2024-07-01 + +链接:https://arxiv.org/abs/2407.01646 + +机构:Nanjing University, Nanjing + +### Source Code Summarization in the Era of Large Language Models + +本文对大语言模型在代码摘要任务中的应用进行了系统性研究,涵盖了 LLM 代码摘要流程的多个方面。研究发现,GPT-4 的评价方法与人工评价结果最一致,并分析了五种提示技术的有效性,发现复杂提示并不一定优于简单提示。论文还研究了模型参数对代码摘要质量的影响,发现影响因模型和编程语言而异,但总体影响相似。此外,研究还分析了 LLM 在不同编程语言中的表现,发现 LLM 在逻辑编程语言方面表现不如其他语言类型。最后,论文意外发现,参数为 7B 的 CodeLlama-Instruct 在生成描述代码实现细节和断言代码属性的摘要方面,甚至能超越先进的 GPT-4。 + +发布日期:2024-07-09 + +链接:https://arxiv.org/abs/2407.07959 + +机构:Nanjing University + +## 代码审核 + +### A GPT-based Code Review System for Programming Language Learning + +本文提出了一个基于 GPT-4 的系统,旨在为编程教育提供学习者友好的代码审查和最小化 AI 辅助作弊的风险。研究者通过收集在线评判系统的数据集来优化系统提示,并设计了特定的系统流程和功能来防止作弊。经过软件教育专家的可用性测试和改进后,该系统在代码正确性检查、响应时间、API 调用成本和代码审查质量等方面表现出色。专家反馈认为该工具适合用于中小学编程教学,预计将成为编程语言学习中的有效工具。这项研究为解决编程教育中大班级规模下及时个性化反馈的需求提供了一种创新方法。 + +发布日期:2024-06-21 + +链接:https://arxiv.org/abs/2407.04722 + +机构:University of Hanyang + +### LLM Critics Help Catch LLM Bugs + +本文提出了一种通过训练“评论家”模型来提高人类对模型输出评估能力的方法,以此克服人类反馈强化学习(RLHF)的局限性。这些评论家模型是使用 RLHF 训练的语言模型,能够撰写自然语言反馈,突出代码中存在的问题。实验表明,在包含真实世界代码中常见的 LLM 错误的代码上,模型生成的评论在 63%的情况下优于人工评论,并且人类评估发现模型比付费代码审核人员发现的错误更多。此外,研究还证实了经过微调的 LLM 评论家可以成功识别 ChatGPT 训练数据中被评为“完美”的数百个错误,尽管大多数这些任务是非代码任务,因此对于评论家模型来说是分布外数据。虽然评论家本身也存在局限性,例如可能出现幻觉错误,导致人类做出原本可以避免的错误,但人机合作的评论家和审核人员团队发现的错误数量与 LLM 评论家相似,同时幻觉错误数量也比单独使用 LLM 更少。 + +发布日期:2024-06-28 + +链接:https://arxiv.org/abs/2407.00215 + +机构:OpenAI + +### Exploring the Capabilities of LLMs for Code Change Related Tasks + +本文研究了大语言模型在代码变更相关任务中的表现,通过实验证明了大语言模型在代码审查、提交消息生成和实时注释更新等任务上取得了一定进展,但其性能受样本数量和模型大小的影响较大。论文发现,在代码变更仅涉及注释修改时,大型语言模型的表现优于小型预训练模型,但在其他代码变更上则表现相当。论文建议未来的研究应该更关注指导大语言模型学习代码变更相关知识,而非仅仅关注注释方面的学习。 + +发布日期:2024-07-03 + +链接:https://arxiv.org/abs/2407.02824 + +机构:Zhejiang University + +### Evaluating Language Models for Generating and Judging Programming Feedback + +本文评估了开源大模型在编程教育领域的应用效果,特别是在生成编程作业反馈和评判反馈质量方面。研究发现,最先进的开源模型(如 Llama3)在这些任务上的表现几乎可以与专有模型(如 GPT-4)相媲美。此外,研究还证明了较小规模的语言模型在这些任务中也能表现出较高的效率。这项研究为教育工作者和实践者提供了宝贵的信息,表明有多种可免费获取的语言模型可用于编程教育,从而扩大了大语言模型在计算机教育研究中的应用范围和可访问性。 + +发布日期:2024-07-05 + +链接:https://arxiv.org/abs/2407.04873 + +机构:Aalto University + +### 用户界面设计 + +Vision-driven Automated Mobile GUI Testing via Multimodal Large Language Model +本文提出了一种基于多模态大模型的视觉驱动自动 GUI 测试方法 VisionDroid,用于检测移动应用中的非崩溃功能性错误。VisionDroid 通过提取 GUI 文本信息并与截图对齐,形成视觉提示,使模型能够理解 GUI 上下文。随后,它利用模型进行功能导向的页面探索,并通过对探索历史进行逻辑分割,使用模型识别潜在的错误。实验表明,VisionDroid 在检测非崩溃错误方面表现出色,并成功识别了 Google Play 上 29 个新的错误,其中 19 个已被确认并修复。 + +发布日期:2024-07-03 + +链接:https://arxiv.org/abs/2407.03037 + +机构:Chinese Academy of Sciences + +### AUITestAgent: Automatic Requirements Oriented GUI Function Testing + +本文提出了一个全新的自然语言驱动的移动应用 GUI 测试工具 AUITestAgent,它能够自动完成 GUI 交互和功能验证的全过程。通过动态组织代理,AUITestAgent 可以从自然语言的测试需求中提取 GUI 交互命令,并利用多维数据提取策略从交互轨迹中获取验证所需的数据。实验结果表明,AUITestAgent 在生成 GUI 交互质量和验证准确率方面优于现有工具,并在美团的实际应用中成功检测出 4 个新的功能性错误,证明了其实用性和可靠性。 + +发布日期:2024-07-12 + +链接:https://arxiv.org/abs/2407.09018 + +机构:Fudan University + +## ICML 2024 专辑 + +### AST-T5: Structure-Aware Pretraining for Code Generation and Understanding + +本文提出了 AST-T5,一种新的预训练范式,利用抽象语法树(AST)来增强代码生成、转译和理解。AST-T5 通过动态规划保留代码结构,并使用 AST-Aware Span Corruption 目标来训练模型重建各种代码结构,从而在各种代码相关任务中,尤其是代码到代码的任务中,显著优于其他同等规模的语言模型。 + +链接:https://arxiv.org/abs/2401.03003 + +机构:University of California at Berkeley + +### Chain of Code: Reasoning with a Language Model-Augmented Code Emulator + +本文提出了一种名为“代码链”(Chain of Code)的新方法,通过将语义推理任务分解成代码的形式并鼓励语言模型模拟代码解释器,显著提升了语言模型在逻辑、算术和语义等多个推理任务上的表现。该方法不仅有效地克服了语言模型在代码编写和执行方面的局限性,还将语言模型的推理能力扩展到更广泛的领域,使它们能够更有效地“用代码思考”并解决复杂问题。 + +链接:https://arxiv.org/abs/2312.04474 + +机构:Stanford University + +### NExT: Teaching Large Language Models to Reason about Code Execution + +本文提出了 NExT,通过让大语言模型学习检查程序执行轨迹(变量状态)并利用思维链推理来理解程序运行时行为,提升模型对程序执行的理解能力。NExT 使用自训练的方式,无需大量人工标注就能够生成合成训练集,让模型学习到能解决程序修复等任务的执行感知推理。实验表明,NExT 显著提升了 PaLM 2 在程序修复任务上的修复率,并且生成的推理质量得到了自动化指标和人工评估的验证。此外,该模型还能在测试时没有程序轨迹的情况下进行泛化。 + +链接:https://arxiv.org/abs/2404.14662 + +机构:Google DeepMind + +### Repoformer: Selective Retrieval for Repository-Level Code Completion + +本文提出了一种选择性 RAG 框架,旨在提升代码补全任务的效率与鲁棒性,尤其在仓库级别的代码补全上。针对现有方法中普遍存在的检索问题,如效率低下和检索结果对代码大模型帮助有限甚至有害的情况,该研究设计了一种自监督学习策略,使代码大模型能够精确评估检索是否能提升其输出质量,并稳健地利用潜在的噪声检索结果。通过将大模型同时作为选择性 RAG 策略和生成模型,该框架在多个基准测试上(包括 RepoEval、CrossCodeEval 以及新引入的长形式代码补全基准 CrossCodeLongEval)均实现了最先进的性能。此外,选择性检索在实际应用中带来了高达 70%的推理速度提升,且不影响性能表现。实验进一步证明了该框架的灵活性,可兼容不同的生成模型、检索器及编程语言,标志着向更准确、高效的仓库级代码补全迈出了重要一步。 + +链接:https://arxiv.org/abs/2403.10059 + +机构:AWS AI Labs + +### CRUXEval: A Benchmark for Code Reasoning, Understanding and Execution + +本文提出了 CRUXEval,一个包含 800 个 Python 函数的基准测试,每个函数都有输入输出对,用于评估代码模型的推理和执行能力。研究结果表明,许多在 HumanEval 上取得高分的模型在 CRUXEval 上表现不佳,而简单的 CoT 和微调方案可以提高性能,但仍远远不足以解决问题。同时,论文也揭示了开源和闭源模型之间的性能差距,指出了代码大模型需要改进的方向。 + +链接:https://arxiv.org/abs/2401.03065 + +机构:Meta AI + +### Executable Code Actions Elicit Better LLM Agents + +本文提出了一种名为 CodeAct 的框架,利用可执行的 Python 代码来统一大语言模型代理的动作空间,从而克服了现有方法中动作空间受限和灵活性不足的缺陷。CodeAct 通过与 Python 解释器集成,能够执行代码动作、根据新观察动态修改先前动作或生成新动作,并在多轮交互中实现灵活的行动策略。论文通过在 API-Bank 和新数据集上的广泛分析表明,CodeAct 在 17 种 LLM 上均取得了优于现有方法的性能(成功率提升高达 20%)。为了促进 LLM 代理的发展,研究人员还构建了一个基于 Llama2 和 Mistral 模型专门针对复杂任务(如模型训练)进行微调的开源 LLM 代理 CodeActAgent,它能够利用现有库自主地执行任务并进行自我调试。 + +链接:https://arxiv.org/abs/2402.01030 + +机构:University of Illinois Urbana-Champaign + +### Do Large Code Models Understand Programming Concepts? A Black-box Approach + +本文研究了大语言模型在代码生成方面的理解能力,通过设计一个名为“反事实分析编程概念谓词”(CACP)的测试框架,对十个流行的大型代码模型进行评估。研究发现,现有的模型对于数据流和控制流等编程概念的理解仍然不足,表明大语言模型在代码生成方面的成功并不意味着它们真正理解了程序的逻辑结构。 + +链接:https://arxiv.org/abs/2402.05980 + +机构:University of Wisconsin-Madison + +### Magicoder: Empowering Code Generation with OSS-Instruct + +本文提出了一种名为 Magicoder 的开源代码大模型,通过使用 OSS-Instruct 技术,利用开源代码片段生成多样化的指令数据,显著缩小了与其他顶尖代码模型的差距。OSS-Instruct 方法能够生成更逼真、可控的合成数据,并与其他数据生成方法相辅相成,最终打造出更强大的 MagicoderS 模型。在各种代码基准测试中,Magicoder 和 MagicoderS 均显著优于同等规模或更大规模的现有代码模型,甚至在 HumanEval+ 测试中超越了 ChatGPT。 + +链接:https://arxiv.org/abs/2312.02120 + +机构:University of Illinois at Urbana-Champaign + +### Self-Infilling Code Generation + +本文提出了一个名为“自填充代码生成”的通用框架,将填充操作融入自回归解码。该框架利用了最近的填充能力代码语言模型可以自我填充的特性:填充操作通常需要预先定义的前缀和后缀来填充中间部分,而自填充则能够顺序地生成前后文和填充内容。利用这一特性,论文引入了中断和循环机制,将传统的单调解码过程转变为非单调过程。中断机制允许推迟特定代码的生成,直到确定最终的后缀,增强了对输出的控制。循环机制则利用自填充和从左到右解码的互补性,循环迭代地更新和同步每一部分的生成。实验表明,这种解码过程在多个代码生成基准测试中有效地提高了代码的规范性和质量。 + +链接:https://arxiv.org/abs/2311.17972 + +机构:ByteDance + +### Instruction Tuning for Secure Code Generation + +文提出了一种名为 SafeCoder 的安全代码生成方法,旨在解决当前指令微调模型在代码生成方面存在安全漏洞的问题。SafeCoder 通过使用自动化的管道收集高质量的安全相关数据进行安全中心化的微调,并将安全微调与标准的指令微调相结合,以实现安全性与效用协同优化。研究表明,SafeCoder 能显著提升代码安全性(约 30%),同时保持代码生成能力。 + +链接:https://arxiv.org/abs/2402.09497 + +机构:ETH Zurich + +### Unsupervised Evaluation of Code LLMs with Round-Trip Correctness + +本文提出了一个名为“往返正确性(RTC)”的评估方法,用于评估代码大模型。与传统的依赖于人工标注的小型基准数据集不同,RTC 允许在更广泛的真实世界软件领域中评估模型,而无需昂贵的人工标注。RTC 通过将模型生成的代码描述转换为代码,然后比较生成的代码与原始代码的语义等效性来评估模型性能。该研究证明了 RTC 在代码合成和编辑任务中的有效性,并发现 RTC 与现有狭窄领域代码合成基准上的模型性能高度相关,同时能够扩展到更广泛的领域和任务,突破了先前受限于人工标注的局限性。 + +链接:https://arxiv.org/abs/2402.08699 + +机构:Google DeepMind + +### ReGAL: Refactoring Programs to Discover Generalizable Abstractions + +本文提出了一个名为“ReGAL”的无梯度方法,通过代码重构学习可复用的函数库,提升大语言模型在程序合成任务中的泛化能力。ReGAL 从少量现有程序中学习,通过执行验证和优化抽象函数,最终生成能够在多个领域预测程序的共享函数库。实验表明,在不同程序合成任务中,使用 ReGAL 学习到的函数库可以显著提高大模型的准确性,例如在 LOGO 图形生成、日期推理和 TextCraft 等任务中都取得了明显提升。 + +链接:https://arxiv.org/abs/2401.16467 + +机构:UNC Chapel Hill + +## 联系我们 + +我们团队的多项工作,包括综述、模型、数据集,都在陆续开源中。如果您喜欢我们的工作,欢迎试用、指正错误和贡献代码,也可以给我们的项目增加 Star、引用我们的论文以支持我们。 + +- 代码大模型综述(覆盖 900 篇论文):https://arxiv.org/abs/2311.07989 +- GitHub 项目:https://github.com/codefuse-ai/Awesome-Code-LLM +- HuggingFace 主页:https://huggingface.co/codefuse-ai +- 魔搭社区主页:https://modelscope.cn/organization/codefuse-ai diff --git a/docs/blogDetails/20240807.en-US.md b/docs/blogDetails/20240807.en-US.md new file mode 100644 index 0000000..db665fb --- /dev/null +++ b/docs/blogDetails/20240807.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-08-07' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240807.zh-CN.md b/docs/blogDetails/20240807.zh-CN.md new file mode 100644 index 0000000..9f3eff7 --- /dev/null +++ b/docs/blogDetails/20240807.zh-CN.md @@ -0,0 +1,143 @@ +--- +title: '蚂蚁CodeFuse代码大模型技术解析:基于全仓库上下文的代码补全' +time: '2024-08-07' +toc: content +--- + +## 背景 + +2023 年 CodeFuse 完成了百亿级别的代码大模型从 0 到 1 的预训练,配合指令微调、量化部署等一系列配套技术,成功将 AI 大模型能力应用到多个下游研发场景,助力生产提效。在众多下游产品中,CodeFuse 代码补全插件直接触及研发过程中最核心的编码场景,因此对开发效率的影响最显著。目前,CodeFuse 代码补全插件是 CodeFuse 系列产品中用户数量最多、留存率最大,调用 AI 能力最多的产品。 + +目前,大部分代码语言模型在预训练阶段以文件为基本单位,随机选择代码文件拼接固定长度后组成训练样本。常见的代码评测数据集(HumanevalX、MBPP)也以单文件为主:基于待补全位置(Task Hole)的前缀(Prefix)使用 Left-to-Right 方式推理,或者同时使用前缀(Prefix)和后缀(Suffix)采用 FIM(Fill In the Middle)方式推理。然而,实际的开发场景通常以代码仓库(Repository)为基本单位。在目前常见的业务设计模式下,大量与当前编辑文件存在依赖关系的内容散落在仓库内的的其他文件中,模型仅使用当前编辑文件内容预测会存在上下文不足的问题,从而导致补全结果存在幻觉、不准确等问题。目前,比较常见的解决思路是使用 RAG 的方法抽取一定代码片段作为上下文指导模型推理,但此方案同时会带来"上下文-延迟困境"的挑战。即丰富的上下文带来的效果提升和更长的提示内容增加的推理时间之间的权衡,这种权衡在 IDE 场景中可能会影响用户的实际体验。 + +为了解决上述问题,本文提出一种仓库级别代码补全框架 RepoFuse:通过对实际编程的总结抽象,我们的方法从仓库中抽取了两种关键的跨文件上下文:基于代码相似性分析的相似上下文(Similar Context),用于识别功能相近的代码段;以及语义上下文(Semantic Context),提供类别分类和 API 交互的语义理解。然而,如此大量的信息可能导致模型的输入过于冗长,影响推理生成的效率。为此,RepoFuse 采用了一种基于相关性引导的上下文选择策略(Relevance-Guided Context Selection)指导模型 Prompt 的构建。这种技术有选择地筛选出与当前任务最相关的上下文,将上下文精炼为简洁的 Prompt,既能适应有限的上下文长度,又能确保高完成度的准确性。本文使用常见的开源代码模型在 CrossCodeEval 的 Java 和 Python 数据集上进行了实验,结果表明在完全匹配指标(Exact Match)上 RepoFuse 有 3.01 到 3.97 的提升(与当前主流开源工具的 SOAT 对比)。 + +## 相关工作 + +目前业界的相关工作主要沿用 RAG 的思路,代表工作如下表所示。具体来说,每一个方法需要回答以下三个问题:搜什么、怎么搜以及怎么用: + +| 名称 | 搜什么 | 怎么搜 | 怎么用 | +| ------------- | ------------------ | --------------------- | ------------------ | +| RLPG | 启发式搜索规则 | 判别模型选择搜索规则 | Prompt Engineering | +| RepoFusion | 同 RLPG | 同 RLPG | Fusion-In-Decoder | +| ReACC | 外部知识库相似片段 | 相似度搜索 | Prompt Engineering | +| RepoCoder | 仓库内相似片段 | 生成 + 相似度迭代搜索 | Prompt Engineering | +| CrossCodeEval | 仓库内相似片段 | 相似度搜索 | Prompt Engineering | +| RepoBench | 语义依赖信息 | AST | Prompt Engineering | +| Cocomic | 语义依赖信息 | Dependency Graph | Fusion-In-Decoder | + +RLPG 首先定义了 63 种启发式搜索规则,每一种搜索规则由 Prompt Source 和 Prompt Context Type 两部分组成。在补全时,使用一个分类模型判别最适合当前场景的搜索规则,为模型提供 Example Specific 的 Context。 + +RepoFusion 是 RLPG 的延续工作,差异点在 Context 信息的使用方式上。RepoFusion 采用了 Fusion-In-Decoder 的模型结构使用 Context 信息,具体如图 1 所示:将不同的 Context 信息并行使用 Encoder 模型编码成 Embedding 表示,再将这些 Embedding 信息拼接起来使用 DeCoder 模型进行推理预测。相比目前常见的 Decoder-Only 的模型结构,Fusion-in-Decoder 将 Context 信息压缩成 Embedding 后再处理,理论上可以使用更多 Context 信息,但使用此结构需要额外准备数据集进行训练。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Fpm6TpwUeQsAAAAAAAAAAAAADlHYAQ/original) + +ReACC 使用待补全的代码在离线收集好的代码数据库中进行相似度检索,并利用相似片段辅助模型补全。RepoCoder 提出了迭代式的“检索-生成”框架:先进行第一次检索,利用 LLM 生成一次补全结果。再使用生成后的结果进行二次检索并指导模型生成,反复循环直至迭代结束。结果表明迭代式搜索策略比直接搜索在效果上更好,但迭代搜索必然会带来推理耗时翻倍,难以直接用于真实的补全场景。此外,RepoCoder 还提出了仓库级别代码补全数据集 RepoEval,支持行、片段、方法级别的补全任务。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*jMczTrxc4G8AAAAAAAAAAAAADlHYAQ/original) + +CrossCodeEval 和 RepoBench 分别提出了仓库级别代码补全的 BenchMark,区别在于 CrossCodeEval 使用仓库内相似代码片段辅助模型补全,而 RepoBench 则使用 AST 分析出当前文件的 Import 内容,并将其视作补充上下文。 + +CoComic 使用程序分析领域的 Dependency Graph 搜索,图中的节点为仓库中不同粒度程序片段的抽象表示(File、Class、Method、Global Variable),边则是这些节点之间的程序依赖关系。在补全时,首先定位到待补全片段所在的节点,然后将其邻居节点视作补充上下文。由于节点数量众多,无法全量放置到 Prompt 中,CoComic 也采用了类似 Fusion-in-Decoder 的方法进行训练。 + +## 方法 + +我们的思想源于对软件开发实践的观察:当程序员开始向一个仓库贡献代码时,必须展现两项基本技能。首先,程序员必须熟练掌握仓库的架构,包括跨文件的模块、库和 API。对这些仓库级别信息的全面理解至关重要,因为它允许他们在相应的开发环境中准确编写代码,避免任何误解或错误——这在编程上下文中常被称为“幻觉”。其次,程序员应该逐渐熟悉仓库。通过借鉴仓库内类似模块的灵感,他们可以在为特定任务编写代码时模仿之前的设计和实现。 + +为了与人类编程的逻辑过程保持一致,我们提出了一种仓库级别的代码方案 RepoFuse,利用仓库内其他文件的信息提高代码补全准确率。具体来说,我们引入两类上下文信息:Semantic Context 和 Similar Context,它们分别指示当前补全环境中可用的程序依赖语义信息和仓库中与之相关的相似代码片段。如图 3 所示,模型补全左上角的代码片段时,在 Semantic Context(红色)和 Similar Context(绿色)的指导下,可以正确的补全出答案。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*kdYmRYei7ikAAAAAAAAAAAAADlHYAQ/original) + +RepoFuse 的工作流程如图 4 所示,分为三个阶段:Semantic Context Analysis、Similar Context Retrieval 和 Relevance-Guided Context Selection,下面的章节将分别进行详细介绍。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*mCJASpNuD1cAAAAAAAAAAAAADlHYAQ/original) + +### Semantic Context Analysis + +在软件开发中,我们通常使用 Import 语句引入包、模块或头文件等内容,表明了当前文件可用的类及方法。如果缺少这些信息,模型在补全相关内容时只能靠猜测,从而产生幻觉问题,我们认为这些信息对当前文件的代码补全具有“理性”指导的意义。假设我们将代码补全的过程视作做数学题题的过程,那这些跨文件的依赖信息可以视作这道题背后的数据公式、数学定理等。具体来说,我们采用了一种专门的工具,称为 Repo-specific Semantic Graph。这种图结构是对传统代码依赖图的扩展,用于分析和展示代码库中不同实体(如函数、类、模块等)之间的关系。它使用图数据结构来呈现这些实体及其相互之间的依赖关系,并以多重有向图的形式存储这些信息,它的基本结构信息如下: + +1. 图(Graph):由节点和边构成 + +2. 节点(Node): 具体包括 Module、Class、Function 和 Variable + +3. 边(Edge): 具体包括 Constructs、Imports、BaseClassOf、Overrides、Calls、Instantiates、Uses + +在这个设计中,Repo-specific Semantic Graph 会使用 Graph 类来存储代码实体(Node 对象)和它们之间的依赖关系(Edge 对象)。每个节点都会记录其在代码库中的位置,以及它的类型和名称。每条边则标识了两个节点之间的关系类型,以及关系在代码中的位置。 + +举一个简单的例子,如果一个函数 A 调用了另一个函数 B,则可以在 Repo-specific Semantic Graph 中创建两个 Node 对象来表示这两个函数,并创建一个 Edge 对象来表示 Calls 关系,并在这个 Edge 对象存储下调用点(Call site)的位置。同样道理,如果一个函数 A 实例化了一个类 X,则可以在依赖图中创建两个 Node 对象来表示 A 和 X,并创建一个 Edge 对象来表示 Instantiates 关系,并在这个 Edge 对象存储下发生 A 实例化 X(Object instantiation statement)的位置信息。Repo-specific Semantic Graph 将这些对象组织成一个多重有向图,使得可以高效地查询任何代码元素的依赖关系。 + +这里以 TinyDB 的代码仓库为例,构建的 Repo-specific Semantic Graph 可以表示成下面这样的图。这里把不同关系表示成不同的边的颜色,节点的大小根据节点的度(degree)而定。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*MgYRTa3pJUIAAAAAAAAAAAAADlHYAQ/original) + +### Similar Context Retrieval + +在程序开发中,我们如果要续写代码,时常会参考与当前正在编辑的代码片段相似的代码。如图 3 所示,图中的$se1$和$se2$均与当前代码片段$ck^*$中出现大量重复的 token,如 user 和 service。这很可能意味着它们实现了与当前代码块相似甚至相同的功能,对代码补全过程有较大的指导意义。 +所以,根据当前编辑文件中未完成的代码块$ck^*$,我们可以通过一系列技术(如文本检索,向量检索),在其他源文件中发现几个相似的代码块(我们称为 Analogy Context),并引入代码补全过程中。 + +### Relevance-Guided Context Selection + +Semantic Context 和 Similar Context 都提供了比较有价值的信息。然而,在现实场景中,代码补全对于时间性能非常敏感。如果我们直接拼接这两类上下文(Dual Context),会导致 Prompt 过长,从而在 LLM 推理阶段引入额外的时间开销。为了有效地利用这两种上下文,我们提出了一种基于相关性的上下文选择技术,称为 Relevance-Guided Context Selection(RCS),旨在通过相关性指导选择对模型补全最有益的上下文,我们将 RCS 策略选择出来的 Context 称为 Optimal Dual Context(ODC)。 +定义一个相关性打分方式$r_{ck*}$,规定$r_{ck*}(e)$表示上下文片段$ck^*$与待补全代码片段$e$之间的某种相关程度。在实践过程中,我们首先使用$r_{ck*}$对集合$U$中的候选代码片段从高到低进行排序,然后依次选择代码片段,直至达到长度上限$L$为止。以图 2 中的情况为例,我们的 RTG 策略选择了$se1$,$se2$,$si1$来加入 prompt 中。然后 RepoFuse 生成的代码中就借鉴了$ec1$中的代码 validate user(user.uid, user.token)。与此同时,方法 validate user 的方法头,以及变量 uid 和 token 在类 UidTok 中的定义,都包含在了 Semantic context 中。在 RepoFuse 框架的引导下,大模型不仅看到了相似的代码实现,而且倾向于生成语法语义正确的调用,因此能在仓库级别代码补全任务中得到了更好的效果。 + +具体来说,我们设置了以下 4 种相关性函数$r_{ck*}$: + +● Oracle:在这个理想化的场景中,候选集合$U$中的每个代码片段$e$分别与待补全的代码片段$ck^*$拼接成 Prompt 输入给语言模型,而生成代码与真实代码(Ground Truth)之间的编辑相似性指标被作为其得分。该方法本质上是使用后验的方式评估候选集合$U$中每个代码片段的相关性,但由于需要巨大的计算需求,无法在实际场景中应用。 + +● Semantic Similarity:我们使用 Embedding 模型对每个上下文$e$以及未完成的代码块$ck^*$的语义表示进行编码。这些 Embedding 的余弦相似度用作得分。具体来说,我们采用了 Unixcoder 和 CodeBert 作为 Embedding 模型。 + +● Lexical Similarity:使用了 Jaccard Similarity 和 Edit Similarity 进行相似度打分。 + +● Random:随机打分,作为 Baseline。 + +## 实验结果 + +## 实验设置 + +数据集:我们使用了目前的 Sota 数据集 CrossCodeEval。CrossCodeEval 是一个全面的数据集,专为评估仓库级别的代码补全框架而设计。它包括 Python、Java、TS 和 C#的代码片段,并专注于理解跨文件上下文以进行准确的代码预测。我们采用 EM(Exact Match)和 ES(Edit Similarity)作为评估指标,遵循 CrossCodeEval 提供的定义。 + +模型选择:为了避免数据泄露,我们选择了三个 2023 年中之前发布的,模型最大长度支持 8k 的模型:StarCoder、CodeLlama、DeepSeek-Coder 三个模型。考虑到实际补全场景很少使用参数量过大的模型,我们的实验聚焦在大小处于 1B 和 7B 之间的模型。由于上述模型都支持 Fill-In-The-Middle(FIM)方式补全,为了贴近真实场景,本文所有的实验均采用 FIM 方式进行推理。 +Baseline 选择:为了评估 RepoFuse 的整体性能,我们选择了三种开源的、基于检索增强的仓库级代码补全方法进行对比。由于 RepoFuse 不涉及任何模型二次预训练或微调流程,为了保证公平对比,我们排除掉一些需要引入模型训练的工作,如[2], [3], [9]。具体来说,我们对比的 Baseline 有: + +● RLPG[1]:RLPG 使用 Repo-Level Prompt Generator 和 Repo-Level Prompt Proposals 生成特定于示例的提示。在我们的实现中,我们直接利用 RLPG 生成的提示,尽可能多地将上下文输入到大语言模型中。这种方法仅支持 Java 语言。 + +● RG-1 和 RepoCoder[4]:这种方法使用固定的 Chunk size 将代码仓库分割成代码块,并基于文本相似度检索相关上下文。然后,它迭代执行检索-生成循环,使用前一次生成的结果去检索下一次生成的上下文。RG-1 代表循环中的第一次检索和生成步骤,而 RepoCoder 代表标准的迭代过程。在我们的实现中,迭代次数设为 2。RG-1 和 RepoCoder 都支持 Java 和 Python 语言。 + +● CCFinder[7]:这是一个跨文件上下文查找工具,它通过 Import 语句从预构建的 Project Context Graph 中检索相关的跨文件上下文。我们使用了 CCFinder-k(k = 2),将待补全代码实体的 2 跳邻居作为上下文。CCFinder 仅支持 Python 语言。 + +### 补全性能 + +图 6 展示了 RepoFuse 与其他 Baseline 方法在 CCeval 数据集上 Python 和 Java 子集上的效果,其中方法名称后面的数字表示允许的上下文最大长度。如图 6 所示,结果表明 RepoFuse 在性能上表现卓越。具体而言,在 Python 数据集中,RepoFuse 在 EM 指标提高了 3.964%,ID-F1 分数提升了 3.786%。在 Java 数据集中,EM 提高了 3.014%,ID-F1 分数提升了 2%。值得注意的是,即使在 1024 的上下文长度下,RepoFuse 的表现仍然超过了所有使用 4096 上下文长度的 Baseline 方法。这凸显了 RCS 策略的重要性,即使在严格的输入限制下,也能提高代码补全的准确性。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*hfuESI0ysxIAAAAAAAAAAAAADlHYAQ/original) + +此外,我们还评估了多个模型使用不同类型 Context 时,在各种 Context 长度(从 256 到 4096)下的性能表现。结果如图 7 所示,在绝大部分实验设置下,使用 RCS 策略得到的 ODC(Optimal Dual Context)的效果均优于单独使用 SE(Semantic Context)或 SI(Similar Context),说明两种类型的数据之间存在互补性。值得注意的是:ODC 在 1024 长度的表现超过了 SE 和 SI 在 4096 长度下的表现。这说明了在有限的 Token 长度下,利用 ODC 的重要性:不仅提高了性能,还提高了推理速度。此外,DeepSeek-Coder 模型在与其大小相当的其他语言模型中表现突出,这意味着在预训练期间整合跨文件数据显著提高了仓库级代码补全任务的性能。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*VgifSIPNmUAAAAAAAAAAAAAADlHYAQ/original) + +推理效率 +RCS 带来的推理性能提升:尽管在使用 ODC + 4096 Context 长度的配置能达到最好的效果,但它会显著降低推理速度。为了更好地适应需要快速响应的环境,我们使用 StarCoder-1B 模型上评估了使用不同 Context 设置在推理效率和性能上的表现。如图 7 所示,ODC(ODC_1024)不仅在 EM 性能上保持优于 SI 和 SE,还提高了推理速度并降低了延迟。雷达图表明,RepoFuse(ODC_1024)相比 SE 实现了 13.89%的吞吐量增加,并将延迟降低了 33.3%。由于在 CrossCodeEval Python 数据集上检索到的 SI 上下文数量有限,SI 的实际令牌长度与 ODC_1024 的长度相近,因此它们的吞吐量和延迟性能接近,而 ODC_1024 比 SI 提高了 15.9%的 EM。因此,ODC_1024 这种配置证明 RepoFuse 有效地平衡了高准确率和优化的推理速度。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*AQF_R7PSR5EAAAAAAAAAAAAADlHYAQ/original) + +### 不同相关度函数的比较 + +本节我们评估在使用 Semantic & Similar 两类上下文信息时(Dual Context),RCS 策略中不同相关度函数的效果,具体如图 8 所示。从图中可以看到,在上下文长度较小(256、512)时,Oracle 效果明显优于其他相关函数。随着上下文长度增长,各策略间没有显著的性能差异。这证明了在有限的 Token 长度$L$下,相关性分数函数对补全效果的重要性。在 Oracle 之外的策略中,基于 UniXcoder 的相似度分数表现最佳,而随机策略的效果最差,这与 RepoBench 的见解相印证。Jacarrd Similarity 的效果略低于 UniXcoder,但却有显著的计算性能优势,可以考虑应用在实际补全场景中。同样的结论在单独使用 Semantic 或 Similar 上下文时也可以观察到,由于篇幅限制此处不过多赘述。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Bw3ERpep09QAAAAAAAAAAAAADlHYAQ/original) + +## 未来工作展望 + +本文介绍了一种新颖的仓库级别代码补全技术 RepoFuse,通过引入两类不同视角的上下文信息辅助模型进行补全,显著提升了补全的效果。并且提出基于相关性指导的上下文选择技术,在保证效果的前提下限制 Prompt 长度,提升推理效率。目前,我们已经将相关技术应用到 CodeFuse 插件中。在未来,RepoFuse 会继续在以下方向进行探索:1. 更轻量的程序分析技术,有助于提升准确性和效率;2. 更精细的上下文选择策略设计:例如更细的上下文选择粒度和更好的相关性度量分数。 + +此处仅列出关键参考文献,详细参考文献请查看原论文 + +- [1]. RLPG:Repository-Level Prompt Generation for Large Language Models of Code +- [2]. RepoFusion: Training Code Models to Understand Your Repository +- [3]. ReACC: A Retrieval-Augmented Code Completion Framework +- [4]. RepoCoder: Repository-Level Code Completion Through Iterative Retrieval and Generation +- [5]. CROSSCODEEVAL: A Diverse and Multilingual Benchmark for Cross-File Code Completion +- [6]. RepoBench: Benchmarking Repository-Level Code Auto-Completion Systems +- [7]. COCOMIC: Code Completion By Jointly Modeling In-file and Cross-file Context +- [8]. CodePlan: Repository-level Coding using LLMs and Planning +- [9]. Repoformer: Selective Retrieval for Repository-Level Code Completion diff --git a/docs/blogDetails/20240820.en-US.md b/docs/blogDetails/20240820.en-US.md new file mode 100644 index 0000000..9b781fa --- /dev/null +++ b/docs/blogDetails/20240820.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-08-20' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240820.zh-CN.md b/docs/blogDetails/20240820.zh-CN.md new file mode 100644 index 0000000..dcae44b --- /dev/null +++ b/docs/blogDetails/20240820.zh-CN.md @@ -0,0 +1,132 @@ +--- +title: 'ICWS 2024 | 基于生成长度预测的大语言模型推理请求调度' +time: '2024-08-20' +toc: content +--- + +随着技术的快速迭代,大语言模型(Larage Langugage Model, LLM)在各种场景下都展示出强大的文本处理能力,越来越多的业务期待通过接入大模型服务,提升业务效果。区别于传统 RPC 请求服务时间相近,大模型请求服务时间受输出长度影响差异明显,同时每个请求所需的推理资源以及推理时间都无法事先感知,导致传统请求调度方案面临以下两个问题:(1) 当一个批次中请求的生成长度不同时,生成长度较短的请求需要等待生成长度较长的请求完成后才能一起返回,造成了计算浪费,影响了推理速度。(2)由于具有较长的生成长度的请求会产生更多的键值缓存,会占用更多的 GPU 显存。在不知道请求生成长度的情况下,静态批处理总是使用一个较小的批次规模(Batch Size)来避免显存溢出(Out of Memory, OOM)错误,无法充分利用 GPU 的计算能力。 + +本文尝试从请求调度的的角度提高 LLM 的推理性能,提出面向 LLM 推理的请求调度系统 Magnus。它通过对请求的生成长度进行预测,将生成长度相似的请求放在同一个批次(Batch)中进行处理,来降低计算浪费并增大批次规模,从而降低请求响应时间并提高大模型推理的吞吐量。实验表明,Magnus 可以将响应时间降低 89.7%,请求吞吐量提高 234%。在这项工作中,我们显著提高了静态批处理(Static Batching)的吞吐量,在未来,我们将进一步探索基于生成长度预测的请求调度方案在持续批处理(Continuous Batching)中的应用。 + +该工作目前已经被服务计算领域会议 IEEE International Conference on Web Services (ICWS) 录用,技术细节可以查看预印版: https://arxiv.org/abs/2406.04785 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*x51BRrCrnX8AAAAAAAAAAAAADlHYAQ/original) + +## 研究背景 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*2U4AT6Ty8s8AAAAAAAAAAAAADlHYAQ/original) +随着参数规模的增加,基于 transformer 的语言模型在各种自然语言处理(NLP)任务上都表现出强大的能力,这可以使许多应用程序受益。然而,由于成本过高,大多数应用程序开发人员无法负担训练和部署 LLM 的高昂费用。因此,诸如 OpenAI、谷歌和阿里巴巴等人工智能领域的科技公司将他们的 LLM 作为服务发布,并允许开发人员通过 API 访问,即语言模型即服务(Language Mode as a Service, LMaaS)。 +如图 1 所示,在 LMaaS 场景中,应用程序将用户输入的文本附上指令作为请求,发送给 LLM 进行处理。例如,VSCode 上的代码助手插件可以通过在用户的代码前加上指令“Fix bugs in the following code:”作为请求发送给 LLM 服务从而实现程序漏洞修复功能。在服务端,来自不同应用程序的提示被混合在一起然后分批,并由部署在图形处理器(Graphics Processing Unit, GPU)等加速硬件上的 LLM 实例进行批处理。 +由于 LMaaS 场景中的应用,如机器翻译和程序修复,更多地关注生成质量而不是多样性。因此,通常采用贪婪采样和波束搜索(Beam Search)[1]。考虑到波束搜索的计算开销很大,LLM 往往采用贪婪采样方式生成文本,因此相同的请求的生成结果总是相同的。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*2U4AT6Ty8s8AAAAAAAAAAAAADlHYAQ/original) + +现有的深度神经网络推理系统,如 Tensorflow serving [2] 和 Triton Inference Server [3] 利用先到先服务的方式以固定的批次规模处理请求,在本文中我们将这种调度策略称为朴素调度(Vanilla Scheduling),当使用静态批处理(如图 2 所示)时,朴素调度会导致两个严重影响批处理效率的问题。首先,当一个批次中请求的生成长度不同时,生成长度较短的请求需要等待生成长度较长的请求完成后才能一起返回,造成了计算浪费,影响了推理速度。其次,由于具有较长的生成长度的请求会产生更多的键值缓存,会占用更多的 GPU 显存。在不知道请求生成长度的情况下,静态批处理总是使用一个较小的批次规模来避免显存溢出 (Out of Memory, OOM)错误。因此,GPU 强大的并行计算能力无法得到充分利用,降低了系统总体吞吐量。 + +## 研究动机 + +### 很多应用的请求生成长度和用户输入呈现强正相关性 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*AwJ3RIqkeBMAAAAAAAAAAAAADlHYAQ/original) + +我们发现在 LMaaS 场景下,有许多流行应用,其请求生成长度与原始用户输入文本长度呈正相关。例如机器翻译(Machine Translation, MT)、语法纠错(Grammar Correction, GC)、文本去毒(Text Detoxification, TD)、代码翻译(Code Translation, CT)、漏洞修复(Bug Fixing, BF)和代码注释(Code Comment, CC)。为了证实这一结论,我们从现有数据集中为每个应用构造了 2000 个请求,并将这些请求使用 ChatGLM-6B[4]、Qwen-7B-Chat[5] 和 Baichuan2-7B-Chat[6] 三个 LLM 进行处理。我们将请求生成长度和用户输入长度进行可视化展示(如图 3)。可以发现,在这些应用中用户输入文本的长度与生成文本的长度具有显著的正相关性。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*9wtZS6OdfB0AAAAAAAAAAAAADlHYAQ/original) + +表 I 中展示了用户输入长度和请求生成长度的皮尔逊系数。从中我们可以看出,对于三种大型语言模型 ChatGLM-6B, Qwen-7B-Chat 和 Baichuan2-7B-Chat,大多数应用请求的用户输入长度和请求输出长度的皮尔逊系数都大于 0.8,表明存在强烈的正相关性。因此,对于这些应用,用户输入长度可以极大地帮助预测请求的生成长度。 + +### 生成长度预测可以显著提高 LLM 推理性能 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*5SWuSZweIjoAAAAAAAAAAAAADlHYAQ/original) + +为了初步验证基于长度预测方案的可行性,我们在 NVIDIA V100 32GB GPU 上部署了一个 ChatGLM-6B LLM 实例进行实验。在实验中,请求长度和生成长度均为 1000 左右的 "大 "请求和请求长度和生成长度均为 10 左右的 "小 "请求按 图 4(a) 所示的顺序到达。在实验中,我们利用 huggingface-transformers 作为推理引擎来加载和运行 LLM。如图 4(b)所示,朴素调度按照达到的顺序对请求进行批处理,批次规模固定为 7,总处理时间为 242 秒。然而,基于生成长度预测的调度方案 Magnus ,将小请求和大请求分别分为两个批次。由于小请求占用的显存少,因此可以使用更大的批次规模,从而充分发挥 GPU 的计算能力。如图 4(c) 所示,大请求和小请求的批次规模分别为 18 和 3,总处理仅仅时间为 60s,大大优于朴素调度。这说明生成长度预测可以显著提高 LLM 推理性能。 + +## 系统设计 + +基于上述的初步数据分析和实验探索,我们提出了一种基于生成长度预测的请求调度系统。Magnus 包含四个核心组件:(1)请求生成长度预测器;(2)适应性批次组装器根据请求长度预测的结果将请求分为不同批次;(3)批处理时间估计器(4)最高响应比优先批调度器根据估计的批处理时间为多个批次确定处理顺序。通过这四个核心组件相互配合,Magnus 可以提升 LLM 批处理的请求吞吐量,并降低请求的响应时延。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*5bEZRbY0AQ4AAAAAAAAAAAAADlHYAQ/original) + +Magnus 的工作流程如图 5 所示。当请求到达时,生成长度预测器预测它的生成长度,并将 ① 请求及其预测结果发送给适应性批次组装器,适应性批次组装器将 ② 该请求插入到具有相似长度和生成长度的批次中,以减少计算浪费。之后,批处理时间估计器将根据 ③ 批次的批次规模,长度、预测的生成长度来预测其推理时间。当一个 LLM 实例完成处理,变得空闲时,批次调度器将使用最高响应比优先算法,根据 ④ 估计的批处理时间从队列中选择一个 ⑤ 批次调度到 LLM 实例进行处理。除此之外,Magnus 周期性地利用新收集的 ⑥ 请求信息(如请求及其实际生成长度),以及从日志数据库中收集的 ⑦ 批次信息(如批次规模、批次中请求的长度、批次中请求的生成长度,和批处理时间),通过持续学习技术来不断提高生成长度预测器和批处理时间估计器的精度。接下来,我们针对每个核心组件详细介绍对应的设计细节。 + +### 生成长度预测器 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*TIEYTZrVGpAAAAAAAAAAAAAADlHYAQ/original) + +生成长度预测器由一个基于 LaBSE [7] 的语义特征提取模块、一个压缩模块和一个随机森林回归器组成。图 6 展示了生成长度预测器的架构图,首先,语义特征提取模块将用户输入和指令作为输入,分别提取用户级和应用级语义特征,并生成两个嵌入向量 $v_{user}, v_{app}\in \mathbb{R}^{d}$,其中$d=768$。其中应用级别的语义特征用于帮助回归器识别不同应用任务,从而为每个任务学习请求输入和输出的相关性。除此之外,由于语义相似的请求往往有相似的输出,因此具有相似的生成长度,我们利用用户级的语义特征来帮助回归器利用用户请求的语义相似性来提高预测精度。为了控制回归器的复杂性,压缩模块将$v_{user}$和$v_{app}$通过分组压缩的方式进行压缩,首先将它们平均分为 $d_{user}$和 $d_{app}$组,其中每组的维度大小为$\frac{d}{d_{app}}$ 和 $\frac{d}{d_{user}}$,通过对组内值求和,就将每个组压缩为一个值。然后,为了保障数值稳定性,每个压缩后的值需要除以组大小的平方根。最后,将压缩后的嵌入向量与用户输入长度连接起来,输入到随机森林回归器来预测生成长度。其中 $d_{user}$和 $d_{app}$分别设置为 16 和 4。 + +### 适应性批次组装器 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*p9QoTqTNgUIAAAAAAAAAAAAADlHYAQ/original) + +适应性批次组装器根据排队批次中请求的长度和预测的生成长度向批次中插入请求,目的是减少批推理期间的计算浪费。 由于 LLM 批推理的主要开销来自 GPU 显存访问,因此我们提出浪费的显存访问 (Wasted Memory Access, WMA) 来建模批推理期间的计算浪费,该指标主要度量读取对生成的结果没有任何贡献的 token 的键值缓存的次数。 给定一个批次 $\mathcal{B}$,其长度定义为 $L(\mathcal{B}) = \max_{p\in \mathcal{B}} L(p)$,其生成长度定义为 $G(\mathcal{B}) = \max_{p\in \mathcal{B}} G(p)$,其中 $L(p)$和 $G(p)$分别表示表示请求 $p$的长度和生成长度。图 7 给出了不同变量对应的含义。 +对于提示 $p\in \mathcal{B}$,它的填充符数量是 $L(\mathcal{B})-L(p)$。在每次迭代中这些填充符的键值缓存都被读取并参与计算,但它们对生成的结果没有任何贡献。因此,这些显存访问都被浪费了。在生成"[EOS]" token 之前,这些填充符的键值缓存总共被读取 $G(p)$次,因此这个过程中的 WMA 可以由$WMA_{gen}(p) = G(p) * (L(\mathcal{B})-L(p))$来计算。 +此外,在 "[EOS]" token 生成后,$p$进入等待阶段,在此阶段中,填充后的请求和所有之前生成的 token 的键值缓存都会被读取并参与计算,并在每次迭代中缓存新生成的键值张量。由于在等待阶段生成的 token 在最终的生成结果中会被忽略,因此这些显存访问也会被浪费,从而导致 $WMA_{wait}(p)=\sum\limits_{g=G(p)}^{G(\mathcal{B})}(g + L(\mathcal{B}))$。 +我们将批次 $\mathcal{B}$的 WMA 定义为其所有请求中的最大 WMA,表示为 $WMA(\mathcal{B})=\max\limits_{p\in\mathcal{B}} (WMA_{gen}(p) + WMA_{wait}(p))$。当适应性批次组装器收到请求$p$时,它在等待队列中迭代各个批次,用预测的生成长度 $G'(p)$替换 $G(p)$,计算在插入$p$后每个批次的 WMA,并记录最小的 WMA $\phi$以及相应的批 $\mathcal{B}_{\phi}$。为了减少批处理期间的计算浪费,如果 $\phi$小于给定阈值 $\Phi$,则将请求插入到$\mathcal{B}_{\phi}$,否则,使用这个请求创建一个新的批次并插入到等待队列中。 由于键值缓存会在批处理过程中消耗大量显存,因此防止批次大小过大以避免 OOM 错误非常重要。对于批次$\mathcal{B}$,键值缓存消耗的显存由 $MEM(\mathcal{B})=\beta\cdot (L(\mathcal{B}) + G(\mathcal{B})) \cdot \Delta$ 计算,其中 $\beta$是$\mathcal{B}$的批次规模,$\Delta$表示单个 token 的键张量和值张量的显存占用。根据$\mathcal{B}$中预测的请求生成长度,可以在批处理之前就估计出 $\mathcal{B}$的显存消耗。 如果批次组装器发现,在将 $q$插入$\mathcal{B}$后,批处理 $\mathcal{B}$的显存使用超过可用显存大小 $\Theta$,则它认为插入后的 WMA 是无限的,从而防止 $p$被插入 $\mathcal{B}$。 因此,长度和生成长度较小的批次可以具有较大的批次规模,以充分利用 gpu 强大的并行计算能力,而长度和生成长度较大的批次可以具有适当的批次大小,以尽可能地利用 GPU,同时避免显存溢出。总体而言,我们在以下算法中报告了基于 WMA 的自适应批次组装算法的伪代码。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Hgx-R6A5IasAAAAAAAAAAAAADlHYAQ/original) + +为了适应用户输入的变化,生成长度预测器通过持续学习持续提高精度。每隔 3 分钟,Magnus 就会收集预测误差大于 10 个 token 且超过实际请求生成长度 10%的请求的日志数据,把这些数据补充到训练集中,并重新训练随机森林回归器。该持续学习过程与在线预测是异步的,不会影响预测效率。 + +### 批处理时间估计器 + +当一个 LLM 实例空闲时,服务时间估算器会估算出队列中等待的批次的批处理时间,这样最高响应比优先(Highest Response Ratio Next, HRRN)批次调度器就可以利用估算结果来确定批次的执行顺序,从而缩短请求响应时间。由于请求长度、生成长度和批次规模相似的批次具有相似的迭代次数以及每次迭代中相似的显存访问和计算量,因此具有相似的批处理时间。基于这个事实,批处理时间估计器采用 KNN 回归模型,以批次规模、批次长度和生成长度作为特征输入,为每个批次请求估计处理时间。需要注意的是,在估计时,每个批次请求的生成长度为该批次请求里最大的预测生成长度。 +与生成长度预测器类似,批处理时间估算器也通过持续学习不断提高精度。 每隔 2 分钟,Magnus 就会收集新处理完的批次的日志数据,并根据实际生成长度重新估计其批处理时间。预测误差大于 2 秒且超过实际批处理时间 20% 的批次数据会持续添加到训练集,以重新训练 KNN 回归模型。为了不影响在线估计的效率,持续学习的重新训练过程是离线进行的,与在线估计解耦。 + +### 最高响应比优先批调度器 + +当有 LLM 实例空闲时,需要有调度新的批次给它处理。我们采用 HRRN 算法对队列中的批次进行调度。具体来讲,最高响应比优先算法根据请求的排队时间 $T_w$ 和批处理时间 $T_p$来确定请求被处理的优先级,每次从队列中选择响应比 $\frac{T_w}{T_p}$最高的批次进行处理。这种调度算法有两个好处:(1)短服务时间的请求会被优先调度,降低总体的请求排队时间;(2)防止某些请求长期在队列等待,降低请求响应时间,提升服务质量 。根据大语言模型的自回归式生成过程,我们可以得出处理时间 $T_p$由三个因素决定,即批次的最长请求长度,最长请求生成长度,和批次规模。然而,由于请求的生成长度在推理之前是未知的,因此在调度时,使用批处理时间估计器的预测值作为$T_p$真实值的近似。 + +### 显存溢出恢复机制 + +在真实业务场景中,服务的稳定性尤其重要。虽然我们可以根据预测的生成长度估计批处理的显存开销,但是生成长度预测算法存在误差,估计的显存使用可能超过实际情况,引起显存溢出而导致的服务不可用。为了解决这个问题,我们设计了容错机制,将导致显存溢出错误的批次均匀拆分为两个相同批次大小的小批次,并将它们放回等待队列。由于批次规模减半,这两个批次再次导致显存溢出的概率会大大降低。 + +## 实验结果 + +### 实验设置 + +我们在 8 张 NVIDIA V100 32B 显卡上进行实验,数据集是基于现有的主流公开数据集[8-12]合成的综合性评测数据集,包含 MT、GC、TD、CT、BF 和 CC 六个应用。其中 MT 和 CT 应用都有两个任务,分别是英文翻译到中文、中文翻译到英文,C# 翻译到 Java、Java 翻译到 C#。因此总共有 8 个任务。对于每个任务,我们从数据集中随机选择 10,000 条数据来构建请求,其中 7,500 个请求用于生成工作负载,其余 2,500 个请求用于训练 Magnus 的生成长度预测器和批处理时间估计器。我们使用 ChatGLM-6B 作为实验使用的大语言模型,并且在不同的请求率下将 Magnus 和朴素调度(Vanilla Scheduling, VS),量化+朴素调度 (Vanilla Scheduling with 4-bit Quantization, VSQ),以及保守的连续批处理(Conservative Continuous Batching, CCB)进行性能对比。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*f19CT61lnCkAAAAAAAAAAAAADlHYAQ/original) + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*vRUzToJgZBEAAAAAAAAAAAAADlHYAQ/original) + +图 8 展示了在各种请求率下,Magnus 和三种基线在请求吞吐量、平均请求响应时间和尾部响应时间方面的性能。可以发现 Magnus 的性能始终优于所有基线,在各种请求到达率下,请求吞吐量可以提高 66%到 234%,平均响应时间和尾部响应时间分别可以缩短 60.3%到 89.7%,以及 53.2%到 91.7%。此外,如图 9 所示,Magnus 在 token 级性能方面也优于三种基线,有效 token 的吞吐量和总 token 的吞吐量分别可以提高 70%到 240%,以及 115%到 489%。 + +### 消融实验 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*VRa0QYKAm8IAAAAAAAAAAAAADlHYAQ/original) + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*VRa0QYKAm8IAAAAAAAAAAAAADlHYAQ/original) + +我们逐步验证 Magnus 各个组件在不同请求率下带来的性能增益。首先,我们在朴素调度(VS)策略中添加了生成长度预测器,从而得到了 GLP。GLP 利用基于 WMA 的自适应性批次组合算法,但它使用一个固定的批次规模。接下来,我们取消了 GLP 的批次规模限制,实现了完全的自适应批处理算法,我们称这种新策略为 ABP。最后,在 ABP 上继续增加批处理时间预测器和 HRRN 批次调度器得到完整的 Magnus。通过图 10 和图 11,我们可以看到 Magnus 的每个组件都能带来性能增益。 + +## 总结 + +在本文中,我们提出了 Magnus 来实现 LMaaS 场景下的高效 LLM 批处理,它可以根据指令和用户输入的语义特征以及用户输入长度来预测请求生成长度。Magnus 会根据预测的请求生成长度自适应地调整批次大小,以充分利用 GPU 的并行计算能力,从而提高请求吞吐量。此外,Magnus 还通过基于批处理时间估计的 HRRN 调度来缩短请求响应时间。大量的实验证明,Magnus 可以有效降低请求响应时间并提高 LLM 批处理的吞吐量。在本文中,我们基于生成长度预测来优化静态批处理的推理效率,在未来,我们将进一步探索基于生成长度预测的请求调度方案在持续批处理中的应用。 + +Reference +[1] M. Freitag and Y. Al-Onaizan, “Beam search strategies for neural machine translation,” in Proceedings of the First Workshop on Neural Machine Translation. Association for Computational Linguistics, 2017. + +[2]“Tensorflow serving,” https://github.com/tensorflow/serving, 2023. + +[3]“Triton inference server,” https://github.com/triton-inference-server/server, 2023. + +[4] Z. Du, Y. Qian, X. Liu et al., “Glm: General language model pretrainingwith autoregressive blank infilling,” in Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), 2022, pp. 320–335. + +[5] J. Bai, S. Bai, Y. Chu et al., “Qwen technical report,” 2023. + +[6] “Baichuan2-7b-chat,” https://huggingface.co/baichuan-inc/ +Baichuan2-7B-Chat, 2024. + +[7] F. Feng, Y. Yang, D. Cer et al., “Language-agnostic bert sentence embedding,”in Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), 2022, pp. 878–891. + +[8] “Wmt18,” https://huggingface.co/datasets/wmt18, 2023 + +[9] V. Logacheva, D. Dementieva, S. Ustyantsev et al., “Paradetox: Detoxification with parallel data,” in Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), 2022, pp. 6804–6818. + +[10] F. Stahlberg and S. Kumar, “Synthetic data generation for grammatical error correction with tagged corruption models,” in Proceedings of the 16th Workshop on Innovative Use of NLP for Building Educational Applications, 2021, pp. 37–47. + +[11] S. Lu, D. Guo, S. Ren et al., “Codexglue: A machine learning benchmark dataset for code understanding and generation,” in Thirty-fifth Conference on Neural Information Processing Systems Datasets and Benchmarks Track, 2021. + +[12] M. Yasunaga and P. Liang, “Break-it-fix-it: Unsupervised learning for program repair,” in International Conference on Machine Learning. PMLR, 2021, pp. 11 941–11 952. diff --git a/docs/blogDetails/20240914.en-US.md b/docs/blogDetails/20240914.en-US.md new file mode 100644 index 0000000..da5dd93 --- /dev/null +++ b/docs/blogDetails/20240914.en-US.md @@ -0,0 +1,7 @@ +--- +title: 'Not updated yet' +time: '2024-09-14' +toc: content +--- + +Not updated yet diff --git a/docs/blogDetails/20240914.zh-CN.md b/docs/blogDetails/20240914.zh-CN.md new file mode 100644 index 0000000..f238e7c --- /dev/null +++ b/docs/blogDetails/20240914.zh-CN.md @@ -0,0 +1,150 @@ +--- +title: 'CodeFuse 开源一周年,焕新出发!' +time: '2024-09-14' +toc: content +--- + +**欢迎各位来到 CodeFuse!** + +CodeFuse 开源之初,就明确了使命是开发用于支持整个软件开发生命周期的大型代码语言模型(Code LLMs),涵盖设计、需求、编码、测试、部署、运维等关键阶段。我们致力于打造创新的解决方案,让软件开发者们在研发的过程中如丝般顺滑。 + +2023 年可以称得上是大模型元年,在过去的这一年里,大模型领域飞速发展,新的大模型纷纷涌现,基于大模型的新产品也吸引着大家的眼球,未来,这个领域又会给大家带来多少惊喜? + +蚂蚁也推出了自己的百灵代码大模型 CodeFuse,经历近半年内部打磨后,在 2023 年 9 月正式对外开源。下面就让我们来看一下,在过去的一年里,CodeFuse 在开源方面取得了哪些进展? + +## 一、让研发变得更简单 + +自从大型模型技术问世以来,大模型已经落地到多个场景的过程中,代码自动生成,成为技术实现的必要环节。在这一趋势下,蚂蚁集团基于百灵大模型,推出了蚂蚁百灵研发助手,帮助开发者自动生成代码、注释代码、生成测试用例等,提高研发效率。 + +CodeFuse 在行业内获得广泛的认可。下面请跟随我们的脚步回顾下 CodeFuse 的开源历程。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*ttq-RbyxhGsAAAAAAAAAAAAADlHYAQ/original) + +CodeFuse 源于蚂蚁自身的开发场景及代码库沉淀,基于海量高质量代码数据和代码领域特色词表,和多任务微调技术 MFT,在蚂蚁一万多内部研发人员的日常编码、测试、运维等场景中,经过反复验证与迭代。当前,CodeFuse 从单环节智能化(如开发、测试和运维)演进到了企业级端到端的研发智能体的探索。 + +1. **外滩首发:**2023 年 9 月,CodeFuse 面向技术社区首次开源开放必要的工具链 MFTCoder 训练框架和 MFTCoder 模型系列,帮助社区开发人员在此之上作研究、评价和二次开发和训练。 +2. **全程发力:**23 年 10 月份发布了上下游多个模型和框架组件,包括 LLM 推理缓存框架 ModelCache、DevOps 和 Test 两个系列的模型。 +3. **刷新榜单:**23 年 12 月到 24 年 1 月在紧随其后的月份里,多次刷新 HumanEval 榜单并完成 BigCode 对抗评测的登顶; +4. **持续打磨**:24 年 4 月发布了全新的 muAgent 多智能体框架、以及对 MFTCoder、ModelCache 进行多次版本迭代。 +5. **主页上线:**为了更好地推广大模型技术的发展,24 年 6 月我们构建并对外开放了 CodeFuse 开源主页 [https://codefuse.ai](https://codefuse.ai),里面涵盖了语义检索、上下文理解、大模型训练和微调、大模型推理加速等多项关键技术的文档,同期我们开始陆续更新 CodeFuse 公众号的技术文章,让大家来更好地了解 CodeFuse 背后的技术发展。 + +截至目前,CodeFuse 在蚂蚁各部门落地支持 40 多种编程语言,10 多个主流 IDE 平台。整体覆盖了 1 万多蚂蚁研发人员,通过 AI 生成代码占比达到 20%。CodeFuse 在蚂蚁数字科技的 SOFAStack 云原生应用智能商业产品线全面融合,涵盖设计、研发、测试、运维等领域,形成从领域建模到智能运维端到端 Copilot 产品解决方案,提升了企业级应用的交付效率和质量,加速行业数字化降本增效。 + +## 二、丰富的开源内容 + +CodeFuse 的使命是开发并设计用于支持整个软件开发生命周期的大型代码语言模型(Code LLMs),当前内容涵盖模型域、框架域、数据域三大发现。截止 2024.09.07,CodeFuse 已累计开源了 17 个代码仓库、4 个数据集、16 个大模型参数文件,总计关注/点赞数超过 6k、下载量超过 1.9M,外部 PR 累积参与 21 人。研发过程中的技术累积发表了 6 篇顶会顶刊论文(2 x ACL,1 x KDD,1 x ICDE, 1 x ICSE,1 x ICWS)。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*tbW0QJvIy9MAAAAAAAAAAAAADlHYAQ/original) + +[ +](https://mp.weixin.qq.com/s?__biz=MzkwOTU3NTc3NA==&mid=2247484350&idx=1&sn=c9875496ec1b2c75f47db73986007a05&chksm=c139d08ff64e5999b5c55f727d1b98475cc50a328662b5c84d921fe8c45a477f452effc2c41f&token=1529034469&lang=zh_CN#rd)23 年我们在研发生命周期各个环节多点开花,关于这一部分的内容我们在 24 年 2 月做过一次总结,[CodeFuse 开源这半年](https://mp.weixin.qq.com/s?__biz=MzkwOTU3NTc3NA==&mid=2247484725&idx=1&sn=6bd5c3f012f78657ea8bded58ff1d913&chksm=c139d604f64e5f12874cfd709f5cf1df96259f15d21d5d3e21c27b0055b2f37c3ded7bc5a379#rd)。 + +在开源一周年之际,我们焕新了开源思路,围绕研发智能体产品为中心,集成生命周期各个环节的智能体,发力持续打磨和创新智能体框架、基座模型、以及数据和评测这 3 个基本点来。 + +这里我们重点介绍焕新发布的内容。 + +**产品域** + +- CodeFuse IDE + +:::info +一款基于蚂蚁自研大模型 CodeFuse 和自研 IDE 框架 OpenSumi 开发的 AI IDE,它支持主流的编程语言,在开发过程中提供单行代码或整个函数的编写建议,此外还支持代码解释、单测生成、问题修复、智能终端等功能,提升开发质量和效率。CodeFuse IDE 也有开放的扩展能力,支持 VS Code 插件生态,除接入 CodeFuse 模型以外,也支持接入任意模型服务。 + +::: + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*VNqwSb6Vjw8AAAAAAAAAAAAADlHYAQ/original) + +**框架域** + +- muAgent 2.0 + +:::info +全新体验的 Agent 框架,基于 LLM+ EKG(Eventic Knowledge Graph 行业知识承载)驱动,协同 MultiAgent、FunctionCall、CodeInterpreter 等技术,通过画布式拖拽、轻文字编写,让大模型在人的经验指导下帮助你实现各类复杂 SOP 流程。兼容现有市面各类 Agent 框架,同时可实现复杂推理、在线协同、人工交互、知识即用四大核心差异技术功能。目前 muAgent 在蚂蚁集团内 DevOps 场景和创新场景均有产品落地。 + +::: + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*FFWrRYwU50YAAAAAAAAAAAAADlHYAQ/original) + +**模型域** + +- CodeFuse-CGE 模型:通用代码相关向量搜索模型,在 CSN 和 AdvTest 业界 SOTA,效果超越当前其他基于 encoder 或 encoder-decoder 的代码搜索模型,向量维度下降到 384 也不会牺牲太多性能,支持 7 种代码语言 +- CodeFuse-Rodimus 模型:全新设计超强性能、低内存占用 SSM 端侧小模型,推理阶段更低的常量内存占用、训练阶段仅次二次方的计算复杂度,1B 尺寸超越同等大小 Mamba2 和 LLaMA2 ; + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*X-l6TZqwuk8AAAAAAAAAAAAADlHYAQ/original) + +## 三、精彩的社区活动 + +我们深知,开源不只是开放代码,还包括在社区的分享与交流。在开源内容上干货满满,社区活动定也不落下风,让我们看看都有哪些吧!! + +23 年 8 月,我们在 AI+ 软件研发数字峰会上进行了专场分享《基于 AIGC 的测试生成》; + +23 年 9 月,外滩大会上正式对外宣布 CodeFuse 开源; + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*AbKvToe-RC4AAAAAAAAAAAAADlHYAQ/original) + +23 年 10 月,在 MLSummit 2023 上,对外分享了 CodeFuse 研发经验; + +23 年 11 月初,在云栖大会上进行 CodeFuse 专题演讲,正式对外开放; + +23 年 11 月,和始智 AI 等联合举办了“代码大模型技术与应用发展”论坛; + +23 年 12 月初,在 CCF 中国软件大会上,与参会者现场体验、互动交流; + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*AbKvToe-RC4AAAAAAAAAAAAADlHYAQ/original) + +23 年 12 月末,在全球软件开发者大会 QCon 上经验分享《基于 CodeFuse 的下一代研发探索》。 + +24 年 2 月,CodeFuse 成功支持了[通义千问算法大赛](https://mp.weixin.qq.com/s?__biz=MzkwOTU3NTc3NA==&mid=2247484910&idx=1&sn=6faa79ba24c22182aecd559d58e1d4a7&chksm=c139d6dff64e5fc901309d3a10896cb9cfa62dd4c40a661f7caa5dd15c6c4c3b85d0ecbd7e5c#rd),大会取得圆满成功。 + +24 年 3 月,在 2024 全球开发者大会技术讲坛,CodeFuse 面向公众介绍了[蚂蚁代码大模型推理部署探索与实践](https://yuque.antfin.com/omqetg/wpfdnx/gu83c0a6iqwg9453?singleDoc#) + +24 年 4 月,在 QCon 2024 北京站 分享了《MFTcoder: 大模型多任务微调框架》;量子位[第二届中国 AIGC 产业峰会](https://mp.weixin.qq.com/s/ZhTvU1PR69-mFwy7jdr1hg)分享了《代码生成革命:从 Copilot 到自动化研发智能体》;在 GOPS 2024 深圳站上经验分享了《蚂蚁集团 OpsGPT 落地探索与技术开源》 +24 年 5 月,在 AiDD 2024 AI+研发数字峰会上海分会分享了《MFTcoder: 大模型多任务微调框架》;QECon-深圳站分享了《蚂蚁集团基于 CodeFuse 的智能研发探索》;在 XCOPS 智能运维管理人年会广州站上经验分享了《蚂蚁集团 OpsGPT 落地探索与技术开源》 + +同期 5 月,CodeFuse 于 5 月 7-11 日参加奥地利维也纳举办的顶会“ICLR”活动,面向公众详细介绍 codefuse 的 6 大产品及核心特色 24 年 6 月,CodeFuse 对外发布 CodeFuse 开源主页,[https://codefuse-ai.github.io/](https://codefuse-ai.github.io/);同时携 muAgent 和 ModelCache 参加 OSPP 开源之夏活动 + +24 年 7 月,正式更换 CodeFuse 主页域名为 https://codefuse.ai/ +24 年 7 月,正式更换 CodeFuse 主页域名为 https://codefuse.ai/ + +24 年 9 月,CodeFuse 携全新项目参加 9 月外滩大会。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*mZx2SIu0VE4AAAAAAAAAAAAADlHYAQ/original) + +## 四、获得业界认可 + +今年,CodeFuse 还获得了多个奖项,感谢业界的认可: + +- 联想 AI PC 接入蚂蚁 CodeFuse 代码大模型,为企业客户提供智能研发服务 +- 深度参与国际清算银行(BIS)发布的[“AI 对宏观经济的影响”主题年度经济报告](https://www.bis.org/publ/work1208.htm) +- AIIAAI4SE 工作组:《智能化软件工程技术和应用要求》 核心编写单位 +- AIIAAI4SE 工作组:代码大模型数据集共建单位 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*E8tsT7ZCcPYAAAAAAAAAAAAADlHYAQ/original) +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*1idNT6rK_lsAAAAAAAAAAAAADlHYAQ/original) + +- 参与 ITU 相关标准制定:2024 年 4 月 15-26 日,国际电信联盟第十六研究组(ITU-T SG16)于法国雷恩召开全体会议,由中国信息通信研究院(以下简称“中国信通院”)牵头的 ITU-T F.TE-CG “Technical requirements and evaluation methods of AI based code generation in multimedia applications”立项建议获得通过。本标准是在《智能化软件工程技术和应用要求 第一部分:代码大模型》的基础上提出,提交的标准内容由工行、华为、中兴通讯、阿里、蚂蚁等企业联合供稿。该标准围绕代码大模型相关的通用能力、专用场景能力和应用成熟度,从输入多样性、任务多样性、语言完备度、结果可接收性、结果准确度等维度,对代码大模型提出了全栈技术和管理要求。本标准适用于企业在代码大模型的研发、评估和验收等过程中,为代码大模型的建设和改进提供参考,为代码大模型的技术选型提供指引。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*1idNT6rK_lsAAAAAAAAAAAAADlHYAQ/original) + +## 五、新的期待 + +2023 年以来,大模型在代码领域落地不断深入。经过一年多的开源实践,我们对相关的技术也有了更深层次的理解与认识。也看到了很多有趣的方向与落地实践。在 接下来的时间里,我们还会继续深耕开源: + +- 更多创新产品,例如 CodeFuse AI IDE、全新体验支持 DynaSOP 的 Agent 框架 muAgent 2.0 - EKG、新版模型 Rodimus 和 CGE +- 更多的线下活动,会组织多次 CodeFuse 线下 meetup,欢迎感兴趣的同行多多参与;也会积极参与国内和国际行业会议/论坛更多分享 CodeFuse 的实践经验; +- 更多的社区参与和互动,会社区调研,让大家能够参与到项目中来;包括不限于发起社区一起捉虫、一起贡献新特性,推动相关体系的标准化,甚至组织相关比赛活动等。 + +![](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*vJysQbnRm3kAAAAAAAAAAAAADlHYAQ/original) + +非常欢迎大家能够跟我们一起交流探索,一起来定义下一代基于大模型的全生命周期研发解决方案。欢迎大家参与到我们社区中,一起探讨、交流。 + +道阻且长,行则将至!一起向未来! + +## 联系我们 + +CodeFuse 的相关模型和数据集也在陆续开源中,如果您喜欢我们的工作,欢迎试用、指正错误和贡献代码,可以的话请给我们的项目增加 Star 来支持我们。 + +- 开源官网:[https://codefuse.ai](https://codefuse.ai) +- GitHub 项目主页:[https://github.com/codefuse-ai](https://github.com/codefuse-ai) +- HuggingFace 主页:[https://huggingface.co/codefuse-ai](https://huggingface.co/codefuse-ai) +- 魔搭社区主页:[https://modelscope.cn/organization/codefuse-ai](https://modelscope.cn/organization/codefuse-ai) diff --git a/docs/blogDetails/blogDeatils.zh-CN.md b/docs/blogDetails/blogDeatils.zh-CN.md new file mode 100644 index 0000000..65ac42a --- /dev/null +++ b/docs/blogDetails/blogDeatils.zh-CN.md @@ -0,0 +1,7 @@ +--- +title: blogDetails +nav: + title: blogDetails + order: 11 +toc: content +--- diff --git a/docs/blogDetails/blogDetails.en-US.md b/docs/blogDetails/blogDetails.en-US.md new file mode 100644 index 0000000..65ac42a --- /dev/null +++ b/docs/blogDetails/blogDetails.en-US.md @@ -0,0 +1,7 @@ +--- +title: blogDetails +nav: + title: blogDetails + order: 11 +toc: content +--- diff --git a/docs/blogs/blogs.en-US.md b/docs/blogs/blogs.en-US.md new file mode 100644 index 0000000..0f2846b --- /dev/null +++ b/docs/blogs/blogs.en-US.md @@ -0,0 +1,43 @@ +--- +title: Blogs +nav: + title: Blogs + order: 1 +bannerTitle: https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Id1KTZ75cPIAAAAAAAAAAAAADlHYAQ/original +toc: content + +# 发布 +publish: + - time: '2024-04-23' + title: Multi-Agent Framework MuAgent Unlocks New Paradigms in Code Development + desc: For complex SOPs requiring constant redefinition of agents and numerous post-processing stages, this procedure can become cumbersome and challenging. Striving to lift this weight and accelerate the execution of SOP workflows,this system streamlines the construction process with a suite of core components, enabling a more convenient and rapid build procedure. It spares users the need to delve into the intricacies of internal prompt construction logic. At last, The paper highlights muAgent's implementation for automating Code Q&A functionalities within Java code repositories, enabling query execution, API documentation, and test case generation. + link: /blogDetails/20240423 + +# 技术 +develop: + - time: '2024-09-05' + title: Not updated yet + desc: Not updated yet + link: /blogDetails/001 + +# 产品 +products: + - time: '2024-09-05' + title: Not updated yet + desc: Not updated yet + link: /blogDetails/001 + +# 使用 +use: + - time: '2024-04-23' + title: Multi-Agent Framework MuAgent Unlocks New Paradigms in Code Development + desc: For complex SOPs requiring constant redefinition of agents and numerous post-processing stages, this procedure can become cumbersome and challenging. Striving to lift this weight and accelerate the execution of SOP workflows,this system streamlines the construction process with a suite of core components, enabling a more convenient and rapid build procedure. It spares users the need to delve into the intricacies of internal prompt construction logic. At last, The paper highlights muAgent's implementation for automating Code Q&A functionalities within Java code repositories, enabling query execution, API documentation, and test case generation. + link: /blogDetails/20240423 + +# 活动咨询 +EventConsultation: + - time: '2024-09-14' + title: Not updated yet + desc: Not updated yet + link: /blogDetails/001 +--- diff --git a/docs/blogs/blogs.zh-CN.md b/docs/blogs/blogs.zh-CN.md new file mode 100644 index 0000000..fb157e4 --- /dev/null +++ b/docs/blogs/blogs.zh-CN.md @@ -0,0 +1,103 @@ +--- +title: Blogs +nav: + title: 博客 + order: 1 +bannerTitle: https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*hGKPRajWQkIAAAAAAAAAAAAADlHYAQ/original +toc: content + +# 发布 +publish: + - time: '2023-12-11' + title: 蚂蚁CodeFuse新版发布,前端能力优化,支持安卓开发 + desc: 蚂蚁百灵研发助手 CodeFuse 插件发布新版,本版本新增支持 Android Studio,并针对 JavaScript、TypeScript 等前端语言优化了模型效果,同时还将输出Token增加到最多 1024 个。 + link: /zh-CN/blogDetails/20231211 + + - time: '2023-12-20' + title: DevOps-ChatBot:DevOps开源端到端智能AI助手 + desc: 我们发起并开源DevOps-ChatBot端到端AI智能助手,专为软件开发的全生命周期而设计:通过DevOps垂类知识库 + 知识图谱增强 + SandBox执行环境等技术来保障生成内容的准确性、及时性并让用户交互修改代码编译执行,确保答案的可靠性;通过静态分析技术 + RAG检索增强生成等技术来让大模型感知上下文,实现代码库级别的组件理解、仓库项目级的代码文件修改、生成,不单单只是函数片段级的代码补齐;通过完善链路级的Multi-Agent调度设计、协同知识库、代码库、工具库、沙盒环境,来让大模型可以实现DevOps领域复杂多步骤的任务;并且通过DevOps领域专属的领域模型和评测数据构建支持私有化部署来保障数据的安全性,以及特定任务的高可用性。 + link: /zh-CN/blogDetails/20231220 + + - time: '2024-01-19' + title: MFTCoder 重磅升级v0.3.0发布,支持Mixtral等更多模型,支持收敛均衡, 支持FSDP + desc: CodeFuse在2023年9月开源了一种多任务微调框架——MFTCoder,它可以实现在多个任务上同时并行地进行微调。通过结合多种损失函数,我们有效地解决了多任务学习中常见的任务间数据量不平衡、难易不一和收敛速度不一致等挑战。 + link: /zh-CN/blogDetails/20240119 + + - time: '2024-04-23' + title: 变革来袭!多Agent框架MuAgent带你解锁代码开发新姿势 + desc: 在这个信息技术爆炸的时代,我们都知道大型语言模型(LLM)拥有处理复杂问题的能力,但当遇到编程难题这种更高级的挑战时,单独的LLM Agent可能就不够看了。社区里动起了脑筋,玩出了新花样——组合多个Agent来应对高难度挑战!正如Multi Agent的构建过程所示,与其说我们是在设计Agents,不如说是对当前需求的深入理解后去构建出一条专属于某个场景的SOP。 + link: /zh-CN/blogDetails/20240423 + +# 技术 +develop: + - time: '2024-01-23' + title: NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量化和推理优化实践 + desc: 采用了静态量化方式,即通过矫正数据离线地进行量化,得到诸如缩放因子和零点的量化参数,在推理时不再进行量化参数的更新。与之对应的是动态量化,会在模型推理的同时根据输入进行量化参数的调整。 + link: /zh-CN/blogDetails/20240123 + + - time: '2024-07-06' + title: 2024年5月90篇代码大模型论文最全整理 + desc: 2024年5月90篇代码大模型论文最全整理 + link: /zh-CN/blogDetails/20240614 + + - time: '2024-07-05' + title: ACL 2024|D2LLM:将Causal LLM改造成向量搜索模型的黑科技 + desc: 我们提出了一种结合了以上两者的优点的用于语义搜索的分解和蒸馏大型语言模型D2LLM。我们将交叉编码器分解为一个高效的双编码器,双编码器集成了多头注意力池化模块,另外,通过一个交互模拟模块,模型实现了对细微语义关系的理解。我们使用对比、排序和特征模仿技术将LLM的知识蒸馏到该模型中。实验表明,D2LLM在三项任务的指标上超过了五个领先的基准模型,特别是在自然语言推理(NLI)任务的性能至少提高了6.45%。 + link: /zh-CN/blogDetails/20240705 + + - time: '2024-07-03' + title: ACL 2024 | CoCA:自注意力的缺陷与改进 + desc: 在Transformer诞生之初,被视为天然具备的长度外推能力,随着相关研究的深入,人们发现,传统的Transformer架构在训练长度之外无一例外表现出糟糕的推理性能。作者从一个全新的视角,剖析了造成这种糟糕表现的可能原因,并给出了相应的解决方案 + link: /zh-CN/blogDetails/20240703 + + - time: '2024-07-06' + title: 2024年6月118篇代码大模型论文最全整理 + desc: 2024年6月118篇代码大模型论文最全整理 + link: /zh-CN/blogDetails/20240706 + + - time: '2024-08-05' + title: 2024年7月117篇代码大模型论文最全整理 + desc: 2024年7月117篇代码大模型论文最全整理 + link: /zh-CN/blogDetails/20240805 + + - time: '2024-08-07' + title: 蚂蚁CodeFuse代码大模型技术解析:基于全仓库上下文的代码补全 + desc: 2023年CodeFuse完成了百亿级别的代码大模型从0到1的预训练,配合指令微调、量化部署等一系列配套技术,成功将AI大模型能力应用到多个下游研发场景,助力生产提效。在众多下游产品中,CodeFuse代码补全插件直接触及研发过程中最核心的编码场景,因此对开发效率的影响最显著。目前,CodeFuse代码补全插件是CodeFuse系列产品中用户数量最多、留存率最大,调用AI能力最多的产品。 + link: /zh-CN/blogDetails/20240807 + + - time: '2024-08-20' + title: ICWS 2024 | 基于生成长度预测的大语言模型推理请求调度 + desc: 本文尝试从请求调度的的角度提高LLM的推理性能,提出面向LLM推理的请求调度系统Magnus。它通过对请求的生成长度进行预测,将生成长度相似的请求放在同一个批次(Batch)中进行处理,来降低计算浪费并增大批次规模,从而降低请求响应时间并提高大模型推理的吞吐量。实验表明,Magnus可以将响应时间降低 89.7%,请求吞吐量提高 234%。在这项工作中,我们显著提高了静态批处理(Static Batching)的吞吐量,在未来,我们将进一步探索基于生成长度预测的请求调度方案在持续批处理(Continuous Batching)中的应用。 + link: /zh-CN/blogDetails/20240820 + +# 产品 +products: + - time: '2024-04-05' + title: Not updated yet + desc: Not updated yet + link: /zh-CN/blogDetails/001 + +# 使用 +use: + - time: '2023-11-01' + title: 在 Visual Studio Code 中使用 CodeFuse + desc: 本文将介绍如何在本地 Visual Studio Code(下文简称为 VS Code)中安装和使用 CodeFuse 插件。 + link: /zh-CN/blogDetails/20231101 + + - time: '2024-01-23' + title: NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量化和推理优化实践 + desc: 采用了静态量化方式,即通过矫正数据离线地进行量化,得到诸如缩放因子和零点的量化参数,在推理时不再进行量化参数的更新。与之对应的是动态量化,会在模型推理的同时根据输入进行量化参数的调整。 + link: /zh-CN/blogDetails/20240123 + + - time: '2024-04-23' + title: 变革来袭!多Agent框架MuAgent带你解锁代码开发新姿势 + desc: 在这个信息技术爆炸的时代,我们都知道大型语言模型(LLM)拥有处理复杂问题的能力,但当遇到编程难题这种更高级的挑战时,单独的LLM Agent可能就不够看了。社区里动起了脑筋,玩出了新花样——组合多个Agent来应对高难度挑战!正如Multi Agent的构建过程所示,与其说我们是在设计Agents,不如说是对当前需求的深入理解后去构建出一条专属于某个场景的SOP。 + link: /zh-CN/blogDetails/20240423 + +# 活动咨询 +EventConsultation: + - time: '2024-09-14' + title: CodeFuse 开源一周年,焕新出发! + desc: CodeFuse 开源一周年,焕新出发! + link: /zh-CN/blogDetails/20240914 +--- diff --git a/docs/docs/developer-docs/CodeFuse-MFT-VLM/main/mftvlm.zh-CN.md b/docs/docs/developer-docs/CodeFuse-MFT-VLM/main/mftvlm.zh-CN.md index 47ed611..d199a66 100644 --- a/docs/docs/developer-docs/CodeFuse-MFT-VLM/main/mftvlm.zh-CN.md +++ b/docs/docs/developer-docs/CodeFuse-MFT-VLM/main/mftvlm.zh-CN.md @@ -18,30 +18,251 @@ toc: content github: https://github.com/codefuse-ai/CodeFuse-MFT-VLM --- -## CodeFuse-VLM +[![Generic badge](https://img.shields.io/badge/🤗-Huggingface%20Repo-green.svg)](https://huggingface.co/codefuse-ai)  + +GitHub + -CodeFuse-VLM 是一个多模态大语言模型框架,该框架为用户提供多种视觉编码器,模态对齐模块和大语言模型的选择,以适配用户对不同任务的需求。 +## 1. Updates -随着 huggingface 开源社区的不断更新,会有更多的 vision encoder 和 LLM 底座发布,这些 vision encoder 和 LLM 底座都有各自的强项,例如 code-llama 适合生成代码类任务,但是不适合生成中文类的任务;因此我们搭建了 CodeFuse-VLM 框架,支持多种视觉模型和语言大模型,使得 CodeFuse-VLM 可以适应不同种类的任务。 +🔥 MFTCoder supports fine-tuning of the GPTNeoX model under the Atorch framework. -![img.jpg](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*t7OIS58EJmIAAAAAAAAAAAAADlHYAQ/original) +🔥 MFTCoder supports both fully supervised fine-tuning. -我们在 CodeFuse-VLM 框架下, 使用 Qwen-VL 的视觉编码器, cross attention 模态对齐模块, 和 Qwen-14B 模型训练了 CodeFuse-VLM-14B +🔥 MFTCoder supports LoRA using the Atorch Framework. -CodeFuse-VLM-14B 在多个 benchmarks 上的性能超过了 Qwen-VL 和 LLAVA-1.5 -![img.jpg](https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*BuIrRZd62ssAAAAAAAAAAAAADlHYAQ/original) +## 2. Data Format -各个模型得分如下表所示: -模型 | MMBench | MMBench-CN | VqaV2 | GQA | TextVQA | Vizwiz -| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | -LLAVA-1.5 | 67.7 | 63.6 | 80.0 | 63.3 | 61.3 | 53.6 -Qwen-VL | 60.6 | 56.7 | 78.2 | 57.5 | 63.8 | 38.9 -CodeFuse-VLM-14B | 75.7 | 69.8 | 79.3 | 59.4 | 63.9 | 45.3 +### 2.1 Training Data Format -我们的模型在 MMBenchmark 多模态大模型榜单上取得了很高的排名: https://mmbench.opencompass.org.cn/leaderboard +The training data is in a uniformed JSONL format, in which each line of data has the following JSON format. The "chat_rounds" field is required, and other fields can be added or removed based on the specific need. -这是我们模型的展示视频 +```json +{ + "id": 0, + "data_name": "code-helper", + "chat_rounds": [ + { + "role": "system", + "content": "You are a expert in coding and help answer code questions", + "chat_round_id": 0 + }, + { + "role": "human", + "content": "Write a python function of quick sort", + "chat_round_id": 1 + }, + { + "role": "bot", + "content": "Below is the function of quick sort: ...", + "chat_round_id": 1 + }, + { + "role": "human", + "content": "Explain the code", + "chat_round_id": 2 + }, + { + "role": "bot", + "content": "OK, this code ...", + "chat_round_id": 2 + } + ] +} +``` - +### 2.2 Inference Data Format + +The inference data contains strings concatenated by conversation data(system, human and bot contents) in the training data format. +It is used as the data "seen"(before tokenization) by the model in training process. +It is used as input during the inference process as well. +Here is an example format of the concatenated string: + +```python +""" +<|role_start|>system<|role_end|>System instruction +<|role_start|>human<|role_end|>Human 1st round input +<|role_start|>bot<|role_end|>Bot 1st round output +<|role_start|>human<|role_end|>Human 2nd round input +<|role_start|>bot<|role_end|>Bot 2nd round output +... +... +... +<|role_start|>human<|role_end|>Human nth round input +<|role_start|>bot<|role_end|>{Bot output to be genreated} +""" +``` + +When applying inference, you always make your input string end with "<|role_start|>bot<|role_end|>" to request the model generating answers. + +## 3. Model Training + +Currently, the "MFTCoder/mft_atorch" code repository supports fully instruction fine-tuning, and LoRA instruction fine-tuning. Only the training of the GPTNeoX model is supported. In theory, the pretrained weights of the GPTNeoX model available on HuggingFace can be used for training within this project. + +We have extracted various components used in training to facilitate future extension and optimization. Please refer to the implementation in the main directory for more details. The entry directory for fine-tuning training is `train/`, and the entry file for training is `train/run_train.py`. The parameter configurations are stored in the launch scripts such as `train/run_gpt_*.sh`, making it easier to manage and modify them uniformly. + +### 3.1 Tokenization + +During training, we concatenate multi-turn dialogues into the following format (also known as the inference data format mentioned earlier) and then tokenize it. In this format, <|role_start|>human<|role_end|> represents the human input (i.e., prompt), <|role_start|>bot<|role_end|> represents the bot output, and represents the eos_token. +You can modify and replace the eos_token based on different models' requirements. + +Here is an example of the concatenated format with prompts: + +``` +"<|role_start|>human<|role_end|>input1target1input2target2... +``` + +During the calculation of loss, we use a `loss mask` to ensure that the loss from the input part does not contribute to the parameter updates. Only the loss from the `target` part is used for updating parameters. +This approach takes full advantage of the benefits of model parallelism, making training more efficient. It also leverages the characteristic of decoder-only models with left-to-right attention. +By including all target parts from multiple turns in a single training iteration, the training process becomes more efficient. + +### 3.2 Fully Supervised Fine-Tuning (SFT) + +To perform fully SFT, you can execute the following command: + +```bash +sh run_gpt_mft.sh 10 1 8 5 +``` + +Please note that the four parameters after the launch script have the following meanings: + +- The first parameter is the per GPU batch size. +- The second parameter is the number of tensor parallelism (currently only supports 1). +- The third parameter is the number of data parallelism, which should match the number of GPUs used. +- The fourth parameter is the number of training epochs. + +For other training modes, the same four parameters need to be configured in the launch script. + +### 3.3 LoRA Supervised Fine-Tuning + +To perform LoRA SFT, you can execute the following command: + +```bash +sh run_gpt_mft_peft.sh 10 1 8 5 +``` + +### 3.4 Parameter Explanations + +The main parameter explanations for the `train/run_gpt_*.sh` are as follows. You can modify these parameters according to your needs: + +- **tokenize_mode**: Need to be 'sft' at present. + +- **train_mode**: Need to be 'sft' at present. + +- **load_raw_dataset**: Need to be 'True' at present. Only JSONL format is supported. + +- **data_paths**: "[path1,path2,path3]" Input data addresses, a string enclosed in [], with different paths separated by commas (,). Each path is a directory where the last level of the directory name is considered as the task name. Each task directory contains 1 to multiple jsonl data files. + +- **output_dir**: Training output directory to store checkpoints, lora_adaptor checkpoints, etc. + +- **tensorboard_dir**: Can be temporarily ignored, as the actual tensorboard is stored in the runs directory under output_dir. + +- **model_type**: Currently only supports gpt_neox. + +- **peft_type**: Currently only supports lora. + +- **pretrained_model_path**: Local directory of the pre-trained model. + +- **total_train_batch_size**: The total batch size for training across all GPUs, calculated automatically based on per gpu batch size entered in the script. + +- **per_device_valid_batch_size**: The batch size for evaluation on each GPU, calculated automatically based on per gpu batch size entered in the script. + +- **gradient_accumulation_steps**: Number of gradient accumulation steps. Global batch size = num*gpus * per*device_train_batch_size * gradient_accumulation_steps. + +- **checkpoint_activations**: Enable if running out of GPU memory. Trades time for space by not caching activation states, resulting in two forward passes to save memory. + +- **learning_rate**: Learning rate. When fine-tuning the entire model, it is recommended to use a smaller value, such as 1e-5 or 5e-6. For lora, a larger learning rate is generally used, such as 1e-4 or 2e-4. + +- **min_lr**: Minimum learning rate, usually one-tenth of the learning_rate. + +- **seq_length**: Maximum length during training. Set according to your device, longer lengths require more memory. + +- **log_interval**: Frequency of logging training loss. + +- **checkpointing_steps**: Frequency of saving a model checkpoint. + +- **evalation_steps**: Frequency of evaluating on the validation set. + +- **early_stopping_patience**: Number of consecutive eval points without further convergence to stop training. + +- **lr_scheduler_type**: Learning rate changing strategy. + +- **num_warmup_steps**: Number of warm-up steps for the learning rate to increase to the specified value. + +- **seed**: Random seed used for reproducibility of experimental results. + +- **train_iters**: Can be temporarily set to a small value, such as 10, which does not affect the actual number of training steps, kept for future expansion to support reading datasets in other formats. + +- **valid_iters**: Can be temporarily set to a small value, such as 10, which does not affect the actual number of training steps, kept for future expansion to support reading datasets in other formats. + +- **evaluation_strategy**: Evaluation strategy during training. "steps" means to evaluate every "valid_interval" steps, "epoch" means to evaluate every epoch. Both can be enabled simultaneously. + +- **save_strategy**: Strategy for saving model weights during training. "steps" means to save every "checkpointing_steps" steps. +- **extra_save_by_epoch**: Whether to save an epoch-level checkpoint every epoch. + +- **save_total_limit**: Maximum number of model checkpoints to keep. Generally set to 2, retaining the checkpoint with the lowest valid loss and the latest checkpoint. Note that epoch-level checkpoints will always be retained and are not subject to this limit. + +- **weighted_loss_mode**: Loss weighting method for multi-task training. + +## 4. Model Usage + +### 4.1 Merge Adaptor weights + +Using LoRA or QLoRA for training, this project only saves the weights and configuration files of the adapters. +To merge the adapter weights with the base model, see `src/pefts/merge_base_and_lora_to_hf.py` + +### 4.2 Inference demo + +Here is the script for inference on our trained models, which is compatible with most Hugging Face models: + +```python +from transformers import ( + AutoTokenizer, + AutoModelForCausalLM, +) +tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=True, use_fast=False, legacy=False) +tokenizer.padding_side = "left" +tokenizer.pad_token_id = tokenizer.convert_tokens_to_ids("") +tokenizer.eos_token_id = tokenizer.convert_tokens_to_ids("") +model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, trust_remote_code=True) + +HUMAN_ROLE_START_TAG = "<|role_start|>human<|role_end|>" +BOT_ROLE_START_TAG = "<|role_start|>bot<|role_end|>" +texts = ["write a python function of quick sort."] +texts = [f"{HUMAN_ROLE_START_TAG}{text}{BOT_ROLE_START_TAG}" for text in texts] + +inputs = tokenizer(texts, return_tensors='pt', padding=True, add_special_tokens=False).to("cuda") +outputs = model.generate( + inputs=inputs["input_ids"], + attention_mask=inputs["attention_mask"], + max_new_tokens=512, + top_p=0.95, + temperature=0.1, + do_sample=True, + eos_token_id=tokenizer.eos_token_id, + pad_token_id=tokenizer.pad_token_id + ) +gen_text = tokenizer.batch_decode(outputs[:, inputs["input_ids"].shape[1]:], skip_special_tokens=True) +print(gen_text) +``` + +Indeed, the parameters top_p, temperature, repetition_penalty, do_sample, etc., have a significant impact on the model's generation output. +You can modify these parameters based on your specific use case. + +In code generation scenarios, if you are using the sampling mode (do_sample=True), the following parameter settings can yield good results for the Pass@1 metric: + +top_p: Set a higher value, such as 0.95, to retain highly probable generated words. This helps ensure more accurate and fluent generation results. + +temperature: Set a lower value, such as 0.1, to reduce randomness. Lower temperature values make the generation output more deterministic. + +These parameter combinations can control the diversity of the generated outputs while maintaining naturalness. Additionally, you can adjust other related parameters, such as repetition_penalty, to reduce repetition in the generated results. + +If you choose the non-sampling mode (do_sample=False), you can consider the following parameter settings: + +beam_num: Set a smaller value such as 1 or 3. `beam_num=1` represents greedy decoding, which selects the most probable single generated word. `beam_num=3` represents beam search mode, which considers multiple potential generation paths and chooses the best path among them. + +## 5. FAQ + +### Q1:What should I do when cuda OOM happens? + +If OOM (Out of Memory) occurs, you can mitigate it by reducing parameters such as per GPU batch size (the first argument when starting the training script) and seq_length. You can also set gradient_checkpointing=true, which significantly reduces memory usage but may slow down the training speed. diff --git a/docs/index.en-US.md b/docs/index.en-US.md index 514fac1..7b5c4f5 100644 --- a/docs/index.en-US.md +++ b/docs/index.en-US.md @@ -1,7 +1,7 @@ --- -title: CodeFuse - 让研发变得更简单 +title: CodeFuse - Make R&D Simpler hero: - title: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*Krw9Sq6gevwAAAAAAAAAAAAADlHYAQ/original' + title: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*0c2ITKxGu_kAAAAAAAAAAAAADlHYAQ/original' description: Make R&D Simpler CodeGenerationTitle: title: 'Code Generation' @@ -10,16 +10,19 @@ CodeGeneration: - title: CodeFuse-MFTCoder buttom: MFTCoder image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*jyTURIgXb4EAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*ilp7QYnFD3cAAAAAAAAAAAAADlHYAQ/original' description: CodeFuse-MFTCoder is a multi-task fine-tuning framework designed to enhance the multi-task capabilities of Large Language Models, especially on Code-LLMs. Unlike traditional single-task fine-tuning, it can handle multiple tasks simultaneously, balancing the differences in data volume, difficulty, and convergence speed among various tasks by combining diverse loss functions. This approach increases fine-tuning efficiency and performance. Additionally, the framework incorporates efficient training optimization techniques and supports almost all well-known open-source models. Moreover it ranked first on the BigCode Leaderboard for its MFT performance of CodeFuse-Deepseek model. link: https://github.com/codefuse-ai/MFTCoder - title: CodeFuse-MFT-VLM buttom: MFT-VLM image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*SqoGS7hUQowAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*x5L8QrVJtCsAAAAAAAAAAAAADlHYAQ/original' description: CodeFuse-MFT-VLM is a framework designed for multimodal large language models, aimed at compatibility and adaptation across various visual and linguistic models to support different types of tasks. It integrates a multitude of visual encoders such as the CLIP series, and language models like the Vicuna and LLAMA series, offering flexible configuration options. This allows users to freely combine different models using VL-MFTCoder, thereby simplifying the development and application process for multimodal tasks. link: https://github.com/codefuse-ai/CodeFuse-MFT-VLM - title: Awesome-Code-LLM buttom: Awesome-Code-LLM image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*JZ2hTZwpRhIAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*x4HZSZbOnDMAAAAAAAAAAAAADlHYAQ/original' description: Ant Group, in collaboration with Shanghai Jiao Tong University, has released a 110-page comprehensive review of large code models, covering more than 50 models, 30 downstream tasks, and 800 reference papers. This review provides a holistic summary of the latest progress and challenges in the application of large language models to code-related tasks. link: https://github.com/codefuse-ai/Awesome-Code-LLM DevOpsTitle: @@ -27,34 +30,41 @@ DevOpsTitle: DevOps: - cardTitle: CodeFuse-ChatBot image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*l4LUSpeo7GMAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*oTQDQoF8lqEAAAAAAAAAAAAADlHYAQ/original' description: The DevOps-ChatBot is an open-source AI assistant developed by the Ant CodeFuse team, dedicated to simplifying and optimizing various aspects of the software development lifecycle. link: https://github.com/codefuse-ai/codefuse-chatbot - cardTitle: DevOps-Eval image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*DVkmS5rN2iEAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*eyNkRaXdcc4AAAAAAAAAAAAADlHYAQ/original' description: DevOps-Eval is a comprehensive evaluation suite specifically designed for foundation models in the DevOps field. We hope DevOps-Eval could help developers, especially in the DevOps field, track the progress and analyze the important strengths/shortcomings of their models. link: https://github.com/codefuse-ai/codefuse-devops-eval - cardTitle: DevOps-Model image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*HCNGRblECa4AAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*AAoaTqY3xJEAAAAAAAAAAAAADlHYAQ/original' description: DevOps-Model is a series of industrial-fist Chinese DevOps large language models, mainly dedicated to exerting practical value in the field of DevOps. Currently, DevOps-Model can help engineers answer questions encountered in the all DevOps life cycle. link: https://github.com/codefuse-ai/CodeFuse-DevOps-Model CodeAnalysis: title: Code Analysis description: CodeFuse-Query is a powerful static code analysis platform suitable for large-scale, complex codebase analysis scenarios. Its data-centric approach and high scalability give it a unique advantage in the modern software development environment. image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*4yyUS7SkkS8AAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*X1KRSJAJWiAAAAAAAAAAAAAADlHYAQ/original' link: https://github.com/codefuse-ai/CodeFuse-Query IntelligentInference: title: Intelligent Inference description: ModelCache is a semantic cache for large language models (LLMs). By caching pre-generated model results, it reduces response time for similar requests and improves user experience.This project aims to optimize services by introducing a caching mechanism. It helps businesses and research institutions reduce the cost of inference deployment, improve model performance and efficiency, and provide scalable services for large models. Through open-source, we aim to share and exchange technologies related to large model semantic cache. image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*UqtpRYRVqdEAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*aurPS6ywm0gAAAAAAAAAAAAADlHYAQ/original' link: https://github.com/codefuse-ai/CodeFuse-ModelCache AutomatedTesting: title: Automated Testing description: TestAgent is the first open-source large model in the domestic testing industry, which includes the most powerful 7B large model for testing domains, as well as an accompanying framework for rapid local model deployment and an engineered experience. TestAgent is designed to build an "intelligence agent" within the testing field, integrating large models with engineering technologies in the quality domain to promote generational upgrades in quality technology. We look forward to collaborating with community members to create innovative solutions in the testing field, to construct a 24-hour online testing assistant service, making testing as smooth as silk. image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*hVVqQI7U5noAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*-EK-TJ5umZgAAAAAAAAAAAAADlHYAQ/original' link: https://github.com/codefuse-ai/Test-Agent PerformanceEvaluation: title: Performance Evaluation description: CodeFuseEval is an enterprise-level, multi-type programming task evaluation benchmark developed on top of the open-source HumanEval-x, MBPP, and DS1000 benchmarks, integrated with the multi-task scenarios of the CodeFuse large model. It is designed for assessing the capabilities of large models in various tasks such as code completion, natural language code generation, test case generation, cross-language code translation, Chinese instruction-based code generation, code annotation explanation, bug detection/fixing, and code optimization. CodeFuseEval is built to closely reflect real-world business scenarios, and aims to create a multidimensional, diverse, and trustworthy evaluation benchmark for measuring large models' code generation capabilities. image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*v3xVRZqhAfwAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*93xJTa-8tJ0AAAAAAAAAAAAADlHYAQ/original' link: https://github.com/codefuse-ai/codefuse-evaluation --- diff --git a/docs/index.zh-CN.md b/docs/index.zh-CN.md index 20c8e95..46d79cd 100644 --- a/docs/index.zh-CN.md +++ b/docs/index.zh-CN.md @@ -10,16 +10,19 @@ CodeGeneration: - title: CodeFuse-MFTCoder buttom: MFTCoder image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*SdZIQYUwWqgAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*8vqRTJZNDjIAAAAAAAAAAAAADlHYAQ/original' description: CodeFuse-MFTCoder是一个多任务微调框架,它旨在提升大语言模型的多任务能力,尤其擅长提升代码大模型的编程能力。与传统单任务微调相比,它能够同时处理多个任务,通过结合多元损失函数来均衡不同任务间的数据量、难度和收敛速度差异,从而提高了微调效率和性能。此外,该框架还引入了高效的训练优化技术,可以与几乎所有知名的开源大模型兼容。并且在BigCode Leaderboard上通过CodeFuse-Deepseek模型的MFT表现排名第一。 link: https://github.com/codefuse-ai/MFTCoder - title: CodeFuse-MFT-VLM buttom: MFT-VLM - image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*19mRTadlUDYAAAAAAAAAAAAADlHYAQ/original' + image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*IcY9R6abpNcAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*8vqRTJZNDjIAAAAAAAAAAAAADlHYAQ/original' description: CodeFuse-MFT-VLM是一个为多模态大语言模型设计的框架,旨在兼容和适应多种视觉和语言模型以支持不同类型的任务。它集成了众多视觉编码器如CLIP系列和语言模型如Vicuna和LLAMA系列,提供灵活的配置选项,允许用户通过VL-MFTCoder自由组合不同的模型,从而简化多模态任务的开发和应用过程。 link: https://github.com/codefuse-ai/CodeFuse-MFT-VLM - title: Awesome-Code-LLM buttom: Awesome-Code-LLM image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*-zYYS4piTp0AAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*VD47TaqU4OEAAAAAAAAAAAAADlHYAQ/original' description: 蚂蚁集团联合上海交通大学发布110页代码大模型综述,覆盖超过50个模型、30个下游任务、800篇参考文献,全方位总结大语言模型在代码相关应用中的最新进展与挑战。 link: https://github.com/codefuse-ai/Awesome-Code-LLM DevOpsTitle: @@ -27,34 +30,41 @@ DevOpsTitle: DevOps: - cardTitle: CodeFuse-ChatBot image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*l4LUSpeo7GMAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*oTQDQoF8lqEAAAAAAAAAAAAADlHYAQ/original' description: DevOps-ChatBot是由蚂蚁CodeFuse团队开发的开源AI智能助手,致力于简化和优化软件开发生命周期中的各个环节。 link: https://github.com/codefuse-ai/codefuse-chatbot - cardTitle: DevOps-Eval image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*DVkmS5rN2iEAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*eyNkRaXdcc4AAAAAAAAAAAAADlHYAQ/original' description: DevOps-Eval是一个专门为DevOps领域大模型设计的综合评估数据集。我们希望DevOps-Eval能够帮助开发者,尤其是DevOps领域的开发者,追踪进展并分析他们拥有的DevOps大模型的优势和不足之处。 link: https://github.com/codefuse-ai/codefuse-devops-eval - cardTitle: DevOps-Model image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*HCNGRblECa4AAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*AAoaTqY3xJEAAAAAAAAAAAAADlHYAQ/original' description: DevOps-Model 是一系列业界首个开源的中文开发运维大模型,主要致力于在 DevOps 领域发挥实际价值。目前,DevOps-Model 能够帮助工程师回答在 DevOps 生命周期中遇到的问题。 link: https://github.com/codefuse-ai/CodeFuse-DevOps-Model CodeAnalysis: title: 代码分析 description: CodeFuse-Query 是一种强大的静态代码分析平台,适合大规模、复杂的代码库分析场景。它的以数据为中心的方法和高度的可扩展性使得它在现代软件开发环境中具有独特的优势。 image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*GmZ5QJxXM28AAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*054IQ6XUBPMAAAAAAAAAAAAADlHYAQ/original' link: https://github.com/codefuse-ai/CodeFuse-Query IntelligentInference: title: 智能推理 description: ModelCache 是一个开源的大模型语义缓存系统,通过缓存已生成的模型结果,降低类似请求的响应时间,提升用户体验。该项目从服务优化角度出发,引入缓存机制,在资源有限和对实时性要求较高的场景下,帮助企业和研究机构降低推理部署成本、提升模型性能和效率、提供规模化大模型服务。我们希望通过开源,分享交流大模型语义Cache的相关技术。 image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*l7GCQYf1kooAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*ZvVwTL74iL0AAAAAAAAAAAAADlHYAQ/original' link: https://github.com/codefuse-ai/CodeFuse-ModelCache AutomatedTesting: title: 自动化测试 description: TestAgent是国内首个开源的测试行业大模型,其中包含了性能最强的7B测试领域大模型,以及配套的本地模型快速发布和体验工程化框架。TestAgent旨在构建测试领域的“智能体”,融合大模型和质量领域工程化技术,促进质量技术代系升级。我们期望和社区成员一起合作,打造创新的测试领域解决方案,构建24小时在线的测试助理服务,让测试如丝般顺滑。 image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*MLVXSpMIRTYAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*IddPS4U9o24AAAAAAAAAAAAADlHYAQ/original' link: https://github.com/codefuse-ai/Test-Agent PerformanceEvaluation: title: 性能评价 description: CodeFuseEval是结合CodeFuse大模型多任务场景,在开源的HumanEval-x、MBPP、DS1000评测基准基础上,开发的面向大模型代码垂类领域的企业级多类型编程任务评估基准。可用于评估大模型在代码补全、自然语言生成代码、测试用例生成、跨语言代码翻译、中文指令生成代码、代码注解释、Bug检测/修复、代码优化等不同任务的能力表现。旨在贴近企业实际应用场景,构建而成的衡量大模型代码生成相关能力的「多维」、「多样」和「可信」的评测基准。 image: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*nGmwRqTvIaEAAAAAAAAAAAAADlHYAQ/original' + imageColor: 'https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*wsMBQbCceIAAAAAAAAAAAAAADlHYAQ/original' link: https://github.com/codefuse-ai/codefuse-evaluation --- diff --git a/docs/publication/publication.en-US.md b/docs/publication/publication.en-US.md index dc5432f..d30519f 100644 --- a/docs/publication/publication.en-US.md +++ b/docs/publication/publication.en-US.md @@ -2,7 +2,7 @@ title: Publication nav: title: Publication - order: 2 + order: 3 bannerTitle: https://mdn.alipayobjects.com/huamei_bvbxju/afts/img/A*r31CSbR3uFUAAAAAAAAAAAAADlHYAQ/original contentTitle: Selected Publications diff --git a/package.json b/package.json index c3b5294..422ea90 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,8 @@ "@ant-design/icons": "^5.3.7", "antd": "^5.16.5", "react-slick": "^0.30.2", + "rehype-katex": "^7.0.0", + "remark-math": "^6.0.0", "slick-carousel": "^1.8.1", "styled-components": "^6.1.8" }, diff --git a/tsconfig.json b/tsconfig.json index 417e7db..7577b77 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,8 +6,12 @@ "jsx": "react", "baseUrl": "./", "paths": { - "@@/*": [".dumi/tmp/*"] + "@@/*": [ + ".dumi/tmp/*" + ] } }, - "include": [".dumirc.ts"] + "include": [ + ".dumirc.ts" + ] } From bcc7623b563219e02481a3482bcdd27712d98a5d Mon Sep 17 00:00:00 2001 From: wyp311395 Date: Mon, 21 Oct 2024 15:14:44 +0800 Subject: [PATCH 3/6] docs: add emnlp paper to publication --- .gitignore | 1 + docs/publication/publication.en-US.md | 2 ++ docs/publication/publication.zh-CN.md | 2 ++ 3 files changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 33d9ddd..ff623d2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules .DS_Store .node package-lock.json +*log \ No newline at end of file diff --git a/docs/publication/publication.en-US.md b/docs/publication/publication.en-US.md index d30519f..b9230f7 100644 --- a/docs/publication/publication.en-US.md +++ b/docs/publication/publication.en-US.md @@ -8,6 +8,8 @@ contentTitle: Selected Publications titleConDirectly: CodeFuse Directly Related contentDirectly: + - titleCon: \[EMNLP 2024] CoBa:\ Convergence Balancer for Multitask Finetuning of Large Language Models + desc: Zi Gong, Hang yu, Cong Liao, Bingchang Liu, Chaoyu Chen, Jianguo Li - titleCon: \[ICSE-SEIP 2024] CodeFuse-13B:\ A Pretrained Multi-lingual Code Large Language Model desc: Peng Di, Jianguo Li, Hang Yu, Wei Jiang, Wenting Cai, ..., Xianying Zhu - titleCon: \[KDD 2024] MFTCoder:\ Boosting Code LLMs with Multitask Fine-Tuning diff --git a/docs/publication/publication.zh-CN.md b/docs/publication/publication.zh-CN.md index 560597c..00e73de 100644 --- a/docs/publication/publication.zh-CN.md +++ b/docs/publication/publication.zh-CN.md @@ -8,6 +8,8 @@ contentTitle: 精选论文 titleConDirectly: CodeFuse 相关 contentDirectly: + - titleCon: \[EMNLP 2024] CoBa:\ Convergence Balancer for Multitask Finetuning of Large Language Models + desc: Zi Gong, Hang yu, Cong Liao, Bingchang Liu, Chaoyu Chen, Jianguo Li - titleCon: \[ICSE-SEIP 2024] CodeFuse-13B:\ A Pretrained Multi-lingual Code Large Language Model desc: Peng Di, Jianguo Li, Hang Yu, Wei Jiang, Wenting Cai, ..., Xianying Zhu - titleCon: \[KDD 2024] MFTCoder:\ Boosting Code LLMs with Multitask Fine-Tuning From c1895f20c6a154b200bd5be6dc57288359e17430 Mon Sep 17 00:00:00 2001 From: wyp311395 Date: Thu, 17 Oct 2024 15:20:58 +0800 Subject: [PATCH 4/6] add blog contents --- docs/404.html | 15 + docs/4078.e3dba83b.async.js | 194 + docs/7762.b11ee80b.async.js | 11 + docs/aboutDocs/aboutdocs/index.html | 15 + docs/blogDetails/001/index.html | 15 + docs/blogDetails/20231101/index.html | 15 + docs/blogDetails/20231211/index.html | 15 + docs/blogDetails/20231220/index.html | 15 + docs/blogDetails/20240119/index.html | 15 + docs/blogDetails/20240123/index.html | 15 + docs/blogDetails/20240423/index.html | 15 + docs/blogDetails/20240614/index.html | 15 + docs/blogDetails/20240703/index.html | 15 + docs/blogDetails/20240705/index.html | 15 + docs/blogDetails/20240706/index.html | 15 + docs/blogDetails/20240805/index.html | 15 + docs/blogDetails/20240807/index.html | 15 + docs/blogDetails/20240820/index.html | 15 + docs/blogDetails/20240914/index.html | 15 + docs/blogDetails/blogDetails/index.html | 15 + docs/blogs/blogs/index.html | 15 + docs/contribution/acknowledgements/index.html | 15 + docs/contribution/contribution/index.html | 15 + docs/contribution/issue/index.html | 15 + docs/contribution/pr/index.html | 15 + docs/docs/about/overview/index.html | 15 + .../connector/connector_agent/index.html | 15 + .../connector/connector_chain/index.html | 15 + .../connector_localmemory/index.html | 15 + .../connector/connector_memory/index.html | 15 + .../connector/connector_phase/index.html | 15 + .../connector/connector_prompt/index.html | 15 + .../connector_tbasememory/index.html | 15 + .../connector/customed_examples/index.html | 15 + .../llm_models/embedding_config/index.html | 15 + .../MuAgent/llm_models/llm_config/index.html | 15 + .../MuAgent/overview/agent-flow/index.html | 15 + .../MuAgent/overview/multi-agent/index.html | 15 + .../MuAgent/overview/quick-start/index.html | 15 + .../retrieval/custom_retrieval/index.html | 15 + .../MuAgent/tools/custom_tool/index.html | 15 + .../master/codefusechatbot/index.html | 15 + .../master/fastchat/index.html | 15 + .../master/quickstart/index.html | 15 + .../master/roadmap/index.html | 15 + .../master/start-detail/index.html | 15 + .../master/categroy_mapping/index.html | 15 + .../master/codefuseDevopsEval/index.html | 15 + .../master/data/index.html | 15 + .../master/evaluate/index.html | 15 + .../master/tool_learning_evalution/index.html | 15 + .../master/tool_learning_info_zh/index.html | 15 + .../master/tutorial/index.html | 15 + .../main/codefuseDevopsModel/index.html | 15 + .../main/quickstart/index.html | 15 + .../main/traindetail/index.html | 15 + .../CodeFuse-MFT-VLM/main/mftvlm/index.html | 15 + .../main/quickstart/index.html | 15 + .../main/CodeFuseModelCache/index.html | 15 + .../main/config/index.html | 15 + .../main/feature/index.html | 15 + .../main/quickstart/index.html | 15 + .../main/release_note/index.html | 15 + .../main/CodeFuseQuery/index.html | 15 + .../main/godelscript_language/index.html | 15 + .../main/install_and_run/index.html | 15 + .../main/introduction/index.html | 15 + .../CodeFuse-Query/main/toolchain/index.html | 15 + .../CodeFuse-Query/main/user_case/index.html | 15 + .../main/codefuse-evalution/index.html | 15 + .../main/quickstart/index.html | 15 + .../MFTCoder/main/MFTCoder/index.html | 15 + .../MFTCoder/main/accelerate/index.html | 15 + .../MFTCoder/main/atorch/index.html | 15 + .../MFTCoder/main/introduction/index.html | 15 + .../MFTCoder/main/quickstart/index.html | 15 + .../Test-Agent/main/TestAgent/index.html | 15 + .../Test-Agent/main/quickstart/index.html | 15 + ...Docs__aboutdocs.en-US.md.a96833cb.async.js | 1 + ...Docs__aboutdocs.zh-CN.md.bd9809c7.async.js | 1 + ...logDetails__001.en-US.md.f7856f51.async.js | 1 + ...logDetails__001.zh-CN.md.f2ddcf98.async.js | 1 + ...tails__20231101.en-US.md.c091f3c2.async.js | 1 + ...tails__20231101.zh-CN.md.cb8ef965.async.js | 1 + ...tails__20231211.en-US.md.af940248.async.js | 1 + ...tails__20231211.zh-CN.md.8e54f4e9.async.js | 1 + ...tails__20231220.en-US.md.ea6976de.async.js | 1 + ...tails__20231220.zh-CN.md.b2b4305a.async.js | 1 + ...tails__20240119.en-US.md.c219010a.async.js | 1 + ...tails__20240119.zh-CN.md.29fb9c30.async.js | 1 + ...tails__20240123.en-US.md.e45a36fe.async.js | 1 + ...tails__20240123.zh-CN.md.cee344aa.async.js | 1 + ...tails__20240423.en-US.md.517b9453.async.js | 1 + ...tails__20240423.zh-CN.md.af9ebe0d.async.js | 1 + ...tails__20240614.en-US.md.79d4a789.async.js | 1 + ...tails__20240614.zh-CN.md.9641f7f8.async.js | 1 + ...tails__20240703.en-US.md.5cf41c69.async.js | 1 + ...tails__20240703.zh-CN.md.16ae4ef9.async.js | 1 + ...tails__20240705.en-US.md.bbafb41f.async.js | 1 + ...tails__20240705.zh-CN.md.3d0990d0.async.js | 9 + ...tails__20240706.en-US.md.1d735cc3.async.js | 1 + ...tails__20240706.zh-CN.md.9fd95cd6.async.js | 1 + ...tails__20240805.en-US.md.55598f19.async.js | 1 + ...tails__20240805.zh-CN.md.bf1d7f90.async.js | 1 + ...tails__20240807.en-US.md.50c434bb.async.js | 1 + ...tails__20240807.zh-CN.md.20cd97cb.async.js | 1 + ...tails__20240820.en-US.md.e21afa28.async.js | 1 + ...tails__20240820.zh-CN.md.c80cfd2d.async.js | 1 + ...tails__20240914.en-US.md.72ef6685.async.js | 1 + ...tails__20240914.zh-CN.md.a7e4394a.async.js | 1 + ...ls__blogDeatils.zh-CN.md.ce34c551.async.js | 1 + ...ls__blogDetails.en-US.md.61b50389.async.js | 1 + ...s__blogs__blogs.en-US.md.e81ec1b2.async.js | 1 + ...s__blogs__blogs.zh-CN.md.126f8b97.async.js | 1 + ...cknowledgements.en-US.md.ac6e5ad1.async.js | 1 + ...cknowledgements.zh-CN.md.1a574757.async.js | 1 + ...n__contribution.en-US.md.8818e7cf.async.js | 1 + ...n__contribution.zh-CN.md.0d555a3e.async.js | 1 + ...ribution__issue.en-US.md.a10da239.async.js | 1 + ...ribution__issue.zh-CN.md.0d40521d.async.js | 1 + ...ontribution__pr.en-US.md.542f18b7.async.js | 1 + ...ontribution__pr.zh-CN.md.88f6bb71.async.js | 1 + ...about__overview.en-US.md.296364f9.async.js | 1 + ...about__overview.zh-CN.md.adb4886c.async.js | 1 + ...connector_agent.en-US.md.4e529ca2.async.js | 1 + ...connector_agent.zh-CN.md.4509812f.async.js | 1 + ...connector_chain.en-US.md.fec3f082.async.js | 1 + ...connector_chain.zh-CN.md.cce17f17.async.js | 1 + ...tor_localmemory.en-US.md.ab2605f5.async.js | 1 + ...tor_localmemory.zh-CN.md.5ece070c.async.js | 1 + ...onnector_memory.en-US.md.c9ac2e28.async.js | 1 + ...onnector_memory.zh-CN.md.453fadbd.async.js | 1 + ...connector_phase.en-US.md.cdee2935.async.js | 1 + ...connector_phase.zh-CN.md.42a59dcf.async.js | 1 + ...onnector_prompt.en-US.md.0496d2c5.async.js | 1 + ...onnector_prompt.zh-CN.md.29d29536.async.js | 1 + ...tor_tbasememory.en-US.md.7a4fc035.async.js | 1 + ...tor_tbasememory.zh-CN.md.15ec83eb.async.js | 1 + ...stomed_examples.en-US.md.ababe456.async.js | 1 + ...stomed_examples.zh-CN.md.a498f5e5.async.js | 1 + ...mbedding_config.en-US.md.2d7655b7.async.js | 1 + ...mbedding_config.zh-CN.md.2df11220.async.js | 1 + ...els__llm_config.en-US.md.a8bc3e32.async.js | 1 + ...els__llm_config.zh-CN.md.ccdd86cd.async.js | 1 + ...iew__agent-flow.en-US.md.65d0feb1.async.js | 1 + ...iew__agent-flow.zh-CN.md.5e309171.async.js | 1 + ...ew__multi-agent.en-US.md.9c3353de.async.js | 1 + ...ew__multi-agent.zh-CN.md.ef333f0c.async.js | 1 + ...ew__quick-start.en-US.md.d8d5b5e1.async.js | 1 + ...ew__quick-start.zh-CN.md.04b39cf5.async.js | 1 + ...ustom_retrieval.en-US.md.076e5c24.async.js | 1 + ...ustom_retrieval.zh-CN.md.3546abdf.async.js | 1 + ...ls__custom_tool.en-US.md.533c2a5d.async.js | 1 + ...ls__custom_tool.zh-CN.md.24bfc674.async.js | 1 + ...codefusechatbot.en-US.md.05f1fc16.async.js | 1 + ...codefusechatbot.zh-CN.md.e76be929.async.js | 1 + ...aster__fastchat.en-US.md.b346fa40.async.js | 1 + ...aster__fastchat.zh-CN.md.592194ec.async.js | 1 + ...ter__quickstart.en-US.md.a50c845d.async.js | 1 + ...ter__quickstart.zh-CN.md.e25f9d07.async.js | 1 + ...master__roadmap.en-US.md.d706c34c.async.js | 1 + ...master__roadmap.zh-CN.md.b612b267.async.js | 1 + ...r__start-detail.en-US.md.21260153.async.js | 1 + ...r__start-detail.zh-CN.md.cdcaf2d6.async.js | 1 + ...ter__categroy_mapping.md.0e3549dc.async.js | 1 + ...efuseDevopsEval.en-US.md.fae97f6c.async.js | 1 + ...efuseDevopsEval.zh-CN.md.49a68719.async.js | 1 + ...l__master__data.en-US.md.13115d2b.async.js | 1 + ...l__master__data.zh-CN.md.558ffa29.async.js | 1 + ...aster__evaluate.en-US.md.47a79af8.async.js | 1 + ...aster__evaluate.zh-CN.md.71f976a6.async.js | 1 + ...rning_evalution.en-US.md.7d8b437e.async.js | 1 + ...rning_evalution.zh-CN.md.e7c6076b.async.js | 1 + ...earning_info_zh.en-US.md.871ae67c.async.js | 1 + ...earning_info_zh.zh-CN.md.e31e9cfe.async.js | 1 + ...aster__tutorial.en-US.md.19680d5e.async.js | 1 + ...aster__tutorial.zh-CN.md.cb0a2e61.async.js | 1 + ...fuseDevopsModel.en-US.md.7bad8757.async.js | 1 + ...fuseDevopsModel.zh-CN.md.dff2fe4d.async.js | 1 + ...ain__quickstart.en-US.md.b2f0d906.async.js | 1 + ...ain__quickstart.zh-CN.md.faee3325.async.js | 1 + ...in__traindetail.en-US.md.02c1f31b.async.js | 1 + ...in__traindetail.zh-CN.md.1e004612.async.js | 1 + ...M__main__mftvlm.en-US.md.5d799a2c.async.js | 1 + ...M__main__mftvlm.zh-CN.md.08bbe55b.async.js | 1 + ...ain__quickstart.en-US.md.9410cf75.async.js | 1 + ...ain__quickstart.zh-CN.md.ef7a348a.async.js | 1 + ...eFuseModelCache.en-US.md.7f6c8112.async.js | 1 + ...eFuseModelCache.zh-CN.md.946832d4.async.js | 1 + ...e__main__config.en-US.md.62bc81ba.async.js | 1 + ...e__main__config.zh-CN.md.425054b2.async.js | 1 + ...__main__feature.en-US.md.26cbdd6a.async.js | 1 + ...__main__feature.zh-CN.md.529d9721.async.js | 1 + ...ain__quickstart.en-US.md.f366cc37.async.js | 1 + ...ain__quickstart.zh-CN.md.98a3e55c.async.js | 1 + ...n__release_note.en-US.md.9118cc29.async.js | 1 + ...n__release_note.zh-CN.md.0510af80.async.js | 1 + ...__CodeFuseQuery.en-US.md.a61c8e45.async.js | 1 + ...__CodeFuseQuery.zh-CN.md.7e7b303a.async.js | 1 + ...script_language.en-US.md.823d735e.async.js | 1 + ...script_language.zh-CN.md.ac5a4608.async.js | 1 + ...install_and_run.en-US.md.b6ce4856.async.js | 1 + ...install_and_run.zh-CN.md.a5c4ffc5.async.js | 1 + ...n__introduction.en-US.md.6654d28d.async.js | 1 + ...n__introduction.zh-CN.md.8987a92a.async.js | 1 + ...main__toolchain.en-US.md.9f19f77e.async.js | 1 + ...main__toolchain.zh-CN.md.8f2b033f.async.js | 1 + ...main__user_case.en-US.md.08195c28.async.js | 1 + ...main__user_case.zh-CN.md.80369545.async.js | 1 + ...efuse-evalution.en-US.md.b7a62bff.async.js | 1 + ...efuse-evalution.zh-CN.md.f0dd9ef5.async.js | 1 + ...ain__quickstart.en-US.md.79cb4c01.async.js | 1 + ...ain__quickstart.zh-CN.md.89a4242d.async.js | 1 + ..._main__MFTCoder.en-US.md.27fea338.async.js | 1 + ..._main__MFTCoder.zh-CN.md.c44fffb6.async.js | 1 + ...ain__accelerate.en-US.md.ec18f690.async.js | 1 + ...ain__accelerate.zh-CN.md.6025f4d6.async.js | 1 + ...r__main__atorch.en-US.md.d3199f3b.async.js | 1 + ...r__main__atorch.zh-CN.md.7c6c9cb0.async.js | 1 + ...n__introduction.en-US.md.9e82e5c7.async.js | 1 + ...n__introduction.zh-CN.md.43f846d2.async.js | 1 + ...ain__quickstart.en-US.md.6d80a8b4.async.js | 1 + ...ain__quickstart.zh-CN.md.2c7d6afb.async.js | 1 + ...main__TestAgent.en-US.md.6d35be20.async.js | 1 + ...main__TestAgent.zh-CN.md.7157e7da.async.js | 1 + ...ain__quickstart.en-US.md.4ef2aac4.async.js | 1 + ...ain__quickstart.zh-CN.md.d6364f26.async.js | 1 + docs/docs__index.en-US.md.cececbb0.async.js | 1 + docs/docs__index.zh-CN.md.4b3c9bde.async.js | 1 + ...on__publication.en-US.md.199743e4.async.js | 1 + ...on__publication.zh-CN.md.9db686bb.async.js | 1 + ...ayouts__DocLayout__index.642c56d0.async.js | 16 + ...youts__DocLayout__index.bd481d6e.chunk.css | 5 + ...i__theme__ContextWrapper.875dc224.async.js | 1 + docs/index.html | 15 + docs/meta__docs.77279989.async.js | 480 + docs/meta__docs__en-US.c678d2bb.async.js | 4301 ++ docs/meta__docs__zh-CN.9e5e95b8.async.js | 5587 +++ ...ist__client__pages__404.8b85f2d9.chunk.css | 1 + ...dist__client__pages__404.d232ceaa.async.js | 1 + ...ent__pages__Demo__index.578aa5c0.chunk.css | 1 + ...ient__pages__Demo__index.c822a051.async.js | 1 + docs/preload_helper.93929ef8.js | 1 + docs/publication/publication/index.html | 15 + ...agent-flow.png => agent-flow.c2afcd91.png} | Bin .../baseagent.png => baseagent.37d27565.png} | Bin ...oragent.png => executoragent.3131e5b1.png} | Bin ...ork.png => muagent_framework.56842181.png} | Bin ...actagent.webp => reactagent.a2c7af88.webp} | Bin ...agent.webp => selectoragent.b3dcf0af.webp} | Bin docs/static/slick.25572f22.eot | Bin 0 -> 2048 bytes docs/static/slick.653a4cbb.woff | Bin 0 -> 1380 bytes docs/static/slick.6aa1ee46.ttf | Bin 0 -> 1892 bytes docs/static/slick.d4bc62a2.svg | 1 + docs/umi.8faca2de.css | 1 + docs/umi.aa6e129e.js | 154 + docs/zh-CN/aboutDocs/aboutdocs/index.html | 15 + docs/zh-CN/blogDetails/001/index.html | 15 + docs/zh-CN/blogDetails/20231101/index.html | 15 + docs/zh-CN/blogDetails/20231211/index.html | 15 + docs/zh-CN/blogDetails/20231220/index.html | 15 + docs/zh-CN/blogDetails/20240119/index.html | 15 + docs/zh-CN/blogDetails/20240123/index.html | 15 + docs/zh-CN/blogDetails/20240423/index.html | 15 + docs/zh-CN/blogDetails/20240614/index.html | 15 + docs/zh-CN/blogDetails/20240703/index.html | 15 + docs/zh-CN/blogDetails/20240705/index.html | 15 + docs/zh-CN/blogDetails/20240706/index.html | 15 + docs/zh-CN/blogDetails/20240805/index.html | 15 + docs/zh-CN/blogDetails/20240807/index.html | 15 + docs/zh-CN/blogDetails/20240820/index.html | 15 + docs/zh-CN/blogDetails/20240914/index.html | 15 + docs/zh-CN/blogDetails/blogDeatils/index.html | 15 + docs/zh-CN/blogs/blogs/index.html | 15 + .../contribution/acknowledgements/index.html | 15 + .../contribution/contribution/index.html | 15 + docs/zh-CN/contribution/issue/index.html | 15 + docs/zh-CN/contribution/pr/index.html | 15 + docs/zh-CN/docs/about/overview/index.html | 15 + .../connector/connector_agent/index.html | 15 + .../connector/connector_chain/index.html | 15 + .../connector_localmemory/index.html | 15 + .../connector/connector_memory/index.html | 15 + .../connector/connector_phase/index.html | 15 + .../connector/connector_prompt/index.html | 15 + .../connector_tbasememory/index.html | 15 + .../connector/customed_examples/index.html | 15 + .../llm_models/embedding_config/index.html | 15 + .../MuAgent/llm_models/llm_config/index.html | 15 + .../MuAgent/overview/agent-flow/index.html | 15 + .../MuAgent/overview/multi-agent/index.html | 15 + .../MuAgent/overview/quick-start/index.html | 15 + .../retrieval/custom_retrieval/index.html | 15 + .../MuAgent/tools/custom_tool/index.html | 15 + .../master/codefusechatbot/index.html | 15 + .../master/fastchat/index.html | 15 + .../master/quickstart/index.html | 15 + .../master/roadmap/index.html | 15 + .../master/start-detail/index.html | 15 + .../master/codefuseDevopsEval/index.html | 15 + .../master/data/index.html | 15 + .../master/evaluate/index.html | 15 + .../master/tool_learning_evalution/index.html | 15 + .../master/tool_learning_info_zh/index.html | 15 + .../master/tutorial/index.html | 15 + .../main/codefuseDevopsModel/index.html | 15 + .../main/quickstart/index.html | 15 + .../main/traindetail/index.html | 15 + .../CodeFuse-MFT-VLM/main/mftvlm/index.html | 15 + .../main/quickstart/index.html | 15 + .../main/CodeFuseModelCache/index.html | 15 + .../main/config/index.html | 15 + .../main/feature/index.html | 15 + .../main/quickstart/index.html | 15 + .../main/release_note/index.html | 15 + .../main/CodeFuseQuery/index.html | 15 + .../main/godelscript_language/index.html | 15 + .../main/install_and_run/index.html | 15 + .../main/introduction/index.html | 15 + .../CodeFuse-Query/main/toolchain/index.html | 15 + .../CodeFuse-Query/main/user_case/index.html | 15 + .../main/codefuse-evalution/index.html | 15 + .../main/quickstart/index.html | 15 + .../MFTCoder/main/MFTCoder/index.html | 15 + .../MFTCoder/main/accelerate/index.html | 15 + .../MFTCoder/main/atorch/index.html | 15 + .../MFTCoder/main/introduction/index.html | 15 + .../MFTCoder/main/quickstart/index.html | 15 + .../Test-Agent/main/TestAgent/index.html | 15 + .../Test-Agent/main/quickstart/index.html | 15 + docs/zh-CN/index.html | 15 + docs/zh-CN/publication/publication/index.html | 15 + docs/~demos/:id/index.html | 15 + {docs => docss}/aboutDocs/aboutdocs.en-US.md | 0 {docs => docss}/aboutDocs/aboutdocs.zh-CN.md | 0 {docs => docss}/blogDetails/001.en-US.md | 0 {docs => docss}/blogDetails/001.zh-CN.md | 0 {docs => docss}/blogDetails/20231101.en-US.md | 0 {docs => docss}/blogDetails/20231101.zh-CN.md | 0 {docs => docss}/blogDetails/20231211.en-US.md | 0 {docs => docss}/blogDetails/20231211.zh-CN.md | 0 {docs => docss}/blogDetails/20231220.en-US.md | 0 {docs => docss}/blogDetails/20231220.zh-CN.md | 0 {docs => docss}/blogDetails/20240119.en-US.md | 0 {docs => docss}/blogDetails/20240119.zh-CN.md | 0 {docs => docss}/blogDetails/20240123.en-US.md | 0 {docs => docss}/blogDetails/20240123.zh-CN.md | 0 {docs => docss}/blogDetails/20240423.en-US.md | 0 {docs => docss}/blogDetails/20240423.zh-CN.md | 0 {docs => docss}/blogDetails/20240614.en-US.md | 0 {docs => docss}/blogDetails/20240614.zh-CN.md | 0 {docs => docss}/blogDetails/20240703.en-US.md | 0 {docs => docss}/blogDetails/20240703.zh-CN.md | 0 {docs => docss}/blogDetails/20240705.en-US.md | 0 {docs => docss}/blogDetails/20240705.zh-CN.md | 0 {docs => docss}/blogDetails/20240706.en-US.md | 0 {docs => docss}/blogDetails/20240706.zh-CN.md | 0 {docs => docss}/blogDetails/20240805.en-US.md | 0 {docs => docss}/blogDetails/20240805.zh-CN.md | 0 {docs => docss}/blogDetails/20240807.en-US.md | 0 {docs => docss}/blogDetails/20240807.zh-CN.md | 0 {docs => docss}/blogDetails/20240820.en-US.md | 0 {docs => docss}/blogDetails/20240820.zh-CN.md | 0 {docs => docss}/blogDetails/20240914.en-US.md | 0 {docs => docss}/blogDetails/20240914.zh-CN.md | 0 .../blogDetails/blogDeatils.zh-CN.md | 0 .../blogDetails/blogDetails.en-US.md | 0 {docs => docss}/blogs/blogs.en-US.md | 0 {docs => docss}/blogs/blogs.zh-CN.md | 0 .../contribution/acknowledgements.en-US.md | 0 .../contribution/acknowledgements.zh-CN.md | 0 .../contribution/contribution.en-US.md | 0 .../contribution/contribution.zh-CN.md | 0 {docs => docss}/contribution/issue.en-US.md | 0 {docs => docss}/contribution/issue.zh-CN.md | 0 {docs => docss}/contribution/pr.en-US.md | 0 {docs => docss}/contribution/pr.zh-CN.md | 0 {docs => docss}/docs/about/overview.en-US.md | 0 {docs => docss}/docs/about/overview.zh-CN.md | 0 .../connector/connector_agent.en-US.md | 0 .../connector/connector_agent.zh-CN.md | 0 .../connector/connector_chain.en-US.md | 0 .../connector/connector_chain.zh-CN.md | 0 .../connector/connector_localmemory.en-US.md | 0 .../connector/connector_localmemory.zh-CN.md | 0 .../connector/connector_memory.en-US.md | 0 .../connector/connector_memory.zh-CN.md | 0 .../connector/connector_phase.en-US.md | 0 .../connector/connector_phase.zh-CN.md | 0 .../connector/connector_prompt.en-US.md | 0 .../connector/connector_prompt.zh-CN.md | 0 .../connector/connector_tbasememory.en-US.md | 0 .../connector/connector_tbasememory.zh-CN.md | 0 .../connector/customed_examples.en-US.md | 0 .../connector/customed_examples.zh-CN.md | 0 .../llm_models/embedding_config.en-US.md | 0 .../llm_models/embedding_config.zh-CN.md | 0 .../MuAgent/llm_models/llm_config.en-US.md | 0 .../MuAgent/llm_models/llm_config.zh-CN.md | 0 .../MuAgent/overview/agent-flow.en-US.md | 0 .../MuAgent/overview/agent-flow.zh-CN.md | 0 .../MuAgent/overview/multi-agent.en-US.md | 0 .../MuAgent/overview/multi-agent.zh-CN.md | 0 .../MuAgent/overview/quick-start.en-US.md | 0 .../MuAgent/overview/quick-start.zh-CN.md | 0 .../retrieval/custom_retrieval.en-US.md | 0 .../retrieval/custom_retrieval.zh-CN.md | 0 .../MuAgent/tools/custom_tool.en-US.md | 0 .../MuAgent/tools/custom_tool.zh-CN.md | 0 .../master/codefusechatbot.en-US.md | 0 .../master/codefusechatbot.zh-CN.md | 0 .../CodeFuse-ChatBot/master/fastchat.en-US.md | 0 .../CodeFuse-ChatBot/master/fastchat.zh-CN.md | 0 .../master/quickstart.en-US.md | 0 .../master/quickstart.zh-CN.md | 0 .../CodeFuse-ChatBot/master/roadmap.en-US.md | 0 .../CodeFuse-ChatBot/master/roadmap.zh-CN.md | 0 .../master/start-detail.en-US.md | 0 .../master/start-detail.zh-CN.md | 0 .../master/categroy_mapping.md | 0 .../master/codefuseDevopsEval.en-US.md | 0 .../master/codefuseDevopsEval.zh-CN.md | 0 .../CodeFuse-DevOps-Eval/master/data.en-US.md | 0 .../CodeFuse-DevOps-Eval/master/data.zh-CN.md | 0 .../master/evaluate.en-US.md | 0 .../master/evaluate.zh-CN.md | 0 .../master/tool_learning_evalution.en-US.md | 0 .../master/tool_learning_evalution.zh-CN.md | 0 .../master/tool_learning_info_zh.en-US.md | 0 .../master/tool_learning_info_zh.zh-CN.md | 0 .../master/tutorial.en-US.md | 0 .../master/tutorial.zh-CN.md | 0 .../main/codefuseDevopsModel.en-US.md | 0 .../main/codefuseDevopsModel.zh-CN.md | 0 .../main/quickstart.en-US.md | 0 .../main/quickstart.zh-CN.md | 0 .../main/traindetail.en-US.md | 0 .../main/traindetail.zh-CN.md | 0 .../CodeFuse-MFT-VLM/main/mftvlm.en-US.md | 0 .../CodeFuse-MFT-VLM/main/mftvlm.zh-CN.md | 0 .../CodeFuse-MFT-VLM/main/quickstart.en-US.md | 0 .../CodeFuse-MFT-VLM/main/quickstart.zh-CN.md | 0 .../main/CodeFuseModelCache.en-US.md | 0 .../main/CodeFuseModelCache.zh-CN.md | 0 .../CodeFuse-ModelCache/main/config.en-US.md | 0 .../CodeFuse-ModelCache/main/config.zh-CN.md | 0 .../CodeFuse-ModelCache/main/feature.en-US.md | 0 .../CodeFuse-ModelCache/main/feature.zh-CN.md | 0 .../main/quickstart.en-US.md | 0 .../main/quickstart.zh-CN.md | 0 .../main/release_note.en-US.md | 0 .../main/release_note.zh-CN.md | 0 .../main/CodeFuseQuery.en-US.md | 0 .../main/CodeFuseQuery.zh-CN.md | 0 .../main/godelscript_language.en-US.md | 0 .../main/godelscript_language.zh-CN.md | 0 .../main/install_and_run.en-US.md | 0 .../main/install_and_run.zh-CN.md | 0 .../CodeFuse-Query/main/introduction.en-US.md | 0 .../CodeFuse-Query/main/introduction.zh-CN.md | 0 .../CodeFuse-Query/main/toolchain.en-US.md | 0 .../CodeFuse-Query/main/toolchain.zh-CN.md | 0 .../CodeFuse-Query/main/user_case.en-US.md | 0 .../CodeFuse-Query/main/user_case.zh-CN.md | 0 .../main/codefuse-evalution.en-US.md | 0 .../main/codefuse-evalution.zh-CN.md | 0 .../main/quickstart.en-US.md | 0 .../main/quickstart.zh-CN.md | 0 .../MFTCoder/main/MFTCoder.en-US.md | 0 .../MFTCoder/main/MFTCoder.zh-CN.md | 0 .../MFTCoder/main/accelerate.en-US.md | 0 .../MFTCoder/main/accelerate.zh-CN.md | 0 .../MFTCoder/main/atorch.en-US.md | 0 .../MFTCoder/main/atorch.zh-CN.md | 0 .../MFTCoder/main/introduction.en-US.md | 0 .../MFTCoder/main/introduction.zh-CN.md | 0 .../MFTCoder/main/quickstart.en-US.md | 0 .../MFTCoder/main/quickstart.zh-CN.md | 0 .../Test-Agent/main/TestAgent.en-US.md | 0 .../Test-Agent/main/TestAgent.zh-CN.md | 0 .../Test-Agent/main/quickstart.en-US.md | 0 .../Test-Agent/main/quickstart.zh-CN.md | 0 {docs => docss}/index.en-US.md | 0 {docs => docss}/index.zh-CN.md | 0 .../publication/publication.en-US.md | 0 .../publication/publication.zh-CN.md | 0 docss/static/api-docs/muAgent/agent-flow.png | Bin 0 -> 141364 bytes docss/static/api-docs/muAgent/baseagent.png | Bin 0 -> 161837 bytes .../static/api-docs/muAgent/executoragent.png | Bin 0 -> 196760 bytes .../api-docs/muAgent/muagent_framework.png | Bin 0 -> 352061 bytes docss/static/api-docs/muAgent/reactagent.webp | Bin 0 -> 27694 bytes .../api-docs/muAgent/selectoragent.webp | Bin 0 -> 32316 bytes package-lock.json | 33507 ---------------- 493 files changed, 13242 insertions(+), 33507 deletions(-) create mode 100644 docs/404.html create mode 100644 docs/4078.e3dba83b.async.js create mode 100644 docs/7762.b11ee80b.async.js create mode 100644 docs/aboutDocs/aboutdocs/index.html create mode 100644 docs/blogDetails/001/index.html create mode 100644 docs/blogDetails/20231101/index.html create mode 100644 docs/blogDetails/20231211/index.html create mode 100644 docs/blogDetails/20231220/index.html create mode 100644 docs/blogDetails/20240119/index.html create mode 100644 docs/blogDetails/20240123/index.html create mode 100644 docs/blogDetails/20240423/index.html create mode 100644 docs/blogDetails/20240614/index.html create mode 100644 docs/blogDetails/20240703/index.html create mode 100644 docs/blogDetails/20240705/index.html create mode 100644 docs/blogDetails/20240706/index.html create mode 100644 docs/blogDetails/20240805/index.html create mode 100644 docs/blogDetails/20240807/index.html create mode 100644 docs/blogDetails/20240820/index.html create mode 100644 docs/blogDetails/20240914/index.html create mode 100644 docs/blogDetails/blogDetails/index.html create mode 100644 docs/blogs/blogs/index.html create mode 100644 docs/contribution/acknowledgements/index.html create mode 100644 docs/contribution/contribution/index.html create mode 100644 docs/contribution/issue/index.html create mode 100644 docs/contribution/pr/index.html create mode 100644 docs/docs/about/overview/index.html create mode 100644 docs/docs/api-docs/MuAgent/connector/connector_agent/index.html create mode 100644 docs/docs/api-docs/MuAgent/connector/connector_chain/index.html create mode 100644 docs/docs/api-docs/MuAgent/connector/connector_localmemory/index.html create mode 100644 docs/docs/api-docs/MuAgent/connector/connector_memory/index.html create mode 100644 docs/docs/api-docs/MuAgent/connector/connector_phase/index.html create mode 100644 docs/docs/api-docs/MuAgent/connector/connector_prompt/index.html create mode 100644 docs/docs/api-docs/MuAgent/connector/connector_tbasememory/index.html create mode 100644 docs/docs/api-docs/MuAgent/connector/customed_examples/index.html create mode 100644 docs/docs/api-docs/MuAgent/llm_models/embedding_config/index.html create mode 100644 docs/docs/api-docs/MuAgent/llm_models/llm_config/index.html create mode 100644 docs/docs/api-docs/MuAgent/overview/agent-flow/index.html create mode 100644 docs/docs/api-docs/MuAgent/overview/multi-agent/index.html create mode 100644 docs/docs/api-docs/MuAgent/overview/quick-start/index.html create mode 100644 docs/docs/api-docs/MuAgent/retrieval/custom_retrieval/index.html create mode 100644 docs/docs/api-docs/MuAgent/tools/custom_tool/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ChatBot/master/codefusechatbot/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ChatBot/master/fastchat/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ChatBot/master/quickstart/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ChatBot/master/roadmap/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ChatBot/master/start-detail/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Eval/master/categroy_mapping/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Eval/master/codefuseDevopsEval/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Eval/master/data/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Eval/master/evaluate/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Eval/master/tool_learning_evalution/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Eval/master/tool_learning_info_zh/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Eval/master/tutorial/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Model/main/codefuseDevopsModel/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Model/main/quickstart/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-DevOps-Model/main/traindetail/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-MFT-VLM/main/mftvlm/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-MFT-VLM/main/quickstart/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ModelCache/main/CodeFuseModelCache/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ModelCache/main/config/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ModelCache/main/feature/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ModelCache/main/quickstart/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-ModelCache/main/release_note/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-Query/main/CodeFuseQuery/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-Query/main/godelscript_language/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-Query/main/install_and_run/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-Query/main/introduction/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-Query/main/toolchain/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-Query/main/user_case/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-evalution/main/codefuse-evalution/index.html create mode 100644 docs/docs/developer-docs/CodeFuse-evalution/main/quickstart/index.html create mode 100644 docs/docs/developer-docs/MFTCoder/main/MFTCoder/index.html create mode 100644 docs/docs/developer-docs/MFTCoder/main/accelerate/index.html create mode 100644 docs/docs/developer-docs/MFTCoder/main/atorch/index.html create mode 100644 docs/docs/developer-docs/MFTCoder/main/introduction/index.html create mode 100644 docs/docs/developer-docs/MFTCoder/main/quickstart/index.html create mode 100644 docs/docs/developer-docs/Test-Agent/main/TestAgent/index.html create mode 100644 docs/docs/developer-docs/Test-Agent/main/quickstart/index.html create mode 100644 docs/docs__aboutDocs__aboutdocs.en-US.md.a96833cb.async.js create mode 100644 docs/docs__aboutDocs__aboutdocs.zh-CN.md.bd9809c7.async.js create mode 100644 docs/docs__blogDetails__001.en-US.md.f7856f51.async.js create mode 100644 docs/docs__blogDetails__001.zh-CN.md.f2ddcf98.async.js create mode 100644 docs/docs__blogDetails__20231101.en-US.md.c091f3c2.async.js create mode 100644 docs/docs__blogDetails__20231101.zh-CN.md.cb8ef965.async.js create mode 100644 docs/docs__blogDetails__20231211.en-US.md.af940248.async.js create mode 100644 docs/docs__blogDetails__20231211.zh-CN.md.8e54f4e9.async.js create mode 100644 docs/docs__blogDetails__20231220.en-US.md.ea6976de.async.js create mode 100644 docs/docs__blogDetails__20231220.zh-CN.md.b2b4305a.async.js create mode 100644 docs/docs__blogDetails__20240119.en-US.md.c219010a.async.js create mode 100644 docs/docs__blogDetails__20240119.zh-CN.md.29fb9c30.async.js create mode 100644 docs/docs__blogDetails__20240123.en-US.md.e45a36fe.async.js create mode 100644 docs/docs__blogDetails__20240123.zh-CN.md.cee344aa.async.js create mode 100644 docs/docs__blogDetails__20240423.en-US.md.517b9453.async.js create mode 100644 docs/docs__blogDetails__20240423.zh-CN.md.af9ebe0d.async.js create mode 100644 docs/docs__blogDetails__20240614.en-US.md.79d4a789.async.js create mode 100644 docs/docs__blogDetails__20240614.zh-CN.md.9641f7f8.async.js create mode 100644 docs/docs__blogDetails__20240703.en-US.md.5cf41c69.async.js create mode 100644 docs/docs__blogDetails__20240703.zh-CN.md.16ae4ef9.async.js create mode 100644 docs/docs__blogDetails__20240705.en-US.md.bbafb41f.async.js create mode 100644 docs/docs__blogDetails__20240705.zh-CN.md.3d0990d0.async.js create mode 100644 docs/docs__blogDetails__20240706.en-US.md.1d735cc3.async.js create mode 100644 docs/docs__blogDetails__20240706.zh-CN.md.9fd95cd6.async.js create mode 100644 docs/docs__blogDetails__20240805.en-US.md.55598f19.async.js create mode 100644 docs/docs__blogDetails__20240805.zh-CN.md.bf1d7f90.async.js create mode 100644 docs/docs__blogDetails__20240807.en-US.md.50c434bb.async.js create mode 100644 docs/docs__blogDetails__20240807.zh-CN.md.20cd97cb.async.js create mode 100644 docs/docs__blogDetails__20240820.en-US.md.e21afa28.async.js create mode 100644 docs/docs__blogDetails__20240820.zh-CN.md.c80cfd2d.async.js create mode 100644 docs/docs__blogDetails__20240914.en-US.md.72ef6685.async.js create mode 100644 docs/docs__blogDetails__20240914.zh-CN.md.a7e4394a.async.js create mode 100644 docs/docs__blogDetails__blogDeatils.zh-CN.md.ce34c551.async.js create mode 100644 docs/docs__blogDetails__blogDetails.en-US.md.61b50389.async.js create mode 100644 docs/docs__blogs__blogs.en-US.md.e81ec1b2.async.js create mode 100644 docs/docs__blogs__blogs.zh-CN.md.126f8b97.async.js create mode 100644 docs/docs__contribution__acknowledgements.en-US.md.ac6e5ad1.async.js create mode 100644 docs/docs__contribution__acknowledgements.zh-CN.md.1a574757.async.js create mode 100644 docs/docs__contribution__contribution.en-US.md.8818e7cf.async.js create mode 100644 docs/docs__contribution__contribution.zh-CN.md.0d555a3e.async.js create mode 100644 docs/docs__contribution__issue.en-US.md.a10da239.async.js create mode 100644 docs/docs__contribution__issue.zh-CN.md.0d40521d.async.js create mode 100644 docs/docs__contribution__pr.en-US.md.542f18b7.async.js create mode 100644 docs/docs__contribution__pr.zh-CN.md.88f6bb71.async.js create mode 100644 docs/docs__docs__about__overview.en-US.md.296364f9.async.js create mode 100644 docs/docs__docs__about__overview.zh-CN.md.adb4886c.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_agent.en-US.md.4e529ca2.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_agent.zh-CN.md.4509812f.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_chain.en-US.md.fec3f082.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_chain.zh-CN.md.cce17f17.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_localmemory.en-US.md.ab2605f5.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_localmemory.zh-CN.md.5ece070c.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_memory.en-US.md.c9ac2e28.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_memory.zh-CN.md.453fadbd.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_phase.en-US.md.cdee2935.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_phase.zh-CN.md.42a59dcf.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_prompt.en-US.md.0496d2c5.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_prompt.zh-CN.md.29d29536.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_tbasememory.en-US.md.7a4fc035.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__connector_tbasememory.zh-CN.md.15ec83eb.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__customed_examples.en-US.md.ababe456.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__connector__customed_examples.zh-CN.md.a498f5e5.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__llm_models__embedding_config.en-US.md.2d7655b7.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__llm_models__embedding_config.zh-CN.md.2df11220.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__llm_models__llm_config.en-US.md.a8bc3e32.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__llm_models__llm_config.zh-CN.md.ccdd86cd.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__overview__agent-flow.en-US.md.65d0feb1.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__overview__agent-flow.zh-CN.md.5e309171.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__overview__multi-agent.en-US.md.9c3353de.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__overview__multi-agent.zh-CN.md.ef333f0c.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__overview__quick-start.en-US.md.d8d5b5e1.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__overview__quick-start.zh-CN.md.04b39cf5.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__retrieval__custom_retrieval.en-US.md.076e5c24.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__retrieval__custom_retrieval.zh-CN.md.3546abdf.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__tools__custom_tool.en-US.md.533c2a5d.async.js create mode 100644 docs/docs__docs__api-docs__MuAgent__tools__custom_tool.zh-CN.md.24bfc674.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__codefusechatbot.en-US.md.05f1fc16.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__codefusechatbot.zh-CN.md.e76be929.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__fastchat.en-US.md.b346fa40.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__fastchat.zh-CN.md.592194ec.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__quickstart.en-US.md.a50c845d.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__quickstart.zh-CN.md.e25f9d07.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__roadmap.en-US.md.d706c34c.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__roadmap.zh-CN.md.b612b267.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__start-detail.en-US.md.21260153.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ChatBot__master__start-detail.zh-CN.md.cdcaf2d6.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__categroy_mapping.md.0e3549dc.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__codefuseDevopsEval.en-US.md.fae97f6c.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__codefuseDevopsEval.zh-CN.md.49a68719.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__data.en-US.md.13115d2b.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__data.zh-CN.md.558ffa29.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__evaluate.en-US.md.47a79af8.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__evaluate.zh-CN.md.71f976a6.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__tool_learning_evalution.en-US.md.7d8b437e.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__tool_learning_evalution.zh-CN.md.e7c6076b.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__tool_learning_info_zh.en-US.md.871ae67c.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__tool_learning_info_zh.zh-CN.md.e31e9cfe.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__tutorial.en-US.md.19680d5e.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Eval__master__tutorial.zh-CN.md.cb0a2e61.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Model__main__codefuseDevopsModel.en-US.md.7bad8757.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Model__main__codefuseDevopsModel.zh-CN.md.dff2fe4d.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Model__main__quickstart.en-US.md.b2f0d906.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Model__main__quickstart.zh-CN.md.faee3325.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Model__main__traindetail.en-US.md.02c1f31b.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-DevOps-Model__main__traindetail.zh-CN.md.1e004612.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-MFT-VLM__main__mftvlm.en-US.md.5d799a2c.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-MFT-VLM__main__mftvlm.zh-CN.md.08bbe55b.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-MFT-VLM__main__quickstart.en-US.md.9410cf75.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-MFT-VLM__main__quickstart.zh-CN.md.ef7a348a.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__CodeFuseModelCache.en-US.md.7f6c8112.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__CodeFuseModelCache.zh-CN.md.946832d4.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__config.en-US.md.62bc81ba.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__config.zh-CN.md.425054b2.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__feature.en-US.md.26cbdd6a.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__feature.zh-CN.md.529d9721.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__quickstart.en-US.md.f366cc37.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__quickstart.zh-CN.md.98a3e55c.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__release_note.en-US.md.9118cc29.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-ModelCache__main__release_note.zh-CN.md.0510af80.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__CodeFuseQuery.en-US.md.a61c8e45.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__CodeFuseQuery.zh-CN.md.7e7b303a.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__godelscript_language.en-US.md.823d735e.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__godelscript_language.zh-CN.md.ac5a4608.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__install_and_run.en-US.md.b6ce4856.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__install_and_run.zh-CN.md.a5c4ffc5.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__introduction.en-US.md.6654d28d.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__introduction.zh-CN.md.8987a92a.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__toolchain.en-US.md.9f19f77e.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__toolchain.zh-CN.md.8f2b033f.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__user_case.en-US.md.08195c28.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-Query__main__user_case.zh-CN.md.80369545.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-evalution__main__codefuse-evalution.en-US.md.b7a62bff.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-evalution__main__codefuse-evalution.zh-CN.md.f0dd9ef5.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-evalution__main__quickstart.en-US.md.79cb4c01.async.js create mode 100644 docs/docs__docs__developer-docs__CodeFuse-evalution__main__quickstart.zh-CN.md.89a4242d.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__MFTCoder.en-US.md.27fea338.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__MFTCoder.zh-CN.md.c44fffb6.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__accelerate.en-US.md.ec18f690.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__accelerate.zh-CN.md.6025f4d6.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__atorch.en-US.md.d3199f3b.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__atorch.zh-CN.md.7c6c9cb0.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__introduction.en-US.md.9e82e5c7.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__introduction.zh-CN.md.43f846d2.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__quickstart.en-US.md.6d80a8b4.async.js create mode 100644 docs/docs__docs__developer-docs__MFTCoder__main__quickstart.zh-CN.md.2c7d6afb.async.js create mode 100644 docs/docs__docs__developer-docs__Test-Agent__main__TestAgent.en-US.md.6d35be20.async.js create mode 100644 docs/docs__docs__developer-docs__Test-Agent__main__TestAgent.zh-CN.md.7157e7da.async.js create mode 100644 docs/docs__docs__developer-docs__Test-Agent__main__quickstart.en-US.md.4ef2aac4.async.js create mode 100644 docs/docs__docs__developer-docs__Test-Agent__main__quickstart.zh-CN.md.d6364f26.async.js create mode 100644 docs/docs__index.en-US.md.cececbb0.async.js create mode 100644 docs/docs__index.zh-CN.md.4b3c9bde.async.js create mode 100644 docs/docs__publication__publication.en-US.md.199743e4.async.js create mode 100644 docs/docs__publication__publication.zh-CN.md.9db686bb.async.js create mode 100644 docs/dumi__theme__layouts__DocLayout__index.642c56d0.async.js create mode 100644 docs/dumi__theme__layouts__DocLayout__index.bd481d6e.chunk.css create mode 100644 docs/dumi__tmp-production__dumi__theme__ContextWrapper.875dc224.async.js create mode 100644 docs/index.html create mode 100644 docs/meta__docs.77279989.async.js create mode 100644 docs/meta__docs__en-US.c678d2bb.async.js create mode 100644 docs/meta__docs__zh-CN.9e5e95b8.async.js create mode 100644 docs/nm__dumi__dist__client__pages__404.8b85f2d9.chunk.css create mode 100644 docs/nm__dumi__dist__client__pages__404.d232ceaa.async.js create mode 100644 docs/nm__dumi__dist__client__pages__Demo__index.578aa5c0.chunk.css create mode 100644 docs/nm__dumi__dist__client__pages__Demo__index.c822a051.async.js create mode 100644 docs/preload_helper.93929ef8.js create mode 100644 docs/publication/publication/index.html rename docs/static/{api-docs/muAgent/agent-flow.png => agent-flow.c2afcd91.png} (100%) rename docs/static/{api-docs/muAgent/baseagent.png => baseagent.37d27565.png} (100%) rename docs/static/{api-docs/muAgent/executoragent.png => executoragent.3131e5b1.png} (100%) rename docs/static/{api-docs/muAgent/muagent_framework.png => muagent_framework.56842181.png} (100%) rename docs/static/{api-docs/muAgent/reactagent.webp => reactagent.a2c7af88.webp} (100%) rename docs/static/{api-docs/muAgent/selectoragent.webp => selectoragent.b3dcf0af.webp} (100%) create mode 100644 docs/static/slick.25572f22.eot create mode 100644 docs/static/slick.653a4cbb.woff create mode 100644 docs/static/slick.6aa1ee46.ttf create mode 100644 docs/static/slick.d4bc62a2.svg create mode 100644 docs/umi.8faca2de.css create mode 100644 docs/umi.aa6e129e.js create mode 100644 docs/zh-CN/aboutDocs/aboutdocs/index.html create mode 100644 docs/zh-CN/blogDetails/001/index.html create mode 100644 docs/zh-CN/blogDetails/20231101/index.html create mode 100644 docs/zh-CN/blogDetails/20231211/index.html create mode 100644 docs/zh-CN/blogDetails/20231220/index.html create mode 100644 docs/zh-CN/blogDetails/20240119/index.html create mode 100644 docs/zh-CN/blogDetails/20240123/index.html create mode 100644 docs/zh-CN/blogDetails/20240423/index.html create mode 100644 docs/zh-CN/blogDetails/20240614/index.html create mode 100644 docs/zh-CN/blogDetails/20240703/index.html create mode 100644 docs/zh-CN/blogDetails/20240705/index.html create mode 100644 docs/zh-CN/blogDetails/20240706/index.html create mode 100644 docs/zh-CN/blogDetails/20240805/index.html create mode 100644 docs/zh-CN/blogDetails/20240807/index.html create mode 100644 docs/zh-CN/blogDetails/20240820/index.html create mode 100644 docs/zh-CN/blogDetails/20240914/index.html create mode 100644 docs/zh-CN/blogDetails/blogDeatils/index.html create mode 100644 docs/zh-CN/blogs/blogs/index.html create mode 100644 docs/zh-CN/contribution/acknowledgements/index.html create mode 100644 docs/zh-CN/contribution/contribution/index.html create mode 100644 docs/zh-CN/contribution/issue/index.html create mode 100644 docs/zh-CN/contribution/pr/index.html create mode 100644 docs/zh-CN/docs/about/overview/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/connector/connector_agent/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/connector/connector_chain/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/connector/connector_localmemory/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/connector/connector_memory/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/connector/connector_phase/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/connector/connector_prompt/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/connector/connector_tbasememory/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/connector/customed_examples/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/llm_models/embedding_config/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/llm_models/llm_config/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/overview/agent-flow/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/overview/multi-agent/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/overview/quick-start/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/retrieval/custom_retrieval/index.html create mode 100644 docs/zh-CN/docs/api-docs/MuAgent/tools/custom_tool/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ChatBot/master/codefusechatbot/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ChatBot/master/fastchat/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ChatBot/master/quickstart/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ChatBot/master/roadmap/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ChatBot/master/start-detail/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Eval/master/codefuseDevopsEval/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Eval/master/data/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Eval/master/evaluate/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Eval/master/tool_learning_evalution/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Eval/master/tool_learning_info_zh/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Eval/master/tutorial/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Model/main/codefuseDevopsModel/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Model/main/quickstart/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-DevOps-Model/main/traindetail/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-MFT-VLM/main/mftvlm/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-MFT-VLM/main/quickstart/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ModelCache/main/CodeFuseModelCache/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ModelCache/main/config/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ModelCache/main/feature/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ModelCache/main/quickstart/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-ModelCache/main/release_note/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-Query/main/CodeFuseQuery/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-Query/main/godelscript_language/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-Query/main/install_and_run/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-Query/main/introduction/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-Query/main/toolchain/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-Query/main/user_case/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-evalution/main/codefuse-evalution/index.html create mode 100644 docs/zh-CN/docs/developer-docs/CodeFuse-evalution/main/quickstart/index.html create mode 100644 docs/zh-CN/docs/developer-docs/MFTCoder/main/MFTCoder/index.html create mode 100644 docs/zh-CN/docs/developer-docs/MFTCoder/main/accelerate/index.html create mode 100644 docs/zh-CN/docs/developer-docs/MFTCoder/main/atorch/index.html create mode 100644 docs/zh-CN/docs/developer-docs/MFTCoder/main/introduction/index.html create mode 100644 docs/zh-CN/docs/developer-docs/MFTCoder/main/quickstart/index.html create mode 100644 docs/zh-CN/docs/developer-docs/Test-Agent/main/TestAgent/index.html create mode 100644 docs/zh-CN/docs/developer-docs/Test-Agent/main/quickstart/index.html create mode 100644 docs/zh-CN/index.html create mode 100644 docs/zh-CN/publication/publication/index.html create mode 100644 docs/~demos/:id/index.html rename {docs => docss}/aboutDocs/aboutdocs.en-US.md (100%) rename {docs => docss}/aboutDocs/aboutdocs.zh-CN.md (100%) rename {docs => docss}/blogDetails/001.en-US.md (100%) rename {docs => docss}/blogDetails/001.zh-CN.md (100%) rename {docs => docss}/blogDetails/20231101.en-US.md (100%) rename {docs => docss}/blogDetails/20231101.zh-CN.md (100%) rename {docs => docss}/blogDetails/20231211.en-US.md (100%) rename {docs => docss}/blogDetails/20231211.zh-CN.md (100%) rename {docs => docss}/blogDetails/20231220.en-US.md (100%) rename {docs => docss}/blogDetails/20231220.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240119.en-US.md (100%) rename {docs => docss}/blogDetails/20240119.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240123.en-US.md (100%) rename {docs => docss}/blogDetails/20240123.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240423.en-US.md (100%) rename {docs => docss}/blogDetails/20240423.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240614.en-US.md (100%) rename {docs => docss}/blogDetails/20240614.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240703.en-US.md (100%) rename {docs => docss}/blogDetails/20240703.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240705.en-US.md (100%) rename {docs => docss}/blogDetails/20240705.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240706.en-US.md (100%) rename {docs => docss}/blogDetails/20240706.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240805.en-US.md (100%) rename {docs => docss}/blogDetails/20240805.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240807.en-US.md (100%) rename {docs => docss}/blogDetails/20240807.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240820.en-US.md (100%) rename {docs => docss}/blogDetails/20240820.zh-CN.md (100%) rename {docs => docss}/blogDetails/20240914.en-US.md (100%) rename {docs => docss}/blogDetails/20240914.zh-CN.md (100%) rename {docs => docss}/blogDetails/blogDeatils.zh-CN.md (100%) rename {docs => docss}/blogDetails/blogDetails.en-US.md (100%) rename {docs => docss}/blogs/blogs.en-US.md (100%) rename {docs => docss}/blogs/blogs.zh-CN.md (100%) rename {docs => docss}/contribution/acknowledgements.en-US.md (100%) rename {docs => docss}/contribution/acknowledgements.zh-CN.md (100%) rename {docs => docss}/contribution/contribution.en-US.md (100%) rename {docs => docss}/contribution/contribution.zh-CN.md (100%) rename {docs => docss}/contribution/issue.en-US.md (100%) rename {docs => docss}/contribution/issue.zh-CN.md (100%) rename {docs => docss}/contribution/pr.en-US.md (100%) rename {docs => docss}/contribution/pr.zh-CN.md (100%) rename {docs => docss}/docs/about/overview.en-US.md (100%) rename {docs => docss}/docs/about/overview.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_agent.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_agent.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_chain.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_chain.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_localmemory.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_localmemory.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_memory.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_memory.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_phase.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_phase.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_prompt.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_prompt.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_tbasememory.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/connector_tbasememory.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/customed_examples.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/connector/customed_examples.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/llm_models/embedding_config.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/llm_models/embedding_config.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/llm_models/llm_config.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/llm_models/llm_config.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/overview/agent-flow.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/overview/agent-flow.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/overview/multi-agent.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/overview/multi-agent.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/overview/quick-start.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/overview/quick-start.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/retrieval/custom_retrieval.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/retrieval/custom_retrieval.zh-CN.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/tools/custom_tool.en-US.md (100%) rename {docs => docss}/docs/api-docs/MuAgent/tools/custom_tool.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/codefusechatbot.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/codefusechatbot.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/fastchat.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/fastchat.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/quickstart.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/quickstart.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/roadmap.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/roadmap.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/start-detail.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ChatBot/master/start-detail.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/categroy_mapping.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/codefuseDevopsEval.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/codefuseDevopsEval.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/data.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/data.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/evaluate.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/evaluate.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/tool_learning_evalution.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/tool_learning_evalution.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/tool_learning_info_zh.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/tool_learning_info_zh.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/tutorial.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Eval/master/tutorial.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Model/main/codefuseDevopsModel.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Model/main/codefuseDevopsModel.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Model/main/quickstart.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Model/main/quickstart.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Model/main/traindetail.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-DevOps-Model/main/traindetail.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-MFT-VLM/main/mftvlm.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-MFT-VLM/main/mftvlm.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-MFT-VLM/main/quickstart.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-MFT-VLM/main/quickstart.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/CodeFuseModelCache.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/CodeFuseModelCache.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/config.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/config.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/feature.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/feature.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/quickstart.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/quickstart.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/release_note.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-ModelCache/main/release_note.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/CodeFuseQuery.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/CodeFuseQuery.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/godelscript_language.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/godelscript_language.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/install_and_run.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/install_and_run.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/introduction.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/introduction.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/toolchain.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/toolchain.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/user_case.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-Query/main/user_case.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-evalution/main/codefuse-evalution.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-evalution/main/codefuse-evalution.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-evalution/main/quickstart.en-US.md (100%) rename {docs => docss}/docs/developer-docs/CodeFuse-evalution/main/quickstart.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/MFTCoder.en-US.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/MFTCoder.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/accelerate.en-US.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/accelerate.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/atorch.en-US.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/atorch.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/introduction.en-US.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/introduction.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/quickstart.en-US.md (100%) rename {docs => docss}/docs/developer-docs/MFTCoder/main/quickstart.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/Test-Agent/main/TestAgent.en-US.md (100%) rename {docs => docss}/docs/developer-docs/Test-Agent/main/TestAgent.zh-CN.md (100%) rename {docs => docss}/docs/developer-docs/Test-Agent/main/quickstart.en-US.md (100%) rename {docs => docss}/docs/developer-docs/Test-Agent/main/quickstart.zh-CN.md (100%) rename {docs => docss}/index.en-US.md (100%) rename {docs => docss}/index.zh-CN.md (100%) rename {docs => docss}/publication/publication.en-US.md (100%) rename {docs => docss}/publication/publication.zh-CN.md (100%) create mode 100644 docss/static/api-docs/muAgent/agent-flow.png create mode 100644 docss/static/api-docs/muAgent/baseagent.png create mode 100644 docss/static/api-docs/muAgent/executoragent.png create mode 100644 docss/static/api-docs/muAgent/muagent_framework.png create mode 100644 docss/static/api-docs/muAgent/reactagent.webp create mode 100644 docss/static/api-docs/muAgent/selectoragent.webp delete mode 100644 package-lock.json diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..6f5a82a --- /dev/null +++ b/docs/404.html @@ -0,0 +1,15 @@ + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/docs/4078.e3dba83b.async.js b/docs/4078.e3dba83b.async.js new file mode 100644 index 0000000..54b495d --- /dev/null +++ b/docs/4078.e3dba83b.async.js @@ -0,0 +1,194 @@ +(self.webpackChunkCodeFuse_Docs=self.webpackChunkCodeFuse_Docs||[]).push([[4078],{84898:function(Ve,k,s){"use strict";s.d(k,{iN:function(){return D},R_:function(){return ue},Ti:function(){return ft},ez:function(){return _}});var r=s(86500),y=s(1350),X=2,j=.16,Z=.05,A=.05,R=.15,v=5,Y=4,O=[{index:7,opacity:.15},{index:6,opacity:.25},{index:5,opacity:.3},{index:5,opacity:.45},{index:5,opacity:.65},{index:5,opacity:.85},{index:4,opacity:.9},{index:3,opacity:.95},{index:2,opacity:.97},{index:1,opacity:.98}];function $(se){var Ye=se.r,De=se.g,xe=se.b,je=(0,r.py)(Ye,De,xe);return{h:je.h*360,s:je.s,v:je.v}}function T(se){var Ye=se.r,De=se.g,xe=se.b;return"#".concat((0,r.vq)(Ye,De,xe,!1))}function b(se,Ye,De){var xe=De/100,je={r:(Ye.r-se.r)*xe+se.r,g:(Ye.g-se.g)*xe+se.g,b:(Ye.b-se.b)*xe+se.b};return je}function we(se,Ye,De){var xe;return Math.round(se.h)>=60&&Math.round(se.h)<=240?xe=De?Math.round(se.h)-X*Ye:Math.round(se.h)+X*Ye:xe=De?Math.round(se.h)+X*Ye:Math.round(se.h)-X*Ye,xe<0?xe+=360:xe>=360&&(xe-=360),xe}function Q(se,Ye,De){if(se.h===0&&se.s===0)return se.s;var xe;return De?xe=se.s-j*Ye:Ye===Y?xe=se.s+j:xe=se.s+Z*Ye,xe>1&&(xe=1),De&&Ye===v&&xe>.1&&(xe=.1),xe<.06&&(xe=.06),Number(xe.toFixed(2))}function J(se,Ye,De){var xe;return De?xe=se.v+A*Ye:xe=se.v-R*Ye,xe>1&&(xe=1),Number(xe.toFixed(2))}function ue(se){for(var Ye=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},De=[],xe=(0,y.uA)(se),je=v;je>0;je-=1){var It=$(xe),cn=T((0,y.uA)({h:we(It,je,!0),s:Q(It,je,!0),v:J(It,je,!0)}));De.push(cn)}De.push(T(xe));for(var Fn=1;Fn<=Y;Fn+=1){var Nn=$(xe),qn=T((0,y.uA)({h:we(Nn,Fn),s:Q(Nn,Fn),v:J(Nn,Fn)}));De.push(qn)}return Ye.theme==="dark"?O.map(function(or){var dr=or.index,Zn=or.opacity,jn=T(b((0,y.uA)(Ye.backgroundColor||"#141414"),(0,y.uA)(De[dr]),Zn*100));return jn}):De}var _={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"},Be=["#fff1f0","#ffccc7","#ffa39e","#ff7875","#ff4d4f","#f5222d","#cf1322","#a8071a","#820014","#5c0011"];Be.primary=Be[5];var Le=["#fff2e8","#ffd8bf","#ffbb96","#ff9c6e","#ff7a45","#fa541c","#d4380d","#ad2102","#871400","#610b00"];Le.primary=Le[5];var Bt=["#fff7e6","#ffe7ba","#ffd591","#ffc069","#ffa940","#fa8c16","#d46b08","#ad4e00","#873800","#612500"];Bt.primary=Bt[5];var vt=["#fffbe6","#fff1b8","#ffe58f","#ffd666","#ffc53d","#faad14","#d48806","#ad6800","#874d00","#613400"];vt.primary=vt[5];var Ae=["#feffe6","#ffffb8","#fffb8f","#fff566","#ffec3d","#fadb14","#d4b106","#ad8b00","#876800","#614700"];Ae.primary=Ae[5];var V=["#fcffe6","#f4ffb8","#eaff8f","#d3f261","#bae637","#a0d911","#7cb305","#5b8c00","#3f6600","#254000"];V.primary=V[5];var he=["#f6ffed","#d9f7be","#b7eb8f","#95de64","#73d13d","#52c41a","#389e0d","#237804","#135200","#092b00"];he.primary=he[5];var q=["#e6fffb","#b5f5ec","#87e8de","#5cdbd3","#36cfc9","#13c2c2","#08979c","#006d75","#00474f","#002329"];q.primary=q[5];var D=["#e6f4ff","#bae0ff","#91caff","#69b1ff","#4096ff","#1677ff","#0958d9","#003eb3","#002c8c","#001d66"];D.primary=D[5];var U=["#f0f5ff","#d6e4ff","#adc6ff","#85a5ff","#597ef7","#2f54eb","#1d39c4","#10239e","#061178","#030852"];U.primary=U[5];var Oe=["#f9f0ff","#efdbff","#d3adf7","#b37feb","#9254de","#722ed1","#531dab","#391085","#22075e","#120338"];Oe.primary=Oe[5];var He=["#fff0f6","#ffd6e7","#ffadd2","#ff85c0","#f759ab","#eb2f96","#c41d7f","#9e1068","#780650","#520339"];He.primary=He[5];var pe=["#a6a6a6","#999999","#8c8c8c","#808080","#737373","#666666","#404040","#1a1a1a","#000000","#000000"];pe.primary=pe[5];var Qe=null,ft={red:Be,volcano:Le,orange:Bt,gold:vt,yellow:Ae,lime:V,green:he,cyan:q,blue:D,geekblue:U,purple:Oe,magenta:He,grey:pe},Pt=["#2a1215","#431418","#58181c","#791a1f","#a61d24","#d32029","#e84749","#f37370","#f89f9a","#fac8c3"];Pt.primary=Pt[5];var g=["#2b1611","#441d12","#592716","#7c3118","#aa3e19","#d84a1b","#e87040","#f3956a","#f8b692","#fad4bc"];g.primary=g[5];var de=["#2b1d11","#442a11","#593815","#7c4a15","#aa6215","#d87a16","#e89a3c","#f3b765","#f8cf8d","#fae3b7"];de.primary=de[5];var ce=["#2b2111","#443111","#594214","#7c5914","#aa7714","#d89614","#e8b339","#f3cc62","#f8df8b","#faedb5"];ce.primary=ce[5];var be=["#2b2611","#443b11","#595014","#7c6e14","#aa9514","#d8bd14","#e8d639","#f3ea62","#f8f48b","#fafab5"];be.primary=be[5];var Me=["#1f2611","#2e3c10","#3e4f13","#536d13","#6f9412","#8bbb11","#a9d134","#c9e75d","#e4f88b","#f0fab5"];Me.primary=Me[5];var $e=["#162312","#1d3712","#274916","#306317","#3c8618","#49aa19","#6abe39","#8fd460","#b2e58b","#d5f2bb"];$e.primary=$e[5];var yt=["#112123","#113536","#144848","#146262","#138585","#13a8a8","#33bcb7","#58d1c9","#84e2d8","#b2f1e8"];yt.primary=yt[5];var Qt=["#111a2c","#112545","#15325b","#15417e","#1554ad","#1668dc","#3c89e8","#65a9f3","#8dc5f8","#b7dcfa"];Qt.primary=Qt[5];var nn=["#131629","#161d40","#1c2755","#203175","#263ea0","#2b4acb","#5273e0","#7f9ef3","#a8c1f8","#d2e0fa"];nn.primary=nn[5];var vn=["#1a1325","#24163a","#301c4d","#3e2069","#51258f","#642ab5","#854eca","#ab7ae0","#cda8f0","#ebd7fa"];vn.primary=vn[5];var Ln=["#291321","#40162f","#551c3b","#75204f","#a02669","#cb2b83","#e0529c","#f37fb7","#f8a8cc","#fad2e3"];Ln.primary=Ln[5];var ht=["#151515","#1f1f1f","#2d2d2d","#393939","#494949","#5a5a5a","#6a6a6a","#7b7b7b","#888888","#969696"];ht.primary=ht[5];var z={red:Pt,volcano:g,orange:de,gold:ce,yellow:be,lime:Me,green:$e,cyan:yt,blue:Qt,geekblue:nn,purple:vn,magenta:Ln,grey:ht}},83262:function(Ve,k,s){"use strict";s.d(k,{rb:function(){return z},IX:function(){return Oe}});var r=s(71002),y=s(97685),X=s(4942),j=s(1413),Z=s(67294),A=s(11568),R=s(15671),v=s(43144),Y=s(97326),O=s(60136),$=s(18486),T=(0,v.Z)(function se(){(0,R.Z)(this,se)}),b=T,we="CALC_UNIT",Q=new RegExp(we,"g");function J(se){return typeof se=="number"?"".concat(se).concat(we):se}var ue=function(se){(0,O.Z)(De,se);var Ye=(0,$.Z)(De);function De(xe,je){var It;(0,R.Z)(this,De),It=Ye.call(this),(0,X.Z)((0,Y.Z)(It),"result",""),(0,X.Z)((0,Y.Z)(It),"unitlessCssVar",void 0),(0,X.Z)((0,Y.Z)(It),"lowPriority",void 0);var cn=(0,r.Z)(xe);return It.unitlessCssVar=je,xe instanceof De?It.result="(".concat(xe.result,")"):cn==="number"?It.result=J(xe):cn==="string"&&(It.result=xe),It}return(0,v.Z)(De,[{key:"add",value:function(je){return je instanceof De?this.result="".concat(this.result," + ").concat(je.getResult()):(typeof je=="number"||typeof je=="string")&&(this.result="".concat(this.result," + ").concat(J(je))),this.lowPriority=!0,this}},{key:"sub",value:function(je){return je instanceof De?this.result="".concat(this.result," - ").concat(je.getResult()):(typeof je=="number"||typeof je=="string")&&(this.result="".concat(this.result," - ").concat(J(je))),this.lowPriority=!0,this}},{key:"mul",value:function(je){return this.lowPriority&&(this.result="(".concat(this.result,")")),je instanceof De?this.result="".concat(this.result," * ").concat(je.getResult(!0)):(typeof je=="number"||typeof je=="string")&&(this.result="".concat(this.result," * ").concat(je)),this.lowPriority=!1,this}},{key:"div",value:function(je){return this.lowPriority&&(this.result="(".concat(this.result,")")),je instanceof De?this.result="".concat(this.result," / ").concat(je.getResult(!0)):(typeof je=="number"||typeof je=="string")&&(this.result="".concat(this.result," / ").concat(je)),this.lowPriority=!1,this}},{key:"getResult",value:function(je){return this.lowPriority||je?"(".concat(this.result,")"):this.result}},{key:"equal",value:function(je){var It=this,cn=je||{},Fn=cn.unit,Nn=!0;return typeof Fn=="boolean"?Nn=Fn:Array.from(this.unitlessCssVar).some(function(qn){return It.result.includes(qn)})&&(Nn=!1),this.result=this.result.replace(Q,Nn?"px":""),typeof this.lowPriority!="undefined"?"calc(".concat(this.result,")"):this.result}}]),De}(b),_=function(se){(0,O.Z)(De,se);var Ye=(0,$.Z)(De);function De(xe){var je;return(0,R.Z)(this,De),je=Ye.call(this),(0,X.Z)((0,Y.Z)(je),"result",0),xe instanceof De?je.result=xe.result:typeof xe=="number"&&(je.result=xe),je}return(0,v.Z)(De,[{key:"add",value:function(je){return je instanceof De?this.result+=je.result:typeof je=="number"&&(this.result+=je),this}},{key:"sub",value:function(je){return je instanceof De?this.result-=je.result:typeof je=="number"&&(this.result-=je),this}},{key:"mul",value:function(je){return je instanceof De?this.result*=je.result:typeof je=="number"&&(this.result*=je),this}},{key:"div",value:function(je){return je instanceof De?this.result/=je.result:typeof je=="number"&&(this.result/=je),this}},{key:"equal",value:function(){return this.result}}]),De}(b),Be=_,Le=function(Ye,De){var xe=Ye==="css"?ue:Be;return function(je){return new xe(je,De)}},Bt=Le,vt=function(Ye,De){return"".concat([De,Ye.replace(/([A-Z]+)([A-Z][a-z]+)/g,"$1-$2").replace(/([a-z])([A-Z])/g,"$1-$2")].filter(Boolean).join("-"))},Ae=vt,V=s(56790);function he(se,Ye,De,xe){var je=(0,j.Z)({},Ye[se]);if(xe!=null&&xe.deprecatedTokens){var It=xe.deprecatedTokens;It.forEach(function(Fn){var Nn=(0,y.Z)(Fn,2),qn=Nn[0],or=Nn[1];if(je!=null&&je[qn]||je!=null&&je[or]){var dr;(dr=je[or])!==null&&dr!==void 0||(je[or]=je==null?void 0:je[qn])}})}var cn=(0,j.Z)((0,j.Z)({},De),je);return Object.keys(cn).forEach(function(Fn){cn[Fn]===Ye[Fn]&&delete cn[Fn]}),cn}var q=he,D=typeof CSSINJS_STATISTIC!="undefined",U=!0;function Oe(){for(var se=arguments.length,Ye=new Array(se),De=0;De1e4){var xe=Date.now();this.lastAccessBeat.forEach(function(je,It){xe-je>Me&&(De.map.delete(It),De.lastAccessBeat.delete(It))}),this.accessBeat=0}}}]),se}(),yt=new $e;function Qt(se,Ye){return Z.useMemo(function(){var De=yt.get(Ye);if(De)return De;var xe=se();return yt.set(Ye,xe),xe},Ye)}var nn=Qt,vn=function(){return{}},Ln=vn;function ht(se){var Ye=se.useCSP,De=Ye===void 0?Ln:Ye,xe=se.useToken,je=se.usePrefix,It=se.getResetStyles,cn=se.getCommonStyle,Fn=se.getCompUnitless;function Nn(Zn,jn,mn,Ft){var Ct=Array.isArray(Zn)?Zn[0]:Zn;function Mt(Ke){return"".concat(String(Ct)).concat(Ke.slice(0,1).toUpperCase()).concat(Ke.slice(1))}var tn=(Ft==null?void 0:Ft.unitless)||{},qt=typeof Fn=="function"?Fn(Zn):{},un=(0,j.Z)((0,j.Z)({},qt),{},(0,X.Z)({},Mt("zIndexPopup"),!0));Object.keys(tn).forEach(function(Ke){un[Mt(Ke)]=tn[Ke]});var hn=(0,j.Z)((0,j.Z)({},Ft),{},{unitless:un,prefixToken:Mt}),gt=or(Zn,jn,mn,hn),tt=qn(Ct,mn,hn);return function(Ke){var mr=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ke,rr=gt(Ke,mr),yr=(0,y.Z)(rr,2),Sr=yr[1],pr=tt(mr),Xn=(0,y.Z)(pr,2),Lr=Xn[0],Mr=Xn[1];return[Lr,Sr,Mr]}}function qn(Zn,jn,mn){var Ft=mn.unitless,Ct=mn.injectStyle,Mt=Ct===void 0?!0:Ct,tn=mn.prefixToken,qt=mn.ignore,un=function(tt){var Ke=tt.rootCls,mr=tt.cssVar,rr=mr===void 0?{}:mr,yr=xe(),Sr=yr.realToken;return(0,A.CI)({path:[Zn],prefix:rr.prefix,key:rr.key,unitless:Ft,ignore:qt,token:Sr,scope:Ke},function(){var pr=de(Zn,Sr,jn),Xn=q(Zn,Sr,pr,{deprecatedTokens:mn==null?void 0:mn.deprecatedTokens});return Object.keys(pr).forEach(function(Lr){Xn[tn(Lr)]=Xn[Lr],delete Xn[Lr]}),Xn}),null},hn=function(tt){var Ke=xe(),mr=Ke.cssVar;return[function(rr){return Mt&&mr?Z.createElement(Z.Fragment,null,Z.createElement(un,{rootCls:tt,cssVar:mr,component:Zn}),rr):rr},mr==null?void 0:mr.key]};return hn}function or(Zn,jn,mn){var Ft=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},Ct=Array.isArray(Zn)?Zn:[Zn,Zn],Mt=(0,y.Z)(Ct,1),tn=Mt[0],qt=Ct.join("-"),un=se.layer||{name:"antd"};return function(hn){var gt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:hn,tt=xe(),Ke=tt.theme,mr=tt.realToken,rr=tt.hashId,yr=tt.token,Sr=tt.cssVar,pr=je(),Xn=pr.rootPrefixCls,Lr=pr.iconPrefixCls,Mr=De(),Nr=Sr?"css":"js",Vr=nn(function(){var Ir=new Set;return Sr&&Object.keys(Ft.unitless||{}).forEach(function($r){Ir.add((0,A.ks)($r,Sr.prefix)),Ir.add((0,A.ks)($r,Ae(tn,Sr.prefix)))}),Bt(Nr,Ir)},[Nr,tn,Sr==null?void 0:Sr.prefix]),Xr=be(Nr),Qr=Xr.max,fr=Xr.min,Hr={theme:Ke,token:yr,hashId:rr,nonce:function(){return Mr.nonce},clientOnly:Ft.clientOnly,layer:un,order:Ft.order||-999};(0,A.xy)((0,j.Z)((0,j.Z)({},Hr),{},{clientOnly:!1,path:["Shared",Xn]}),function(){return typeof It=="function"?It(yr):[]});var Ur=(0,A.xy)((0,j.Z)((0,j.Z)({},Hr),{},{path:[qt,hn,Lr]}),function(){if(Ft.injectStyle===!1)return[];var Ir=Pt(yr),$r=Ir.token,Er=Ir.flush,Zr=de(tn,mr,mn),to=".".concat(hn),Fr=q(tn,mr,Zr,{deprecatedTokens:Ft.deprecatedTokens});Sr&&Zr&&(0,r.Z)(Zr)==="object"&&Object.keys(Zr).forEach(function(Jr){Zr[Jr]="var(".concat((0,A.ks)(Jr,Ae(tn,Sr.prefix)),")")});var kr=Oe($r,{componentCls:to,prefixCls:hn,iconCls:".".concat(Lr),antCls:".".concat(Xn),calc:Vr,max:Qr,min:fr},Sr?Zr:Fr),so=jn(kr,{hashId:rr,prefixCls:hn,rootPrefixCls:Xn,iconPrefixCls:Lr});Er(tn,Fr);var mo=typeof cn=="function"?cn(kr,hn,gt,Ft.resetFont):null;return[Ft.resetStyle===!1?null:mo,so]});return[Ur,rr]}}function dr(Zn,jn,mn){var Ft=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},Ct=or(Zn,jn,mn,(0,j.Z)({resetStyle:!1,order:-998},Ft)),Mt=function(qt){var un=qt.prefixCls,hn=qt.rootCls,gt=hn===void 0?un:hn;return Ct(un,gt),null};return Mt}return{genStyleHooks:Nn,genSubStyleComponent:dr,genComponentStyleHook:or}}var z=ht},11568:function(Ve,k,s){"use strict";s.d(k,{E4:function(){return oe},jG:function(){return yt},t2:function(){return $r},ks:function(){return Zn},bf:function(){return or},CI:function(){return Yt},fp:function(){return Zr},xy:function(){return Hn}});var r=s(4942),y=s(97685),X=s(74902),j=s(1413);function Z(M){for(var G=0,B,le=0,Ce=M.length;Ce>=4;++le,Ce-=4)B=M.charCodeAt(le)&255|(M.charCodeAt(++le)&255)<<8|(M.charCodeAt(++le)&255)<<16|(M.charCodeAt(++le)&255)<<24,B=(B&65535)*1540483477+((B>>>16)*59797<<16),B^=B>>>24,G=(B&65535)*1540483477+((B>>>16)*59797<<16)^(G&65535)*1540483477+((G>>>16)*59797<<16);switch(Ce){case 3:G^=(M.charCodeAt(le+2)&255)<<16;case 2:G^=(M.charCodeAt(le+1)&255)<<8;case 1:G^=M.charCodeAt(le)&255,G=(G&65535)*1540483477+((G>>>16)*59797<<16)}return G^=G>>>13,G=(G&65535)*1540483477+((G>>>16)*59797<<16),((G^G>>>15)>>>0).toString(36)}var A=Z,R=s(48981),v=s(67294),Y=s.t(v,2),O=s(56982),$=s(91881),T=s(15671),b=s(43144),we="%";function Q(M){return M.join(we)}var J=function(){function M(G){(0,T.Z)(this,M),(0,r.Z)(this,"instanceId",void 0),(0,r.Z)(this,"cache",new Map),this.instanceId=G}return(0,b.Z)(M,[{key:"get",value:function(B){return this.opGet(Q(B))}},{key:"opGet",value:function(B){return this.cache.get(B)||null}},{key:"update",value:function(B,le){return this.opUpdate(Q(B),le)}},{key:"opUpdate",value:function(B,le){var Ce=this.cache.get(B),Ue=le(Ce);Ue===null?this.cache.delete(B):this.cache.set(B,Ue)}}]),M}(),ue=J,_=null,Be="data-token-hash",Le="data-css-hash",Bt="data-cache-path",vt="__cssinjs_instance__";function Ae(){var M=Math.random().toString(12).slice(2);if(typeof document!="undefined"&&document.head&&document.body){var G=document.body.querySelectorAll("style[".concat(Le,"]"))||[],B=document.head.firstChild;Array.from(G).forEach(function(Ce){Ce[vt]=Ce[vt]||M,Ce[vt]===M&&document.head.insertBefore(Ce,B)});var le={};Array.from(document.querySelectorAll("style[".concat(Le,"]"))).forEach(function(Ce){var Ue=Ce.getAttribute(Le);if(le[Ue]){if(Ce[vt]===M){var ot;(ot=Ce.parentNode)===null||ot===void 0||ot.removeChild(Ce)}}else le[Ue]=!0})}return new ue(M)}var V=v.createContext({hashPriority:"low",cache:Ae(),defaultCache:!0}),he=function(G){var B=G.children,le=_objectWithoutProperties(G,_),Ce=React.useContext(V),Ue=useMemo(function(){var ot=_objectSpread({},Ce);Object.keys(le).forEach(function(lt){var l=le[lt];le[lt]!==void 0&&(ot[lt]=l)});var dt=le.cache;return ot.cache=ot.cache||Ae(),ot.defaultCache=!dt&&Ce.defaultCache,ot},[Ce,le],function(ot,dt){return!isEqual(ot[0],dt[0],!0)||!isEqual(ot[1],dt[1],!0)});return React.createElement(V.Provider,{value:Ue},B)},q=V,D=s(71002),U=s(98924),Oe="CALC_UNIT",He=new RegExp(Oe,"g");function pe(M){return typeof M=="number"?"".concat(M).concat(Oe):M}var Qe=null,ft=function(G,B){var le=G==="css"?CSSCalculator:NumCalculator;return function(Ce){return new le(Ce,B)}},Pt=null;function g(M,G){if(M.length!==G.length)return!1;for(var B=0;B1&&arguments[1]!==void 0?arguments[1]:!1,ot={map:this.cache};return B.forEach(function(dt){if(!ot)ot=void 0;else{var lt;ot=(lt=ot)===null||lt===void 0||(lt=lt.map)===null||lt===void 0?void 0:lt.get(dt)}}),(le=ot)!==null&&le!==void 0&&le.value&&Ue&&(ot.value[1]=this.cacheCallTimes++),(Ce=ot)===null||Ce===void 0?void 0:Ce.value}},{key:"get",value:function(B){var le;return(le=this.internalGet(B,!0))===null||le===void 0?void 0:le[0]}},{key:"has",value:function(B){return!!this.internalGet(B)}},{key:"set",value:function(B,le){var Ce=this;if(!this.has(B)){if(this.size()+1>M.MAX_CACHE_SIZE+M.MAX_CACHE_OFFSET){var Ue=this.keys.reduce(function(l,d){var p=(0,y.Z)(l,2),x=p[1];return Ce.internalGet(d)[1]0,"[Ant Design CSS-in-JS] Theme should have at least one derivative function."),be+=1}return(0,b.Z)(M,[{key:"getDerivativeToken",value:function(B){return this.derivatives.reduce(function(le,Ce){return Ce(B,le)},void 0)}}]),M}(),$e=new de;function yt(M){var G=Array.isArray(M)?M:[M];return $e.has(G)||$e.set(G,new Me(G)),$e.get(G)}var Qt=new WeakMap,nn={};function vn(M,G){for(var B=Qt,le=0;le1&&arguments[1]!==void 0?arguments[1]:!1,B=Ln.get(M)||"";return B||(Object.keys(M).forEach(function(le){var Ce=M[le];B+=le,Ce instanceof Me?B+=Ce.id:Ce&&(0,D.Z)(Ce)==="object"?B+=ht(Ce,G):B+=Ce}),G&&(B=A(B)),Ln.set(M,B)),B}function z(M,G){return A("".concat(G,"_").concat(ht(M,!0)))}var se="random-".concat(Date.now(),"-").concat(Math.random()).replace(/\./g,""),Ye="_bAmBoO_";function De(M,G,B){if((0,U.Z)()){var le,Ce;(0,R.hq)(M,se);var Ue=document.createElement("div");Ue.style.position="fixed",Ue.style.left="0",Ue.style.top="0",G==null||G(Ue),document.body.appendChild(Ue);var ot=B?B(Ue):(le=getComputedStyle(Ue).content)===null||le===void 0?void 0:le.includes(Ye);return(Ce=Ue.parentNode)===null||Ce===void 0||Ce.removeChild(Ue),(0,R.jL)(se),ot}return!1}var xe=null;function je(){return xe===void 0&&(xe=De("@layer ".concat(se," { .").concat(se,' { content: "').concat(Ye,'"!important; } }'),function(M){M.className=se})),xe}var It=void 0;function cn(){return It===void 0&&(It=De(":where(.".concat(se,') { content: "').concat(Ye,'"!important; }'),function(M){M.className=se})),It}var Fn=void 0;function Nn(){return Fn===void 0&&(Fn=De(".".concat(se," { inset-block: 93px !important; }"),function(M){M.className=se},function(M){return getComputedStyle(M).bottom==="93px"})),Fn}var qn=(0,U.Z)();function or(M){return typeof M=="number"?"".concat(M,"px"):M}function dr(M,G,B){var le=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},Ce=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;if(Ce)return M;var Ue=(0,j.Z)((0,j.Z)({},le),{},(0,r.Z)((0,r.Z)({},Be,G),Le,B)),ot=Object.keys(Ue).map(function(dt){var lt=Ue[dt];return lt?"".concat(dt,'="').concat(lt,'"'):null}).filter(function(dt){return dt}).join(" ");return"")}var Zn=function(G){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return"--".concat(B?"".concat(B,"-"):"").concat(G).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()},jn=function(G,B,le){return Object.keys(G).length?".".concat(B).concat(le!=null&&le.scope?".".concat(le.scope):"","{").concat(Object.entries(G).map(function(Ce){var Ue=(0,y.Z)(Ce,2),ot=Ue[0],dt=Ue[1];return"".concat(ot,":").concat(dt,";")}).join(""),"}"):""},mn=function(G,B,le){var Ce={},Ue={};return Object.entries(G).forEach(function(ot){var dt,lt,l=(0,y.Z)(ot,2),d=l[0],p=l[1];if(le!=null&&(dt=le.preserve)!==null&&dt!==void 0&&dt[d])Ue[d]=p;else if((typeof p=="string"||typeof p=="number")&&!(le!=null&&(lt=le.ignore)!==null&<!==void 0&<[d])){var x,W=Zn(d,le==null?void 0:le.prefix);Ce[W]=typeof p=="number"&&!(le!=null&&(x=le.unitless)!==null&&x!==void 0&&x[d])?"".concat(p,"px"):String(p),Ue[d]="var(".concat(W,")")}}),[Ue,jn(Ce,B,{scope:le==null?void 0:le.scope})]},Ft=s(8410),Ct=(0,j.Z)({},Y),Mt=Ct.useInsertionEffect,tn=function(G,B,le){v.useMemo(G,le),(0,Ft.Z)(function(){return B(!0)},le)},qt=Mt?function(M,G,B){return Mt(function(){return M(),G()},B)}:tn,un=qt,hn=(0,j.Z)({},Y),gt=hn.useInsertionEffect,tt=function(G){var B=[],le=!1;function Ce(Ue){le||B.push(Ue)}return v.useEffect(function(){return le=!1,function(){le=!0,B.length&&B.forEach(function(Ue){return Ue()})}},G),Ce},Ke=function(){return function(G){G()}},mr=typeof gt!="undefined"?tt:Ke,rr=mr;function yr(){return!1}var Sr=!1;function pr(){return Sr}var Xn=yr;if(0)var Lr,Mr;function Nr(M,G,B,le,Ce){var Ue=v.useContext(q),ot=Ue.cache,dt=[M].concat((0,X.Z)(G)),lt=Q(dt),l=rr([lt]),d=Xn(),p=function(Ee){ot.opUpdate(lt,function(et){var Ze=et||[void 0,void 0],_e=(0,y.Z)(Ze,2),mt=_e[0],qe=mt===void 0?0:mt,rt=_e[1],ke=rt,St=ke||B(),kt=[qe,St];return Ee?Ee(kt):kt})};v.useMemo(function(){p()},[lt]);var x=ot.opGet(lt),W=x[1];return un(function(){Ce==null||Ce(W)},function(ge){return p(function(Ee){var et=(0,y.Z)(Ee,2),Ze=et[0],_e=et[1];return ge&&Ze===0&&(Ce==null||Ce(W)),[Ze+1,_e]}),function(){ot.opUpdate(lt,function(Ee){var et=Ee||[],Ze=(0,y.Z)(et,2),_e=Ze[0],mt=_e===void 0?0:_e,qe=Ze[1],rt=mt-1;return rt===0?(l(function(){(ge||!ot.opGet(lt))&&(le==null||le(qe,!1))}),null):[mt-1,qe]})}},[lt]),W}var Vr={},Xr="css",Qr=new Map;function fr(M){Qr.set(M,(Qr.get(M)||0)+1)}function Hr(M,G){if(typeof document!="undefined"){var B=document.querySelectorAll("style[".concat(Be,'="').concat(M,'"]'));B.forEach(function(le){if(le[vt]===G){var Ce;(Ce=le.parentNode)===null||Ce===void 0||Ce.removeChild(le)}})}}var Ur=0;function Ir(M,G){Qr.set(M,(Qr.get(M)||0)-1);var B=Array.from(Qr.keys()),le=B.filter(function(Ce){var Ue=Qr.get(Ce)||0;return Ue<=0});B.length-le.length>Ur&&le.forEach(function(Ce){Hr(Ce,G),Qr.delete(Ce)})}var $r=function(G,B,le,Ce){var Ue=le.getDerivativeToken(G),ot=(0,j.Z)((0,j.Z)({},Ue),B);return Ce&&(ot=Ce(ot)),ot},Er="token";function Zr(M,G){var B=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},le=(0,v.useContext)(q),Ce=le.cache.instanceId,Ue=le.container,ot=B.salt,dt=ot===void 0?"":ot,lt=B.override,l=lt===void 0?Vr:lt,d=B.formatToken,p=B.getComputedToken,x=B.cssVar,W=vn(function(){return Object.assign.apply(Object,[{}].concat((0,X.Z)(G)))},G),ge=ht(W),Ee=ht(l),et=x?ht(x):"",Ze=Nr(Er,[dt,M.id,ge,Ee,et],function(){var _e,mt=p?p(W,l,M):$r(W,l,M,d),qe=(0,j.Z)({},mt),rt="";if(x){var ke=mn(mt,x.key,{prefix:x.prefix,ignore:x.ignore,unitless:x.unitless,preserve:x.preserve}),St=(0,y.Z)(ke,2);mt=St[0],rt=St[1]}var kt=z(mt,dt);mt._tokenKey=kt,qe._tokenKey=z(qe,dt);var pn=(_e=x==null?void 0:x.key)!==null&&_e!==void 0?_e:kt;mt._themeKey=pn,fr(pn);var In="".concat(Xr,"-").concat(A(kt));return mt._hashId=In,[mt,In,qe,rt,(x==null?void 0:x.key)||""]},function(_e){Ir(_e[0]._themeKey,Ce)},function(_e){var mt=(0,y.Z)(_e,4),qe=mt[0],rt=mt[3];if(x&&rt){var ke=(0,R.hq)(rt,A("css-variables-".concat(qe._themeKey)),{mark:Le,prepend:"queue",attachTo:Ue,priority:-999});ke[vt]=Ce,ke.setAttribute(Be,qe._themeKey)}});return Ze}var to=function(G,B,le){var Ce=(0,y.Z)(G,5),Ue=Ce[2],ot=Ce[3],dt=Ce[4],lt=le||{},l=lt.plain;if(!ot)return null;var d=Ue._tokenKey,p=-999,x={"data-rc-order":"prependQueue","data-rc-priority":"".concat(p)},W=dr(ot,dt,d,x,l);return[p,d,W]},Fr=s(87462),kr={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},so=kr,mo="-ms-",Jr="-moz-",vo="-webkit-",Yr="comm",Gr="rule",Yn="decl",oo="@page",Br="@media",po="@import",Dr="@charset",Oo="@viewport",wo="@supports",no="@document",Wr="@namespace",co="@keyframes",ho="@font-face",xo="@counter-style",Eo="@font-feature-values",We="@layer",Nt="@scope",F=Math.abs,H=String.fromCharCode,ee=Object.assign;function te(M,G){return ye(M,0)^45?(((G<<2^ye(M,0))<<2^ye(M,1))<<2^ye(M,2))<<2^ye(M,3):0}function me(M){return M.trim()}function nt(M,G){return(M=G.exec(M))?M[0]:M}function h(M,G,B){return M.replace(G,B)}function E(M,G,B){return M.indexOf(G,B)}function ye(M,G){return M.charCodeAt(G)|0}function Se(M,G,B){return M.slice(G,B)}function Te(M){return M.length}function Fe(M){return M.length}function Xe(M,G){return G.push(M),M}function Je(M,G){return M.map(G).join("")}function ct(M,G){return M.filter(function(B){return!nt(B,G)})}function xt(M,G){for(var B="",le=0;le0?ye(xn,--Gt):0,$t--,Rt===10&&($t=1,Et--),Rt}function Pn(){return Rt=Gt2||yn(Rt)>3?"":" "}function er(M){for(;Pn();)switch(yn(Rt)){case 0:append(Qn(Gt-1),M);break;case 2:append(sn(Rt),M);break;default:append(from(Rt),M)}return M}function Cn(M,G){for(;--G&&Pn()&&!(Rt<48||Rt>102||Rt>57&&Rt<65||Rt>70&&Rt<97););return En(M,rn()+(G<6&&Bn()==32&&Pn()==32))}function ar(M){for(;Pn();)switch(Rt){case M:return Gt;case 34:case 39:M!==34&&M!==39&&ar(Rt);break;case 40:M===41&&ar(M);break;case 92:Pn();break}return Gt}function Or(M,G){for(;Pn()&&M+Rt!==57;)if(M+Rt===84&&Bn()===47)break;return"/*"+En(G,Gt-1)+"*"+H(M===47?M:Pn())}function Qn(M){for(;!yn(Bn());)Pn();return En(M,Gt)}function br(M){return An(lr("",null,null,null,[""],M=Mn(M),0,[0],M))}function lr(M,G,B,le,Ce,Ue,ot,dt,lt){for(var l=0,d=0,p=ot,x=0,W=0,ge=0,Ee=1,et=1,Ze=1,_e=0,mt="",qe=Ce,rt=Ue,ke=le,St=mt;et;)switch(ge=_e,_e=Pn()){case 40:if(ge!=108&&ye(St,p-1)==58){E(St+=h(sn(_e),"&","&\f"),"&\f",F(l?dt[l-1]:0))!=-1&&(Ze=-1);break}case 34:case 39:case 91:St+=sn(_e);break;case 9:case 10:case 13:case 32:St+=Kn(ge);break;case 92:St+=Cn(rn()-1,7);continue;case 47:switch(Bn()){case 42:case 47:Xe(ie(Or(Pn(),rn()),G,B,lt),lt),(yn(ge||1)==5||yn(Bn()||1)==5)&&Te(St)&&Se(St,-1,void 0)!==" "&&(St+=" ");break;default:St+="/"}break;case 123*Ee:dt[l++]=Te(St)*Ze;case 125*Ee:case 59:case 0:switch(_e){case 0:case 125:et=0;case 59+d:Ze==-1&&(St=h(St,/\f/g,"")),W>0&&(Te(St)-p||Ee===0&&ge===47)&&Xe(W>32?w(St+";",le,B,p-1,lt):w(h(St," ","")+";",le,B,p-2,lt),lt);break;case 59:St+=";";default:if(Xe(ke=Wn(St,G,B,l,d,Ce,dt,mt,qe=[],rt=[],p,Ue),Ue),_e===123)if(d===0)lr(St,G,ke,ke,qe,Ue,p,dt,rt);else switch(x===99&&ye(St,3)===110?100:x){case 100:case 108:case 109:case 115:lr(M,ke,ke,le&&Xe(Wn(M,ke,ke,0,0,Ce,dt,mt,Ce,qe=[],p,rt),rt),Ce,rt,p,dt,le?qe:rt);break;default:lr(St,ke,ke,ke,[""],rt,0,dt,rt)}}l=d=W=0,Ee=Ze=1,mt=St="",p=ot;break;case 58:p=1+Te(St),W=ge;default:if(Ee<1){if(_e==123)--Ee;else if(_e==125&&Ee++==0&&_n()==125)continue}switch(St+=H(_e),_e*Ee){case 38:Ze=d>0?1:(St+="\f",-1);break;case 44:dt[l++]=(Te(St)-1)*Ze,Ze=1;break;case 64:Bn()===45&&(St+=sn(Pn())),x=Bn(),d=p=Te(mt=St+=Qn(rn())),_e++;break;case 45:ge===45&&Te(St)==2&&(Ee=0)}}return Ue}function Wn(M,G,B,le,Ce,Ue,ot,dt,lt,l,d,p){for(var x=Ce-1,W=Ce===0?Ue:[""],ge=Fe(W),Ee=0,et=0,Ze=0;Ee0?W[_e]+" "+mt:h(mt,/&\f/g,W[_e])))&&(lt[Ze++]=qe);return en(M,G,B,Ce===0?Gr:dt,lt,l,d,p)}function ie(M,G,B,le){return en(M,G,B,Yr,H(bn()),Se(M,2,-2),0,le)}function w(M,G,B,le,Ce){return en(M,G,B,Yn,Se(M,0,le),Se(M,le+1,-1),le,Ce)}function m(M,G){var B=G.path,le=G.parentSelectors;devWarning(!1,"[Ant Design CSS-in-JS] ".concat(B?"Error in ".concat(B,": "):"").concat(M).concat(le.length?" Selector: ".concat(le.join(" | ")):""))}var L=function(G,B,le){if(G==="content"){var Ce=/(attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\(|(no-)?(open|close)-quote/,Ue=["normal","none","initial","inherit","unset"];(typeof B!="string"||Ue.indexOf(B)===-1&&!Ce.test(B)&&(B.charAt(0)!==B.charAt(B.length-1)||B.charAt(0)!=='"'&&B.charAt(0)!=="'"))&&lintWarning("You seem to be using a value for 'content' without quotes, try replacing it with `content: '\"".concat(B,"\"'`."),le)}},C=null,ne=function(G,B,le){G==="animation"&&le.hashId&&B!=="none"&&lintWarning("You seem to be using hashed animation '".concat(B,"', in which case 'animationName' with Keyframe as value is recommended."),le)},fe=null;function Re(M){var G,B=((G=M.match(/:not\(([^)]*)\)/))===null||G===void 0?void 0:G[1])||"",le=B.split(/(\[[^[]*])|(?=[.#])/).filter(function(Ce){return Ce});return le.length>1}function Ge(M){return M.parentSelectors.reduce(function(G,B){return G?B.includes("&")?B.replace(/&/g,G):"".concat(G," ").concat(B):B},"")}var ut=function(G,B,le){var Ce=Ge(le),Ue=Ce.match(/:not\([^)]*\)/g)||[];Ue.length>0&&Ue.some(Re)&&lintWarning("Concat ':not' selector not support in legacy browsers.",le)},Pe=null,Lt=function(G,B,le){switch(G){case"marginLeft":case"marginRight":case"paddingLeft":case"paddingRight":case"left":case"right":case"borderLeft":case"borderLeftWidth":case"borderLeftStyle":case"borderLeftColor":case"borderRight":case"borderRightWidth":case"borderRightStyle":case"borderRightColor":case"borderTopLeftRadius":case"borderTopRightRadius":case"borderBottomLeftRadius":case"borderBottomRightRadius":lintWarning("You seem to be using non-logical property '".concat(G,"' which is not compatible with RTL mode. Please use logical properties and values instead. For more information: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties."),le);return;case"margin":case"padding":case"borderWidth":case"borderStyle":if(typeof B=="string"){var Ce=B.split(" ").map(function(dt){return dt.trim()});Ce.length===4&&Ce[1]!==Ce[3]&&lintWarning("You seem to be using '".concat(G,"' property with different left ").concat(G," and right ").concat(G,", which is not compatible with RTL mode. Please use logical properties and values instead. For more information: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties."),le)}return;case"clear":case"textAlign":(B==="left"||B==="right")&&lintWarning("You seem to be using non-logical value '".concat(B,"' of ").concat(G,", which is not compatible with RTL mode. Please use logical properties and values instead. For more information: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties."),le);return;case"borderRadius":if(typeof B=="string"){var Ue=B.split("/").map(function(dt){return dt.trim()}),ot=Ue.reduce(function(dt,lt){if(dt)return dt;var l=lt.split(" ").map(function(d){return d.trim()});return l.length>=2&&l[0]!==l[1]||l.length===3&&l[1]!==l[2]||l.length===4&&l[2]!==l[3]?!0:dt},!1);ot&&lintWarning("You seem to be using non-logical value '".concat(B,"' of ").concat(G,", which is not compatible with RTL mode. Please use logical properties and values instead. For more information: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties."),le)}return;default:}},Wt=null,gn=function(G,B,le){(typeof B=="string"&&/NaN/g.test(B)||Number.isNaN(B))&&lintWarning("Unexpected 'NaN' in property '".concat(G,": ").concat(B,"'."),le)},_t=null,Vt=function(G,B,le){le.parentSelectors.some(function(Ce){var Ue=Ce.split(",");return Ue.some(function(ot){return ot.split("&").length>2})})&&lintWarning("Should not use more than one `&` in a selector.",le)},wt=null,fn="data-ant-cssinjs-cache-path",u="_FILE_STYLE__";function S(M){return Object.keys(M).map(function(G){var B=M[G];return"".concat(G,":").concat(B)}).join(";")}var K,re=!0;function n(M){var G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;K=M,re=G}function a(){if(!K&&(K={},(0,U.Z)())){var M=document.createElement("div");M.className=fn,M.style.position="fixed",M.style.visibility="hidden",M.style.top="-9999px",document.body.appendChild(M);var G=getComputedStyle(M).content||"";G=G.replace(/^"/,"").replace(/"$/,""),G.split(";").forEach(function(Ce){var Ue=Ce.split(":"),ot=(0,y.Z)(Ue,2),dt=ot[0],lt=ot[1];K[dt]=lt});var B=document.querySelector("style[".concat(fn,"]"));if(B){var le;re=!1,(le=B.parentNode)===null||le===void 0||le.removeChild(B)}document.body.removeChild(M)}}function N(M){return a(),!!K[M]}function P(M){var G=K[M],B=null;if(G&&(0,U.Z)())if(re)B=u;else{var le=document.querySelector("style[".concat(Le,'="').concat(K[M],'"]'));le?B=le.innerHTML:delete K[M]}return[B,G]}var ae="_skip_check_",Ne="_multi_value_";function ze(M){var G=xt(br(M),zt);return G.replace(/\{%%%\:[^;];}/g,";")}function pt(M){return(0,D.Z)(M)==="object"&&M&&(ae in M||Ne in M)}function at(M,G,B){if(!G)return M;var le=".".concat(G),Ce=B==="low"?":where(".concat(le,")"):le,Ue=M.split(",").map(function(ot){var dt,lt=ot.trim().split(/\s+/),l=lt[0]||"",d=((dt=l.match(/^\w+/))===null||dt===void 0?void 0:dt[0])||"";return l="".concat(d).concat(Ce).concat(l.slice(d.length)),[l].concat((0,X.Z)(lt.slice(1))).join(" ")});return Ue.join(",")}var Ut=function M(G){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},le=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{root:!0,parentSelectors:[]},Ce=le.root,Ue=le.injectHash,ot=le.parentSelectors,dt=B.hashId,lt=B.layer,l=B.path,d=B.hashPriority,p=B.transformers,x=p===void 0?[]:p,W=B.linters,ge=W===void 0?[]:W,Ee="",et={};function Ze(qe){var rt=qe.getName(dt);if(!et[rt]){var ke=M(qe.style,B,{root:!1,parentSelectors:ot}),St=(0,y.Z)(ke,1),kt=St[0];et[rt]="@keyframes ".concat(qe.getName(dt)).concat(kt)}}function _e(qe){var rt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return qe.forEach(function(ke){Array.isArray(ke)?_e(ke,rt):ke&&rt.push(ke)}),rt}var mt=_e(Array.isArray(G)?G:[G]);return mt.forEach(function(qe){var rt=typeof qe=="string"&&!Ce?{}:qe;if(typeof rt=="string")Ee+="".concat(rt,` +`);else if(rt._keyframe)Ze(rt);else{var ke=x.reduce(function(St,kt){var pn;return(kt==null||(pn=kt.visit)===null||pn===void 0?void 0:pn.call(kt,St))||St},rt);Object.keys(ke).forEach(function(St){var kt=ke[St];if((0,D.Z)(kt)==="object"&&kt&&(St!=="animationName"||!kt._keyframe)&&!pt(kt)){var pn=!1,In=St.trim(),$n=!1;(Ce||Ue)&&dt?In.startsWith("@")?pn=!0:In==="&"?In=at("",dt,d):In=at(St,dt,d):Ce&&!dt&&(In==="&"||In==="")&&(In="",$n=!0);var ir=M(kt,B,{root:$n,injectHash:pn,parentSelectors:[].concat((0,X.Z)(ot),[In])}),Un=(0,y.Z)(ir,2),sr=Un[0],tr=Un[1];et=(0,j.Z)((0,j.Z)({},et),tr),Ee+="".concat(In).concat(sr)}else{let nr=function(kn,Dn){var cr=kn.replace(/[A-Z]/g,function(Tr){return"-".concat(Tr.toLowerCase())}),hr=Dn;!so[kn]&&typeof hr=="number"&&hr!==0&&(hr="".concat(hr,"px")),kn==="animationName"&&Dn!==null&&Dn!==void 0&&Dn._keyframe&&(Ze(Dn),hr=Dn.getName(dt)),Ee+="".concat(cr,":").concat(hr,";")};var Kt,Rn=(Kt=kt==null?void 0:kt.value)!==null&&Kt!==void 0?Kt:kt;(0,D.Z)(kt)==="object"&&kt!==null&&kt!==void 0&&kt[Ne]&&Array.isArray(Rn)?Rn.forEach(function(kn){nr(St,kn)}):nr(St,Rn)}})}}),Ce?lt&&(Ee="@layer ".concat(lt.name," {").concat(Ee,"}"),lt.dependencies&&(et["@layer ".concat(lt.name)]=lt.dependencies.map(function(qe){return"@layer ".concat(qe,", ").concat(lt.name,";")}).join(` +`))):Ee="{".concat(Ee,"}"),[Ee,et]};function Ht(M,G){return A("".concat(M.join("%")).concat(G))}function On(){return null}var on="style";function Hn(M,G){var B=M.token,le=M.path,Ce=M.hashId,Ue=M.layer,ot=M.nonce,dt=M.clientOnly,lt=M.order,l=lt===void 0?0:lt,d=v.useContext(q),p=d.autoClear,x=d.mock,W=d.defaultCache,ge=d.hashPriority,Ee=d.container,et=d.ssrInline,Ze=d.transformers,_e=d.linters,mt=d.cache,qe=d.layer,rt=B._tokenKey,ke=[rt];qe&&ke.push("layer"),ke.push.apply(ke,(0,X.Z)(le));var St=qn,kt=Nr(on,ke,function(){var Un=ke.join("|");if(N(Un)){var sr=P(Un),tr=(0,y.Z)(sr,2),Kt=tr[0],Rn=tr[1];if(Kt)return[Kt,rt,Rn,{},dt,l]}var nr=G(),kn=Ut(nr,{hashId:Ce,hashPriority:ge,layer:qe?Ue:void 0,path:le.join("-"),transformers:Ze,linters:_e}),Dn=(0,y.Z)(kn,2),cr=Dn[0],hr=Dn[1],Tr=ze(cr),Cr=Ht(ke,Tr);return[Tr,rt,Cr,hr,dt,l]},function(Un,sr){var tr=(0,y.Z)(Un,3),Kt=tr[2];(sr||p)&&qn&&(0,R.jL)(Kt,{mark:Le})},function(Un){var sr=(0,y.Z)(Un,4),tr=sr[0],Kt=sr[1],Rn=sr[2],nr=sr[3];if(St&&tr!==u){var kn={mark:Le,prepend:qe?!1:"queue",attachTo:Ee,priority:l},Dn=typeof ot=="function"?ot():ot;Dn&&(kn.csp={nonce:Dn});var cr=[],hr=[];Object.keys(nr).forEach(function(Cr){Cr.startsWith("@layer")?cr.push(Cr):hr.push(Cr)}),cr.forEach(function(Cr){(0,R.hq)(ze(nr[Cr]),"_layer-".concat(Cr),(0,j.Z)((0,j.Z)({},kn),{},{prepend:!0}))});var Tr=(0,R.hq)(tr,Rn,kn);Tr[vt]=mt.instanceId,Tr.setAttribute(Be,rt),hr.forEach(function(Cr){(0,R.hq)(ze(nr[Cr]),"_effect-".concat(Cr),kn)})}}),pn=(0,y.Z)(kt,3),In=pn[0],$n=pn[1],ir=pn[2];return function(Un){var sr;return!et||St||!W?sr=v.createElement(On,null):sr=v.createElement("style",(0,Fr.Z)({},(0,r.Z)((0,r.Z)({},Be,$n),Le,ir),{dangerouslySetInnerHTML:{__html:In}})),v.createElement(v.Fragment,null,sr,Un)}}var Tn=function(G,B,le){var Ce=(0,y.Z)(G,6),Ue=Ce[0],ot=Ce[1],dt=Ce[2],lt=Ce[3],l=Ce[4],d=Ce[5],p=le||{},x=p.plain;if(l)return null;var W=Ue,ge={"data-rc-order":"prependQueue","data-rc-priority":"".concat(d)};return W=dr(Ue,ot,dt,ge,x),lt&&Object.keys(lt).forEach(function(Ee){if(!B[Ee]){B[Ee]=!0;var et=ze(lt[Ee]),Ze=dr(et,ot,"_effect-".concat(Ee),ge,x);Ee.startsWith("@layer")?W=Ze+W:W+=Ze}}),[d,dt,W]},Gn="cssVar",Sn=function(G,B){var le=G.key,Ce=G.prefix,Ue=G.unitless,ot=G.ignore,dt=G.token,lt=G.scope,l=lt===void 0?"":lt,d=(0,v.useContext)(q),p=d.cache.instanceId,x=d.container,W=dt._tokenKey,ge=[].concat((0,X.Z)(G.path),[le,l,W]),Ee=Nr(Gn,ge,function(){var et=B(),Ze=mn(et,le,{prefix:Ce,unitless:Ue,ignore:ot,scope:l}),_e=(0,y.Z)(Ze,2),mt=_e[0],qe=_e[1],rt=Ht(ge,qe);return[mt,qe,rt,le]},function(et){var Ze=(0,y.Z)(et,3),_e=Ze[2];qn&&(0,R.jL)(_e,{mark:Le})},function(et){var Ze=(0,y.Z)(et,3),_e=Ze[1],mt=Ze[2];if(_e){var qe=(0,R.hq)(_e,mt,{mark:Le,prepend:"queue",attachTo:x,priority:-999});qe[vt]=p,qe.setAttribute(Be,le)}});return Ee},Jt=function(G,B,le){var Ce=(0,y.Z)(G,4),Ue=Ce[1],ot=Ce[2],dt=Ce[3],lt=le||{},l=lt.plain;if(!Ue)return null;var d=-999,p={"data-rc-order":"prependQueue","data-rc-priority":"".concat(d)},x=dr(Ue,dt,ot,p,l);return[d,ot,x]},Yt=Sn,dn=(0,r.Z)((0,r.Z)((0,r.Z)({},on,Tn),Er,to),Gn,Jt);function Vn(M){return M!==null}function f(M,G){var B=typeof G=="boolean"?{plain:G}:G||{},le=B.plain,Ce=le===void 0?!1:le,Ue=B.types,ot=Ue===void 0?["style","token","cssVar"]:Ue,dt=new RegExp("^(".concat((typeof ot=="string"?[ot]:ot).join("|"),")%")),lt=Array.from(M.cache.keys()).filter(function(x){return dt.test(x)}),l={},d={},p="";return lt.map(function(x){var W=x.replace(dt,"").replace(/%/g,"|"),ge=x.split("%"),Ee=_slicedToArray(ge,1),et=Ee[0],Ze=dn[et],_e=Ze(M.cache.get(x)[1],l,{plain:Ce});if(!_e)return null;var mt=_slicedToArray(_e,3),qe=mt[0],rt=mt[1],ke=mt[2];return x.startsWith("style")&&(d[W]=rt),[qe,ke]}).filter(Vn).sort(function(x,W){var ge=_slicedToArray(x,1),Ee=ge[0],et=_slicedToArray(W,1),Ze=et[0];return Ee-Ze}).forEach(function(x){var W=_slicedToArray(x,2),ge=W[1];p+=ge}),p+=toStyleStr(".".concat(ATTR_CACHE_MAP,'{content:"').concat(serializeCacheMap(d),'";}'),void 0,void 0,_defineProperty({},ATTR_CACHE_MAP,ATTR_CACHE_MAP),Ce),p}var I=function(){function M(G,B){(0,T.Z)(this,M),(0,r.Z)(this,"name",void 0),(0,r.Z)(this,"style",void 0),(0,r.Z)(this,"_keyframe",!0),this.name=G,this.style=B}return(0,b.Z)(M,[{key:"getName",value:function(){var B=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return B?"".concat(B,"-").concat(this.name):this.name}}]),M}(),oe=I;function ve(M){if(typeof M=="number")return[[M],!1];var G=String(M).trim(),B=G.match(/(.*)(!important)/),le=(B?B[1]:G).trim().split(/\s+/),Ce=[],Ue=0;return[le.reduce(function(ot,dt){if(dt.includes("(")||dt.includes(")")){var lt=dt.split("(").length-1,l=dt.split(")").length-1;Ue+=lt-l}return Ue>=0&&Ce.push(dt),Ue===0&&(ot.push(Ce.join(" ")),Ce=[]),ot},[]),!!B]}function Ie(M){return M.notSplit=!0,M}var it={inset:["top","right","bottom","left"],insetBlock:["top","bottom"],insetBlockStart:["top"],insetBlockEnd:["bottom"],insetInline:["left","right"],insetInlineStart:["left"],insetInlineEnd:["right"],marginBlock:["marginTop","marginBottom"],marginBlockStart:["marginTop"],marginBlockEnd:["marginBottom"],marginInline:["marginLeft","marginRight"],marginInlineStart:["marginLeft"],marginInlineEnd:["marginRight"],paddingBlock:["paddingTop","paddingBottom"],paddingBlockStart:["paddingTop"],paddingBlockEnd:["paddingBottom"],paddingInline:["paddingLeft","paddingRight"],paddingInlineStart:["paddingLeft"],paddingInlineEnd:["paddingRight"],borderBlock:Ie(["borderTop","borderBottom"]),borderBlockStart:Ie(["borderTop"]),borderBlockEnd:Ie(["borderBottom"]),borderInline:Ie(["borderLeft","borderRight"]),borderInlineStart:Ie(["borderLeft"]),borderInlineEnd:Ie(["borderRight"]),borderBlockWidth:["borderTopWidth","borderBottomWidth"],borderBlockStartWidth:["borderTopWidth"],borderBlockEndWidth:["borderBottomWidth"],borderInlineWidth:["borderLeftWidth","borderRightWidth"],borderInlineStartWidth:["borderLeftWidth"],borderInlineEndWidth:["borderRightWidth"],borderBlockStyle:["borderTopStyle","borderBottomStyle"],borderBlockStartStyle:["borderTopStyle"],borderBlockEndStyle:["borderBottomStyle"],borderInlineStyle:["borderLeftStyle","borderRightStyle"],borderInlineStartStyle:["borderLeftStyle"],borderInlineEndStyle:["borderRightStyle"],borderBlockColor:["borderTopColor","borderBottomColor"],borderBlockStartColor:["borderTopColor"],borderBlockEndColor:["borderBottomColor"],borderInlineColor:["borderLeftColor","borderRightColor"],borderInlineStartColor:["borderLeftColor"],borderInlineEndColor:["borderRightColor"],borderStartStartRadius:["borderTopLeftRadius"],borderStartEndRadius:["borderTopRightRadius"],borderEndStartRadius:["borderBottomLeftRadius"],borderEndEndRadius:["borderBottomRightRadius"]};function bt(M,G){var B=M;return G&&(B="".concat(B," !important")),{_skip_check_:!0,value:B}}var Ot={visit:function(G){var B={};return Object.keys(G).forEach(function(le){var Ce=G[le],Ue=it[le];if(Ue&&(typeof Ce=="number"||typeof Ce=="string")){var ot=ve(Ce),dt=(0,y.Z)(ot,2),lt=dt[0],l=dt[1];Ue.length&&Ue.notSplit?Ue.forEach(function(d){B[d]=bt(Ce,l)}):Ue.length===1?B[Ue[0]]=bt(lt[0],l):Ue.length===2?Ue.forEach(function(d,p){var x;B[d]=bt((x=lt[p])!==null&&x!==void 0?x:lt[0],l)}):Ue.length===4?Ue.forEach(function(d,p){var x,W;B[d]=bt((x=(W=lt[p])!==null&&W!==void 0?W:lt[p-2])!==null&&x!==void 0?x:lt[0],l)}):B[le]=Ce}else B[le]=Ce}),B}},Dt=null,Tt=/url\([^)]+\)|var\([^)]+\)|(\d*\.?\d+)px/g;function Zt(M,G){var B=Math.pow(10,G+1),le=Math.floor(M*B);return Math.round(le/10)*10/B}var At=function(){var G=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},B=G.rootValue,le=B===void 0?16:B,Ce=G.precision,Ue=Ce===void 0?5:Ce,ot=G.mediaQuery,dt=ot===void 0?!1:ot,lt=function(p,x){if(!x)return p;var W=parseFloat(x);if(W<=1)return p;var ge=Zt(W/le,Ue);return"".concat(ge,"rem")},l=function(p){var x=_objectSpread({},p);return Object.entries(p).forEach(function(W){var ge=_slicedToArray(W,2),Ee=ge[0],et=ge[1];if(typeof et=="string"&&et.includes("px")){var Ze=et.replace(Tt,lt);x[Ee]=Ze}!unitless[Ee]&&typeof et=="number"&&et!==0&&(x[Ee]="".concat(et,"px").replace(Tt,lt));var _e=Ee.trim();if(_e.startsWith("@")&&_e.includes("px")&&dt){var mt=Ee.replace(Tt,lt);x[mt]=x[Ee],delete x[Ee]}}),x};return{visit:l}},Xt=null,st={supportModernCSS:function(){return cn()&&Nn()}}},42135:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return g}});var r=s(87462),y=s(97685),X=s(4942),j=s(91),Z=s(67294),A=s(93967),R=s.n(A),v=s(84898),Y=s(63017),O=s(1413),$=s(71002),T=s(48981),b=s(27571),we=s(80334);function Q(de){return de.replace(/-(.)/g,function(ce,be){return be.toUpperCase()})}function J(de,ce){(0,we.ZP)(de,"[@ant-design/icons] ".concat(ce))}function ue(de){return(0,$.Z)(de)==="object"&&typeof de.name=="string"&&typeof de.theme=="string"&&((0,$.Z)(de.icon)==="object"||typeof de.icon=="function")}function _(){var de=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return Object.keys(de).reduce(function(ce,be){var Me=de[be];switch(be){case"class":ce.className=Me,delete ce.class;break;default:delete ce[be],ce[Q(be)]=Me}return ce},{})}function Be(de,ce,be){return be?Z.createElement(de.tag,(0,O.Z)((0,O.Z)({key:ce},_(de.attrs)),be),(de.children||[]).map(function(Me,$e){return Be(Me,"".concat(ce,"-").concat(de.tag,"-").concat($e))})):Z.createElement(de.tag,(0,O.Z)({key:ce},_(de.attrs)),(de.children||[]).map(function(Me,$e){return Be(Me,"".concat(ce,"-").concat(de.tag,"-").concat($e))}))}function Le(de){return(0,v.R_)(de)[0]}function Bt(de){return de?Array.isArray(de)?de:[de]:[]}var vt={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"},Ae=` +.anticon { + display: inline-flex; + align-items: center; + color: inherit; + font-style: normal; + line-height: 0; + text-align: center; + text-transform: none; + vertical-align: -0.125em; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon > * { + line-height: 1; +} + +.anticon svg { + display: inline-block; +} + +.anticon::before { + display: none; +} + +.anticon .anticon-icon { + display: block; +} + +.anticon[tabindex] { + cursor: pointer; +} + +.anticon-spin::before, +.anticon-spin { + display: inline-block; + -webkit-animation: loadingCircle 1s infinite linear; + animation: loadingCircle 1s infinite linear; +} + +@-webkit-keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +`,V=function(ce){var be=(0,Z.useContext)(Y.Z),Me=be.csp,$e=be.prefixCls,yt=Ae;$e&&(yt=yt.replace(/anticon/g,$e)),(0,Z.useEffect)(function(){var Qt=ce.current,nn=(0,b.A)(Qt);(0,T.hq)(yt,"@ant-design-icons",{prepend:!0,csp:Me,attachTo:nn})},[])},he=["icon","className","onClick","style","primaryColor","secondaryColor"],q={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};function D(de){var ce=de.primaryColor,be=de.secondaryColor;q.primaryColor=ce,q.secondaryColor=be||Le(ce),q.calculated=!!be}function U(){return(0,O.Z)({},q)}var Oe=function(ce){var be=ce.icon,Me=ce.className,$e=ce.onClick,yt=ce.style,Qt=ce.primaryColor,nn=ce.secondaryColor,vn=(0,j.Z)(ce,he),Ln=Z.useRef(),ht=q;if(Qt&&(ht={primaryColor:Qt,secondaryColor:nn||Le(Qt)}),V(Ln),J(ue(be),"icon should be icon definiton, but got ".concat(be)),!ue(be))return null;var z=be;return z&&typeof z.icon=="function"&&(z=(0,O.Z)((0,O.Z)({},z),{},{icon:z.icon(ht.primaryColor,ht.secondaryColor)})),Be(z.icon,"svg-".concat(z.name),(0,O.Z)((0,O.Z)({className:Me,onClick:$e,style:yt,"data-icon":z.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},vn),{},{ref:Ln}))};Oe.displayName="IconReact",Oe.getTwoToneColors=U,Oe.setTwoToneColors=D;var He=Oe;function pe(de){var ce=Bt(de),be=(0,y.Z)(ce,2),Me=be[0],$e=be[1];return He.setTwoToneColors({primaryColor:Me,secondaryColor:$e})}function Qe(){var de=He.getTwoToneColors();return de.calculated?[de.primaryColor,de.secondaryColor]:de.primaryColor}var ft=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];pe(v.iN.primary);var Pt=Z.forwardRef(function(de,ce){var be=de.className,Me=de.icon,$e=de.spin,yt=de.rotate,Qt=de.tabIndex,nn=de.onClick,vn=de.twoToneColor,Ln=(0,j.Z)(de,ft),ht=Z.useContext(Y.Z),z=ht.prefixCls,se=z===void 0?"anticon":z,Ye=ht.rootClassName,De=R()(Ye,se,(0,X.Z)((0,X.Z)({},"".concat(se,"-").concat(Me.name),!!Me.name),"".concat(se,"-spin"),!!$e||Me.name==="loading"),be),xe=Qt;xe===void 0&&nn&&(xe=-1);var je=yt?{msTransform:"rotate(".concat(yt,"deg)"),transform:"rotate(".concat(yt,"deg)")}:void 0,It=Bt(vn),cn=(0,y.Z)(It,2),Fn=cn[0],Nn=cn[1];return Z.createElement("span",(0,r.Z)({role:"img","aria-label":Me.name},Ln,{ref:ce,tabIndex:xe,onClick:nn,className:De}),Z.createElement(He,{icon:Me,primaryColor:Fn,secondaryColor:Nn,style:je}))});Pt.displayName="AntdIcon",Pt.getTwoToneColor=Qe,Pt.setTwoToneColor=pe;var g=Pt},63017:function(Ve,k,s){"use strict";var r=s(67294),y=(0,r.createContext)({});k.Z=y},24019:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return v}});var r=s(87462),y=s(67294),X={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 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"},j=X,Z=s(42135),A=function(O,$){return y.createElement(Z.Z,(0,r.Z)({},O,{ref:$,icon:j}))},R=y.forwardRef(A),v=R},97937:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return v}});var r=s(87462),y=s(67294),X={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"},j=X,Z=s(42135),A=function(O,$){return y.createElement(Z.Z,(0,r.Z)({},O,{ref:$,icon:j}))},R=y.forwardRef(A),v=R},86548:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return v}});var r=s(87462),y=s(67294),X={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},name:"edit",theme:"outlined"},j=X,Z=s(42135),A=function(O,$){return y.createElement(Z.Z,(0,r.Z)({},O,{ref:$,icon:j}))},R=y.forwardRef(A),v=R},89705:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return v}});var r=s(87462),y=s(67294),X={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"ellipsis",theme:"outlined"},j=X,Z=s(42135),A=function(O,$){return y.createElement(Z.Z,(0,r.Z)({},O,{ref:$,icon:j}))},R=y.forwardRef(A),v=R},1210:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return v}});var r=s(87462),y=s(67294),X={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9a127.5 127.5 0 0138.1 91v112.5c.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z"}}]},name:"github",theme:"outlined"},j=X,Z=s(42135),A=function(O,$){return y.createElement(Z.Z,(0,r.Z)({},O,{ref:$,icon:j}))},R=y.forwardRef(A),v=R},50888:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return v}});var r=s(87462),y=s(67294),X={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"},j=X,Z=s(42135),A=function(O,$){return y.createElement(Z.Z,(0,r.Z)({},O,{ref:$,icon:j}))},R=y.forwardRef(A),v=R},32198:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return v}});var r=s(87462),y=s(67294),X={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z"}}]},name:"swap-right",theme:"outlined"},j=X,Z=s(42135),A=function(O,$){return y.createElement(Z.Z,(0,r.Z)({},O,{ref:$,icon:j}))},R=y.forwardRef(A),v=R},86500:function(Ve,k,s){"use strict";s.d(k,{T6:function(){return T},VD:function(){return b},WE:function(){return R},Yt:function(){return we},lC:function(){return X},py:function(){return A},rW:function(){return y},s:function(){return Y},ve:function(){return Z},vq:function(){return v}});var r=s(90279);function y(Q,J,ue){return{r:(0,r.sh)(Q,255)*255,g:(0,r.sh)(J,255)*255,b:(0,r.sh)(ue,255)*255}}function X(Q,J,ue){Q=(0,r.sh)(Q,255),J=(0,r.sh)(J,255),ue=(0,r.sh)(ue,255);var _=Math.max(Q,J,ue),Be=Math.min(Q,J,ue),Le=0,Bt=0,vt=(_+Be)/2;if(_===Be)Bt=0,Le=0;else{var Ae=_-Be;switch(Bt=vt>.5?Ae/(2-_-Be):Ae/(_+Be),_){case Q:Le=(J-ue)/Ae+(J1&&(ue-=1),ue<1/6?Q+(J-Q)*(6*ue):ue<1/2?J:ue<2/3?Q+(J-Q)*(2/3-ue)*6:Q}function Z(Q,J,ue){var _,Be,Le;if(Q=(0,r.sh)(Q,360),J=(0,r.sh)(J,100),ue=(0,r.sh)(ue,100),J===0)Be=ue,Le=ue,_=ue;else{var Bt=ue<.5?ue*(1+J):ue+J-ue*J,vt=2*ue-Bt;_=j(vt,Bt,Q+1/3),Be=j(vt,Bt,Q),Le=j(vt,Bt,Q-1/3)}return{r:_*255,g:Be*255,b:Le*255}}function A(Q,J,ue){Q=(0,r.sh)(Q,255),J=(0,r.sh)(J,255),ue=(0,r.sh)(ue,255);var _=Math.max(Q,J,ue),Be=Math.min(Q,J,ue),Le=0,Bt=_,vt=_-Be,Ae=_===0?0:vt/_;if(_===Be)Le=0;else{switch(_){case Q:Le=(J-ue)/vt+(J>16,g:(Q&65280)>>8,b:Q&255}}},48701:function(Ve,k,s){"use strict";s.d(k,{R:function(){return r}});var r={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}},1350:function(Ve,k,s){"use strict";s.d(k,{uA:function(){return j}});var r=s(86500),y=s(48701),X=s(90279);function j(b){var we={r:0,g:0,b:0},Q=1,J=null,ue=null,_=null,Be=!1,Le=!1;return typeof b=="string"&&(b=$(b)),typeof b=="object"&&(T(b.r)&&T(b.g)&&T(b.b)?(we=(0,r.rW)(b.r,b.g,b.b),Be=!0,Le=String(b.r).substr(-1)==="%"?"prgb":"rgb"):T(b.h)&&T(b.s)&&T(b.v)?(J=(0,X.JX)(b.s),ue=(0,X.JX)(b.v),we=(0,r.WE)(b.h,J,ue),Be=!0,Le="hsv"):T(b.h)&&T(b.s)&&T(b.l)&&(J=(0,X.JX)(b.s),_=(0,X.JX)(b.l),we=(0,r.ve)(b.h,J,_),Be=!0,Le="hsl"),Object.prototype.hasOwnProperty.call(b,"a")&&(Q=b.a)),Q=(0,X.Yq)(Q),{ok:Be,format:b.format||Le,r:Math.min(255,Math.max(we.r,0)),g:Math.min(255,Math.max(we.g,0)),b:Math.min(255,Math.max(we.b,0)),a:Q}}var Z="[-\\+]?\\d+%?",A="[-\\+]?\\d*\\.\\d+%?",R="(?:".concat(A,")|(?:").concat(Z,")"),v="[\\s|\\(]+(".concat(R,")[,|\\s]+(").concat(R,")[,|\\s]+(").concat(R,")\\s*\\)?"),Y="[\\s|\\(]+(".concat(R,")[,|\\s]+(").concat(R,")[,|\\s]+(").concat(R,")[,|\\s]+(").concat(R,")\\s*\\)?"),O={CSS_UNIT:new RegExp(R),rgb:new RegExp("rgb"+v),rgba:new RegExp("rgba"+Y),hsl:new RegExp("hsl"+v),hsla:new RegExp("hsla"+Y),hsv:new RegExp("hsv"+v),hsva:new RegExp("hsva"+Y),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function $(b){if(b=b.trim().toLowerCase(),b.length===0)return!1;var we=!1;if(y.R[b])b=y.R[b],we=!0;else if(b==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var Q=O.rgb.exec(b);return Q?{r:Q[1],g:Q[2],b:Q[3]}:(Q=O.rgba.exec(b),Q?{r:Q[1],g:Q[2],b:Q[3],a:Q[4]}:(Q=O.hsl.exec(b),Q?{h:Q[1],s:Q[2],l:Q[3]}:(Q=O.hsla.exec(b),Q?{h:Q[1],s:Q[2],l:Q[3],a:Q[4]}:(Q=O.hsv.exec(b),Q?{h:Q[1],s:Q[2],v:Q[3]}:(Q=O.hsva.exec(b),Q?{h:Q[1],s:Q[2],v:Q[3],a:Q[4]}:(Q=O.hex8.exec(b),Q?{r:(0,r.VD)(Q[1]),g:(0,r.VD)(Q[2]),b:(0,r.VD)(Q[3]),a:(0,r.T6)(Q[4]),format:we?"name":"hex8"}:(Q=O.hex6.exec(b),Q?{r:(0,r.VD)(Q[1]),g:(0,r.VD)(Q[2]),b:(0,r.VD)(Q[3]),format:we?"name":"hex"}:(Q=O.hex4.exec(b),Q?{r:(0,r.VD)(Q[1]+Q[1]),g:(0,r.VD)(Q[2]+Q[2]),b:(0,r.VD)(Q[3]+Q[3]),a:(0,r.T6)(Q[4]+Q[4]),format:we?"name":"hex8"}:(Q=O.hex3.exec(b),Q?{r:(0,r.VD)(Q[1]+Q[1]),g:(0,r.VD)(Q[2]+Q[2]),b:(0,r.VD)(Q[3]+Q[3]),format:we?"name":"hex"}:!1)))))))))}function T(b){return!!O.CSS_UNIT.exec(String(b))}},10274:function(Ve,k,s){"use strict";s.d(k,{C:function(){return Z}});var r=s(86500),y=s(48701),X=s(1350),j=s(90279),Z=function(){function R(v,Y){v===void 0&&(v=""),Y===void 0&&(Y={});var O;if(v instanceof R)return v;typeof v=="number"&&(v=(0,r.Yt)(v)),this.originalInput=v;var $=(0,X.uA)(v);this.originalInput=v,this.r=$.r,this.g=$.g,this.b=$.b,this.a=$.a,this.roundA=Math.round(100*this.a)/100,this.format=(O=Y.format)!==null&&O!==void 0?O:$.format,this.gradientType=Y.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=$.ok}return R.prototype.isDark=function(){return this.getBrightness()<128},R.prototype.isLight=function(){return!this.isDark()},R.prototype.getBrightness=function(){var v=this.toRgb();return(v.r*299+v.g*587+v.b*114)/1e3},R.prototype.getLuminance=function(){var v=this.toRgb(),Y,O,$,T=v.r/255,b=v.g/255,we=v.b/255;return T<=.03928?Y=T/12.92:Y=Math.pow((T+.055)/1.055,2.4),b<=.03928?O=b/12.92:O=Math.pow((b+.055)/1.055,2.4),we<=.03928?$=we/12.92:$=Math.pow((we+.055)/1.055,2.4),.2126*Y+.7152*O+.0722*$},R.prototype.getAlpha=function(){return this.a},R.prototype.setAlpha=function(v){return this.a=(0,j.Yq)(v),this.roundA=Math.round(100*this.a)/100,this},R.prototype.isMonochrome=function(){var v=this.toHsl().s;return v===0},R.prototype.toHsv=function(){var v=(0,r.py)(this.r,this.g,this.b);return{h:v.h*360,s:v.s,v:v.v,a:this.a}},R.prototype.toHsvString=function(){var v=(0,r.py)(this.r,this.g,this.b),Y=Math.round(v.h*360),O=Math.round(v.s*100),$=Math.round(v.v*100);return this.a===1?"hsv(".concat(Y,", ").concat(O,"%, ").concat($,"%)"):"hsva(".concat(Y,", ").concat(O,"%, ").concat($,"%, ").concat(this.roundA,")")},R.prototype.toHsl=function(){var v=(0,r.lC)(this.r,this.g,this.b);return{h:v.h*360,s:v.s,l:v.l,a:this.a}},R.prototype.toHslString=function(){var v=(0,r.lC)(this.r,this.g,this.b),Y=Math.round(v.h*360),O=Math.round(v.s*100),$=Math.round(v.l*100);return this.a===1?"hsl(".concat(Y,", ").concat(O,"%, ").concat($,"%)"):"hsla(".concat(Y,", ").concat(O,"%, ").concat($,"%, ").concat(this.roundA,")")},R.prototype.toHex=function(v){return v===void 0&&(v=!1),(0,r.vq)(this.r,this.g,this.b,v)},R.prototype.toHexString=function(v){return v===void 0&&(v=!1),"#"+this.toHex(v)},R.prototype.toHex8=function(v){return v===void 0&&(v=!1),(0,r.s)(this.r,this.g,this.b,this.a,v)},R.prototype.toHex8String=function(v){return v===void 0&&(v=!1),"#"+this.toHex8(v)},R.prototype.toHexShortString=function(v){return v===void 0&&(v=!1),this.a===1?this.toHexString(v):this.toHex8String(v)},R.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},R.prototype.toRgbString=function(){var v=Math.round(this.r),Y=Math.round(this.g),O=Math.round(this.b);return this.a===1?"rgb(".concat(v,", ").concat(Y,", ").concat(O,")"):"rgba(".concat(v,", ").concat(Y,", ").concat(O,", ").concat(this.roundA,")")},R.prototype.toPercentageRgb=function(){var v=function(Y){return"".concat(Math.round((0,j.sh)(Y,255)*100),"%")};return{r:v(this.r),g:v(this.g),b:v(this.b),a:this.a}},R.prototype.toPercentageRgbString=function(){var v=function(Y){return Math.round((0,j.sh)(Y,255)*100)};return this.a===1?"rgb(".concat(v(this.r),"%, ").concat(v(this.g),"%, ").concat(v(this.b),"%)"):"rgba(".concat(v(this.r),"%, ").concat(v(this.g),"%, ").concat(v(this.b),"%, ").concat(this.roundA,")")},R.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var v="#"+(0,r.vq)(this.r,this.g,this.b,!1),Y=0,O=Object.entries(y.R);Y=0,T=!Y&&$&&(v.startsWith("hex")||v==="name");return T?v==="name"&&this.a===0?this.toName():this.toRgbString():(v==="rgb"&&(O=this.toRgbString()),v==="prgb"&&(O=this.toPercentageRgbString()),(v==="hex"||v==="hex6")&&(O=this.toHexString()),v==="hex3"&&(O=this.toHexString(!0)),v==="hex4"&&(O=this.toHex8String(!0)),v==="hex8"&&(O=this.toHex8String()),v==="name"&&(O=this.toName()),v==="hsl"&&(O=this.toHslString()),v==="hsv"&&(O=this.toHsvString()),O||this.toHexString())},R.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},R.prototype.clone=function(){return new R(this.toString())},R.prototype.lighten=function(v){v===void 0&&(v=10);var Y=this.toHsl();return Y.l+=v/100,Y.l=(0,j.V2)(Y.l),new R(Y)},R.prototype.brighten=function(v){v===void 0&&(v=10);var Y=this.toRgb();return Y.r=Math.max(0,Math.min(255,Y.r-Math.round(255*-(v/100)))),Y.g=Math.max(0,Math.min(255,Y.g-Math.round(255*-(v/100)))),Y.b=Math.max(0,Math.min(255,Y.b-Math.round(255*-(v/100)))),new R(Y)},R.prototype.darken=function(v){v===void 0&&(v=10);var Y=this.toHsl();return Y.l-=v/100,Y.l=(0,j.V2)(Y.l),new R(Y)},R.prototype.tint=function(v){return v===void 0&&(v=10),this.mix("white",v)},R.prototype.shade=function(v){return v===void 0&&(v=10),this.mix("black",v)},R.prototype.desaturate=function(v){v===void 0&&(v=10);var Y=this.toHsl();return Y.s-=v/100,Y.s=(0,j.V2)(Y.s),new R(Y)},R.prototype.saturate=function(v){v===void 0&&(v=10);var Y=this.toHsl();return Y.s+=v/100,Y.s=(0,j.V2)(Y.s),new R(Y)},R.prototype.greyscale=function(){return this.desaturate(100)},R.prototype.spin=function(v){var Y=this.toHsl(),O=(Y.h+v)%360;return Y.h=O<0?360+O:O,new R(Y)},R.prototype.mix=function(v,Y){Y===void 0&&(Y=50);var O=this.toRgb(),$=new R(v).toRgb(),T=Y/100,b={r:($.r-O.r)*T+O.r,g:($.g-O.g)*T+O.g,b:($.b-O.b)*T+O.b,a:($.a-O.a)*T+O.a};return new R(b)},R.prototype.analogous=function(v,Y){v===void 0&&(v=6),Y===void 0&&(Y=30);var O=this.toHsl(),$=360/Y,T=[this];for(O.h=(O.h-($*v>>1)+720)%360;--v;)O.h=(O.h+$)%360,T.push(new R(O));return T},R.prototype.complement=function(){var v=this.toHsl();return v.h=(v.h+180)%360,new R(v)},R.prototype.monochromatic=function(v){v===void 0&&(v=6);for(var Y=this.toHsv(),O=Y.h,$=Y.s,T=Y.v,b=[],we=1/v;v--;)b.push(new R({h:O,s:$,v:T})),T=(T+we)%1;return b},R.prototype.splitcomplement=function(){var v=this.toHsl(),Y=v.h;return[this,new R({h:(Y+72)%360,s:v.s,l:v.l}),new R({h:(Y+216)%360,s:v.s,l:v.l})]},R.prototype.onBackground=function(v){var Y=this.toRgb(),O=new R(v).toRgb(),$=Y.a+O.a*(1-Y.a);return new R({r:(Y.r*Y.a+O.r*O.a*(1-Y.a))/$,g:(Y.g*Y.a+O.g*O.a*(1-Y.a))/$,b:(Y.b*Y.a+O.b*O.a*(1-Y.a))/$,a:$})},R.prototype.triad=function(){return this.polyad(3)},R.prototype.tetrad=function(){return this.polyad(4)},R.prototype.polyad=function(v){for(var Y=this.toHsl(),O=Y.h,$=[this],T=360/v,b=1;b1)&&(v=1),v}function A(v){return v<=1?"".concat(Number(v)*100,"%"):v}function R(v){return v.length===1?"0"+v:String(v)}},19293:function(Ve,k,s){"use strict";s.d(k,{i:function(){return Ae}});var r=s(19632),y=s.n(r),X=s(5574),j=s.n(X),Z=s(67294),A=s(12444),R=s.n(A),v=s(72004),Y=s.n(v),O=s(25098),$=s.n(O),T=s(31996),b=s.n(T),we=s(26037),Q=s.n(we),J=s(9783),ue=s.n(J),_=Y()(function V(){R()(this,V)}),Be=function(V){b()(q,V);var he=Q()(q);function q(D){var U;return R()(this,q),U=he.call(this),ue()($()(U),"el",void 0),U.el=D,U}return Y()(q,[{key:"top",get:function(){return this.el.getBoundingClientRect().top}},{key:"outerHeight",get:function(){return this.el.getBoundingClientRect().height}},{key:"scrollTop",get:function(){return this.el.scrollTop}},{key:"scrollHeight",get:function(){return this.el.scrollHeight}},{key:"isScrolledToBottom",value:function(){return this.scrollTop+this.outerHeight>=this.scrollHeight}},{key:"registerScrollEvent",value:function(U){this.el.addEventListener("scroll",U)}},{key:"unregisterScrollEvent",value:function(U){this.el.removeEventListener("scroll",U)}}],[{key:"create",value:function(U){var Oe=document.querySelector(U);if(!Oe)throw new Error("element is not found.");return new q(Oe)}}]),q}(_),Le=function(V){b()(q,V);var he=Q()(q);function q(){return R()(this,q),he.apply(this,arguments)}return Y()(q,[{key:"outerHeight",get:function(){return window.innerHeight}},{key:"scrollTop",get:function(){return document.documentElement.scrollTop}},{key:"scrollHeight",get:function(){return document.documentElement.scrollHeight}},{key:"isScrolledToBottom",value:function(){return this.scrollTop+this.outerHeight>=this.scrollHeight}},{key:"registerScrollEvent",value:function(U){document.addEventListener("scroll",U)}},{key:"unregisterScrollEvent",value:function(U){document.removeEventListener("scroll",U)}}],[{key:"create",value:function(){return new q}}]),q}(_),Bt=function(){function V(){R()(this,V)}return Y()(V,null,[{key:"create",value:function(q){return q?Be.create(q):Le.create()}}]),V}(),vt=function(he){var q=he.sectionRefs,D=he.rootSelector,U=he.offset,Oe=U===void 0?0:U,He=(0,Z.useRef)(null);(0,Z.useEffect)(function(){He.current=Bt.create(D)},[D]);var pe=(0,Z.useCallback)(function(){return He.current?He.current.isScrolledToBottom():!1},[He]),Qe=(0,Z.useCallback)(function($e){if(!He.current)return!1;var yt=He.current.scrollTop,Qt=yt+He.current.outerHeight,nn=$e.getBoundingClientRect(),vn=He.current instanceof Be?yt+nn.top-He.current.top+Oe:yt+nn.top+Oe,Ln=vn+nn.height;return[vnyt].every(function(ht){return ht})},[He,Oe]),ft=(0,Z.useCallback)(function(){return q.map(function($e){return $e.current?Qe($e.current):!1})},[Qe,q]),Pt=(0,Z.useState)([]),g=j()(Pt,2),de=g[0],ce=g[1],be=(0,Z.useMemo)(function(){return de.findIndex(function($e){return $e})},[de]),Me=(0,Z.useCallback)(function(){var $e=pe()?[].concat(y()(new Array(q.length-1).fill(!1).map(function(yt){return yt})),[!0]):ft();ce($e)},[ft,pe,q]);return(0,Z.useEffect)(function(){return Me(),He.current&&He.current.registerScrollEvent(Me),function(){He.current&&He.current.unregisterScrollEvent(Me)}},[Me]),{elementsStatusInViewport:de,currentElementIndexInViewport:be}},Ae=function(he){var q=he.children,D=he.sectionRefs,U=he.rootSelector,Oe=he.offset,He=vt({sectionRefs:D,rootSelector:U,offset:Oe}),pe=He.elementsStatusInViewport,Qe=He.currentElementIndexInViewport;return q({elementsStatusInViewport:pe,currentElementIndexInViewport:Qe})}},36334:function(){"use strict"},71110:function(){"use strict"},99616:function(Ve,k,s){"use strict";s.d(k,{r:function(){return v}});var r=s(67294),y=Object.defineProperty,X=Object.getOwnPropertySymbols,j=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(O,$,T)=>$ in O?y(O,$,{enumerable:!0,configurable:!0,writable:!0,value:T}):O[$]=T,R=(O,$)=>{for(var T in $||($={}))j.call($,T)&&A(O,T,$[T]);if(X)for(var T of X($))Z.call($,T)&&A(O,T,$[T]);return O};const v=O=>r.createElement("svg",R({viewBox:"64 64 896 896"},O),r.createElement("path",{d:"M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z"}));var Y="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNODYyIDQ2NS4zaC04MWMtNC42IDAtOSAyLTEyLjEgNS41TDU1MCA3MjMuMVYxNjBjMC00LjQtMy42LTgtOC04aC02MGMtNC40IDAtOCAzLjYtOCA4djU2My4xTDI1NS4xIDQ3MC44Yy0zLTMuNS03LjQtNS41LTEyLjEtNS41aC04MWMtNi44IDAtMTAuNSA4LjEtNiAxMy4yTDQ4Ny45IDg2MWEzMS45NiAzMS45NiAwIDAgMCA0OC4zIDBMODY4IDQ3OC41YzQuNS01LjIuOC0xMy4yLTYtMTMuMnoiLz48L3N2Zz4="},86949:function(Ve,k,s){"use strict";s.d(k,{r:function(){return v}});var r=s(67294),y=Object.defineProperty,X=Object.getOwnPropertySymbols,j=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(O,$,T)=>$ in O?y(O,$,{enumerable:!0,configurable:!0,writable:!0,value:T}):O[$]=T,R=(O,$)=>{for(var T in $||($={}))j.call($,T)&&A(O,T,$[T]);if(X)for(var T of X($))Z.call($,T)&&A(O,T,$[T]);return O};const v=O=>r.createElement("svg",R({viewBox:"64 64 896 896"},O),r.createElement("path",{d:"M872 474H286.9l350.2-304c5.6-4.9 2.2-14-5.2-14h-88.5c-3.9 0-7.6 1.4-10.5 3.9L155 487.8a31.96 31.96 0 0 0 0 48.3L535.1 866c1.5 1.3 3.3 2 5.2 2h91.5c7.4 0 10.8-9.2 5.2-14L286.9 550H872c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"}));var Y="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNODcyIDQ3NEgyODYuOWwzNTAuMi0zMDRjNS42LTQuOSAyLjItMTQtNS4yLTE0aC04OC41Yy0zLjkgMC03LjYgMS40LTEwLjUgMy45TDE1NSA0ODcuOGEzMS45NiAzMS45NiAwIDAgMCAwIDQ4LjNMNTM1LjEgODY2YzEuNSAxLjMgMy4zIDIgNS4yIDJoOTEuNWM3LjQgMCAxMC44LTkuMiA1LjItMTRMMjg2LjkgNTUwSDg3MmM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHoiLz48L3N2Zz4="},11784:function(Ve,k,s){"use strict";s.d(k,{r:function(){return v}});var r=s(67294),y=Object.defineProperty,X=Object.getOwnPropertySymbols,j=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(O,$,T)=>$ in O?y(O,$,{enumerable:!0,configurable:!0,writable:!0,value:T}):O[$]=T,R=(O,$)=>{for(var T in $||($={}))j.call($,T)&&A(O,T,$[T]);if(X)for(var T of X($))Z.call($,T)&&A(O,T,$[T]);return O};const v=O=>r.createElement("svg",R({viewBox:"64 64 896 896"},O),r.createElement("path",{d:"M868 545.5 536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z"}));var Y="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNODY4IDU0NS41IDUzNi4xIDE2M2EzMS45NiAzMS45NiAwIDAgMC00OC4zIDBMMTU2IDU0NS41YTcuOTcgNy45NyAwIDAgMCA2IDEzLjJoODFjNC42IDAgOS0yIDEyLjEtNS41TDQ3NCAzMDAuOVY4NjRjMCA0LjQgMy42IDggOCA4aDYwYzQuNCAwIDgtMy42IDgtOFYzMDAuOWwyMTguOSAyNTIuM2MzIDMuNSA3LjQgNS41IDEyLjEgNS41aDgxYzYuOCAwIDEwLjUtOCA2LTEzLjJ6Ii8+PC9zdmc+"},82634:function(Ve,k,s){"use strict";s.d(k,{r:function(){return v}});var r=s(67294),y=Object.defineProperty,X=Object.getOwnPropertySymbols,j=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(O,$,T)=>$ in O?y(O,$,{enumerable:!0,configurable:!0,writable:!0,value:T}):O[$]=T,R=(O,$)=>{for(var T in $||($={}))j.call($,T)&&A(O,T,$[T]);if(X)for(var T of X($))Z.call($,T)&&A(O,T,$[T]);return O};const v=O=>r.createElement("svg",R({fillRule:"evenodd",viewBox:"64 64 896 896"},O),r.createElement("path",{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 0 1 0 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 0 1 0 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 0 1-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 0 1-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7a.169.169 0 0 1-.06-.07.12.12 0 0 1 0-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7a.199.199 0 0 1-.06-.09.12.12 0 0 1 0-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 0 1 .07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 0 1 .07 0z"}));var Y="data:image/svg+xml;base64,PHN2ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiPjxwYXRoIGQ9Ik03OTkuODYgMTY2LjMxYy4wMiAwIC4wNC4wMi4wOC4wNmw1Ny42OSA1Ny43Yy4wNC4wMy4wNS4wNS4wNi4wOGEuMTIuMTIgMCAwIDEgMCAuMDZjMCAuMDMtLjAyLjA1LS4wNi4wOUw1NjkuOTMgNTEybDI4Ny43IDI4Ny43Yy4wNC4wNC4wNS4wNi4wNi4wOWEuMTIuMTIgMCAwIDEgMCAuMDdjMCAuMDItLjAyLjA0LS4wNi4wOGwtNTcuNyA1Ny42OWMtLjAzLjA0LS4wNS4wNS0uMDcuMDZhLjEyLjEyIDAgMCAxLS4wNyAwYy0uMDMgMC0uMDUtLjAyLS4wOS0uMDZMNTEyIDU2OS45M2wtMjg3LjcgMjg3LjdjLS4wNC4wNC0uMDYuMDUtLjA5LjA2YS4xMi4xMiAwIDAgMS0uMDcgMGMtLjAyIDAtLjA0LS4wMi0uMDgtLjA2bC01Ny42OS01Ny43YS4xNjkuMTY5IDAgMCAxLS4wNi0uMDcuMTIuMTIgMCAwIDEgMC0uMDdjMC0uMDMuMDItLjA1LjA2LS4wOUw0NTQuMDcgNTEybC0yODcuNy0yODcuN2EuMTk5LjE5OSAwIDAgMS0uMDYtLjA5LjEyLjEyIDAgMCAxIDAtLjA3YzAtLjAyLjAyLS4wNC4wNi0uMDhsNTcuNy01Ny42OWMuMDMtLjA0LjA1LS4wNS4wNy0uMDZhLjEyLjEyIDAgMCAxIC4wNyAwYy4wMyAwIC4wNS4wMi4wOS4wNkw1MTIgNDU0LjA3bDI4Ny43LTI4Ny43Yy4wNC0uMDQuMDYtLjA1LjA5LS4wNmEuMTIuMTIgMCAwIDEgLjA3IDB6Ii8+PC9zdmc+"},99069:function(Ve,k,s){"use strict";s.d(k,{r:function(){return v}});var r=s(67294),y=Object.defineProperty,X=Object.getOwnPropertySymbols,j=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(O,$,T)=>$ in O?y(O,$,{enumerable:!0,configurable:!0,writable:!0,value:T}):O[$]=T,R=(O,$)=>{for(var T in $||($={}))j.call($,T)&&A(O,T,$[T]);if(X)for(var T of X($))Z.call($,T)&&A(O,T,$[T]);return O};const v=O=>r.createElement("svg",R({viewBox:"64 64 896 896"},O),r.createElement("path",{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}));var Y="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNODg0IDI1NmgtNzVjLTUuMSAwLTkuOSAyLjUtMTIuOSA2LjZMNTEyIDY1NC4yIDIyNy45IDI2Mi42Yy0zLTQuMS03LjgtNi42LTEyLjktNi42aC03NWMtNi41IDAtMTAuMyA3LjQtNi41IDEyLjdsMzUyLjYgNDg2LjFjMTIuOCAxNy42IDM5IDE3LjYgNTEuNyAwbDM1Mi42LTQ4Ni4xYzMuOS01LjMuMS0xMi43LTYuNC0xMi43eiIvPjwvc3ZnPg=="},13373:function(Ve,k,s){"use strict";s.d(k,{r:function(){return v}});var r=s(67294),y=Object.defineProperty,X=Object.getOwnPropertySymbols,j=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(O,$,T)=>$ in O?y(O,$,{enumerable:!0,configurable:!0,writable:!0,value:T}):O[$]=T,R=(O,$)=>{for(var T in $||($={}))j.call($,T)&&A(O,T,$[T]);if(X)for(var T of X($))Z.call($,T)&&A(O,T,$[T]);return O};const v=O=>r.createElement("svg",R({viewBox:"0 0 1024 1024"},O),r.createElement("path",{d:"m885.2 446.3-.2-.8-112.2-285.1c-5-16.1-19.9-27.2-36.8-27.2H281.2c-17 0-32.1 11.3-36.9 27.6L139.4 443l-.3.7-.2.8c-1.3 4.9-1.7 9.9-1 14.8-.1 1.6-.2 3.2-.2 4.8V830a60.9 60.9 0 0 0 60.8 60.8h627.2c33.5 0 60.8-27.3 60.9-60.8V464.1c0-1.3 0-2.6-.1-3.7.4-4.9 0-9.6-1.3-14.1zm-295.8-43-.3 15.7c-.8 44.9-31.8 75.1-77.1 75.1-22.1 0-41.1-7.1-54.8-20.6S436 441.2 435.6 419l-.3-15.7H229.5L309 210h399.2l81.7 193.3H589.4zm-375 76.8h157.3c24.3 57.1 76 90.8 140.4 90.8 33.7 0 65-9.4 90.3-27.2 22.2-15.6 39.5-37.4 50.7-63.6h156.5V814H214.4V480.1z"}));var Y="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0Ij48cGF0aCBkPSJtODg1LjIgNDQ2LjMtLjItLjgtMTEyLjItMjg1LjFjLTUtMTYuMS0xOS45LTI3LjItMzYuOC0yNy4ySDI4MS4yYy0xNyAwLTMyLjEgMTEuMy0zNi45IDI3LjZMMTM5LjQgNDQzbC0uMy43LS4yLjhjLTEuMyA0LjktMS43IDkuOS0xIDE0LjgtLjEgMS42LS4yIDMuMi0uMiA0LjhWODMwYTYwLjkgNjAuOSAwIDAgMCA2MC44IDYwLjhoNjI3LjJjMzMuNSAwIDYwLjgtMjcuMyA2MC45LTYwLjhWNDY0LjFjMC0xLjMgMC0yLjYtLjEtMy43LjQtNC45IDAtOS42LTEuMy0xNC4xem0tMjk1LjgtNDMtLjMgMTUuN2MtLjggNDQuOS0zMS44IDc1LjEtNzcuMSA3NS4xLTIyLjEgMC00MS4xLTcuMS01NC44LTIwLjZTNDM2IDQ0MS4yIDQzNS42IDQxOWwtLjMtMTUuN0gyMjkuNUwzMDkgMjEwaDM5OS4ybDgxLjcgMTkzLjNINTg5LjR6bS0zNzUgNzYuOGgxNTcuM2MyNC4zIDU3LjEgNzYgOTAuOCAxNDAuNCA5MC44IDMzLjcgMCA2NS05LjQgOTAuMy0yNy4yIDIyLjItMTUuNiAzOS41LTM3LjQgNTAuNy02My42aDE1Ni41VjgxNEgyMTQuNFY0ODAuMXoiLz48L3N2Zz4="},45498:function(Ve,k,s){"use strict";s.d(k,{r:function(){return v}});var r=s(67294),y=Object.defineProperty,X=Object.getOwnPropertySymbols,j=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(O,$,T)=>$ in O?y(O,$,{enumerable:!0,configurable:!0,writable:!0,value:T}):O[$]=T,R=(O,$)=>{for(var T in $||($={}))j.call($,T)&&A(O,T,$[T]);if(X)for(var T of X($))Z.call($,T)&&A(O,T,$[T]);return O};const v=O=>r.createElement("svg",R({viewBox:"64 64 896 896"},O),r.createElement("path",{d:"M904 160H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8zm0 624H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8zm0-312H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8z"}));var Y="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNOTA0IDE2MEgxMjBjLTQuNCAwLTggMy42LTggOHY2NGMwIDQuNCAzLjYgOCA4IDhoNzg0YzQuNCAwIDgtMy42IDgtOHYtNjRjMC00LjQtMy42LTgtOC04em0wIDYyNEgxMjBjLTQuNCAwLTggMy42LTggOHY2NGMwIDQuNCAzLjYgOCA4IDhoNzg0YzQuNCAwIDgtMy42IDgtOHYtNjRjMC00LjQtMy42LTgtOC04em0wLTMxMkgxMjBjLTQuNCAwLTggMy42LTggOHY2NGMwIDQuNCAzLjYgOCA4IDhoNzg0YzQuNCAwIDgtMy42IDgtOHYtNjRjMC00LjQtMy42LTgtOC04eiIvPjwvc3ZnPg=="},26481:function(Ve,k,s){"use strict";s.d(k,{r:function(){return v}});var r=s(67294),y=Object.defineProperty,X=Object.getOwnPropertySymbols,j=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(O,$,T)=>$ in O?y(O,$,{enumerable:!0,configurable:!0,writable:!0,value:T}):O[$]=T,R=(O,$)=>{for(var T in $||($={}))j.call($,T)&&A(O,T,$[T]);if(X)for(var T of X($))Z.call($,T)&&A(O,T,$[T]);return O};const v=O=>r.createElement("svg",R({viewBox:"64 64 896 896"},O),r.createElement("path",{d:"M909.6 854.5 649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0 0 11.6 0l43.6-43.5a8.2 8.2 0 0 0 0-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z"}));var Y="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNOTA5LjYgODU0LjUgNjQ5LjkgNTk0LjhDNjkwLjIgNTQyLjcgNzEyIDQ3OSA3MTIgNDEyYzAtODAuMi0zMS4zLTE1NS40LTg3LjktMjEyLjEtNTYuNi01Ni43LTEzMi04Ny45LTIxMi4xLTg3LjlzLTE1NS41IDMxLjMtMjEyLjEgODcuOUMxNDMuMiAyNTYuNSAxMTIgMzMxLjggMTEyIDQxMmMwIDgwLjEgMzEuMyAxNTUuNSA4Ny45IDIxMi4xQzI1Ni41IDY4MC44IDMzMS44IDcxMiA0MTIgNzEyYzY3IDAgMTMwLjYtMjEuOCAxODIuNy02MmwyNTkuNyAyNTkuNmE4LjIgOC4yIDAgMCAwIDExLjYgMGw0My42LTQzLjVhOC4yIDguMiAwIDAgMCAwLTExLjZ6TTU3MC40IDU3MC40QzUyOCA2MTIuNyA0NzEuOCA2MzYgNDEyIDYzNnMtMTE2LTIzLjMtMTU4LjQtNjUuNkMyMTEuMyA1MjggMTg4IDQ3MS44IDE4OCA0MTJzMjMuMy0xMTYuMSA2NS42LTE1OC40QzI5NiAyMTEuMyAzNTIuMiAxODggNDEyIDE4OHMxMTYuMSAyMy4yIDE1OC40IDY1LjZTNjM2IDM1Mi4yIDYzNiA0MTJzLTIzLjMgMTE2LjEtNjUuNiAxNTguNHoiLz48L3N2Zz4="},87263:function(Ve,k,s){"use strict";s.d(k,{Cn:function(){return $}});var r=s(67294),y=s(25976),X=s(43945);const j=100,R=j*10+j,v={Modal:j,Drawer:j,Popover:j,Popconfirm:j,Tooltip:j,Tour:j,FloatButton:j},Y={SelectLike:50,Dropdown:50,DatePicker:50,Menu:50,ImagePreview:1};function O(T){return T in v}const $=(T,b)=>{const[,we]=(0,y.ZP)(),Q=r.useContext(X.Z),J=O(T);let ue;if(b!==void 0)ue=[b,b];else{let _=Q!=null?Q:0;J?_+=(Q?0:we.zIndexPopupBase)+v[T]:_+=Y[T],ue=[Q===void 0?b:_,_]}return ue}},33603:function(Ve,k,s){"use strict";s.d(k,{m:function(){return v}});var r=s(53124);const y=()=>({height:0,opacity:0}),X=Y=>{const{scrollHeight:O}=Y;return{height:O,opacity:1}},j=Y=>({height:Y?Y.offsetHeight:0}),Z=(Y,O)=>(O==null?void 0:O.deadline)===!0||O.propertyName==="height",A=function(){return{motionName:`${arguments.length>0&&arguments[0]!==void 0?arguments[0]:r.Rf}-motion-collapse`,onAppearStart:y,onEnterStart:y,onAppearActive:X,onEnterActive:X,onLeaveStart:j,onLeaveActive:y,onAppearEnd:Z,onEnterEnd:Z,onLeaveEnd:Z,motionDeadline:500}},R=null,v=(Y,O,$)=>$!==void 0?$:`${Y}-${O}`;k.Z=A},96159:function(Ve,k,s){"use strict";s.d(k,{M2:function(){return y},Tm:function(){return j}});var r=s(67294);function y(Z){return Z&&r.isValidElement(Z)&&Z.type===r.Fragment}const X=(Z,A,R)=>r.isValidElement(Z)?r.cloneElement(Z,typeof R=="function"?R(Z.props||{}):R):A;function j(Z,A){return X(Z,Z,A)}},27288:function(Ve,k,s){"use strict";s.d(k,{G8:function(){return R},ln:function(){return v}});var r=s(67294),y=s(80334);function X(){}let j=null;function Z(){j=null,rcResetWarned()}let A=null;const R=r.createContext({}),v=()=>{const O=()=>{};return O.deprecated=X,O};var Y=null},43945:function(Ve,k,s){"use strict";var r=s(67294);const y=r.createContext(void 0);k.Z=y},20182:function(Ve,k,s){"use strict";s.d(k,{ZP:function(){return fn}});var r=s(67294),y=s(93967),X=s.n(y),j=s(98423),Z=s(42550),A=s(5110),R=s(53124),v=s(96159),Y=s(83559);const O=u=>{const{componentCls:S,colorPrimary:K}=u;return{[S]:{position:"absolute",background:"transparent",pointerEvents:"none",boxSizing:"border-box",color:`var(--wave-color, ${K})`,boxShadow:"0 0 0 0 currentcolor",opacity:.2,"&.wave-motion-appear":{transition:[`box-shadow 0.4s ${u.motionEaseOutCirc}`,`opacity 2s ${u.motionEaseOutCirc}`].join(","),"&-active":{boxShadow:"0 0 0 6px currentcolor",opacity:0},"&.wave-quick":{transition:[`box-shadow ${u.motionDurationSlow} ${u.motionEaseInOut}`,`opacity ${u.motionDurationSlow} ${u.motionEaseInOut}`].join(",")}}}}};var $=(0,Y.A1)("Wave",u=>[O(u)]),T=s(66680),b=s(75164),we=s(25976);const Q=`${R.Rf}-wave-target`;var J=s(29372),ue=s(74165),_=s(15861),Be=s(71002),Le=s(1413),Bt=s(73935),vt=s.t(Bt,2),Ae=(0,Le.Z)({},vt),V=Ae.version,he=Ae.render,q=Ae.unmountComponentAtNode,D;try{var U=Number((V||"").split(".")[0]);U>=18&&(D=Ae.createRoot)}catch(u){}function Oe(u){var S=Ae.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;S&&(0,Be.Z)(S)==="object"&&(S.usingClientEntryPoint=u)}var He="__rc_react_root__";function pe(u,S){Oe(!0);var K=S[He]||D(S);Oe(!1),K.render(u),S[He]=K}function Qe(u,S){he(u,S)}function ft(u,S){}function Pt(u,S){if(D){pe(u,S);return}Qe(u,S)}function g(u){return de.apply(this,arguments)}function de(){return de=(0,_.Z)((0,ue.Z)().mark(function u(S){return(0,ue.Z)().wrap(function(re){for(;;)switch(re.prev=re.next){case 0:return re.abrupt("return",Promise.resolve().then(function(){var n;(n=S[He])===null||n===void 0||n.unmount(),delete S[He]}));case 1:case"end":return re.stop()}},u)})),de.apply(this,arguments)}function ce(u){q(u)}function be(u){}function Me(u){return $e.apply(this,arguments)}function $e(){return $e=(0,_.Z)((0,ue.Z)().mark(function u(S){return(0,ue.Z)().wrap(function(re){for(;;)switch(re.prev=re.next){case 0:if(D===void 0){re.next=2;break}return re.abrupt("return",g(S));case 2:ce(S);case 3:case"end":return re.stop()}},u)})),$e.apply(this,arguments)}function yt(u){return u&&u!=="#fff"&&u!=="#ffffff"&&u!=="rgb(255, 255, 255)"&&u!=="rgba(255, 255, 255, 1)"&&!/rgba\((?:\d*, ){3}0\)/.test(u)&&u!=="transparent"}function Qt(u){const{borderTopColor:S,borderColor:K,backgroundColor:re}=getComputedStyle(u);return yt(S)?S:yt(K)?K:yt(re)?re:null}function nn(u){return Number.isNaN(u)?0:u}const vn=u=>{const{className:S,target:K,component:re}=u,n=r.useRef(null),[a,N]=r.useState(null),[P,ae]=r.useState([]),[Ne,ze]=r.useState(0),[pt,at]=r.useState(0),[Ut,Ht]=r.useState(0),[On,on]=r.useState(0),[Hn,Tn]=r.useState(!1),Gn={left:Ne,top:pt,width:Ut,height:On,borderRadius:P.map(Yt=>`${Yt}px`).join(" ")};a&&(Gn["--wave-color"]=a);function Sn(){const Yt=getComputedStyle(K);N(Qt(K));const dn=Yt.position==="static",{borderLeftWidth:Vn,borderTopWidth:f}=Yt;ze(dn?K.offsetLeft:nn(-parseFloat(Vn))),at(dn?K.offsetTop:nn(-parseFloat(f))),Ht(K.offsetWidth),on(K.offsetHeight);const{borderTopLeftRadius:I,borderTopRightRadius:oe,borderBottomLeftRadius:ve,borderBottomRightRadius:Ie}=Yt;ae([I,oe,Ie,ve].map(it=>nn(parseFloat(it))))}if(r.useEffect(()=>{if(K){const Yt=(0,b.Z)(()=>{Sn(),Tn(!0)});let dn;return typeof ResizeObserver!="undefined"&&(dn=new ResizeObserver(Sn),dn.observe(K)),()=>{b.Z.cancel(Yt),dn==null||dn.disconnect()}}},[]),!Hn)return null;const Jt=(re==="Checkbox"||re==="Radio")&&(K==null?void 0:K.classList.contains(Q));return r.createElement(J.ZP,{visible:!0,motionAppear:!0,motionName:"wave-motion",motionDeadline:5e3,onAppearEnd:(Yt,dn)=>{var Vn;if(dn.deadline||dn.propertyName==="opacity"){const f=(Vn=n.current)===null||Vn===void 0?void 0:Vn.parentElement;Me(f).then(()=>{f==null||f.remove()})}return!1}},(Yt,dn)=>{let{className:Vn}=Yt;return r.createElement("div",{ref:(0,Z.sQ)(n,dn),className:X()(S,Vn,{"wave-quick":Jt}),style:Gn})})};var ht=(u,S)=>{var K;const{component:re}=S;if(re==="Checkbox"&&!(!((K=u.querySelector("input"))===null||K===void 0)&&K.checked))return;const n=document.createElement("div");n.style.position="absolute",n.style.left="0px",n.style.top="0px",u==null||u.insertBefore(n,u==null?void 0:u.firstChild),Pt(r.createElement(vn,Object.assign({},S,{target:u})),n)},se=(u,S,K)=>{const{wave:re}=r.useContext(R.E_),[,n,a]=(0,we.ZP)(),N=(0,T.Z)(Ne=>{const ze=u.current;if(re!=null&&re.disabled||!ze)return;const pt=ze.querySelector(`.${Q}`)||ze,{showEffect:at}=re||{};(at||ht)(pt,{className:S,token:n,component:K,event:Ne,hashId:a})}),P=r.useRef();return Ne=>{b.Z.cancel(P.current),P.current=(0,b.Z)(()=>{N(Ne)})}},De=u=>{const{children:S,disabled:K,component:re}=u,{getPrefixCls:n}=(0,r.useContext)(R.E_),a=(0,r.useRef)(null),N=n("wave"),[,P]=$(N),ae=se(a,X()(N,P),re);if(r.useEffect(()=>{const ze=a.current;if(!ze||ze.nodeType!==1||K)return;const pt=at=>{!(0,A.Z)(at.target)||!ze.getAttribute||ze.getAttribute("disabled")||ze.disabled||ze.className.includes("disabled")||ze.className.includes("-leave")||ae(at)};return ze.addEventListener("click",pt,!0),()=>{ze.removeEventListener("click",pt,!0)}},[K]),!r.isValidElement(S))return S!=null?S:null;const Ne=(0,Z.Yr)(S)?(0,Z.sQ)(S.ref,a):a;return(0,v.Tm)(S,{ref:Ne})},xe=s(98866),je=s(98675),It=s(4173),cn=function(u,S){var K={};for(var re in u)Object.prototype.hasOwnProperty.call(u,re)&&S.indexOf(re)<0&&(K[re]=u[re]);if(u!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,re=Object.getOwnPropertySymbols(u);n{const{getPrefixCls:S,direction:K}=r.useContext(R.E_),{prefixCls:re,size:n,className:a}=u,N=cn(u,["prefixCls","size","className"]),P=S("btn-group",re),[,,ae]=(0,we.ZP)();let Ne="";switch(n){case"large":Ne="lg";break;case"small":Ne="sm";break;default:}const ze=X()(P,{[`${P}-${Ne}`]:Ne,[`${P}-rtl`]:K==="rtl"},a,ae);return r.createElement(Fn.Provider,{value:n},r.createElement("div",Object.assign({},N,{className:ze})))};const or=/^[\u4E00-\u9FA5]{2}$/,dr=or.test.bind(or);function Zn(u){return u==="danger"?{danger:!0}:{type:u}}function jn(u){return typeof u=="string"}function mn(u){return u==="text"||u==="link"}function Ft(u,S){if(u==null)return;const K=S?" ":"";return typeof u!="string"&&typeof u!="number"&&jn(u.type)&&dr(u.props.children)?(0,v.Tm)(u,{children:u.props.children.split("").join(K)}):jn(u)?dr(u)?r.createElement("span",null,u.split("").join(K)):r.createElement("span",null,u):(0,v.M2)(u)?r.createElement("span",null,u):u}function Ct(u,S){let K=!1;const re=[];return r.Children.forEach(u,n=>{const a=typeof n,N=a==="string"||a==="number";if(K&&N){const P=re.length-1,ae=re[P];re[P]=`${ae}${n}`}else re.push(n);K=N}),r.Children.map(re,n=>Ft(n,S))}const Mt=null,tn=null,qt=null,un=null,hn=null;var tt=(0,r.forwardRef)((u,S)=>{const{className:K,style:re,children:n,prefixCls:a}=u,N=X()(`${a}-icon`,K);return r.createElement("span",{ref:S,className:N,style:re},n)}),Ke=s(50888);const mr=(0,r.forwardRef)((u,S)=>{const{prefixCls:K,className:re,style:n,iconClassName:a}=u,N=X()(`${K}-loading-icon`,re);return r.createElement(tt,{prefixCls:K,className:N,style:n,ref:S},r.createElement(Ke.Z,{className:a}))}),rr=()=>({width:0,opacity:0,transform:"scale(0)"}),yr=u=>({width:u.scrollWidth,opacity:1,transform:"scale(1)"});var pr=u=>{const{prefixCls:S,loading:K,existIcon:re,className:n,style:a}=u,N=!!K;return re?r.createElement(mr,{prefixCls:S,className:n,style:a}):r.createElement(J.ZP,{visible:N,motionName:`${S}-loading-icon-motion`,motionLeave:N,removeOnLeave:!0,onAppearStart:rr,onAppearActive:yr,onEnterStart:rr,onEnterActive:yr,onLeaveStart:yr,onLeaveActive:rr},(P,ae)=>{let{className:Ne,style:ze}=P;return r.createElement(mr,{prefixCls:S,className:n,style:Object.assign(Object.assign({},a),ze),ref:ae,iconClassName:Ne})})},Xn=s(11568),Lr=s(14747),Mr=s(83262);const Nr=(u,S)=>({[`> span, > ${u}`]:{"&:not(:last-child)":{[`&, & > ${u}`]:{"&:not(:disabled)":{borderInlineEndColor:S}}},"&:not(:first-child)":{[`&, & > ${u}`]:{"&:not(:disabled)":{borderInlineStartColor:S}}}}});var Xr=u=>{const{componentCls:S,fontSize:K,lineWidth:re,groupBorderColor:n,colorErrorHover:a}=u;return{[`${S}-group`]:[{position:"relative",display:"inline-flex",[`> span, > ${S}`]:{"&:not(:last-child)":{[`&, & > ${S}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},"&:not(:first-child)":{marginInlineStart:u.calc(re).mul(-1).equal(),[`&, & > ${S}`]:{borderStartStartRadius:0,borderEndStartRadius:0}}},[S]:{position:"relative",zIndex:1,"&:hover, &:focus, &:active":{zIndex:2},"&[disabled]":{zIndex:0}},[`${S}-icon-only`]:{fontSize:K}},Nr(`${S}-primary`,n),Nr(`${S}-danger`,a)]}},Qr=s(15671),fr=s(43144),Hr=s(60136),Ur=s(18486),Ir=s(91),$r=s(4942);const Er=Math.round;function Zr(u,S){const K=u.replace(/^[^(]*\((.*)/,"$1").replace(/\).*/,"").match(/\d*\.?\d+%?/g)||[],re=K.map(n=>parseFloat(n));for(let n=0;n<3;n+=1)re[n]=S(re[n]||0,K[n]||"",n);return K[3]?re[3]=K[3].includes("%")?re[3]/100:re[3]:re[3]=1,re}const to=(u,S,K)=>K===0?u:u/100;function Fr(u,S){const K=S||255;return u>K?K:u<0?0:u}class kr{constructor(S){(0,$r.Z)(this,"isValid",!0),(0,$r.Z)(this,"r",0),(0,$r.Z)(this,"g",0),(0,$r.Z)(this,"b",0),(0,$r.Z)(this,"a",1),(0,$r.Z)(this,"_h",void 0),(0,$r.Z)(this,"_s",void 0),(0,$r.Z)(this,"_l",void 0),(0,$r.Z)(this,"_v",void 0),(0,$r.Z)(this,"_max",void 0),(0,$r.Z)(this,"_min",void 0),(0,$r.Z)(this,"_brightness",void 0);function K(re){return re[0]in S&&re[1]in S&&re[2]in S}if(S)if(typeof S=="string"){let n=function(a){return re.startsWith(a)};const re=S.trim();/^#?[A-F\d]{3,8}$/i.test(re)?this.fromHexString(re):n("rgb")?this.fromRgbString(re):n("hsl")?this.fromHslString(re):(n("hsv")||n("hsb"))&&this.fromHsvString(re)}else if(S instanceof kr)this.r=S.r,this.g=S.g,this.b=S.b,this.a=S.a,this._h=S._h,this._s=S._s,this._l=S._l,this._v=S._v;else if(K("rgb"))this.r=Fr(S.r),this.g=Fr(S.g),this.b=Fr(S.b),this.a=typeof S.a=="number"?Fr(S.a,1):1;else if(K("hsl"))this.fromHsl(S);else if(K("hsv"))this.fromHsv(S);else throw new Error("@ant-design/fast-color: unsupported input "+JSON.stringify(S))}setR(S){return this._sc("r",S)}setG(S){return this._sc("g",S)}setB(S){return this._sc("b",S)}setA(S){return this._sc("a",S,1)}setHue(S){const K=this.toHsv();return K.h=S,this._c(K)}getLuminance(){function S(a){const N=a/255;return N<=.03928?N/12.92:Math.pow((N+.055)/1.055,2.4)}const K=S(this.r),re=S(this.g),n=S(this.b);return .2126*K+.7152*re+.0722*n}getHue(){if(typeof this._h=="undefined"){const S=this.getMax()-this.getMin();S===0?this._h=0:this._h=Er(60*(this.r===this.getMax()?(this.g-this.b)/S+(this.g1&&(n=1),this._c({h:K,s:re,l:n,a:this.a})}mix(S,K=50){const re=this._c(S),n=K/100,a=P=>(re[P]-this[P])*n+this[P],N={r:Er(a("r")),g:Er(a("g")),b:Er(a("b")),a:Er(a("a")*100)/100};return this._c(N)}tint(S=10){return this.mix({r:255,g:255,b:255,a:1},S)}shade(S=10){return this.mix({r:0,g:0,b:0,a:1},S)}onBackground(S){const K=this._c(S),re=this.a+K.a*(1-this.a),n=a=>Er((this[a]*this.a+K[a]*K.a*(1-this.a))/re);return this._c({r:n("r"),g:n("g"),b:n("b"),a:re})}isDark(){return this.getBrightness()<128}isLight(){return this.getBrightness()>=128}equals(S){return this.r===S.r&&this.g===S.g&&this.b===S.b&&this.a===S.a}clone(){return this._c(this)}toHexString(){let S="#";const K=(this.r||0).toString(16);S+=K.length===2?K:"0"+K;const re=(this.g||0).toString(16);S+=re.length===2?re:"0"+re;const n=(this.b||0).toString(16);if(S+=n.length===2?n:"0"+n,typeof this.a=="number"&&this.a>=0&&this.a<1){const a=Er(this.a*255).toString(16);S+=a.length===2?a:"0"+a}return S}toHsl(){return{h:this.getHue(),s:this.getSaturation(),l:this.getLightness(),a:this.a}}toHslString(){const S=this.getHue(),K=Er(this.getSaturation()*100),re=Er(this.getLightness()*100);return this.a!==1?`hsla(${S},${K}%,${re}%,${this.a})`:`hsl(${S},${K}%,${re}%)`}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 this.a!==1?`rgba(${this.r},${this.g},${this.b},${this.a})`:`rgb(${this.r},${this.g},${this.b})`}toString(){return this.toRgbString()}_sc(S,K,re){const n=this.clone();return n[S]=Fr(K,re),n}_c(S){return new this.constructor(S)}getMax(){return typeof this._max=="undefined"&&(this._max=Math.max(this.r,this.g,this.b)),this._max}getMin(){return typeof this._min=="undefined"&&(this._min=Math.min(this.r,this.g,this.b)),this._min}fromHexString(S){const K=S.replace("#","");function re(n,a){return parseInt(K[n]+K[a||n],16)}K.length<6?(this.r=re(0),this.g=re(1),this.b=re(2),this.a=K[3]?re(3)/255:1):(this.r=re(0,1),this.g=re(2,3),this.b=re(4,5),this.a=K[6]?re(6,7)/255:1)}fromHsl({h:S,s:K,l:re,a:n}){if(this._h=S%360,this._s=K,this._l=re,this.a=typeof n=="number"?n:1,K<=0){const at=Er(re*255);this.r=at,this.g=at,this.b=at}let a=0,N=0,P=0;const ae=S/60,Ne=(1-Math.abs(2*re-1))*K,ze=Ne*(1-Math.abs(ae%2-1));ae>=0&&ae<1?(a=Ne,N=ze):ae>=1&&ae<2?(a=ze,N=Ne):ae>=2&&ae<3?(N=Ne,P=ze):ae>=3&&ae<4?(N=ze,P=Ne):ae>=4&&ae<5?(a=ze,P=Ne):ae>=5&&ae<6&&(a=Ne,P=ze);const pt=re-Ne/2;this.r=Er((a+pt)*255),this.g=Er((N+pt)*255),this.b=Er((P+pt)*255)}fromHsv({h:S,s:K,v:re,a:n}){this._h=S%360,this._s=K,this._v=re,this.a=typeof n=="number"?n:1;const a=Er(re*255);if(this.r=a,this.g=a,this.b=a,K<=0)return;const N=S/60,P=Math.floor(N),ae=N-P,Ne=Er(re*(1-K)*255),ze=Er(re*(1-K*ae)*255),pt=Er(re*(1-K*(1-ae))*255);switch(P){case 0:this.g=pt,this.b=Ne;break;case 1:this.r=ze,this.b=Ne;break;case 2:this.r=Ne,this.b=pt;break;case 3:this.r=Ne,this.g=ze;break;case 4:this.r=pt,this.g=Ne;break;case 5:default:this.g=Ne,this.b=ze;break}}fromHsvString(S){const K=Zr(S,to);this.fromHsv({h:K[0],s:K[1],v:K[2],a:K[3]})}fromHslString(S){const K=Zr(S,to);this.fromHsl({h:K[0],s:K[1],l:K[2],a:K[3]})}fromRgbString(S){const K=Zr(S,(re,n)=>n.includes("%")?Er(re/100*255):re);this.r=K[0],this.g=K[1],this.b=K[2],this.a=K[3]}}var so=["b"],mo=["v"],Jr=function(S){return Math.round(Number(S||0))},vo=function(S){if(S instanceof kr)return S;if(S&&(0,Be.Z)(S)==="object"&&"h"in S&&"b"in S){var K=S,re=K.b,n=(0,Ir.Z)(K,so);return(0,Le.Z)((0,Le.Z)({},n),{},{v:re})}return typeof S=="string"&&/hsb/.test(S)?S.replace(/hsb/,"hsv"):S},Yr=function(u){(0,Hr.Z)(K,u);var S=(0,Ur.Z)(K);function K(re){return(0,Qr.Z)(this,K),S.call(this,vo(re))}return(0,fr.Z)(K,[{key:"toHsbString",value:function(){var n=this.toHsb(),a=Jr(n.s*100),N=Jr(n.b*100),P=Jr(n.h),ae=n.a,Ne="hsb(".concat(P,", ").concat(a,"%, ").concat(N,"%)"),ze="hsba(".concat(P,", ").concat(a,"%, ").concat(N,"%, ").concat(ae.toFixed(ae===0?0:2),")");return ae===1?Ne:ze}},{key:"toHsb",value:function(){var n=this.toHsv(),a=n.v,N=(0,Ir.Z)(n,mo);return(0,Le.Z)((0,Le.Z)({},N),{},{b:a,a:this.a})}}]),K}(kr),Gr="rc-color-picker",Yn=function(S){return S instanceof Yr?S:new Yr(S)},oo=Yn("#1677ff"),Br=function(S){var K=S.offset,re=S.targetRef,n=S.containerRef,a=S.color,N=S.type,P=n.current.getBoundingClientRect(),ae=P.width,Ne=P.height,ze=re.current.getBoundingClientRect(),pt=ze.width,at=ze.height,Ut=pt/2,Ht=at/2,On=(K.x+Ut)/ae,on=1-(K.y+Ht)/Ne,Hn=a.toHsb(),Tn=On,Gn=(K.x+Ut)/ae*360;if(N)switch(N){case"hue":return Yn(_objectSpread(_objectSpread({},Hn),{},{h:Gn<=0?0:Gn}));case"alpha":return Yn(_objectSpread(_objectSpread({},Hn),{},{a:Tn<=0?0:Tn}))}return Yn({h:Hn.h,s:On<=0?0:On,b:on>=1?1:on,a:Hn.a})},po=function(S,K){var re=S.toHsb();switch(K){case"hue":return{x:re.h/360*100,y:50};case"alpha":return{x:S.a*100,y:50};default:return{x:re.s*100,y:(1-re.b)*100}}},Dr=function(S){var K=S.color,re=S.prefixCls,n=S.className,a=S.style,N=S.onClick,P="".concat(re,"-color-block");return React.createElement("div",{className:classNames(P,n),style:a,onClick:N},React.createElement("div",{className:"".concat(P,"-inner"),style:{background:K}}))},Oo=null;function wo(u){var S="touches"in u?u.touches[0]:u,K=document.documentElement.scrollLeft||document.body.scrollLeft||window.pageXOffset,re=document.documentElement.scrollTop||document.body.scrollTop||window.pageYOffset;return{pageX:S.pageX-K,pageY:S.pageY-re}}function no(u){var S=u.targetRef,K=u.containerRef,re=u.direction,n=u.onDragChange,a=u.onDragChangeComplete,N=u.calculate,P=u.color,ae=u.disabledDrag,Ne=useState({x:0,y:0}),ze=_slicedToArray(Ne,2),pt=ze[0],at=ze[1],Ut=useRef(null),Ht=useRef(null);useEffect(function(){at(N())},[P]),useEffect(function(){return function(){document.removeEventListener("mousemove",Ut.current),document.removeEventListener("mouseup",Ht.current),document.removeEventListener("touchmove",Ut.current),document.removeEventListener("touchend",Ht.current),Ut.current=null,Ht.current=null}},[]);var On=function(Sn){var Jt=wo(Sn),Yt=Jt.pageX,dn=Jt.pageY,Vn=K.current.getBoundingClientRect(),f=Vn.x,I=Vn.y,oe=Vn.width,ve=Vn.height,Ie=S.current.getBoundingClientRect(),it=Ie.width,bt=Ie.height,Ot=it/2,Dt=bt/2,Tt=Math.max(0,Math.min(Yt-f,oe))-Ot,Zt=Math.max(0,Math.min(dn-I,ve))-Dt,At={x:Tt,y:re==="x"?pt.y:Zt};if(it===0&&bt===0||it!==bt)return!1;n==null||n(At)},on=function(Sn){Sn.preventDefault(),On(Sn)},Hn=function(Sn){Sn.preventDefault(),document.removeEventListener("mousemove",Ut.current),document.removeEventListener("mouseup",Ht.current),document.removeEventListener("touchmove",Ut.current),document.removeEventListener("touchend",Ht.current),Ut.current=null,Ht.current=null,a==null||a()},Tn=function(Sn){document.removeEventListener("mousemove",Ut.current),document.removeEventListener("mouseup",Ht.current),!ae&&(On(Sn),document.addEventListener("mousemove",on),document.addEventListener("mouseup",Hn),document.addEventListener("touchmove",on),document.addEventListener("touchend",Hn),Ut.current=on,Ht.current=Hn)};return[pt,Tn]}var Wr=null,co=s(56790),ho=function(S){var K=S.size,re=K===void 0?"default":K,n=S.color,a=S.prefixCls;return React.createElement("div",{className:classNames("".concat(a,"-handler"),_defineProperty({},"".concat(a,"-handler-sm"),re==="small")),style:{backgroundColor:n}})},xo=null,Eo=function(S){var K=S.children,re=S.style,n=S.prefixCls;return React.createElement("div",{className:"".concat(n,"-palette"),style:_objectSpread({position:"relative"},re)},K)},We=null,Nt=null,F=null,H=function(S){var K=S.color,re=S.onChange,n=S.prefixCls,a=S.onChangeComplete,N=S.disabled,P=useRef(),ae=useRef(),Ne=useRef(K),ze=useEvent(function(On){var on=calculateColor({offset:On,targetRef:ae,containerRef:P,color:K});Ne.current=on,re(on)}),pt=useColorDrag({color:K,containerRef:P,targetRef:ae,calculate:function(){return calcOffset(K)},onDragChange:ze,onDragChangeComplete:function(){return a==null?void 0:a(Ne.current)},disabledDrag:N}),at=_slicedToArray(pt,2),Ut=at[0],Ht=at[1];return React.createElement("div",{ref:P,className:"".concat(n,"-select"),onMouseDown:Ht,onTouchStart:Ht},React.createElement(Palette,{prefixCls:n},React.createElement(Transform,{x:Ut.x,y:Ut.y,ref:ae},React.createElement(Handler,{color:K.toRgbString(),prefixCls:n})),React.createElement("div",{className:"".concat(n,"-saturation"),style:{backgroundColor:"hsl(".concat(K.toHsb().h,",100%, 50%)"),backgroundImage:"linear-gradient(0deg, #000, transparent),linear-gradient(90deg, #fff, hsla(0, 0%, 100%, 0))"}})))},ee=null,te=function(S,K){var re=useMergedState(S,{value:K}),n=_slicedToArray(re,2),a=n[0],N=n[1],P=useMemo(function(){return generateColor(a)},[a]);return[P,N]},me=null,nt=function(S){var K=S.colors,re=S.children,n=S.direction,a=n===void 0?"to right":n,N=S.type,P=S.prefixCls,ae=useMemo(function(){return K.map(function(Ne,ze){var pt=generateColor(Ne);return N==="alpha"&&ze===K.length-1&&(pt=new Color(pt.setA(1))),pt.toRgbString()}).join(",")},[K,N]);return React.createElement("div",{className:"".concat(P,"-gradient"),style:{position:"absolute",inset:0,background:"linear-gradient(".concat(a,", ").concat(ae,")")}},re)},h=null,E=function(S){var K=S.prefixCls,re=S.colors,n=S.disabled,a=S.onChange,N=S.onChangeComplete,P=S.color,ae=S.type,Ne=useRef(),ze=useRef(),pt=useRef(P),at=function(Jt){return ae==="hue"?Jt.getHue():Jt.a*100},Ut=useEvent(function(Sn){var Jt=calculateColor({offset:Sn,targetRef:ze,containerRef:Ne,color:P,type:ae});pt.current=Jt,a(at(Jt))}),Ht=useColorDrag({color:P,targetRef:ze,containerRef:Ne,calculate:function(){return calcOffset(P,ae)},onDragChange:Ut,onDragChangeComplete:function(){N(at(pt.current))},direction:"x",disabledDrag:n}),On=_slicedToArray(Ht,2),on=On[0],Hn=On[1],Tn=React.useMemo(function(){if(ae==="hue"){var Sn=P.toHsb();Sn.s=1,Sn.b=1,Sn.a=1;var Jt=new Color(Sn);return Jt}return P},[P,ae]),Gn=React.useMemo(function(){return re.map(function(Sn){return"".concat(Sn.color," ").concat(Sn.percent,"%")})},[re]);return React.createElement("div",{ref:Ne,className:classNames("".concat(K,"-slider"),"".concat(K,"-slider-").concat(ae)),onMouseDown:Hn,onTouchStart:Hn},React.createElement(Palette,{prefixCls:K},React.createElement(Transform,{x:on.x,y:on.y,ref:ze},React.createElement(Handler,{size:"small",color:Tn.toHexString(),prefixCls:K})),React.createElement(Gradient,{colors:Gn,type:ae,prefixCls:K})))},ye=null;function Se(u){return React.useMemo(function(){var S=u||{},K=S.slider;return[K||Slider]},[u])}var Te=[{color:"rgb(255, 0, 0)",percent:0},{color:"rgb(255, 255, 0)",percent:17},{color:"rgb(0, 255, 0)",percent:33},{color:"rgb(0, 255, 255)",percent:50},{color:"rgb(0, 0, 255)",percent:67},{color:"rgb(255, 0, 255)",percent:83},{color:"rgb(255, 0, 0)",percent:100}],Fe=null,Xe=null,Je=null;const ct=(u,S)=>(u==null?void 0:u.replace(/[^\w/]/g,"").slice(0,S?8:6))||"",xt=(u,S)=>u?ct(u,S):"";let zt=function(){function u(S){(0,Qr.Z)(this,u);var K;if(this.cleared=!1,S instanceof u){this.metaColor=S.metaColor.clone(),this.colors=(K=S.colors)===null||K===void 0?void 0:K.map(n=>({color:new u(n.color),percent:n.percent})),this.cleared=S.cleared;return}const re=Array.isArray(S);re&&S.length?(this.colors=S.map(n=>{let{color:a,percent:N}=n;return{color:new u(a),percent:N}}),this.metaColor=new Yr(this.colors[0].color.metaColor)):this.metaColor=new Yr(re?"":S),(!S||re&&!this.colors)&&(this.metaColor=this.metaColor.setA(0),this.cleared=!0)}return(0,fr.Z)(u,[{key:"toHsb",value:function(){return this.metaColor.toHsb()}},{key:"toHsbString",value:function(){return this.metaColor.toHsbString()}},{key:"toHex",value:function(){return xt(this.toHexString(),this.metaColor.a<1)}},{key:"toHexString",value:function(){return this.metaColor.toHexString()}},{key:"toRgb",value:function(){return this.metaColor.toRgb()}},{key:"toRgbString",value:function(){return this.metaColor.toRgbString()}},{key:"isGradient",value:function(){return!!this.colors&&!this.cleared}},{key:"getColors",value:function(){return this.colors||[{color:this,percent:0}]}},{key:"toCssString",value:function(){const{colors:K}=this;return K?`linear-gradient(90deg, ${K.map(n=>`${n.color.toRgbString()} ${n.percent}%`).join(", ")})`:this.metaColor.toRgbString()}},{key:"equals",value:function(K){return!K||this.isGradient()!==K.isGradient()?!1:this.isGradient()?this.colors.length===K.colors.length&&this.colors.every((re,n)=>{const a=K.colors[n];return re.percent===a.percent&&re.color.equals(a.color)}):this.toHexString()===K.toHexString()}}])}();var Et=s(21770);const $t=u=>u.map(S=>(S.colors=S.colors.map(generateColor),S)),jt=(u,S)=>{const{r:K,g:re,b:n,a}=u.toRgb(),N=new Yr(u.toRgbString()).onBackground(S).toHsv();return a<=.5?N.v>.5:K*.299+re*.587+n*.114>192},Gt=u=>{let{label:S}=u;return`panel-${S}`},Rt=u=>{let{prefixCls:S,presets:K,value:re,onChange:n}=u;const[a]=useLocale("ColorPicker"),[,N]=useToken(),[P]=useMergedState($t(K),{value:$t(K),postState:$t}),ae=`${S}-presets`,Ne=useMemo(()=>P.reduce((at,Ut)=>{const{defaultOpen:Ht=!0}=Ut;return Ht&&at.push(Gt(Ut)),at},[]),[P]),ze=at=>{n==null||n(at)},pt=P.map(at=>{var Ut;return{key:Gt(at),label:React.createElement("div",{className:`${ae}-label`},at==null?void 0:at.label),children:React.createElement("div",{className:`${ae}-items`},Array.isArray(at==null?void 0:at.colors)&&((Ut=at.colors)===null||Ut===void 0?void 0:Ut.length)>0?at.colors.map((Ht,On)=>React.createElement(ColorBlock,{key:`preset-${On}-${Ht.toHexString()}`,color:generateColor(Ht).toRgbString(),prefixCls:S,className:classNames(`${ae}-color`,{[`${ae}-color-checked`]:Ht.toHexString()===(re==null?void 0:re.toHexString()),[`${ae}-color-bright`]:jt(Ht,N.colorBgElevated)}),onClick:()=>ze(Ht)})):React.createElement("span",{className:`${ae}-empty`},a.presetEmpty))}});return React.createElement("div",{className:ae},React.createElement(Collapse,{defaultActiveKey:Ne,ghost:!0,items:pt}))};var xn=null,en=s(51734);const ln=u=>{const{paddingInline:S,onlyIconSize:K,paddingBlock:re}=u;return(0,Mr.IX)(u,{buttonPaddingHorizontal:S,buttonPaddingVertical:re,buttonIconOnlyFontSize:K})},an=u=>{var S,K,re,n,a,N;const P=(S=u.contentFontSize)!==null&&S!==void 0?S:u.fontSize,ae=(K=u.contentFontSizeSM)!==null&&K!==void 0?K:u.fontSize,Ne=(re=u.contentFontSizeLG)!==null&&re!==void 0?re:u.fontSizeLG,ze=(n=u.contentLineHeight)!==null&&n!==void 0?n:(0,en.D)(P),pt=(a=u.contentLineHeightSM)!==null&&a!==void 0?a:(0,en.D)(ae),at=(N=u.contentLineHeightLG)!==null&&N!==void 0?N:(0,en.D)(Ne),Ut=jt(new zt(u.colorBgSolid),"#fff")?"#000":"#fff";return{fontWeight:400,defaultShadow:`0 ${u.controlOutlineWidth}px 0 ${u.controlTmpOutline}`,primaryShadow:`0 ${u.controlOutlineWidth}px 0 ${u.controlOutline}`,dangerShadow:`0 ${u.controlOutlineWidth}px 0 ${u.colorErrorOutline}`,primaryColor:u.colorTextLightSolid,dangerColor:u.colorTextLightSolid,borderColorDisabled:u.colorBorder,defaultGhostColor:u.colorBgContainer,ghostBg:"transparent",defaultGhostBorderColor:u.colorBgContainer,paddingInline:u.paddingContentHorizontal-u.lineWidth,paddingInlineLG:u.paddingContentHorizontal-u.lineWidth,paddingInlineSM:8-u.lineWidth,onlyIconSize:u.fontSizeLG,onlyIconSizeSM:u.fontSizeLG-2,onlyIconSizeLG:u.fontSizeLG+2,groupBorderColor:u.colorPrimaryHover,linkHoverBg:"transparent",textTextColor:u.colorText,textTextHoverColor:u.colorText,textTextActiveColor:u.colorText,textHoverBg:u.colorFillTertiary,defaultColor:u.colorText,defaultBg:u.colorBgContainer,defaultBorderColor:u.colorBorder,defaultBorderColorDisabled:u.colorBorder,defaultHoverBg:u.colorBgContainer,defaultHoverColor:u.colorPrimaryHover,defaultHoverBorderColor:u.colorPrimaryHover,defaultActiveBg:u.colorBgContainer,defaultActiveColor:u.colorPrimaryActive,defaultActiveBorderColor:u.colorPrimaryActive,solidTextColor:Ut,contentFontSize:P,contentFontSizeSM:ae,contentFontSizeLG:Ne,contentLineHeight:ze,contentLineHeightSM:pt,contentLineHeightLG:at,paddingBlock:Math.max((u.controlHeight-P*ze)/2-u.lineWidth,0),paddingBlockSM:Math.max((u.controlHeightSM-ae*pt)/2-u.lineWidth,0),paddingBlockLG:Math.max((u.controlHeightLG-Ne*at)/2-u.lineWidth,0)}},bn=u=>{const{componentCls:S,iconCls:K,fontWeight:re}=u;return{[S]:{outline:"none",position:"relative",display:"inline-flex",gap:u.marginXS,alignItems:"center",justifyContent:"center",fontWeight:re,whiteSpace:"nowrap",textAlign:"center",backgroundImage:"none",background:"transparent",border:`${(0,Xn.bf)(u.lineWidth)} ${u.lineType} transparent`,cursor:"pointer",transition:`all ${u.motionDurationMid} ${u.motionEaseInOut}`,userSelect:"none",touchAction:"manipulation",color:u.colorText,"&:disabled > *":{pointerEvents:"none"},"> span":{display:"inline-block"},[`${S}-icon`]:{lineHeight:1},"> a":{color:"currentColor"},"&:not(:disabled)":Object.assign({},(0,Lr.Qy)(u)),[`&${S}-two-chinese-chars::first-letter`]:{letterSpacing:"0.34em"},[`&${S}-two-chinese-chars > *:not(${K})`]:{marginInlineEnd:"-0.34em",letterSpacing:"0.34em"},"&-icon-end":{flexDirection:"row-reverse"}}}},_n=(u,S,K)=>({[`&:not(:disabled):not(${u}-disabled)`]:{"&:hover":S,"&:active":K}}),Pn=u=>({minWidth:u.controlHeight,paddingInlineStart:0,paddingInlineEnd:0,borderRadius:"50%"}),Bn=u=>({borderRadius:u.controlHeight,paddingInlineStart:u.calc(u.controlHeight).div(2).equal(),paddingInlineEnd:u.calc(u.controlHeight).div(2).equal()}),rn=u=>({cursor:"not-allowed",borderColor:u.borderColorDisabled,color:u.colorTextDisabled,background:u.colorBgContainerDisabled,boxShadow:"none"}),En=(u,S,K,re,n,a,N,P)=>({[`&${u}-background-ghost`]:Object.assign(Object.assign({color:K||void 0,background:S,borderColor:re||void 0,boxShadow:"none"},_n(u,Object.assign({background:S},N),Object.assign({background:S},P))),{"&:disabled":{cursor:"not-allowed",color:n||void 0,borderColor:a||void 0}})}),yn=u=>({[`&:disabled, &${u.componentCls}-disabled`]:Object.assign({},rn(u))}),Mn=u=>({[`&:disabled, &${u.componentCls}-disabled`]:{cursor:"not-allowed",color:u.colorTextDisabled}}),An=(u,S,K,re)=>{const a=re&&["link","text"].includes(re)?Mn:yn;return Object.assign(Object.assign({},a(u)),_n(u.componentCls,S,K))},sn=(u,S,K,re,n)=>({[`&${u.componentCls}-variant-solid`]:Object.assign({color:S,background:K},An(u,re,n))}),wn=(u,S,K,re,n)=>({[`&${u.componentCls}-variant-outlined, &${u.componentCls}-variant-dashed`]:Object.assign({borderColor:S,background:K},An(u,re,n))}),Kn=u=>({[`&${u.componentCls}-variant-dashed`]:{borderStyle:"dashed"}}),er=(u,S,K,re)=>({[`&${u.componentCls}-variant-filled`]:Object.assign({boxShadow:"none",background:S},An(u,K,re))}),Cn=(u,S,K,re,n)=>({[`&${u.componentCls}-variant-${K}`]:Object.assign({color:S,boxShadow:"none"},An(u,re,n,K))}),ar=u=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:u.defaultColor,boxShadow:u.defaultShadow},sn(u,u.solidTextColor,u.colorBgSolid,{background:u.colorBgSolidHover},{background:u.colorBgSolidActive})),Kn(u)),er(u,u.colorFillTertiary,{background:u.colorFillSecondary},{background:u.colorFill})),Cn(u,u.textTextColor,"link",{color:u.colorLinkHover,background:u.linkHoverBg},{color:u.colorLinkActive})),En(u.componentCls,u.ghostBg,u.defaultGhostColor,u.defaultGhostBorderColor,u.colorTextDisabled,u.colorBorder)),Or=u=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:u.colorPrimary,boxShadow:u.primaryShadow},wn(u,u.colorPrimary,u.colorBgContainer,{color:u.colorPrimaryTextHover,borderColor:u.colorPrimaryHover,background:u.colorBgContainer},{color:u.colorPrimaryTextActive,borderColor:u.colorPrimaryActive,background:u.colorBgContainer})),Kn(u)),er(u,u.colorPrimaryBg,{background:u.colorPrimaryBgHover},{background:u.colorPrimaryBorder})),Cn(u,u.colorLink,"text",{color:u.colorPrimaryTextHover,background:u.colorPrimaryBg},{color:u.colorPrimaryTextActive,background:u.colorPrimaryBorder})),En(u.componentCls,u.ghostBg,u.colorPrimary,u.colorPrimary,u.colorTextDisabled,u.colorBorder,{color:u.colorPrimaryHover,borderColor:u.colorPrimaryHover},{color:u.colorPrimaryActive,borderColor:u.colorPrimaryActive})),Qn=u=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:u.colorError,boxShadow:u.dangerShadow},sn(u,u.dangerColor,u.colorError,{background:u.colorErrorHover},{background:u.colorErrorActive})),wn(u,u.colorError,u.colorBgContainer,{color:u.colorErrorHover,borderColor:u.colorErrorBorderHover},{color:u.colorErrorActive,borderColor:u.colorErrorActive})),Kn(u)),er(u,u.colorErrorBg,{background:u.colorErrorBgFilledHover},{background:u.colorErrorBgActive})),Cn(u,u.colorError,"text",{color:u.colorErrorHover,background:u.colorErrorBg},{color:u.colorErrorHover,background:u.colorErrorBgActive})),Cn(u,u.colorError,"link",{color:u.colorErrorHover},{color:u.colorErrorActive})),En(u.componentCls,u.ghostBg,u.colorError,u.colorError,u.colorTextDisabled,u.colorBorder,{color:u.colorErrorHover,borderColor:u.colorErrorHover},{color:u.colorErrorActive,borderColor:u.colorErrorActive})),br=u=>{const{componentCls:S}=u;return{[`${S}-color-default`]:ar(u),[`${S}-color-primary`]:Or(u),[`${S}-color-dangerous`]:Qn(u)}},lr=u=>Object.assign(Object.assign(Object.assign(Object.assign({},wn(u,u.defaultBorderColor,u.defaultBg,{color:u.defaultHoverColor,borderColor:u.defaultHoverBorderColor,background:u.defaultHoverBg},{color:u.defaultActiveColor,borderColor:u.defaultActiveBorderColor,background:u.defaultActiveBg})),Cn(u,u.textTextColor,"text",{color:u.textTextHoverColor,background:u.textHoverBg},{color:u.textTextActiveColor,background:u.colorBgTextActive})),sn(u,u.primaryColor,u.colorPrimary,{background:u.colorPrimaryHover,color:u.primaryColor},{background:u.colorPrimaryActive,color:u.primaryColor})),Cn(u,u.colorLink,"link",{color:u.colorLinkHover,background:u.linkHoverBg},{color:u.colorLinkActive})),Wn=function(u){let S=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const{componentCls:K,controlHeight:re,fontSize:n,lineHeight:a,borderRadius:N,buttonPaddingHorizontal:P,iconCls:ae,buttonPaddingVertical:Ne}=u,ze=`${K}-icon-only`;return[{[S]:{fontSize:n,lineHeight:a,height:re,padding:`${(0,Xn.bf)(Ne)} ${(0,Xn.bf)(P)}`,borderRadius:N,[`&${ze}`]:{width:re,paddingInline:0,[`&${K}-compact-item`]:{flex:"none"},[`&${K}-round`]:{width:"auto"},[ae]:{fontSize:u.buttonIconOnlyFontSize}},[`&${K}-loading`]:{opacity:u.opacityLoading,cursor:"default"},[`${K}-loading-icon`]:{transition:`width ${u.motionDurationSlow} ${u.motionEaseInOut}, opacity ${u.motionDurationSlow} ${u.motionEaseInOut}`}}},{[`${K}${K}-circle${S}`]:Pn(u)},{[`${K}${K}-round${S}`]:Bn(u)}]},ie=u=>{const S=(0,Mr.IX)(u,{fontSize:u.contentFontSize,lineHeight:u.contentLineHeight});return Wn(S,u.componentCls)},w=u=>{const S=(0,Mr.IX)(u,{controlHeight:u.controlHeightSM,fontSize:u.contentFontSizeSM,lineHeight:u.contentLineHeightSM,padding:u.paddingXS,buttonPaddingHorizontal:u.paddingInlineSM,buttonPaddingVertical:u.paddingBlockSM,borderRadius:u.borderRadiusSM,buttonIconOnlyFontSize:u.onlyIconSizeSM});return Wn(S,`${u.componentCls}-sm`)},m=u=>{const S=(0,Mr.IX)(u,{controlHeight:u.controlHeightLG,fontSize:u.contentFontSizeLG,lineHeight:u.contentLineHeightLG,buttonPaddingHorizontal:u.paddingInlineLG,buttonPaddingVertical:u.paddingBlockLG,borderRadius:u.borderRadiusLG,buttonIconOnlyFontSize:u.onlyIconSizeLG});return Wn(S,`${u.componentCls}-lg`)},L=u=>{const{componentCls:S}=u;return{[S]:{[`&${S}-block`]:{width:"100%"}}}};var C=(0,Y.I$)("Button",u=>{const S=ln(u);return[bn(S),ie(S),w(S),m(S),L(S),br(S),lr(S),Xr(S)]},an,{unitless:{fontWeight:!0,contentLineHeight:!0,contentLineHeightSM:!0,contentLineHeightLG:!0}}),ne=s(80110);function fe(u,S){return{[`&-item:not(${S}-last-item)`]:{marginBottom:u.calc(u.lineWidth).mul(-1).equal()},"&-item":{"&:hover,&:focus,&:active":{zIndex:2},"&[disabled]":{zIndex:0}}}}function Re(u,S){return{[`&-item:not(${S}-first-item):not(${S}-last-item)`]:{borderRadius:0},[`&-item${S}-first-item:not(${S}-last-item)`]:{[`&, &${u}-sm, &${u}-lg`]:{borderEndEndRadius:0,borderEndStartRadius:0}},[`&-item${S}-last-item:not(${S}-first-item)`]:{[`&, &${u}-sm, &${u}-lg`]:{borderStartStartRadius:0,borderStartEndRadius:0}}}}function Ge(u){const S=`${u.componentCls}-compact-vertical`;return{[S]:Object.assign(Object.assign({},fe(u,S)),Re(u.componentCls,S))}}const ut=u=>{const{componentCls:S,calc:K}=u;return{[S]:{[`&-compact-item${S}-primary`]:{[`&:not([disabled]) + ${S}-compact-item${S}-primary:not([disabled])`]:{position:"relative","&:before":{position:"absolute",top:K(u.lineWidth).mul(-1).equal(),insetInlineStart:K(u.lineWidth).mul(-1).equal(),display:"inline-block",width:u.lineWidth,height:`calc(100% + ${(0,Xn.bf)(u.lineWidth)} * 2)`,backgroundColor:u.colorPrimaryHover,content:'""'}}},"&-compact-vertical-item":{[`&${S}-primary`]:{[`&:not([disabled]) + ${S}-compact-vertical-item${S}-primary:not([disabled])`]:{position:"relative","&:before":{position:"absolute",top:K(u.lineWidth).mul(-1).equal(),insetInlineStart:K(u.lineWidth).mul(-1).equal(),display:"inline-block",width:`calc(100% + ${(0,Xn.bf)(u.lineWidth)} * 2)`,height:u.lineWidth,backgroundColor:u.colorPrimaryHover,content:'""'}}}}}}};var Pe=(0,Y.bk)(["Button","compact"],u=>{const S=ln(u);return[(0,ne.c)(S),Ge(S),ut(S)]},an),Lt=function(u,S){var K={};for(var re in u)Object.prototype.hasOwnProperty.call(u,re)&&S.indexOf(re)<0&&(K[re]=u[re]);if(u!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,re=Object.getOwnPropertySymbols(u);n{var K,re,n;const{loading:a=!1,prefixCls:N,color:P,variant:ae,type:Ne,danger:ze=!1,shape:pt="default",size:at,styles:Ut,disabled:Ht,className:On,rootClassName:on,children:Hn,icon:Tn,iconPosition:Gn="start",ghost:Sn=!1,block:Jt=!1,htmlType:Yt="button",classNames:dn,style:Vn={},autoInsertSpace:f}=u,I=Lt(u,["loading","prefixCls","color","variant","type","danger","shape","size","styles","disabled","className","rootClassName","children","icon","iconPosition","ghost","block","htmlType","classNames","style","autoInsertSpace"]),oe=Ne||"default",[ve,Ie]=(0,r.useMemo)(()=>{if(P&&ae)return[P,ae];const $n=gn[oe]||[];return ze?["danger",$n[1]]:$n},[Ne,P,ae,ze]),bt=ve==="danger"?"dangerous":ve,{getPrefixCls:Ot,direction:Dt,button:Tt}=(0,r.useContext)(R.E_),Zt=(K=f!=null?f:Tt==null?void 0:Tt.autoInsertSpace)!==null&&K!==void 0?K:!0,At=Ot("btn",N),[Xt,st,M]=C(At),G=(0,r.useContext)(xe.Z),B=Ht!=null?Ht:G,le=(0,r.useContext)(Fn),Ce=(0,r.useMemo)(()=>Wt(a),[a]),[Ue,ot]=(0,r.useState)(Ce.loading),[dt,lt]=(0,r.useState)(!1),l=(0,r.createRef)(),d=(0,Z.sQ)(S,l),p=r.Children.count(Hn)===1&&!Tn&&!mn(Ie);(0,r.useEffect)(()=>{let $n=null;Ce.delay>0?$n=setTimeout(()=>{$n=null,ot(!0)},Ce.delay):ot(Ce.loading);function ir(){$n&&(clearTimeout($n),$n=null)}return ir},[Ce]),(0,r.useEffect)(()=>{if(!d||!d.current||!Zt)return;const $n=d.current.textContent;p&&dr($n)?dt||lt(!0):dt&<(!1)},[d]);const x=$n=>{const{onClick:ir}=u;if(Ue||B){$n.preventDefault();return}ir==null||ir($n)},{compactSize:W,compactItemClassnames:ge}=(0,It.ri)(At,Dt),Ee={large:"lg",small:"sm",middle:void 0},et=(0,je.Z)($n=>{var ir,Un;return(Un=(ir=at!=null?at:W)!==null&&ir!==void 0?ir:le)!==null&&Un!==void 0?Un:$n}),Ze=et&&Ee[et]||"",_e=Ue?"loading":Tn,mt=(0,j.Z)(I,["navigate"]),qe=X()(At,st,M,{[`${At}-${pt}`]:pt!=="default"&&pt,[`${At}-${oe}`]:oe,[`${At}-dangerous`]:ze,[`${At}-color-${bt}`]:bt,[`${At}-variant-${Ie}`]:Ie,[`${At}-${Ze}`]:Ze,[`${At}-icon-only`]:!Hn&&Hn!==0&&!!_e,[`${At}-background-ghost`]:Sn&&!mn(Ie),[`${At}-loading`]:Ue,[`${At}-two-chinese-chars`]:dt&&Zt&&!Ue,[`${At}-block`]:Jt,[`${At}-rtl`]:Dt==="rtl",[`${At}-icon-end`]:Gn==="end"},ge,On,on,Tt==null?void 0:Tt.className),rt=Object.assign(Object.assign({},Tt==null?void 0:Tt.style),Vn),ke=X()(dn==null?void 0:dn.icon,(re=Tt==null?void 0:Tt.classNames)===null||re===void 0?void 0:re.icon),St=Object.assign(Object.assign({},(Ut==null?void 0:Ut.icon)||{}),((n=Tt==null?void 0:Tt.styles)===null||n===void 0?void 0:n.icon)||{}),kt=Tn&&!Ue?r.createElement(tt,{prefixCls:At,className:ke,style:St},Tn):r.createElement(pr,{existIcon:!!Tn,prefixCls:At,loading:Ue}),pn=Hn||Hn===0?Ct(Hn,p&&Zt):null;if(mt.href!==void 0)return Xt(r.createElement("a",Object.assign({},mt,{className:X()(qe,{[`${At}-disabled`]:B}),href:B?void 0:mt.href,style:rt,onClick:x,ref:d,tabIndex:B?-1:0}),kt,pn));let In=r.createElement("button",Object.assign({},I,{type:Yt,className:qe,style:rt,onClick:x,disabled:B,ref:d}),kt,pn,!!ge&&r.createElement(Pe,{key:"compact",prefixCls:At}));return mn(Ie)||(In=r.createElement(De,{component:"Button",disabled:Ue},In)),Xt(In)});Vt.Group=qn,Vt.__ANT_BUTTON=!0;var wt=Vt,fn=wt},98866:function(Ve,k,s){"use strict";s.d(k,{n:function(){return X}});var r=s(67294);const y=r.createContext(!1),X=j=>{let{children:Z,disabled:A}=j;const R=r.useContext(y);return r.createElement(y.Provider,{value:A!=null?A:R},Z)};k.Z=y},97647:function(Ve,k,s){"use strict";s.d(k,{q:function(){return X}});var r=s(67294);const y=r.createContext(void 0),X=j=>{let{children:Z,size:A}=j;const R=r.useContext(y);return r.createElement(y.Provider,{value:A||R},Z)};k.Z=y},53124:function(Ve,k,s){"use strict";s.d(k,{E_:function(){return A},Rf:function(){return y},oR:function(){return X},tr:function(){return j}});var r=s(67294);const y="ant",X="anticon",j=["outlined","borderless","filled"],Z=(v,Y)=>Y||(v?`${y}-${v}`:y),A=r.createContext({getPrefixCls:Z,iconPrefixCls:X}),{Consumer:R}=A},4366:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return vt}});var r=s(67294),y=s(53124),X=s(93967),j=s.n(X),Z=s(10110),A=s(10274),R=s(25976),Y=()=>{const[,Ae]=(0,R.ZP)(),he=new A.C(Ae.colorBgBase).toHsl().l<.5?{opacity:.65}:{};return r.createElement("svg",{style:he,width:"184",height:"152",viewBox:"0 0 184 152",xmlns:"http://www.w3.org/2000/svg"},r.createElement("title",null,"empty image"),r.createElement("g",{fill:"none",fillRule:"evenodd"},r.createElement("g",{transform:"translate(24 31.67)"},r.createElement("ellipse",{fillOpacity:".8",fill:"#F5F5F7",cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"}),r.createElement("path",{d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z",fill:"#AEB8C2"}),r.createElement("path",{d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",fill:"url(#linearGradient-1)",transform:"translate(13.56)"}),r.createElement("path",{d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z",fill:"#F5F5F7"}),r.createElement("path",{d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z",fill:"#DCE0E6"})),r.createElement("path",{d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z",fill:"#DCE0E6"}),r.createElement("g",{transform:"translate(149.65 15.383)",fill:"#FFF"},r.createElement("ellipse",{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"}),r.createElement("path",{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"}))))},$=()=>{const[,Ae]=(0,R.ZP)(),{colorFill:V,colorFillTertiary:he,colorFillQuaternary:q,colorBgContainer:D}=Ae,{borderColor:U,shadowColor:Oe,contentColor:He}=(0,r.useMemo)(()=>({borderColor:new A.C(V).onBackground(D).toHexShortString(),shadowColor:new A.C(he).onBackground(D).toHexShortString(),contentColor:new A.C(q).onBackground(D).toHexShortString()}),[V,he,q,D]);return r.createElement("svg",{width:"64",height:"41",viewBox:"0 0 64 41",xmlns:"http://www.w3.org/2000/svg"},r.createElement("title",null,"Simple Empty"),r.createElement("g",{transform:"translate(0 1)",fill:"none",fillRule:"evenodd"},r.createElement("ellipse",{fill:Oe,cx:"32",cy:"33",rx:"32",ry:"7"}),r.createElement("g",{fillRule:"nonzero",stroke:U},r.createElement("path",{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"}),r.createElement("path",{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:He}))))},T=s(83559),b=s(83262);const we=Ae=>{const{componentCls:V,margin:he,marginXS:q,marginXL:D,fontSize:U,lineHeight:Oe}=Ae;return{[V]:{marginInline:q,fontSize:U,lineHeight:Oe,textAlign:"center",[`${V}-image`]:{height:Ae.emptyImgHeight,marginBottom:q,opacity:Ae.opacityImage,img:{height:"100%"},svg:{maxWidth:"100%",height:"100%",margin:"auto"}},[`${V}-description`]:{color:Ae.colorTextDescription},[`${V}-footer`]:{marginTop:he},"&-normal":{marginBlock:D,color:Ae.colorTextDescription,[`${V}-description`]:{color:Ae.colorTextDescription},[`${V}-image`]:{height:Ae.emptyImgHeightMD}},"&-small":{marginBlock:q,color:Ae.colorTextDescription,[`${V}-image`]:{height:Ae.emptyImgHeightSM}}}}};var Q=(0,T.I$)("Empty",Ae=>{const{componentCls:V,controlHeightLG:he,calc:q}=Ae,D=(0,b.IX)(Ae,{emptyImgCls:`${V}-img`,emptyImgHeight:q(he).mul(2.5).equal(),emptyImgHeightMD:he,emptyImgHeightSM:q(he).mul(.875).equal()});return[we(D)]}),J=function(Ae,V){var he={};for(var q in Ae)Object.prototype.hasOwnProperty.call(Ae,q)&&V.indexOf(q)<0&&(he[q]=Ae[q]);if(Ae!=null&&typeof Object.getOwnPropertySymbols=="function")for(var D=0,q=Object.getOwnPropertySymbols(Ae);D{var{className:V,rootClassName:he,prefixCls:q,image:D=ue,description:U,children:Oe,imageStyle:He,style:pe}=Ae,Qe=J(Ae,["className","rootClassName","prefixCls","image","description","children","imageStyle","style"]);const{getPrefixCls:ft,direction:Pt,empty:g}=r.useContext(y.E_),de=ft("empty",q),[ce,be,Me]=Q(de),[$e]=(0,Z.Z)("Empty"),yt=typeof U!="undefined"?U:$e==null?void 0:$e.description,Qt=typeof yt=="string"?yt:"empty";let nn=null;return typeof D=="string"?nn=r.createElement("img",{alt:Qt,src:D}):nn=D,ce(r.createElement("div",Object.assign({className:j()(be,Me,de,g==null?void 0:g.className,{[`${de}-normal`]:D===_,[`${de}-rtl`]:Pt==="rtl"},V,he),style:Object.assign(Object.assign({},g==null?void 0:g.style),pe)},Qe),r.createElement("div",{className:`${de}-image`,style:He},nn),yt&&r.createElement("div",{className:`${de}-description`},yt),Oe&&r.createElement("div",{className:`${de}-footer`},Oe)))};Be.PRESENTED_IMAGE_DEFAULT=ue,Be.PRESENTED_IMAGE_SIMPLE=_;var Le=Be,vt=Ae=>{const{componentName:V}=Ae,{getPrefixCls:he}=(0,r.useContext)(y.E_),q=he("empty");switch(V){case"Table":case"List":return r.createElement(Le,{image:Le.PRESENTED_IMAGE_SIMPLE});case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return r.createElement(Le,{image:Le.PRESENTED_IMAGE_SIMPLE,className:`${q}-small`});case"Table.filter":return null;default:return r.createElement(Le,null)}}},35792:function(Ve,k,s){"use strict";var r=s(25976);const y=X=>{const[,,,,j]=(0,r.ZP)();return j?`${X}-css-var`:""};k.Z=y},98675:function(Ve,k,s){"use strict";var r=s(67294),y=s(97647);const X=j=>{const Z=r.useContext(y.Z);return r.useMemo(()=>j?typeof j=="string"?j!=null?j:Z:j instanceof Function?j(Z):Z:Z,[j,Z])};k.Z=X},25682:function(Ve,k,s){"use strict";s.d(k,{ZP:function(){return mn}});var r=s(67294),y=s.t(r,2),X=s(11568),j=s(63017),Z=s(56982),A=s(8880),R=s(27288),v=(0,r.createContext)(void 0),Y=s(11312);let O=Object.assign({},Y.Z.Modal),$=[];const T=()=>$.reduce((Ft,Ct)=>Object.assign(Object.assign({},Ft),Ct),Y.Z.Modal);function b(Ft){if(Ft){const Ct=Object.assign({},Ft);return $.push(Ct),O=T(),()=>{$=$.filter(Mt=>Mt!==Ct),O=T()}}O=Object.assign({},Y.Z.Modal)}function we(){return O}var Q=s(76745);const J="internalMark";var _=Ft=>{const{locale:Ct={},children:Mt,_ANT_MARK__:tn}=Ft;r.useEffect(()=>b(Ct==null?void 0:Ct.Modal),[Ct]);const qt=r.useMemo(()=>Object.assign(Object.assign({},Ct),{exist:!0}),[Ct]);return r.createElement(Q.Z.Provider,{value:qt},Mt)},Be=s(33083),Le=s(2790),Bt=s(53124),vt=s(84898),Ae=s(10274),V=s(98924),he=s(48981);const q=`-ant-${Date.now()}-${Math.random()}`;function D(Ft,Ct){const Mt={},tn=(hn,gt)=>{let tt=hn.clone();return tt=(gt==null?void 0:gt(tt))||tt,tt.toRgbString()},qt=(hn,gt)=>{const tt=new Ae.C(hn),Ke=(0,vt.R_)(tt.toRgbString());Mt[`${gt}-color`]=tn(tt),Mt[`${gt}-color-disabled`]=Ke[1],Mt[`${gt}-color-hover`]=Ke[4],Mt[`${gt}-color-active`]=Ke[6],Mt[`${gt}-color-outline`]=tt.clone().setAlpha(.2).toRgbString(),Mt[`${gt}-color-deprecated-bg`]=Ke[0],Mt[`${gt}-color-deprecated-border`]=Ke[2]};if(Ct.primaryColor){qt(Ct.primaryColor,"primary");const hn=new Ae.C(Ct.primaryColor),gt=(0,vt.R_)(hn.toRgbString());gt.forEach((Ke,mr)=>{Mt[`primary-${mr+1}`]=Ke}),Mt["primary-color-deprecated-l-35"]=tn(hn,Ke=>Ke.lighten(35)),Mt["primary-color-deprecated-l-20"]=tn(hn,Ke=>Ke.lighten(20)),Mt["primary-color-deprecated-t-20"]=tn(hn,Ke=>Ke.tint(20)),Mt["primary-color-deprecated-t-50"]=tn(hn,Ke=>Ke.tint(50)),Mt["primary-color-deprecated-f-12"]=tn(hn,Ke=>Ke.setAlpha(Ke.getAlpha()*.12));const tt=new Ae.C(gt[0]);Mt["primary-color-active-deprecated-f-30"]=tn(tt,Ke=>Ke.setAlpha(Ke.getAlpha()*.3)),Mt["primary-color-active-deprecated-d-02"]=tn(tt,Ke=>Ke.darken(2))}return Ct.successColor&&qt(Ct.successColor,"success"),Ct.warningColor&&qt(Ct.warningColor,"warning"),Ct.errorColor&&qt(Ct.errorColor,"error"),Ct.infoColor&&qt(Ct.infoColor,"info"),` + :root { + ${Object.keys(Mt).map(hn=>`--${Ft}-${hn}: ${Mt[hn]};`).join(` +`)} + } + `.trim()}function U(Ft,Ct){const Mt=D(Ft,Ct);(0,V.Z)()&&(0,he.hq)(Mt,`${q}-dynamic-theme`)}var Oe=s(98866),He=s(97647);function pe(){const Ft=(0,r.useContext)(Oe.Z),Ct=(0,r.useContext)(He.Z);return{componentDisabled:Ft,componentSize:Ct}}var Qe=pe,ft=s(91881);const Pt=Object.assign({},y),{useId:g}=Pt;var be=typeof g=="undefined"?()=>"":g;function Me(Ft,Ct,Mt){var tn,qt;const un=(0,R.ln)("ConfigProvider"),hn=Ft||{},gt=hn.inherit===!1||!Ct?Object.assign(Object.assign({},Be.u_),{hashed:(tn=Ct==null?void 0:Ct.hashed)!==null&&tn!==void 0?tn:Be.u_.hashed,cssVar:Ct==null?void 0:Ct.cssVar}):Ct,tt=be();return(0,Z.Z)(()=>{var Ke,mr;if(!Ft)return Ct;const rr=Object.assign({},gt.components);Object.keys(Ft.components||{}).forEach(pr=>{rr[pr]=Object.assign(Object.assign({},rr[pr]),Ft.components[pr])});const yr=`css-var-${tt.replace(/:/g,"")}`,Sr=((Ke=hn.cssVar)!==null&&Ke!==void 0?Ke:gt.cssVar)&&Object.assign(Object.assign(Object.assign({prefix:Mt==null?void 0:Mt.prefixCls},typeof gt.cssVar=="object"?gt.cssVar:{}),typeof hn.cssVar=="object"?hn.cssVar:{}),{key:typeof hn.cssVar=="object"&&((mr=hn.cssVar)===null||mr===void 0?void 0:mr.key)||yr});return Object.assign(Object.assign(Object.assign({},gt),hn),{token:Object.assign(Object.assign({},gt.token),hn.token),components:rr,cssVar:Sr})},[hn,gt],(Ke,mr)=>Ke.some((rr,yr)=>{const Sr=mr[yr];return!(0,ft.Z)(rr,Sr,!0)}))}var $e=s(29372),yt=s(25976);function Qt(Ft){const{children:Ct}=Ft,[,Mt]=(0,yt.ZP)(),{motion:tn}=Mt,qt=r.useRef(!1);return qt.current=qt.current||tn===!1,qt.current?r.createElement($e.zt,{motion:tn},Ct):Ct}const nn=null;var vn=()=>null,Ln=s(53269),ht=function(Ft,Ct){var Mt={};for(var tn in Ft)Object.prototype.hasOwnProperty.call(Ft,tn)&&Ct.indexOf(tn)<0&&(Mt[tn]=Ft[tn]);if(Ft!=null&&typeof Object.getOwnPropertySymbols=="function")for(var qt=0,tn=Object.getOwnPropertySymbols(Ft);qtCt.endsWith("Color"))}const or=Ft=>{const{prefixCls:Ct,iconPrefixCls:Mt,theme:tn,holderRender:qt}=Ft;Ct!==void 0&&(xe=Ct),Mt!==void 0&&(je=Mt),"holderRender"in Ft&&(cn=qt),tn&&(qn(tn)?U(Fn(),tn):It=tn)},dr=()=>({getPrefixCls:(Ft,Ct)=>Ct||(Ft?`${Fn()}-${Ft}`:Fn()),getIconPrefixCls:Nn,getRootPrefixCls:()=>xe||Fn(),getTheme:()=>It,holderRender:cn}),Zn=Ft=>{const{children:Ct,csp:Mt,autoInsertSpaceInButton:tn,alert:qt,anchor:un,form:hn,locale:gt,componentSize:tt,direction:Ke,space:mr,splitter:rr,virtual:yr,dropdownMatchSelectWidth:Sr,popupMatchSelectWidth:pr,popupOverflow:Xn,legacyLocale:Lr,parentContext:Mr,iconPrefixCls:Nr,theme:Vr,componentDisabled:Xr,segmented:Qr,statistic:fr,spin:Hr,calendar:Ur,carousel:Ir,cascader:$r,collapse:Er,typography:Zr,checkbox:to,descriptions:Fr,divider:kr,drawer:so,skeleton:mo,steps:Jr,image:vo,layout:Yr,list:Gr,mentions:Yn,modal:oo,progress:Br,result:po,slider:Dr,breadcrumb:Oo,menu:wo,pagination:no,input:Wr,textArea:co,empty:ho,badge:xo,radio:Eo,rate:We,switch:Nt,transfer:F,avatar:H,message:ee,tag:te,table:me,card:nt,tabs:h,timeline:E,timePicker:ye,upload:Se,notification:Te,tree:Fe,colorPicker:Xe,datePicker:Je,rangePicker:ct,flex:xt,wave:zt,dropdown:Et,warning:$t,tour:jt,floatButtonGroup:Gt,variant:Rt,inputNumber:xn,treeSelect:en}=Ft,ln=r.useCallback((sn,wn)=>{const{prefixCls:Kn}=Ft;if(wn)return wn;const er=Kn||Mr.getPrefixCls("");return sn?`${er}-${sn}`:er},[Mr.getPrefixCls,Ft.prefixCls]),an=Nr||Mr.iconPrefixCls||Bt.oR,bn=Mt||Mr.csp;(0,Ln.Z)(an,bn);const _n=Me(Vr,Mr.theme,{prefixCls:ln("")}),Pn={csp:bn,autoInsertSpaceInButton:tn,alert:qt,anchor:un,locale:gt||Lr,direction:Ke,space:mr,splitter:rr,virtual:yr,popupMatchSelectWidth:pr!=null?pr:Sr,popupOverflow:Xn,getPrefixCls:ln,iconPrefixCls:an,theme:_n,segmented:Qr,statistic:fr,spin:Hr,calendar:Ur,carousel:Ir,cascader:$r,collapse:Er,typography:Zr,checkbox:to,descriptions:Fr,divider:kr,drawer:so,skeleton:mo,steps:Jr,image:vo,input:Wr,textArea:co,layout:Yr,list:Gr,mentions:Yn,modal:oo,progress:Br,result:po,slider:Dr,breadcrumb:Oo,menu:wo,pagination:no,empty:ho,badge:xo,radio:Eo,rate:We,switch:Nt,transfer:F,avatar:H,message:ee,tag:te,table:me,card:nt,tabs:h,timeline:E,timePicker:ye,upload:Se,notification:Te,tree:Fe,colorPicker:Xe,datePicker:Je,rangePicker:ct,flex:xt,wave:zt,dropdown:Et,warning:$t,tour:jt,floatButtonGroup:Gt,variant:Rt,inputNumber:xn,treeSelect:en},Bn=Object.assign({},Mr);Object.keys(Pn).forEach(sn=>{Pn[sn]!==void 0&&(Bn[sn]=Pn[sn])}),De.forEach(sn=>{const wn=Ft[sn];wn&&(Bn[sn]=wn)}),typeof tn!="undefined"&&(Bn.button=Object.assign({autoInsertSpace:tn},Bn.button));const rn=(0,Z.Z)(()=>Bn,Bn,(sn,wn)=>{const Kn=Object.keys(sn),er=Object.keys(wn);return Kn.length!==er.length||Kn.some(Cn=>sn[Cn]!==wn[Cn])}),En=r.useMemo(()=>({prefixCls:an,csp:bn}),[an,bn]);let yn=r.createElement(r.Fragment,null,r.createElement(vn,{dropdownMatchSelectWidth:Sr}),Ct);const Mn=r.useMemo(()=>{var sn,wn,Kn,er;return(0,A.T)(((sn=Y.Z.Form)===null||sn===void 0?void 0:sn.defaultValidateMessages)||{},((Kn=(wn=rn.locale)===null||wn===void 0?void 0:wn.Form)===null||Kn===void 0?void 0:Kn.defaultValidateMessages)||{},((er=rn.form)===null||er===void 0?void 0:er.validateMessages)||{},(hn==null?void 0:hn.validateMessages)||{})},[rn,hn==null?void 0:hn.validateMessages]);Object.keys(Mn).length>0&&(yn=r.createElement(v.Provider,{value:Mn},yn)),gt&&(yn=r.createElement(_,{locale:gt,_ANT_MARK__:J},yn)),(an||bn)&&(yn=r.createElement(j.Z.Provider,{value:En},yn)),tt&&(yn=r.createElement(He.q,{size:tt},yn)),yn=r.createElement(Qt,null,yn);const An=r.useMemo(()=>{const sn=_n||{},{algorithm:wn,token:Kn,components:er,cssVar:Cn}=sn,ar=ht(sn,["algorithm","token","components","cssVar"]),Or=wn&&(!Array.isArray(wn)||wn.length>0)?(0,X.jG)(wn):Be.uH,Qn={};Object.entries(er||{}).forEach(lr=>{let[Wn,ie]=lr;const w=Object.assign({},ie);"algorithm"in w&&(w.algorithm===!0?w.theme=Or:(Array.isArray(w.algorithm)||typeof w.algorithm=="function")&&(w.theme=(0,X.jG)(w.algorithm)),delete w.algorithm),Qn[Wn]=w});const br=Object.assign(Object.assign({},Le.Z),Kn);return Object.assign(Object.assign({},ar),{theme:Or,token:br,components:Qn,override:Object.assign({override:br},Qn),cssVar:Cn})},[_n]);return Vr&&(yn=r.createElement(Be.Mj.Provider,{value:An},yn)),rn.warning&&(yn=r.createElement(R.G8.Provider,{value:rn.warning},yn)),Xr!==void 0&&(yn=r.createElement(Oe.n,{disabled:Xr},yn)),r.createElement(Bt.E_.Provider,{value:rn},yn)},jn=Ft=>{const Ct=r.useContext(Bt.E_),Mt=r.useContext(Q.Z);return r.createElement(Zn,Object.assign({parentContext:Ct,legacyLocale:Mt},Ft))};jn.ConfigContext=Bt.E_,jn.SizeContext=He.Z,jn.config=or,jn.useConfig=Qe,Object.defineProperty(jn,"SizeContext",{get:()=>He.Z});var mn=jn},60566:function(Ve,k,s){"use strict";s.d(k,{aM:function(){return br},Ux:function(){return lr},pg:function(){return Wn}});var r=s(67294),y=s(87462),X=s(91),j=s(74165),Z=s(15861),A=s(1413),R=s(74902),v=s(15671),Y=s(43144),O=s(97326),$=s(60136),T=s(18486),b=s(4942),we=s(50344),Q=s(91881),J=s(80334),ue="RC_FORM_INTERNAL_HOOKS",_=function(){(0,J.ZP)(!1,"Can not find FormContext. Please make sure you wrap Field under Form.")},Be=r.createContext({getFieldValue:_,getFieldsValue:_,getFieldError:_,getFieldWarning:_,getFieldsError:_,isFieldsTouched:_,isFieldTouched:_,isFieldValidating:_,isFieldsValidating:_,resetFields:_,setFields:_,setFieldValue:_,setFieldsValue:_,validateFields:_,submit:_,getInternalHooks:function(){return _(),{dispatch:_,initEntityValue:_,registerField:_,useSubscribe:_,setInitialValues:_,destroyForm:_,setCallbacks:_,registerWatch:_,getFields:_,setValidateMessages:_,setPreserve:_,getInitialValue:_}}}),Le=Be,Bt=r.createContext(null),vt=Bt;function Ae(ie){return ie==null?[]:Array.isArray(ie)?ie:[ie]}function V(ie){return ie&&!!ie._init}var he=s(71002);function q(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var w=JSON.parse(JSON.stringify(this));return w.clone=this.clone,w}}}var D=q(),U=s(61120),Oe=s(89611);function He(ie){try{return Function.toString.call(ie).indexOf("[native code]")!==-1}catch(w){return typeof ie=="function"}}var pe=s(78814);function Qe(ie,w,m){if((0,pe.Z)())return Reflect.construct.apply(null,arguments);var L=[null];L.push.apply(L,w);var C=new(ie.bind.apply(ie,L));return m&&(0,Oe.Z)(C,m.prototype),C}function ft(ie){var w=typeof Map=="function"?new Map:void 0;return ft=function(L){if(L===null||!He(L))return L;if(typeof L!="function")throw new TypeError("Super expression must either be null or a function");if(w!==void 0){if(w.has(L))return w.get(L);w.set(L,C)}function C(){return Qe(L,arguments,(0,U.Z)(this).constructor)}return C.prototype=Object.create(L.prototype,{constructor:{value:C,enumerable:!1,writable:!0,configurable:!0}}),(0,Oe.Z)(C,L)},ft(ie)}var Pt=s(34155),g=/%[sdj%]/g,de=function(){};function ce(ie){if(!ie||!ie.length)return null;var w={};return ie.forEach(function(m){var L=m.field;w[L]=w[L]||[],w[L].push(m)}),w}function be(ie){for(var w=arguments.length,m=new Array(w>1?w-1:0),L=1;L=ne)return Re;switch(Re){case"%s":return String(m[C++]);case"%d":return Number(m[C++]);case"%j":try{return JSON.stringify(m[C++])}catch(Ge){return"[Circular]"}break;default:return Re}});return fe}return ie}function Me(ie){return ie==="string"||ie==="url"||ie==="hex"||ie==="email"||ie==="date"||ie==="pattern"}function $e(ie,w){return!!(ie==null||w==="array"&&Array.isArray(ie)&&!ie.length||Me(w)&&typeof ie=="string"&&!ie)}function yt(ie){return Object.keys(ie).length===0}function Qt(ie,w,m){var L=[],C=0,ne=ie.length;function fe(Re){L.push.apply(L,(0,R.Z)(Re||[])),C++,C===ne&&m(L)}ie.forEach(function(Re){w(Re,fe)})}function nn(ie,w,m){var L=0,C=ie.length;function ne(fe){if(fe&&fe.length){m(fe);return}var Re=L;L=L+1,Rew.max?C.push(be(ne.messages[Lt].max,w.fullField,w.max)):Re&&Ge&&(Pew.max)&&C.push(be(ne.messages[Lt].range,w.fullField,w.min,w.max))},qn=Nn,or=function(w,m,L,C,ne,fe){w.required&&(!L.hasOwnProperty(w.field)||$e(m,fe||w.type))&&C.push(be(ne.messages.required,w.fullField))},dr=or,Zn,jn=function(){if(Zn)return Zn;var ie="[a-fA-F\\d:]",w=function(n){return n&&n.includeBoundaries?"(?:(?<=\\s|^)(?=".concat(ie,")|(?<=").concat(ie,")(?=\\s|$))"):""},m="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",L="[a-fA-F\\d]{1,4}",C=["(?:".concat(L,":){7}(?:").concat(L,"|:)"),"(?:".concat(L,":){6}(?:").concat(m,"|:").concat(L,"|:)"),"(?:".concat(L,":){5}(?::").concat(m,"|(?::").concat(L,"){1,2}|:)"),"(?:".concat(L,":){4}(?:(?::").concat(L,"){0,1}:").concat(m,"|(?::").concat(L,"){1,3}|:)"),"(?:".concat(L,":){3}(?:(?::").concat(L,"){0,2}:").concat(m,"|(?::").concat(L,"){1,4}|:)"),"(?:".concat(L,":){2}(?:(?::").concat(L,"){0,3}:").concat(m,"|(?::").concat(L,"){1,5}|:)"),"(?:".concat(L,":){1}(?:(?::").concat(L,"){0,4}:").concat(m,"|(?::").concat(L,"){1,6}|:)"),"(?::(?:(?::".concat(L,"){0,5}:").concat(m,"|(?::").concat(L,"){1,7}|:))")],ne="(?:%[0-9a-zA-Z]{1,})?",fe="(?:".concat(C.join("|"),")").concat(ne),Re=new RegExp("(?:^".concat(m,"$)|(?:^").concat(fe,"$)")),Ge=new RegExp("^".concat(m,"$")),ut=new RegExp("^".concat(fe,"$")),Pe=function(n){return n&&n.exact?Re:new RegExp("(?:".concat(w(n)).concat(m).concat(w(n),")|(?:").concat(w(n)).concat(fe).concat(w(n),")"),"g")};Pe.v4=function(re){return re&&re.exact?Ge:new RegExp("".concat(w(re)).concat(m).concat(w(re)),"g")},Pe.v6=function(re){return re&&re.exact?ut:new RegExp("".concat(w(re)).concat(fe).concat(w(re)),"g")};var Lt="(?:(?:[a-z]+:)?//)",Wt="(?:\\S+(?::\\S*)?@)?",gn=Pe.v4().source,_t=Pe.v6().source,Vt="(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)",wt="(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*",fn="(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))",u="(?::\\d{2,5})?",S='(?:[/?#][^\\s"]*)?',K="(?:".concat(Lt,"|www\\.)").concat(Wt,"(?:localhost|").concat(gn,"|").concat(_t,"|").concat(Vt).concat(wt).concat(fn,")").concat(u).concat(S);return Zn=new RegExp("(?:^".concat(K,"$)"),"i"),Zn},mn={email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},Ft={integer:function(w){return Ft.number(w)&&parseInt(w,10)===w},float:function(w){return Ft.number(w)&&!Ft.integer(w)},array:function(w){return Array.isArray(w)},regexp:function(w){if(w instanceof RegExp)return!0;try{return!!new RegExp(w)}catch(m){return!1}},date:function(w){return typeof w.getTime=="function"&&typeof w.getMonth=="function"&&typeof w.getYear=="function"&&!isNaN(w.getTime())},number:function(w){return isNaN(w)?!1:typeof w=="number"},object:function(w){return(0,he.Z)(w)==="object"&&!Ft.array(w)},method:function(w){return typeof w=="function"},email:function(w){return typeof w=="string"&&w.length<=320&&!!w.match(mn.email)},url:function(w){return typeof w=="string"&&w.length<=2048&&!!w.match(jn())},hex:function(w){return typeof w=="string"&&!!w.match(mn.hex)}},Ct=function(w,m,L,C,ne){if(w.required&&m===void 0){dr(w,m,L,C,ne);return}var fe=["integer","float","array","regexp","object","method","email","number","date","url","hex"],Re=w.type;fe.indexOf(Re)>-1?Ft[Re](m)||C.push(be(ne.messages.types[Re],w.fullField,w.type)):Re&&(0,he.Z)(m)!==w.type&&C.push(be(ne.messages.types[Re],w.fullField,w.type))},Mt=Ct,tn=function(w,m,L,C,ne){(/^\s+$/.test(m)||m==="")&&C.push(be(ne.messages.whitespace,w.fullField))},qt=tn,un={required:dr,whitespace:qt,type:Mt,range:qn,enum:It,pattern:Fn},hn=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m)&&!w.required)return L();un.required(w,m,C,fe,ne)}L(fe)},gt=hn,tt=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if(m==null&&!w.required)return L();un.required(w,m,C,fe,ne,"array"),m!=null&&(un.type(w,m,C,fe,ne),un.range(w,m,C,fe,ne))}L(fe)},Ke=tt,mr=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m)&&!w.required)return L();un.required(w,m,C,fe,ne),m!==void 0&&un.type(w,m,C,fe,ne)}L(fe)},rr=mr,yr=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m,"date")&&!w.required)return L();if(un.required(w,m,C,fe,ne),!$e(m,"date")){var Ge;m instanceof Date?Ge=m:Ge=new Date(m),un.type(w,Ge,C,fe,ne),Ge&&un.range(w,Ge.getTime(),C,fe,ne)}}L(fe)},Sr=yr,pr="enum",Xn=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m)&&!w.required)return L();un.required(w,m,C,fe,ne),m!==void 0&&un[pr](w,m,C,fe,ne)}L(fe)},Lr=Xn,Mr=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m)&&!w.required)return L();un.required(w,m,C,fe,ne),m!==void 0&&(un.type(w,m,C,fe,ne),un.range(w,m,C,fe,ne))}L(fe)},Nr=Mr,Vr=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m)&&!w.required)return L();un.required(w,m,C,fe,ne),m!==void 0&&(un.type(w,m,C,fe,ne),un.range(w,m,C,fe,ne))}L(fe)},Xr=Vr,Qr=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m)&&!w.required)return L();un.required(w,m,C,fe,ne),m!==void 0&&un.type(w,m,C,fe,ne)}L(fe)},fr=Qr,Hr=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if(m===""&&(m=void 0),$e(m)&&!w.required)return L();un.required(w,m,C,fe,ne),m!==void 0&&(un.type(w,m,C,fe,ne),un.range(w,m,C,fe,ne))}L(fe)},Ur=Hr,Ir=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m)&&!w.required)return L();un.required(w,m,C,fe,ne),m!==void 0&&un.type(w,m,C,fe,ne)}L(fe)},$r=Ir,Er=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m,"string")&&!w.required)return L();un.required(w,m,C,fe,ne),$e(m,"string")||un.pattern(w,m,C,fe,ne)}L(fe)},Zr=Er,to=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m)&&!w.required)return L();un.required(w,m,C,fe,ne),$e(m)||un.type(w,m,C,fe,ne)}L(fe)},Fr=to,kr=function(w,m,L,C,ne){var fe=[],Re=Array.isArray(m)?"array":(0,he.Z)(m);un.required(w,m,C,fe,ne,Re),L(fe)},so=kr,mo=function(w,m,L,C,ne){var fe=[],Re=w.required||!w.required&&C.hasOwnProperty(w.field);if(Re){if($e(m,"string")&&!w.required)return L();un.required(w,m,C,fe,ne,"string"),$e(m,"string")||(un.type(w,m,C,fe,ne),un.range(w,m,C,fe,ne),un.pattern(w,m,C,fe,ne),w.whitespace===!0&&un.whitespace(w,m,C,fe,ne))}L(fe)},Jr=mo,vo=function(w,m,L,C,ne){var fe=w.type,Re=[],Ge=w.required||!w.required&&C.hasOwnProperty(w.field);if(Ge){if($e(m,fe)&&!w.required)return L();un.required(w,m,C,Re,ne,fe),$e(m,fe)||un.type(w,m,C,Re,ne)}L(Re)},Yr=vo,Gr={string:Jr,method:fr,number:Ur,boolean:rr,regexp:Fr,integer:Xr,float:Nr,array:Ke,object:$r,enum:Lr,pattern:Zr,date:Sr,url:Yr,hex:Yr,email:Yr,required:so,any:gt},Yn=function(){function ie(w){(0,v.Z)(this,ie),(0,b.Z)(this,"rules",null),(0,b.Z)(this,"_messages",D),this.define(w)}return(0,Y.Z)(ie,[{key:"define",value:function(m){var L=this;if(!m)throw new Error("Cannot configure a schema with no rules");if((0,he.Z)(m)!=="object"||Array.isArray(m))throw new Error("Rules must be an object");this.rules={},Object.keys(m).forEach(function(C){var ne=m[C];L.rules[C]=Array.isArray(ne)?ne:[ne]})}},{key:"messages",value:function(m){return m&&(this._messages=De(q(),m)),this._messages}},{key:"validate",value:function(m){var L=this,C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ne=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(){},fe=m,Re=C,Ge=ne;if(typeof Re=="function"&&(Ge=Re,Re={}),!this.rules||Object.keys(this.rules).length===0)return Ge&&Ge(null,fe),Promise.resolve(fe);function ut(_t){var Vt=[],wt={};function fn(S){if(Array.isArray(S)){var K;Vt=(K=Vt).concat.apply(K,(0,R.Z)(S))}else Vt.push(S)}for(var u=0;u<_t.length;u++)fn(_t[u]);Vt.length?(wt=ce(Vt),Ge(Vt,wt)):Ge(null,fe)}if(Re.messages){var Pe=this.messages();Pe===D&&(Pe=q()),De(Pe,Re.messages),Re.messages=Pe}else Re.messages=this.messages();var Lt={},Wt=Re.keys||Object.keys(this.rules);Wt.forEach(function(_t){var Vt=L.rules[_t],wt=fe[_t];Vt.forEach(function(fn){var u=fn;typeof u.transform=="function"&&(fe===m&&(fe=(0,A.Z)({},fe)),wt=fe[_t]=u.transform(wt),wt!=null&&(u.type=u.type||(Array.isArray(wt)?"array":(0,he.Z)(wt)))),typeof u=="function"?u={validator:u}:u=(0,A.Z)({},u),u.validator=L.getValidationMethod(u),u.validator&&(u.field=_t,u.fullField=u.fullField||_t,u.type=L.getType(u),Lt[_t]=Lt[_t]||[],Lt[_t].push({rule:u,value:wt,source:fe,field:_t}))})});var gn={};return ht(Lt,Re,function(_t,Vt){var wt=_t.rule,fn=(wt.type==="object"||wt.type==="array")&&((0,he.Z)(wt.fields)==="object"||(0,he.Z)(wt.defaultField)==="object");fn=fn&&(wt.required||!wt.required&&_t.value),wt.field=_t.field;function u(a,N){return(0,A.Z)((0,A.Z)({},N),{},{fullField:"".concat(wt.fullField,".").concat(a),fullFields:wt.fullFields?[].concat((0,R.Z)(wt.fullFields),[a]):[a]})}function S(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],N=Array.isArray(a)?a:[a];!Re.suppressWarning&&N.length&&ie.warning("async-validator:",N),N.length&&wt.message!==void 0&&(N=[].concat(wt.message));var P=N.map(Ye(wt,fe));if(Re.first&&P.length)return gn[wt.field]=1,Vt(P);if(!fn)Vt(P);else{if(wt.required&&!_t.value)return wt.message!==void 0?P=[].concat(wt.message).map(Ye(wt,fe)):Re.error&&(P=[Re.error(wt,be(Re.messages.required,wt.field))]),Vt(P);var ae={};wt.defaultField&&Object.keys(_t.value).map(function(pt){ae[pt]=wt.defaultField}),ae=(0,A.Z)((0,A.Z)({},ae),_t.rule.fields);var Ne={};Object.keys(ae).forEach(function(pt){var at=ae[pt],Ut=Array.isArray(at)?at:[at];Ne[pt]=Ut.map(u.bind(null,pt))});var ze=new ie(Ne);ze.messages(Re.messages),_t.rule.options&&(_t.rule.options.messages=Re.messages,_t.rule.options.error=Re.error),ze.validate(_t.value,_t.rule.options||Re,function(pt){var at=[];P&&P.length&&at.push.apply(at,(0,R.Z)(P)),pt&&pt.length&&at.push.apply(at,(0,R.Z)(pt)),Vt(at.length?at:null)})}}var K;if(wt.asyncValidator)K=wt.asyncValidator(wt,_t.value,S,_t.source,Re);else if(wt.validator){try{K=wt.validator(wt,_t.value,S,_t.source,Re)}catch(a){var re,n;(re=(n=console).error)===null||re===void 0||re.call(n,a),Re.suppressValidatorError||setTimeout(function(){throw a},0),S(a.message)}K===!0?S():K===!1?S(typeof wt.message=="function"?wt.message(wt.fullField||wt.field):wt.message||"".concat(wt.fullField||wt.field," fails")):K instanceof Array?S(K):K instanceof Error&&S(K.message)}K&&K.then&&K.then(function(){return S()},function(a){return S(a)})},function(_t){ut(_t)},fe)}},{key:"getType",value:function(m){if(m.type===void 0&&m.pattern instanceof RegExp&&(m.type="pattern"),typeof m.validator!="function"&&m.type&&!Gr.hasOwnProperty(m.type))throw new Error(be("Unknown rule type %s",m.type));return m.type||"string"}},{key:"getValidationMethod",value:function(m){if(typeof m.validator=="function")return m.validator;var L=Object.keys(m),C=L.indexOf("message");return C!==-1&&L.splice(C,1),L.length===1&&L[0]==="required"?Gr.required:Gr[this.getType(m)]||void 0}}]),ie}();(0,b.Z)(Yn,"register",function(w,m){if(typeof m!="function")throw new Error("Cannot register a validator by type, validator is not a function");Gr[w]=m}),(0,b.Z)(Yn,"warning",de),(0,b.Z)(Yn,"messages",D),(0,b.Z)(Yn,"validators",Gr);var oo=Yn,Br="'${name}' is not a valid ${type}",po={default:"Validation error on field '${name}'",required:"'${name}' is required",enum:"'${name}' must be one of [${enum}]",whitespace:"'${name}' cannot be empty",date:{format:"'${name}' is invalid for format date",parse:"'${name}' could not be parsed as date",invalid:"'${name}' is invalid date"},types:{string:Br,method:Br,array:Br,object:Br,number:Br,date:Br,boolean:Br,integer:Br,float:Br,regexp:Br,email:Br,url:Br,hex:Br},string:{len:"'${name}' must be exactly ${len} characters",min:"'${name}' must be at least ${min} characters",max:"'${name}' cannot be longer than ${max} characters",range:"'${name}' must be between ${min} and ${max} characters"},number:{len:"'${name}' must equal ${len}",min:"'${name}' cannot be less than ${min}",max:"'${name}' cannot be greater than ${max}",range:"'${name}' must be between ${min} and ${max}"},array:{len:"'${name}' must be exactly ${len} in length",min:"'${name}' cannot be less than ${min} in length",max:"'${name}' cannot be greater than ${max} in length",range:"'${name}' must be between ${min} and ${max} in length"},pattern:{mismatch:"'${name}' does not match pattern ${pattern}"}},Dr=s(8880),Oo=oo;function wo(ie,w){return ie.replace(/\\?\$\{\w+\}/g,function(m){if(m.startsWith("\\"))return m.slice(1);var L=m.slice(2,-1);return w[L]})}var no="CODE_LOGIC_ERROR";function Wr(ie,w,m,L,C){return co.apply(this,arguments)}function co(){return co=(0,Z.Z)((0,j.Z)().mark(function ie(w,m,L,C,ne){var fe,Re,Ge,ut,Pe,Lt,Wt,gn,_t;return(0,j.Z)().wrap(function(wt){for(;;)switch(wt.prev=wt.next){case 0:return fe=(0,A.Z)({},L),delete fe.ruleIndex,Oo.warning=function(){},fe.validator&&(Re=fe.validator,fe.validator=function(){try{return Re.apply(void 0,arguments)}catch(fn){return console.error(fn),Promise.reject(no)}}),Ge=null,fe&&fe.type==="array"&&fe.defaultField&&(Ge=fe.defaultField,delete fe.defaultField),ut=new Oo((0,b.Z)({},w,[fe])),Pe=(0,Dr.T)(po,C.validateMessages),ut.messages(Pe),Lt=[],wt.prev=10,wt.next=13,Promise.resolve(ut.validate((0,b.Z)({},w,m),(0,A.Z)({},C)));case 13:wt.next=18;break;case 15:wt.prev=15,wt.t0=wt.catch(10),wt.t0.errors&&(Lt=wt.t0.errors.map(function(fn,u){var S=fn.message,K=S===no?Pe.default:S;return r.isValidElement(K)?r.cloneElement(K,{key:"error_".concat(u)}):K}));case 18:if(!(!Lt.length&&Ge)){wt.next=23;break}return wt.next=21,Promise.all(m.map(function(fn,u){return Wr("".concat(w,".").concat(u),fn,Ge,C,ne)}));case 21:return Wt=wt.sent,wt.abrupt("return",Wt.reduce(function(fn,u){return[].concat((0,R.Z)(fn),(0,R.Z)(u))},[]));case 23:return gn=(0,A.Z)((0,A.Z)({},L),{},{name:w,enum:(L.enum||[]).join(", ")},ne),_t=Lt.map(function(fn){return typeof fn=="string"?wo(fn,gn):fn}),wt.abrupt("return",_t);case 26:case"end":return wt.stop()}},ie,null,[[10,15]])})),co.apply(this,arguments)}function ho(ie,w,m,L,C,ne){var fe=ie.join("."),Re=m.map(function(Pe,Lt){var Wt=Pe.validator,gn=(0,A.Z)((0,A.Z)({},Pe),{},{ruleIndex:Lt});return Wt&&(gn.validator=function(_t,Vt,wt){var fn=!1,u=function(){for(var re=arguments.length,n=new Array(re),a=0;a2&&arguments[2]!==void 0?arguments[2]:!1;return ie&&ie.some(function(L){return me(w,L,m)})}function me(ie,w){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return!ie||!w||!m&&ie.length!==w.length?!1:w.every(function(L,C){return ie[C]===L})}function nt(ie,w){if(ie===w)return!0;if(!ie&&w||ie&&!w||!ie||!w||(0,he.Z)(ie)!=="object"||(0,he.Z)(w)!=="object")return!1;var m=Object.keys(ie),L=Object.keys(w),C=new Set([].concat(m,L));return(0,R.Z)(C).every(function(ne){var fe=ie[ne],Re=w[ne];return typeof fe=="function"&&typeof Re=="function"?!0:fe===Re})}function h(ie){var w=arguments.length<=1?void 0:arguments[1];return w&&w.target&&(0,he.Z)(w.target)==="object"&&ie in w.target?w.target[ie]:w}function E(ie,w,m){var L=ie.length;if(w<0||w>=L||m<0||m>=L)return ie;var C=ie[w],ne=w-m;return ne>0?[].concat((0,R.Z)(ie.slice(0,m)),[C],(0,R.Z)(ie.slice(m,w)),(0,R.Z)(ie.slice(w+1,L))):ne<0?[].concat((0,R.Z)(ie.slice(0,w)),(0,R.Z)(ie.slice(w+1,m+1)),[C],(0,R.Z)(ie.slice(m+1,L))):ie}var ye=["name"],Se=[];function Te(ie,w,m,L,C,ne){return typeof ie=="function"?ie(w,m,"source"in ne?{source:ne.source}:{}):L!==C}var Fe=function(ie){(0,$.Z)(m,ie);var w=(0,T.Z)(m);function m(L){var C;if((0,v.Z)(this,m),C=w.call(this,L),(0,b.Z)((0,O.Z)(C),"state",{resetCount:0}),(0,b.Z)((0,O.Z)(C),"cancelRegisterFunc",null),(0,b.Z)((0,O.Z)(C),"mounted",!1),(0,b.Z)((0,O.Z)(C),"touched",!1),(0,b.Z)((0,O.Z)(C),"dirty",!1),(0,b.Z)((0,O.Z)(C),"validatePromise",void 0),(0,b.Z)((0,O.Z)(C),"prevValidating",void 0),(0,b.Z)((0,O.Z)(C),"errors",Se),(0,b.Z)((0,O.Z)(C),"warnings",Se),(0,b.Z)((0,O.Z)(C),"cancelRegister",function(){var Ge=C.props,ut=Ge.preserve,Pe=Ge.isListField,Lt=Ge.name;C.cancelRegisterFunc&&C.cancelRegisterFunc(Pe,ut,H(Lt)),C.cancelRegisterFunc=null}),(0,b.Z)((0,O.Z)(C),"getNamePath",function(){var Ge=C.props,ut=Ge.name,Pe=Ge.fieldContext,Lt=Pe.prefixName,Wt=Lt===void 0?[]:Lt;return ut!==void 0?[].concat((0,R.Z)(Wt),(0,R.Z)(ut)):[]}),(0,b.Z)((0,O.Z)(C),"getRules",function(){var Ge=C.props,ut=Ge.rules,Pe=ut===void 0?[]:ut,Lt=Ge.fieldContext;return Pe.map(function(Wt){return typeof Wt=="function"?Wt(Lt):Wt})}),(0,b.Z)((0,O.Z)(C),"refresh",function(){C.mounted&&C.setState(function(Ge){var ut=Ge.resetCount;return{resetCount:ut+1}})}),(0,b.Z)((0,O.Z)(C),"metaCache",null),(0,b.Z)((0,O.Z)(C),"triggerMetaEvent",function(Ge){var ut=C.props.onMetaChange;if(ut){var Pe=(0,A.Z)((0,A.Z)({},C.getMeta()),{},{destroy:Ge});(0,Q.Z)(C.metaCache,Pe)||ut(Pe),C.metaCache=Pe}else C.metaCache=null}),(0,b.Z)((0,O.Z)(C),"onStoreChange",function(Ge,ut,Pe){var Lt=C.props,Wt=Lt.shouldUpdate,gn=Lt.dependencies,_t=gn===void 0?[]:gn,Vt=Lt.onReset,wt=Pe.store,fn=C.getNamePath(),u=C.getValue(Ge),S=C.getValue(wt),K=ut&&te(ut,fn);switch(Pe.type==="valueUpdate"&&Pe.source==="external"&&!(0,Q.Z)(u,S)&&(C.touched=!0,C.dirty=!0,C.validatePromise=null,C.errors=Se,C.warnings=Se,C.triggerMetaEvent()),Pe.type){case"reset":if(!ut||K){C.touched=!1,C.dirty=!1,C.validatePromise=void 0,C.errors=Se,C.warnings=Se,C.triggerMetaEvent(),Vt==null||Vt(),C.refresh();return}break;case"remove":{if(Wt&&Te(Wt,Ge,wt,u,S,Pe)){C.reRender();return}break}case"setField":{var re=Pe.data;if(K){"touched"in re&&(C.touched=re.touched),"validating"in re&&!("originRCField"in re)&&(C.validatePromise=re.validating?Promise.resolve([]):null),"errors"in re&&(C.errors=re.errors||Se),"warnings"in re&&(C.warnings=re.warnings||Se),C.dirty=!0,C.triggerMetaEvent(),C.reRender();return}else if("value"in re&&te(ut,fn,!0)){C.reRender();return}if(Wt&&!fn.length&&Te(Wt,Ge,wt,u,S,Pe)){C.reRender();return}break}case"dependenciesUpdate":{var n=_t.map(H);if(n.some(function(a){return te(Pe.relatedFields,a)})){C.reRender();return}break}default:if(K||(!_t.length||fn.length||Wt)&&Te(Wt,Ge,wt,u,S,Pe)){C.reRender();return}break}Wt===!0&&C.reRender()}),(0,b.Z)((0,O.Z)(C),"validateRules",function(Ge){var ut=C.getNamePath(),Pe=C.getValue(),Lt=Ge||{},Wt=Lt.triggerName,gn=Lt.validateOnly,_t=gn===void 0?!1:gn,Vt=Promise.resolve().then((0,Z.Z)((0,j.Z)().mark(function wt(){var fn,u,S,K,re,n,a;return(0,j.Z)().wrap(function(P){for(;;)switch(P.prev=P.next){case 0:if(C.mounted){P.next=2;break}return P.abrupt("return",[]);case 2:if(fn=C.props,u=fn.validateFirst,S=u===void 0?!1:u,K=fn.messageVariables,re=fn.validateDebounce,n=C.getRules(),Wt&&(n=n.filter(function(ae){return ae}).filter(function(ae){var Ne=ae.validateTrigger;if(!Ne)return!0;var ze=Ae(Ne);return ze.includes(Wt)})),!(re&&Wt)){P.next=10;break}return P.next=8,new Promise(function(ae){setTimeout(ae,re)});case 8:if(C.validatePromise===Vt){P.next=10;break}return P.abrupt("return",[]);case 10:return a=ho(ut,Pe,n,Ge,S,K),a.catch(function(ae){return ae}).then(function(){var ae=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Se;if(C.validatePromise===Vt){var Ne;C.validatePromise=null;var ze=[],pt=[];(Ne=ae.forEach)===null||Ne===void 0||Ne.call(ae,function(at){var Ut=at.rule.warningOnly,Ht=at.errors,On=Ht===void 0?Se:Ht;Ut?pt.push.apply(pt,(0,R.Z)(On)):ze.push.apply(ze,(0,R.Z)(On))}),C.errors=ze,C.warnings=pt,C.triggerMetaEvent(),C.reRender()}}),P.abrupt("return",a);case 13:case"end":return P.stop()}},wt)})));return _t||(C.validatePromise=Vt,C.dirty=!0,C.errors=Se,C.warnings=Se,C.triggerMetaEvent(),C.reRender()),Vt}),(0,b.Z)((0,O.Z)(C),"isFieldValidating",function(){return!!C.validatePromise}),(0,b.Z)((0,O.Z)(C),"isFieldTouched",function(){return C.touched}),(0,b.Z)((0,O.Z)(C),"isFieldDirty",function(){if(C.dirty||C.props.initialValue!==void 0)return!0;var Ge=C.props.fieldContext,ut=Ge.getInternalHooks(ue),Pe=ut.getInitialValue;return Pe(C.getNamePath())!==void 0}),(0,b.Z)((0,O.Z)(C),"getErrors",function(){return C.errors}),(0,b.Z)((0,O.Z)(C),"getWarnings",function(){return C.warnings}),(0,b.Z)((0,O.Z)(C),"isListField",function(){return C.props.isListField}),(0,b.Z)((0,O.Z)(C),"isList",function(){return C.props.isList}),(0,b.Z)((0,O.Z)(C),"isPreserve",function(){return C.props.preserve}),(0,b.Z)((0,O.Z)(C),"getMeta",function(){C.prevValidating=C.isFieldValidating();var Ge={touched:C.isFieldTouched(),validating:C.prevValidating,errors:C.errors,warnings:C.warnings,name:C.getNamePath(),validated:C.validatePromise===null};return Ge}),(0,b.Z)((0,O.Z)(C),"getOnlyChild",function(Ge){if(typeof Ge=="function"){var ut=C.getMeta();return(0,A.Z)((0,A.Z)({},C.getOnlyChild(Ge(C.getControlled(),ut,C.props.fieldContext))),{},{isFunction:!0})}var Pe=(0,we.Z)(Ge);return Pe.length!==1||!r.isValidElement(Pe[0])?{child:Pe,isFunction:!1}:{child:Pe[0],isFunction:!1}}),(0,b.Z)((0,O.Z)(C),"getValue",function(Ge){var ut=C.props.fieldContext.getFieldsValue,Pe=C.getNamePath();return(0,F.Z)(Ge||ut(!0),Pe)}),(0,b.Z)((0,O.Z)(C),"getControlled",function(){var Ge=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},ut=C.props,Pe=ut.name,Lt=ut.trigger,Wt=ut.validateTrigger,gn=ut.getValueFromEvent,_t=ut.normalize,Vt=ut.valuePropName,wt=ut.getValueProps,fn=ut.fieldContext,u=Wt!==void 0?Wt:fn.validateTrigger,S=C.getNamePath(),K=fn.getInternalHooks,re=fn.getFieldsValue,n=K(ue),a=n.dispatch,N=C.getValue(),P=wt||function(at){return(0,b.Z)({},Vt,at)},ae=Ge[Lt],Ne=Pe!==void 0?P(N):{},ze=(0,A.Z)((0,A.Z)({},Ge),Ne);ze[Lt]=function(){C.touched=!0,C.dirty=!0,C.triggerMetaEvent();for(var at,Ut=arguments.length,Ht=new Array(Ut),On=0;On=0&&ae<=Ne.length?(Pe.keys=[].concat((0,R.Z)(Pe.keys.slice(0,ae)),[Pe.id],(0,R.Z)(Pe.keys.slice(ae))),S([].concat((0,R.Z)(Ne.slice(0,ae)),[P],(0,R.Z)(Ne.slice(ae))))):(Pe.keys=[].concat((0,R.Z)(Pe.keys),[Pe.id]),S([].concat((0,R.Z)(Ne),[P]))),Pe.id+=1},remove:function(P){var ae=re(),Ne=new Set(Array.isArray(P)?P:[P]);Ne.size<=0||(Pe.keys=Pe.keys.filter(function(ze,pt){return!Ne.has(pt)}),S(ae.filter(function(ze,pt){return!Ne.has(pt)})))},move:function(P,ae){if(P!==ae){var Ne=re();P<0||P>=Ne.length||ae<0||ae>=Ne.length||(Pe.keys=E(Pe.keys,P,ae),S(E(Ne,P,ae)))}}},a=u||[];return Array.isArray(a)||(a=[]),L(a.map(function(N,P){var ae=Pe.keys[P];return ae===void 0&&(Pe.keys[P]=Pe.id,ae=Pe.keys[P],Pe.id+=1),{name:P,key:ae,isListField:!0}}),n,wt)})))}var xt=ct,zt=s(97685);function Et(ie){var w=!1,m=ie.length,L=[];return ie.length?new Promise(function(C,ne){ie.forEach(function(fe,Re){fe.catch(function(Ge){return w=!0,Ge}).then(function(Ge){m-=1,L[Re]=Ge,!(m>0)&&(w&&ne(L),C(L))})})}):Promise.resolve([])}var $t="__@field_split__";function jt(ie){return ie.map(function(w){return"".concat((0,he.Z)(w),":").concat(w)}).join($t)}var Gt=function(){function ie(){(0,v.Z)(this,ie),(0,b.Z)(this,"kvs",new Map)}return(0,Y.Z)(ie,[{key:"set",value:function(m,L){this.kvs.set(jt(m),L)}},{key:"get",value:function(m){return this.kvs.get(jt(m))}},{key:"update",value:function(m,L){var C=this.get(m),ne=L(C);ne?this.set(m,ne):this.delete(m)}},{key:"delete",value:function(m){this.kvs.delete(jt(m))}},{key:"map",value:function(m){return(0,R.Z)(this.kvs.entries()).map(function(L){var C=(0,zt.Z)(L,2),ne=C[0],fe=C[1],Re=ne.split($t);return m({key:Re.map(function(Ge){var ut=Ge.match(/^([^:]*):(.*)$/),Pe=(0,zt.Z)(ut,3),Lt=Pe[1],Wt=Pe[2];return Lt==="number"?Number(Wt):Wt}),value:fe})})}},{key:"toJSON",value:function(){var m={};return this.map(function(L){var C=L.key,ne=L.value;return m[C.join(".")]=ne,null}),m}}]),ie}(),Rt=Gt,xn=["name"],en=(0,Y.Z)(function ie(w){var m=this;(0,v.Z)(this,ie),(0,b.Z)(this,"formHooked",!1),(0,b.Z)(this,"forceRootUpdate",void 0),(0,b.Z)(this,"subscribable",!0),(0,b.Z)(this,"store",{}),(0,b.Z)(this,"fieldEntities",[]),(0,b.Z)(this,"initialValues",{}),(0,b.Z)(this,"callbacks",{}),(0,b.Z)(this,"validateMessages",null),(0,b.Z)(this,"preserve",null),(0,b.Z)(this,"lastValidatePromise",null),(0,b.Z)(this,"getForm",function(){return{getFieldValue:m.getFieldValue,getFieldsValue:m.getFieldsValue,getFieldError:m.getFieldError,getFieldWarning:m.getFieldWarning,getFieldsError:m.getFieldsError,isFieldsTouched:m.isFieldsTouched,isFieldTouched:m.isFieldTouched,isFieldValidating:m.isFieldValidating,isFieldsValidating:m.isFieldsValidating,resetFields:m.resetFields,setFields:m.setFields,setFieldValue:m.setFieldValue,setFieldsValue:m.setFieldsValue,validateFields:m.validateFields,submit:m.submit,_init:!0,getInternalHooks:m.getInternalHooks}}),(0,b.Z)(this,"getInternalHooks",function(L){return L===ue?(m.formHooked=!0,{dispatch:m.dispatch,initEntityValue:m.initEntityValue,registerField:m.registerField,useSubscribe:m.useSubscribe,setInitialValues:m.setInitialValues,destroyForm:m.destroyForm,setCallbacks:m.setCallbacks,setValidateMessages:m.setValidateMessages,getFields:m.getFields,setPreserve:m.setPreserve,getInitialValue:m.getInitialValue,registerWatch:m.registerWatch}):((0,J.ZP)(!1,"`getInternalHooks` is internal usage. Should not call directly."),null)}),(0,b.Z)(this,"useSubscribe",function(L){m.subscribable=L}),(0,b.Z)(this,"prevWithoutPreserves",null),(0,b.Z)(this,"setInitialValues",function(L,C){if(m.initialValues=L||{},C){var ne,fe=(0,Dr.T)(L,m.store);(ne=m.prevWithoutPreserves)===null||ne===void 0||ne.map(function(Re){var Ge=Re.key;fe=(0,Dr.Z)(fe,Ge,(0,F.Z)(L,Ge))}),m.prevWithoutPreserves=null,m.updateStore(fe)}}),(0,b.Z)(this,"destroyForm",function(L){if(L)m.updateStore({});else{var C=new Rt;m.getFieldEntities(!0).forEach(function(ne){m.isMergedPreserve(ne.isPreserve())||C.set(ne.getNamePath(),!0)}),m.prevWithoutPreserves=C}}),(0,b.Z)(this,"getInitialValue",function(L){var C=(0,F.Z)(m.initialValues,L);return L.length?(0,Dr.T)(C):C}),(0,b.Z)(this,"setCallbacks",function(L){m.callbacks=L}),(0,b.Z)(this,"setValidateMessages",function(L){m.validateMessages=L}),(0,b.Z)(this,"setPreserve",function(L){m.preserve=L}),(0,b.Z)(this,"watchList",[]),(0,b.Z)(this,"registerWatch",function(L){return m.watchList.push(L),function(){m.watchList=m.watchList.filter(function(C){return C!==L})}}),(0,b.Z)(this,"notifyWatch",function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];if(m.watchList.length){var C=m.getFieldsValue(),ne=m.getFieldsValue(!0);m.watchList.forEach(function(fe){fe(C,ne,L)})}}),(0,b.Z)(this,"timeoutId",null),(0,b.Z)(this,"warningUnhooked",function(){}),(0,b.Z)(this,"updateStore",function(L){m.store=L}),(0,b.Z)(this,"getFieldEntities",function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;return L?m.fieldEntities.filter(function(C){return C.getNamePath().length}):m.fieldEntities}),(0,b.Z)(this,"getFieldsMap",function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,C=new Rt;return m.getFieldEntities(L).forEach(function(ne){var fe=ne.getNamePath();C.set(fe,ne)}),C}),(0,b.Z)(this,"getFieldEntitiesForNamePathList",function(L){if(!L)return m.getFieldEntities(!0);var C=m.getFieldsMap(!0);return L.map(function(ne){var fe=H(ne);return C.get(fe)||{INVALIDATE_NAME_PATH:H(ne)}})}),(0,b.Z)(this,"getFieldsValue",function(L,C){m.warningUnhooked();var ne,fe,Re;if(L===!0||Array.isArray(L)?(ne=L,fe=C):L&&(0,he.Z)(L)==="object"&&(Re=L.strict,fe=L.filter),ne===!0&&!fe)return m.store;var Ge=m.getFieldEntitiesForNamePathList(Array.isArray(ne)?ne:null),ut=[];return Ge.forEach(function(Pe){var Lt,Wt,gn="INVALIDATE_NAME_PATH"in Pe?Pe.INVALIDATE_NAME_PATH:Pe.getNamePath();if(Re){var _t,Vt;if((_t=(Vt=Pe).isList)!==null&&_t!==void 0&&_t.call(Vt))return}else if(!ne&&(Lt=(Wt=Pe).isListField)!==null&&Lt!==void 0&&Lt.call(Wt))return;if(!fe)ut.push(gn);else{var wt="getMeta"in Pe?Pe.getMeta():null;fe(wt)&&ut.push(gn)}}),ee(m.store,ut.map(H))}),(0,b.Z)(this,"getFieldValue",function(L){m.warningUnhooked();var C=H(L);return(0,F.Z)(m.store,C)}),(0,b.Z)(this,"getFieldsError",function(L){m.warningUnhooked();var C=m.getFieldEntitiesForNamePathList(L);return C.map(function(ne,fe){return ne&&!("INVALIDATE_NAME_PATH"in ne)?{name:ne.getNamePath(),errors:ne.getErrors(),warnings:ne.getWarnings()}:{name:H(L[fe]),errors:[],warnings:[]}})}),(0,b.Z)(this,"getFieldError",function(L){m.warningUnhooked();var C=H(L),ne=m.getFieldsError([C])[0];return ne.errors}),(0,b.Z)(this,"getFieldWarning",function(L){m.warningUnhooked();var C=H(L),ne=m.getFieldsError([C])[0];return ne.warnings}),(0,b.Z)(this,"isFieldsTouched",function(){m.warningUnhooked();for(var L=arguments.length,C=new Array(L),ne=0;ne0&&arguments[0]!==void 0?arguments[0]:{},C=new Rt,ne=m.getFieldEntities(!0);ne.forEach(function(Ge){var ut=Ge.props.initialValue,Pe=Ge.getNamePath();if(ut!==void 0){var Lt=C.get(Pe)||new Set;Lt.add({entity:Ge,value:ut}),C.set(Pe,Lt)}});var fe=function(ut){ut.forEach(function(Pe){var Lt=Pe.props.initialValue;if(Lt!==void 0){var Wt=Pe.getNamePath(),gn=m.getInitialValue(Wt);if(gn!==void 0)(0,J.ZP)(!1,"Form already set 'initialValues' with path '".concat(Wt.join("."),"'. Field can not overwrite it."));else{var _t=C.get(Wt);if(_t&&_t.size>1)(0,J.ZP)(!1,"Multiple Field with path '".concat(Wt.join("."),"' set 'initialValue'. Can not decide which one to pick."));else if(_t){var Vt=m.getFieldValue(Wt),wt=Pe.isListField();!wt&&(!L.skipExist||Vt===void 0)&&m.updateStore((0,Dr.Z)(m.store,Wt,(0,R.Z)(_t)[0].value))}}}})},Re;L.entities?Re=L.entities:L.namePathList?(Re=[],L.namePathList.forEach(function(Ge){var ut=C.get(Ge);if(ut){var Pe;(Pe=Re).push.apply(Pe,(0,R.Z)((0,R.Z)(ut).map(function(Lt){return Lt.entity})))}})):Re=ne,fe(Re)}),(0,b.Z)(this,"resetFields",function(L){m.warningUnhooked();var C=m.store;if(!L){m.updateStore((0,Dr.T)(m.initialValues)),m.resetWithFieldInitialValue(),m.notifyObservers(C,null,{type:"reset"}),m.notifyWatch();return}var ne=L.map(H);ne.forEach(function(fe){var Re=m.getInitialValue(fe);m.updateStore((0,Dr.Z)(m.store,fe,Re))}),m.resetWithFieldInitialValue({namePathList:ne}),m.notifyObservers(C,ne,{type:"reset"}),m.notifyWatch(ne)}),(0,b.Z)(this,"setFields",function(L){m.warningUnhooked();var C=m.store,ne=[];L.forEach(function(fe){var Re=fe.name,Ge=(0,X.Z)(fe,xn),ut=H(Re);ne.push(ut),"value"in Ge&&m.updateStore((0,Dr.Z)(m.store,ut,Ge.value)),m.notifyObservers(C,[ut],{type:"setField",data:fe})}),m.notifyWatch(ne)}),(0,b.Z)(this,"getFields",function(){var L=m.getFieldEntities(!0),C=L.map(function(ne){var fe=ne.getNamePath(),Re=ne.getMeta(),Ge=(0,A.Z)((0,A.Z)({},Re),{},{name:fe,value:m.getFieldValue(fe)});return Object.defineProperty(Ge,"originRCField",{value:!0}),Ge});return C}),(0,b.Z)(this,"initEntityValue",function(L){var C=L.props.initialValue;if(C!==void 0){var ne=L.getNamePath(),fe=(0,F.Z)(m.store,ne);fe===void 0&&m.updateStore((0,Dr.Z)(m.store,ne,C))}}),(0,b.Z)(this,"isMergedPreserve",function(L){var C=L!==void 0?L:m.preserve;return C!=null?C:!0}),(0,b.Z)(this,"registerField",function(L){m.fieldEntities.push(L);var C=L.getNamePath();if(m.notifyWatch([C]),L.props.initialValue!==void 0){var ne=m.store;m.resetWithFieldInitialValue({entities:[L],skipExist:!0}),m.notifyObservers(ne,[L.getNamePath()],{type:"valueUpdate",source:"internal"})}return function(fe,Re){var Ge=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];if(m.fieldEntities=m.fieldEntities.filter(function(Lt){return Lt!==L}),!m.isMergedPreserve(Re)&&(!fe||Ge.length>1)){var ut=fe?void 0:m.getInitialValue(C);if(C.length&&m.getFieldValue(C)!==ut&&m.fieldEntities.every(function(Lt){return!me(Lt.getNamePath(),C)})){var Pe=m.store;m.updateStore((0,Dr.Z)(Pe,C,ut,!0)),m.notifyObservers(Pe,[C],{type:"remove"}),m.triggerDependenciesUpdate(Pe,C)}}m.notifyWatch([C])}}),(0,b.Z)(this,"dispatch",function(L){switch(L.type){case"updateValue":{var C=L.namePath,ne=L.value;m.updateValue(C,ne);break}case"validateField":{var fe=L.namePath,Re=L.triggerName;m.validateFields([fe],{triggerName:Re});break}default:}}),(0,b.Z)(this,"notifyObservers",function(L,C,ne){if(m.subscribable){var fe=(0,A.Z)((0,A.Z)({},ne),{},{store:m.getFieldsValue(!0)});m.getFieldEntities().forEach(function(Re){var Ge=Re.onStoreChange;Ge(L,C,fe)})}else m.forceRootUpdate()}),(0,b.Z)(this,"triggerDependenciesUpdate",function(L,C){var ne=m.getDependencyChildrenFields(C);return ne.length&&m.validateFields(ne),m.notifyObservers(L,ne,{type:"dependenciesUpdate",relatedFields:[C].concat((0,R.Z)(ne))}),ne}),(0,b.Z)(this,"updateValue",function(L,C){var ne=H(L),fe=m.store;m.updateStore((0,Dr.Z)(m.store,ne,C)),m.notifyObservers(fe,[ne],{type:"valueUpdate",source:"internal"}),m.notifyWatch([ne]);var Re=m.triggerDependenciesUpdate(fe,ne),Ge=m.callbacks.onValuesChange;if(Ge){var ut=ee(m.store,[ne]);Ge(ut,m.getFieldsValue())}m.triggerOnFieldsChange([ne].concat((0,R.Z)(Re)))}),(0,b.Z)(this,"setFieldsValue",function(L){m.warningUnhooked();var C=m.store;if(L){var ne=(0,Dr.T)(m.store,L);m.updateStore(ne)}m.notifyObservers(C,null,{type:"valueUpdate",source:"external"}),m.notifyWatch()}),(0,b.Z)(this,"setFieldValue",function(L,C){m.setFields([{name:L,value:C}])}),(0,b.Z)(this,"getDependencyChildrenFields",function(L){var C=new Set,ne=[],fe=new Rt;m.getFieldEntities().forEach(function(Ge){var ut=Ge.props.dependencies;(ut||[]).forEach(function(Pe){var Lt=H(Pe);fe.update(Lt,function(){var Wt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new Set;return Wt.add(Ge),Wt})})});var Re=function Ge(ut){var Pe=fe.get(ut)||new Set;Pe.forEach(function(Lt){if(!C.has(Lt)){C.add(Lt);var Wt=Lt.getNamePath();Lt.isFieldDirty()&&Wt.length&&(ne.push(Wt),Ge(Wt))}})};return Re(L),ne}),(0,b.Z)(this,"triggerOnFieldsChange",function(L,C){var ne=m.callbacks.onFieldsChange;if(ne){var fe=m.getFields();if(C){var Re=new Rt;C.forEach(function(ut){var Pe=ut.name,Lt=ut.errors;Re.set(Pe,Lt)}),fe.forEach(function(ut){ut.errors=Re.get(ut.name)||ut.errors})}var Ge=fe.filter(function(ut){var Pe=ut.name;return te(L,Pe)});Ge.length&&ne(Ge,fe)}}),(0,b.Z)(this,"validateFields",function(L,C){m.warningUnhooked();var ne,fe;Array.isArray(L)||typeof L=="string"||typeof C=="string"?(ne=L,fe=C):fe=L;var Re=!!ne,Ge=Re?ne.map(H):[],ut=[],Pe=String(Date.now()),Lt=new Set,Wt=fe||{},gn=Wt.recursive,_t=Wt.dirty;m.getFieldEntities(!0).forEach(function(u){if(Re||Ge.push(u.getNamePath()),!(!u.props.rules||!u.props.rules.length)&&!(_t&&!u.isFieldDirty())){var S=u.getNamePath();if(Lt.add(S.join(Pe)),!Re||te(Ge,S,gn)){var K=u.validateRules((0,A.Z)({validateMessages:(0,A.Z)((0,A.Z)({},po),m.validateMessages)},fe));ut.push(K.then(function(){return{name:S,errors:[],warnings:[]}}).catch(function(re){var n,a=[],N=[];return(n=re.forEach)===null||n===void 0||n.call(re,function(P){var ae=P.rule.warningOnly,Ne=P.errors;ae?N.push.apply(N,(0,R.Z)(Ne)):a.push.apply(a,(0,R.Z)(Ne))}),a.length?Promise.reject({name:S,errors:a,warnings:N}):{name:S,errors:a,warnings:N}}))}}});var Vt=Et(ut);m.lastValidatePromise=Vt,Vt.catch(function(u){return u}).then(function(u){var S=u.map(function(K){var re=K.name;return re});m.notifyObservers(m.store,S,{type:"validateFinish"}),m.triggerOnFieldsChange(S,u)});var wt=Vt.then(function(){return m.lastValidatePromise===Vt?Promise.resolve(m.getFieldsValue(Ge)):Promise.reject([])}).catch(function(u){var S=u.filter(function(K){return K&&K.errors.length});return Promise.reject({values:m.getFieldsValue(Ge),errorFields:S,outOfDate:m.lastValidatePromise!==Vt})});wt.catch(function(u){return u});var fn=Ge.filter(function(u){return Lt.has(u.join(Pe))});return m.triggerOnFieldsChange(fn),wt}),(0,b.Z)(this,"submit",function(){m.warningUnhooked(),m.validateFields().then(function(L){var C=m.callbacks.onFinish;if(C)try{C(L)}catch(ne){console.error(ne)}}).catch(function(L){var C=m.callbacks.onFinishFailed;C&&C(L)})}),this.forceRootUpdate=w});function ln(ie){var w=r.useRef(),m=r.useState({}),L=(0,zt.Z)(m,2),C=L[1];if(!w.current)if(ie)w.current=ie;else{var ne=function(){C({})},fe=new en(ne);w.current=fe.getForm()}return[w.current]}var an=ln,bn=r.createContext({triggerFormChange:function(){},triggerFormFinish:function(){},registerForm:function(){},unregisterForm:function(){}}),_n=function(w){var m=w.validateMessages,L=w.onFormChange,C=w.onFormFinish,ne=w.children,fe=r.useContext(bn),Re=r.useRef({});return r.createElement(bn.Provider,{value:(0,A.Z)((0,A.Z)({},fe),{},{validateMessages:(0,A.Z)((0,A.Z)({},fe.validateMessages),m),triggerFormChange:function(ut,Pe){L&&L(ut,{changedFields:Pe,forms:Re.current}),fe.triggerFormChange(ut,Pe)},triggerFormFinish:function(ut,Pe){C&&C(ut,{values:Pe,forms:Re.current}),fe.triggerFormFinish(ut,Pe)},registerForm:function(ut,Pe){ut&&(Re.current=(0,A.Z)((0,A.Z)({},Re.current),{},(0,b.Z)({},ut,Pe))),fe.registerForm(ut,Pe)},unregisterForm:function(ut){var Pe=(0,A.Z)({},Re.current);delete Pe[ut],Re.current=Pe,fe.unregisterForm(ut)}})},ne)},Pn=bn,Bn=["name","initialValues","fields","form","preserve","children","component","validateMessages","validateTrigger","onValuesChange","onFieldsChange","onFinish","onFinishFailed","clearOnDestroy"],rn=function(w,m){var L=w.name,C=w.initialValues,ne=w.fields,fe=w.form,Re=w.preserve,Ge=w.children,ut=w.component,Pe=ut===void 0?"form":ut,Lt=w.validateMessages,Wt=w.validateTrigger,gn=Wt===void 0?"onChange":Wt,_t=w.onValuesChange,Vt=w.onFieldsChange,wt=w.onFinish,fn=w.onFinishFailed,u=w.clearOnDestroy,S=(0,X.Z)(w,Bn),K=r.useRef(null),re=r.useContext(Pn),n=an(fe),a=(0,zt.Z)(n,1),N=a[0],P=N.getInternalHooks(ue),ae=P.useSubscribe,Ne=P.setInitialValues,ze=P.setCallbacks,pt=P.setValidateMessages,at=P.setPreserve,Ut=P.destroyForm;r.useImperativeHandle(m,function(){return(0,A.Z)((0,A.Z)({},N),{},{nativeElement:K.current})}),r.useEffect(function(){return re.registerForm(L,N),function(){re.unregisterForm(L)}},[re,N,L]),pt((0,A.Z)((0,A.Z)({},re.validateMessages),Lt)),ze({onValuesChange:_t,onFieldsChange:function(Yt){if(re.triggerFormChange(L,Yt),Vt){for(var dn=arguments.length,Vn=new Array(dn>1?dn-1:0),f=1;f{}}),ar=null,Or=ie=>{const w=omit(ie,["prefixCls"]);return React.createElement(RcFormProvider,Object.assign({},w))},Qn=r.createContext({prefixCls:""}),br=r.createContext({}),lr=ie=>{let{children:w,status:m,override:L}=ie;const C=(0,r.useContext)(br),ne=(0,r.useMemo)(()=>{const fe=Object.assign({},C);return L&&delete fe.isFormItemInput,m&&(delete fe.status,delete fe.hasFeedback,delete fe.feedbackIcon),fe},[m,L,C]);return r.createElement(br.Provider,{value:ne},w)},Wn=(0,r.createContext)(void 0)},8231:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return re}});var r=s(74902),y=s(67294),X=s(93967),j=s.n(X),A=function(){const n=Object.assign({},arguments.length<=0?void 0:arguments[0]);for(let a=1;a{const ae=N[P];ae!==void 0&&(n[P]=ae)})}return n},R=s(25976);const v=["xxl","xl","lg","md","sm","xs"],Y=n=>({xs:`(max-width: ${n.screenXSMax}px)`,sm:`(min-width: ${n.screenSM}px)`,md:`(min-width: ${n.screenMD}px)`,lg:`(min-width: ${n.screenLG}px)`,xl:`(min-width: ${n.screenXL}px)`,xxl:`(min-width: ${n.screenXXL}px)`}),O=n=>{const a=n,N=[].concat(v).reverse();return N.forEach((P,ae)=>{const Ne=P.toUpperCase(),ze=`screen${Ne}Min`,pt=`screen${Ne}`;if(!(a[ze]<=a[pt]))throw new Error(`${ze}<=${pt} fails : !(${a[ze]}<=${a[pt]})`);if(ae{const N=new Map;let P=-1,ae={};return{matchHandlers:{},dispatch(Ne){return ae=Ne,N.forEach(ze=>ze(ae)),N.size>=1},subscribe(Ne){return N.size||this.register(),P+=1,N.set(P,Ne),Ne(ae),P},unsubscribe(Ne){N.delete(Ne),N.size||this.unregister()},unregister(){Object.keys(a).forEach(Ne=>{const ze=a[Ne],pt=this.matchHandlers[ze];pt==null||pt.mql.removeListener(pt==null?void 0:pt.listener)}),N.clear()},register(){Object.keys(a).forEach(Ne=>{const ze=a[Ne],pt=Ut=>{let{matches:Ht}=Ut;this.dispatch(Object.assign(Object.assign({},ae),{[Ne]:Ht}))},at=window.matchMedia(ze);at.addListener(pt),this.matchHandlers[ze]={mql:at,listener:pt},pt(at)})},responsiveMap:a}},[n])}const T=(n,a)=>{if(a&&typeof a=="object")for(let N=0;N{const{componentCls:a}=n;return{[a]:{display:"flex",flexFlow:"row wrap",minWidth:0,"&::before, &::after":{display:"flex"},"&-no-wrap":{flexWrap:"nowrap"},"&-start":{justifyContent:"flex-start"},"&-center":{justifyContent:"center"},"&-end":{justifyContent:"flex-end"},"&-space-between":{justifyContent:"space-between"},"&-space-around":{justifyContent:"space-around"},"&-space-evenly":{justifyContent:"space-evenly"},"&-top":{alignItems:"flex-start"},"&-middle":{alignItems:"center"},"&-bottom":{alignItems:"flex-end"}}}},vt=n=>{const{componentCls:a}=n;return{[a]:{position:"relative",maxWidth:"100%",minHeight:1}}},Ae=(n,a)=>{const{prefixCls:N,componentCls:P,gridColumns:ae}=n,Ne={};for(let ze=ae;ze>=0;ze--)ze===0?(Ne[`${P}${a}-${ze}`]={display:"none"},Ne[`${P}-push-${ze}`]={insetInlineStart:"auto"},Ne[`${P}-pull-${ze}`]={insetInlineEnd:"auto"},Ne[`${P}${a}-push-${ze}`]={insetInlineStart:"auto"},Ne[`${P}${a}-pull-${ze}`]={insetInlineEnd:"auto"},Ne[`${P}${a}-offset-${ze}`]={marginInlineStart:0},Ne[`${P}${a}-order-${ze}`]={order:0}):(Ne[`${P}${a}-${ze}`]=[{"--ant-display":"block",display:"block"},{display:"var(--ant-display)",flex:`0 0 ${ze/ae*100}%`,maxWidth:`${ze/ae*100}%`}],Ne[`${P}${a}-push-${ze}`]={insetInlineStart:`${ze/ae*100}%`},Ne[`${P}${a}-pull-${ze}`]={insetInlineEnd:`${ze/ae*100}%`},Ne[`${P}${a}-offset-${ze}`]={marginInlineStart:`${ze/ae*100}%`},Ne[`${P}${a}-order-${ze}`]={order:ze});return Ne[`${P}${a}-flex`]={flex:`var(--${N}${a}-flex)`},Ne},V=(n,a)=>Ae(n,a),he=(n,a,N)=>({[`@media (min-width: ${(0,_.bf)(a)})`]:Object.assign({},V(n,N))}),q=()=>({}),D=()=>({}),U=(0,Be.I$)("Grid",Bt,q),Oe=(0,Be.I$)("Grid",n=>{const a=(0,Le.IX)(n,{gridColumns:24}),N={"-sm":a.screenSMMin,"-md":a.screenMDMin,"-lg":a.screenLGMin,"-xl":a.screenXLMin,"-xxl":a.screenXXLMin};return[vt(a),V(a,""),V(a,"-xs"),Object.keys(N).map(P=>he(a,N[P],P)).reduce((P,ae)=>Object.assign(Object.assign({},P),ae),{})]},D);var He=function(n,a){var N={};for(var P in n)Object.prototype.hasOwnProperty.call(n,P)&&a.indexOf(P)<0&&(N[P]=n[P]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var ae=0,P=Object.getOwnPropertySymbols(n);ae{if(typeof n=="string"&&P(n),typeof n=="object")for(let Ne=0;Ne{ae()},[JSON.stringify(n),a]),N}var g=y.forwardRef((n,a)=>{const{prefixCls:N,justify:P,align:ae,className:Ne,style:ze,children:pt,gutter:at=0,wrap:Ut}=n,Ht=He(n,["prefixCls","justify","align","className","style","children","gutter","wrap"]),{getPrefixCls:On,direction:on}=y.useContext(b.E_),[Hn,Tn]=y.useState({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),[Gn,Sn]=y.useState({xs:!1,sm:!1,md:!1,lg:!1,xl:!1,xxl:!1}),Jt=ft(ae,Gn),Yt=ft(P,Gn),dn=y.useRef(at),Vn=$();y.useEffect(()=>{const Xt=Vn.subscribe(st=>{Sn(st);const M=dn.current||0;(!Array.isArray(M)&&typeof M=="object"||Array.isArray(M)&&(typeof M[0]=="object"||typeof M[1]=="object"))&&Tn(st)});return()=>Vn.unsubscribe(Xt)},[]);const f=()=>{const Xt=[void 0,void 0];return(Array.isArray(at)?at:[at,void 0]).forEach((M,G)=>{if(typeof M=="object")for(let B=0;B0?it[0]/-2:void 0;Dt&&(Ot.marginLeft=Dt,Ot.marginRight=Dt);const[Tt,Zt]=it;Ot.rowGap=Zt;const At=y.useMemo(()=>({gutter:[Tt,Zt],wrap:Ut}),[Tt,Zt,Ut]);return oe(y.createElement(ue.Provider,{value:At},y.createElement("div",Object.assign({},Ht,{className:bt,style:Object.assign(Object.assign({},Ot),ze),ref:a}),pt)))}),de=s(8410);function ce(){const[,n]=y.useReducer(a=>a+1,0);return n}function be(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;const a=(0,y.useRef)({}),N=ce(),P=$();return(0,de.Z)(()=>{const ae=P.subscribe(Ne=>{a.current=Ne,n&&N()});return()=>P.unsubscribe(ae)},[]),a.current}var Me=be,$e=s(87462),yt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M272.9 512l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L186.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H532c6.7 0 10.4-7.7 6.3-12.9L272.9 512zm304 0l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L490.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H836c6.7 0 10.4-7.7 6.3-12.9L576.9 512z"}}]},name:"double-left",theme:"outlined"},Qt=yt,nn=s(42135),vn=function(a,N){return y.createElement(nn.Z,(0,$e.Z)({},a,{ref:N,icon:Qt}))},Ln=y.forwardRef(vn),ht=Ln,z={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z"}}]},name:"double-right",theme:"outlined"},se=z,Ye=function(a,N){return y.createElement(nn.Z,(0,$e.Z)({},a,{ref:N,icon:se}))},De=y.forwardRef(Ye),xe=De,je={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z"}}]},name:"left",theme:"outlined"},It=je,cn=function(a,N){return y.createElement(nn.Z,(0,$e.Z)({},a,{ref:N,icon:It}))},Fn=y.forwardRef(cn),Nn=Fn,qn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z"}}]},name:"right",theme:"outlined"},or=qn,dr=function(a,N){return y.createElement(nn.Z,(0,$e.Z)({},a,{ref:N,icon:or}))},Zn=y.forwardRef(dr),jn=Zn,mn=s(4942),Ft=s(71002),Ct=s(1413),Mt=s(97685),tn=s(21770),qt=s(15105),un=s(64217),hn=s(80334),gt={items_per_page:"\u6761/\u9875",jump_to:"\u8DF3\u81F3",jump_to_confirm:"\u786E\u5B9A",page:"\u9875",prev_page:"\u4E0A\u4E00\u9875",next_page:"\u4E0B\u4E00\u9875",prev_5:"\u5411\u524D 5 \u9875",next_5:"\u5411\u540E 5 \u9875",prev_3:"\u5411\u524D 3 \u9875",next_3:"\u5411\u540E 3 \u9875",page_size:"\u9875\u7801"},tt=gt,Ke=["10","20","50","100"],mr=function(a){var N=a.pageSizeOptions,P=N===void 0?Ke:N,ae=a.locale,Ne=a.changeSize,ze=a.pageSize,pt=a.goButton,at=a.quickGo,Ut=a.rootPrefixCls,Ht=a.selectComponentClass,On=a.selectPrefixCls,on=a.disabled,Hn=a.buildOptionText,Tn=a.showSizeChanger,Gn=y.useState(""),Sn=(0,Mt.Z)(Gn,2),Jt=Sn[0],Yt=Sn[1],dn=function(){return!Jt||Number.isNaN(Jt)?void 0:Number(Jt)},Vn=typeof Hn=="function"?Hn:function(st){return"".concat(st," ").concat(ae.items_per_page)},f=function(M,G){if(Ne==null||Ne(Number(M)),(0,Ft.Z)(Tn)==="object"){var B;(B=Tn.onChange)===null||B===void 0||B.call(Tn,M,G)}},I=function(M){Yt(M.target.value)},oe=function(M){pt||Jt===""||(Yt(""),!(M.relatedTarget&&(M.relatedTarget.className.indexOf("".concat(Ut,"-item-link"))>=0||M.relatedTarget.className.indexOf("".concat(Ut,"-item"))>=0))&&(at==null||at(dn())))},ve=function(M){Jt!==""&&(M.keyCode===qt.Z.ENTER||M.type==="click")&&(Yt(""),at==null||at(dn()))},Ie=function(){return P.some(function(M){return M.toString()===ze.toString()})?P:P.concat([ze.toString()]).sort(function(M,G){var B=Number.isNaN(Number(M))?0:Number(M),le=Number.isNaN(Number(G))?0:Number(G);return B-le})},it="".concat(Ut,"-options");if(!Tn&&!at)return null;var bt=null,Ot=null,Dt=null;if(Tn&&Ht){var Tt=(0,Ft.Z)(Tn)==="object"?Tn:{},Zt=Tt.options,At=Tt.className,Xt=Zt?void 0:Ie().map(function(st,M){return y.createElement(Ht.Option,{key:M,value:st.toString()},Vn(st))});bt=y.createElement(Ht,(0,$e.Z)({disabled:on,prefixCls:On,showSearch:!1,optionLabelProp:Zt?"label":"children",popupMatchSelectWidth:!1,value:(ze||P[0]).toString(),getPopupContainer:function(M){return M.parentNode},"aria-label":ae.page_size,defaultOpen:!1},(0,Ft.Z)(Tn)==="object"?Tn:null,{className:j()("".concat(it,"-size-changer"),At),options:Zt,onChange:f}),Xt)}return at&&(pt&&(Dt=typeof pt=="boolean"?y.createElement("button",{type:"button",onClick:ve,onKeyUp:ve,disabled:on,className:"".concat(it,"-quick-jumper-button")},ae.jump_to_confirm):y.createElement("span",{onClick:ve,onKeyUp:ve},pt)),Ot=y.createElement("div",{className:"".concat(it,"-quick-jumper")},ae.jump_to,y.createElement("input",{disabled:on,type:"text",value:Jt,onChange:I,onKeyUp:ve,onBlur:oe,"aria-label":ae.page}),ae.page,Dt)),y.createElement("li",{className:it},bt,Ot)},rr=mr,yr=function(a){var N=a.rootPrefixCls,P=a.page,ae=a.active,Ne=a.className,ze=a.showTitle,pt=a.onClick,at=a.onKeyPress,Ut=a.itemRender,Ht="".concat(N,"-item"),On=j()(Ht,"".concat(Ht,"-").concat(P),(0,mn.Z)((0,mn.Z)({},"".concat(Ht,"-active"),ae),"".concat(Ht,"-disabled"),!P),Ne),on=function(){pt(P)},Hn=function(Sn){at(Sn,pt,P)},Tn=Ut(P,"page",y.createElement("a",{rel:"nofollow"},P));return Tn?y.createElement("li",{title:ze?String(P):null,className:On,onClick:on,onKeyDown:Hn,tabIndex:0},Tn):null},Sr=yr,pr=function(a,N,P){return P};function Xn(){}function Lr(n){var a=Number(n);return typeof a=="number"&&!Number.isNaN(a)&&isFinite(a)&&Math.floor(a)===a}function Mr(n,a,N){var P=typeof n=="undefined"?a:n;return Math.floor((N-1)/P)+1}var Nr=function(a){var N=a.prefixCls,P=N===void 0?"rc-pagination":N,ae=a.selectPrefixCls,Ne=ae===void 0?"rc-select":ae,ze=a.className,pt=a.selectComponentClass,at=a.current,Ut=a.defaultCurrent,Ht=Ut===void 0?1:Ut,On=a.total,on=On===void 0?0:On,Hn=a.pageSize,Tn=a.defaultPageSize,Gn=Tn===void 0?10:Tn,Sn=a.onChange,Jt=Sn===void 0?Xn:Sn,Yt=a.hideOnSinglePage,dn=a.align,Vn=a.showPrevNextJumpers,f=Vn===void 0?!0:Vn,I=a.showQuickJumper,oe=a.showLessItems,ve=a.showTitle,Ie=ve===void 0?!0:ve,it=a.onShowSizeChange,bt=it===void 0?Xn:it,Ot=a.locale,Dt=Ot===void 0?tt:Ot,Tt=a.style,Zt=a.totalBoundaryShowSizeChanger,At=Zt===void 0?50:Zt,Xt=a.disabled,st=a.simple,M=a.showTotal,G=a.showSizeChanger,B=G===void 0?on>At:G,le=a.pageSizeOptions,Ce=a.itemRender,Ue=Ce===void 0?pr:Ce,ot=a.jumpPrevIcon,dt=a.jumpNextIcon,lt=a.prevIcon,l=a.nextIcon,d=y.useRef(null),p=(0,tn.Z)(10,{value:Hn,defaultValue:Gn}),x=(0,Mt.Z)(p,2),W=x[0],ge=x[1],Ee=(0,tn.Z)(1,{value:at,defaultValue:Ht,postState:function(xr){return Math.max(1,Math.min(xr,Mr(void 0,W,on)))}}),et=(0,Mt.Z)(Ee,2),Ze=et[0],_e=et[1],mt=y.useState(Ze),qe=(0,Mt.Z)(mt,2),rt=qe[0],ke=qe[1];(0,y.useEffect)(function(){ke(Ze)},[Ze]);var St=Jt!==Xn,kt="current"in a,pn=Math.max(1,Ze-(oe?3:5)),In=Math.min(Mr(void 0,W,on),Ze+(oe?3:5));function $n(zn,xr){var jr=zn||y.createElement("button",{type:"button","aria-label":xr,className:"".concat(P,"-item-link")});return typeof zn=="function"&&(jr=y.createElement(zn,(0,Ct.Z)({},a))),jr}function ir(zn){var xr=zn.target.value,jr=Mr(void 0,W,on),Lo;return xr===""?Lo=xr:Number.isNaN(Number(xr))?Lo=rt:xr>=jr?Lo=jr:Lo=Number(xr),Lo}function Un(zn){return Lr(zn)&&zn!==Ze&&Lr(on)&&on>0}var sr=on>W?I:!1;function tr(zn){(zn.keyCode===qt.Z.UP||zn.keyCode===qt.Z.DOWN)&&zn.preventDefault()}function Kt(zn){var xr=ir(zn);switch(xr!==rt&&ke(xr),zn.keyCode){case qt.Z.ENTER:kn(xr);break;case qt.Z.UP:kn(xr-1);break;case qt.Z.DOWN:kn(xr+1);break;default:break}}function Rn(zn){kn(ir(zn))}function nr(zn){var xr=Mr(zn,W,on),jr=Ze>xr&&xr!==0?xr:Ze;ge(zn),ke(jr),bt==null||bt(Ze,zn),_e(jr),Jt==null||Jt(jr,zn)}function kn(zn){if(Un(zn)&&!Xt){var xr=Mr(void 0,W,on),jr=zn;return zn>xr?jr=xr:zn<1&&(jr=1),jr!==rt&&ke(jr),_e(jr),Jt==null||Jt(jr,W),jr}return Ze}var Dn=Ze>1,cr=Ze2?jr-2:0),go=2;goon?on:Ze*W])),Co=null,Pr=Mr(void 0,W,on);if(Yt&&on<=W)return null;var Ar=[],io={rootPrefixCls:P,onClick:kn,onKeyPress:ro,showTitle:Ie,itemRender:Ue,page:-1},fo=Ze-1>0?Ze-1:0,Do=Ze+1=Ro*2&&Ze!==3&&(Ar[0]=y.cloneElement(Ar[0],{className:j()("".concat(P,"-item-after-jump-prev"),Ar[0].props.className)}),Ar.unshift(eo)),Pr-Ze>=Ro*2&&Ze!==Pr-2){var Uo=Ar[Ar.length-1];Ar[Ar.length-1]=y.cloneElement(Uo,{className:j()("".concat(P,"-item-before-jump-next"),Uo.props.className)}),Ar.push(Co)}Ho!==1&&Ar.unshift(y.createElement(Sr,(0,$e.Z)({},io,{key:1,page:1}))),lo!==Pr&&Ar.push(y.createElement(Sr,(0,$e.Z)({},io,{key:Pr,page:Pr})))}var Po=bo(fo);if(Po){var vr=!Dn||!Pr;Po=y.createElement("li",{title:Ie?Dt.prev_page:null,onClick:hr,tabIndex:vr?null:0,onKeyDown:Io,className:j()("".concat(P,"-prev"),(0,mn.Z)({},"".concat(P,"-disabled"),vr)),"aria-disabled":vr},Po)}var gr=jo(Do);if(gr){var Jn,ur;st?(Jn=!cr,ur=Dn?0:null):(Jn=!cr||!Pr,ur=Jn?null:0),gr=y.createElement("li",{title:Ie?Dt.next_page:null,onClick:Tr,tabIndex:ur,onKeyDown:uo,className:j()("".concat(P,"-next"),(0,mn.Z)({},"".concat(P,"-disabled"),Jn)),"aria-disabled":Jn},gr)}var zr=j()(P,ze,(0,mn.Z)((0,mn.Z)((0,mn.Z)((0,mn.Z)((0,mn.Z)({},"".concat(P,"-start"),dn==="start"),"".concat(P,"-center"),dn==="center"),"".concat(P,"-end"),dn==="end"),"".concat(P,"-simple"),st),"".concat(P,"-disabled"),Xt));return y.createElement("ul",(0,$e.Z)({className:zr,style:Tt,ref:d},ao),So,Po,st?Jo:Ar,gr,y.createElement(rr,{locale:Dt,rootPrefixCls:P,disabled:Xt,selectComponentClass:pt,selectPrefixCls:Ne,changeSize:nr,pageSize:W,pageSizeOptions:le,quickGo:sr?kn:null,goButton:Zo,showSizeChanger:B}))},Vr=Nr,Xr=s(62906),Qr=s(10110),fr=s(69895);const Hr=n=>y.createElement(fr.Z,Object.assign({},n,{showSearch:!0,size:"small"})),Ur=n=>y.createElement(fr.Z,Object.assign({},n,{showSearch:!0,size:"middle"}));Hr.Option=fr.Z.Option,Ur.Option=fr.Z.Option;var Ir=s(14747),$r=s(80110);function Er(n){return(0,Le.IX)(n,{inputAffixPadding:n.paddingXXS})}const Zr=n=>{const{controlHeight:a,fontSize:N,lineHeight:P,lineWidth:ae,controlHeightSM:Ne,controlHeightLG:ze,fontSizeLG:pt,lineHeightLG:at,paddingSM:Ut,controlPaddingHorizontalSM:Ht,controlPaddingHorizontal:On,colorFillAlter:on,colorPrimaryHover:Hn,colorPrimary:Tn,controlOutlineWidth:Gn,controlOutline:Sn,colorErrorOutline:Jt,colorWarningOutline:Yt,colorBgContainer:dn}=n;return{paddingBlock:Math.max(Math.round((a-N*P)/2*10)/10-ae,0),paddingBlockSM:Math.max(Math.round((Ne-N*P)/2*10)/10-ae,0),paddingBlockLG:Math.ceil((ze-pt*at)/2*10)/10-ae,paddingInline:Ut-ae,paddingInlineSM:Ht-ae,paddingInlineLG:On-ae,addonBg:on,activeBorderColor:Tn,hoverBorderColor:Hn,activeShadow:`0 0 0 ${Gn}px ${Sn}`,errorActiveShadow:`0 0 0 ${Gn}px ${Jt}`,warningActiveShadow:`0 0 0 ${Gn}px ${Yt}`,hoverBg:dn,activeBg:dn,inputFontSize:N,inputFontSizeLG:pt,inputFontSizeSM:N}},to=n=>({borderColor:n.hoverBorderColor,backgroundColor:n.hoverBg}),Fr=n=>({color:n.colorTextDisabled,backgroundColor:n.colorBgContainerDisabled,borderColor:n.colorBorder,boxShadow:"none",cursor:"not-allowed",opacity:1,"input[disabled], textarea[disabled]":{cursor:"not-allowed"},"&:hover:not([disabled])":Object.assign({},to((0,Le.IX)(n,{hoverBorderColor:n.colorBorder,hoverBg:n.colorBgContainerDisabled})))}),kr=(n,a)=>({background:n.colorBgContainer,borderWidth:n.lineWidth,borderStyle:n.lineType,borderColor:a.borderColor,"&:hover":{borderColor:a.hoverBorderColor,backgroundColor:n.hoverBg},"&:focus, &:focus-within":{borderColor:a.activeBorderColor,boxShadow:a.activeShadow,outline:0,backgroundColor:n.activeBg}}),so=(n,a)=>({[`&${n.componentCls}-status-${a.status}:not(${n.componentCls}-disabled)`]:Object.assign(Object.assign({},kr(n,a)),{[`${n.componentCls}-prefix, ${n.componentCls}-suffix`]:{color:a.affixColor}}),[`&${n.componentCls}-status-${a.status}${n.componentCls}-disabled`]:{borderColor:a.borderColor}}),mo=(n,a)=>({"&-outlined":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},kr(n,{borderColor:n.colorBorder,hoverBorderColor:n.hoverBorderColor,activeBorderColor:n.activeBorderColor,activeShadow:n.activeShadow})),{[`&${n.componentCls}-disabled, &[disabled]`]:Object.assign({},Fr(n))}),so(n,{status:"error",borderColor:n.colorError,hoverBorderColor:n.colorErrorBorderHover,activeBorderColor:n.colorError,activeShadow:n.errorActiveShadow,affixColor:n.colorError})),so(n,{status:"warning",borderColor:n.colorWarning,hoverBorderColor:n.colorWarningBorderHover,activeBorderColor:n.colorWarning,activeShadow:n.warningActiveShadow,affixColor:n.colorWarning})),a)}),Jr=(n,a)=>({[`&${n.componentCls}-group-wrapper-status-${a.status}`]:{[`${n.componentCls}-group-addon`]:{borderColor:a.addonBorderColor,color:a.addonColor}}}),vo=n=>({"&-outlined":Object.assign(Object.assign(Object.assign({[`${n.componentCls}-group`]:{"&-addon":{background:n.addonBg,border:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`},"&-addon:first-child":{borderInlineEnd:0},"&-addon:last-child":{borderInlineStart:0}}},Jr(n,{status:"error",addonBorderColor:n.colorError,addonColor:n.colorErrorText})),Jr(n,{status:"warning",addonBorderColor:n.colorWarning,addonColor:n.colorWarningText})),{[`&${n.componentCls}-group-wrapper-disabled`]:{[`${n.componentCls}-group-addon`]:Object.assign({},Fr(n))}})}),Yr=(n,a)=>{const{componentCls:N}=n;return{"&-borderless":Object.assign({background:"transparent",border:"none","&:focus, &:focus-within":{outline:"none"},[`&${N}-disabled, &[disabled]`]:{color:n.colorTextDisabled},[`&${N}-status-error`]:{"&, & input, & textarea":{color:n.colorError}},[`&${N}-status-warning`]:{"&, & input, & textarea":{color:n.colorWarning}}},a)}},Gr=(n,a)=>({background:a.bg,borderWidth:n.lineWidth,borderStyle:n.lineType,borderColor:"transparent","input&, & input, textarea&, & textarea":{color:a==null?void 0:a.inputColor},"&:hover":{background:a.hoverBg},"&:focus, &:focus-within":{outline:0,borderColor:a.activeBorderColor,backgroundColor:n.activeBg}}),Yn=(n,a)=>({[`&${n.componentCls}-status-${a.status}:not(${n.componentCls}-disabled)`]:Object.assign(Object.assign({},Gr(n,a)),{[`${n.componentCls}-prefix, ${n.componentCls}-suffix`]:{color:a.affixColor}})}),oo=(n,a)=>({"&-filled":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Gr(n,{bg:n.colorFillTertiary,hoverBg:n.colorFillSecondary,activeBorderColor:n.activeBorderColor})),{[`&${n.componentCls}-disabled, &[disabled]`]:Object.assign({},Fr(n))}),Yn(n,{status:"error",bg:n.colorErrorBg,hoverBg:n.colorErrorBgHover,activeBorderColor:n.colorError,inputColor:n.colorErrorText,affixColor:n.colorError})),Yn(n,{status:"warning",bg:n.colorWarningBg,hoverBg:n.colorWarningBgHover,activeBorderColor:n.colorWarning,inputColor:n.colorWarningText,affixColor:n.colorWarning})),a)}),Br=(n,a)=>({[`&${n.componentCls}-group-wrapper-status-${a.status}`]:{[`${n.componentCls}-group-addon`]:{background:a.addonBg,color:a.addonColor}}}),po=n=>({"&-filled":Object.assign(Object.assign(Object.assign({[`${n.componentCls}-group`]:{"&-addon":{background:n.colorFillTertiary},[`${n.componentCls}-filled:not(:focus):not(:focus-within)`]:{"&:not(:first-child)":{borderInlineStart:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorSplit}`},"&:not(:last-child)":{borderInlineEnd:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorSplit}`}}}},Br(n,{status:"error",addonBg:n.colorErrorBg,addonColor:n.colorErrorText})),Br(n,{status:"warning",addonBg:n.colorWarningBg,addonColor:n.colorWarningText})),{[`&${n.componentCls}-group-wrapper-disabled`]:{[`${n.componentCls}-group`]:{"&-addon":{background:n.colorFillTertiary,color:n.colorTextDisabled},"&-addon:first-child":{borderInlineStart:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`,borderTop:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`,borderBottom:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`},"&-addon:last-child":{borderInlineEnd:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`,borderTop:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`,borderBottom:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`}}}})}),Dr=n=>({"&::-moz-placeholder":{opacity:1},"&::placeholder":{color:n,userSelect:"none"},"&:placeholder-shown":{textOverflow:"ellipsis"}}),Oo=n=>({borderColor:n.activeBorderColor,boxShadow:n.activeShadow,outline:0,backgroundColor:n.activeBg}),wo=n=>{const{paddingBlockLG:a,lineHeightLG:N,borderRadiusLG:P,paddingInlineLG:ae}=n;return{padding:`${(0,_.bf)(a)} ${(0,_.bf)(ae)}`,fontSize:n.inputFontSizeLG,lineHeight:N,borderRadius:P}},no=n=>({padding:`${(0,_.bf)(n.paddingBlockSM)} ${(0,_.bf)(n.paddingInlineSM)}`,fontSize:n.inputFontSizeSM,borderRadius:n.borderRadiusSM}),Wr=n=>Object.assign(Object.assign({position:"relative",display:"inline-block",width:"100%",minWidth:0,padding:`${(0,_.bf)(n.paddingBlock)} ${(0,_.bf)(n.paddingInline)}`,color:n.colorText,fontSize:n.inputFontSize,lineHeight:n.lineHeight,borderRadius:n.borderRadius,transition:`all ${n.motionDurationMid}`},Dr(n.colorTextPlaceholder)),{"textarea&":{maxWidth:"100%",height:"auto",minHeight:n.controlHeight,lineHeight:n.lineHeight,verticalAlign:"bottom",transition:`all ${n.motionDurationSlow}, height 0s`,resize:"vertical"},"&-lg":Object.assign({},wo(n)),"&-sm":Object.assign({},no(n)),"&-rtl, &-textarea-rtl":{direction:"rtl"}}),co=n=>{const{componentCls:a,antCls:N}=n;return{position:"relative",display:"table",width:"100%",borderCollapse:"separate",borderSpacing:0,"&[class*='col-']":{paddingInlineEnd:n.paddingXS,"&:last-child":{paddingInlineEnd:0}},[`&-lg ${a}, &-lg > ${a}-group-addon`]:Object.assign({},wo(n)),[`&-sm ${a}, &-sm > ${a}-group-addon`]:Object.assign({},no(n)),[`&-lg ${N}-select-single ${N}-select-selector`]:{height:n.controlHeightLG},[`&-sm ${N}-select-single ${N}-select-selector`]:{height:n.controlHeightSM},[`> ${a}`]:{display:"table-cell","&:not(:first-child):not(:last-child)":{borderRadius:0}},[`${a}-group`]:{"&-addon, &-wrap":{display:"table-cell",width:1,whiteSpace:"nowrap",verticalAlign:"middle","&:not(:first-child):not(:last-child)":{borderRadius:0}},"&-wrap > *":{display:"block !important"},"&-addon":{position:"relative",padding:`0 ${(0,_.bf)(n.paddingInline)}`,color:n.colorText,fontWeight:"normal",fontSize:n.inputFontSize,textAlign:"center",borderRadius:n.borderRadius,transition:`all ${n.motionDurationSlow}`,lineHeight:1,[`${N}-select`]:{margin:`${(0,_.bf)(n.calc(n.paddingBlock).add(1).mul(-1).equal())} ${(0,_.bf)(n.calc(n.paddingInline).mul(-1).equal())}`,[`&${N}-select-single:not(${N}-select-customize-input):not(${N}-pagination-size-changer)`]:{[`${N}-select-selector`]:{backgroundColor:"inherit",border:`${(0,_.bf)(n.lineWidth)} ${n.lineType} transparent`,boxShadow:"none"}}},[`${N}-cascader-picker`]:{margin:`-9px ${(0,_.bf)(n.calc(n.paddingInline).mul(-1).equal())}`,backgroundColor:"transparent",[`${N}-cascader-input`]:{textAlign:"start",border:0,boxShadow:"none"}}}},[a]:{width:"100%",marginBottom:0,textAlign:"inherit","&:focus":{zIndex:1,borderInlineEndWidth:1},"&:hover":{zIndex:1,borderInlineEndWidth:1,[`${a}-search-with-button &`]:{zIndex:0}}},[`> ${a}:first-child, ${a}-group-addon:first-child`]:{borderStartEndRadius:0,borderEndEndRadius:0,[`${N}-select ${N}-select-selector`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`> ${a}-affix-wrapper`]:{[`&:not(:first-child) ${a}`]:{borderStartStartRadius:0,borderEndStartRadius:0},[`&:not(:last-child) ${a}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`> ${a}:last-child, ${a}-group-addon:last-child`]:{borderStartStartRadius:0,borderEndStartRadius:0,[`${N}-select ${N}-select-selector`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`${a}-affix-wrapper`]:{"&:not(:last-child)":{borderStartEndRadius:0,borderEndEndRadius:0,[`${a}-search &`]:{borderStartStartRadius:n.borderRadius,borderEndStartRadius:n.borderRadius}},[`&:not(:first-child), ${a}-search &:not(:first-child)`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`&${a}-group-compact`]:Object.assign(Object.assign({display:"block"},(0,Ir.dF)()),{[`${a}-group-addon, ${a}-group-wrap, > ${a}`]:{"&:not(:first-child):not(:last-child)":{borderInlineEndWidth:n.lineWidth,"&:hover, &:focus":{zIndex:1}}},"& > *":{display:"inline-flex",float:"none",verticalAlign:"top",borderRadius:0},[` + & > ${a}-affix-wrapper, + & > ${a}-number-affix-wrapper, + & > ${N}-picker-range + `]:{display:"inline-flex"},"& > *:not(:last-child)":{marginInlineEnd:n.calc(n.lineWidth).mul(-1).equal(),borderInlineEndWidth:n.lineWidth},[a]:{float:"none"},[`& > ${N}-select > ${N}-select-selector, + & > ${N}-select-auto-complete ${a}, + & > ${N}-cascader-picker ${a}, + & > ${a}-group-wrapper ${a}`]:{borderInlineEndWidth:n.lineWidth,borderRadius:0,"&:hover, &:focus":{zIndex:1}},[`& > ${N}-select-focused`]:{zIndex:1},[`& > ${N}-select > ${N}-select-arrow`]:{zIndex:1},[`& > *:first-child, + & > ${N}-select:first-child > ${N}-select-selector, + & > ${N}-select-auto-complete:first-child ${a}, + & > ${N}-cascader-picker:first-child ${a}`]:{borderStartStartRadius:n.borderRadius,borderEndStartRadius:n.borderRadius},[`& > *:last-child, + & > ${N}-select:last-child > ${N}-select-selector, + & > ${N}-cascader-picker:last-child ${a}, + & > ${N}-cascader-picker-focused:last-child ${a}`]:{borderInlineEndWidth:n.lineWidth,borderStartEndRadius:n.borderRadius,borderEndEndRadius:n.borderRadius},[`& > ${N}-select-auto-complete ${a}`]:{verticalAlign:"top"},[`${a}-group-wrapper + ${a}-group-wrapper`]:{marginInlineStart:n.calc(n.lineWidth).mul(-1).equal(),[`${a}-affix-wrapper`]:{borderRadius:0}},[`${a}-group-wrapper:not(:last-child)`]:{[`&${a}-search > ${a}-group`]:{[`& > ${a}-group-addon > ${a}-search-button`]:{borderRadius:0},[`& > ${a}`]:{borderStartStartRadius:n.borderRadius,borderStartEndRadius:0,borderEndEndRadius:0,borderEndStartRadius:n.borderRadius}}}})}},ho=n=>{const{componentCls:a,controlHeightSM:N,lineWidth:P,calc:ae}=n,ze=ae(N).sub(ae(P).mul(2)).sub(16).div(2).equal();return{[a]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,Ir.Wf)(n)),Wr(n)),mo(n)),oo(n)),Yr(n)),{'&[type="color"]':{height:n.controlHeight,[`&${a}-lg`]:{height:n.controlHeightLG},[`&${a}-sm`]:{height:N,paddingTop:ze,paddingBottom:ze}},'&[type="search"]::-webkit-search-cancel-button, &[type="search"]::-webkit-search-decoration':{"-webkit-appearance":"none"}})}},xo=n=>{const{componentCls:a}=n;return{[`${a}-clear-icon`]:{margin:0,color:n.colorTextQuaternary,fontSize:n.fontSizeIcon,verticalAlign:-1,cursor:"pointer",transition:`color ${n.motionDurationSlow}`,"&:hover":{color:n.colorTextTertiary},"&:active":{color:n.colorText},"&-hidden":{visibility:"hidden"},"&-has-suffix":{margin:`0 ${(0,_.bf)(n.inputAffixPadding)}`}}}},Eo=n=>{const{componentCls:a,inputAffixPadding:N,colorTextDescription:P,motionDurationSlow:ae,colorIcon:Ne,colorIconHover:ze,iconCls:pt}=n,at=`${a}-affix-wrapper`,Ut=`${a}-affix-wrapper-disabled`;return{[at]:Object.assign(Object.assign(Object.assign(Object.assign({},Wr(n)),{display:"inline-flex",[`&:not(${a}-disabled):hover`]:{zIndex:1,[`${a}-search-with-button &`]:{zIndex:0}},"&-focused, &:focus":{zIndex:1},[`> input${a}`]:{padding:0},[`> input${a}, > textarea${a}`]:{fontSize:"inherit",border:"none",borderRadius:0,outline:"none",background:"transparent",color:"inherit","&::-ms-reveal":{display:"none"},"&:focus":{boxShadow:"none !important"}},"&::before":{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'},[a]:{"&-prefix, &-suffix":{display:"flex",flex:"none",alignItems:"center","> *:not(:last-child)":{marginInlineEnd:n.paddingXS}},"&-show-count-suffix":{color:P},"&-show-count-has-suffix":{marginInlineEnd:n.paddingXXS},"&-prefix":{marginInlineEnd:N},"&-suffix":{marginInlineStart:N}}}),xo(n)),{[`${pt}${a}-password-icon`]:{color:Ne,cursor:"pointer",transition:`all ${ae}`,"&:hover":{color:ze}}}),[Ut]:{[`${pt}${a}-password-icon`]:{color:Ne,cursor:"not-allowed","&:hover":{color:Ne}}}}},We=n=>{const{componentCls:a,borderRadiusLG:N,borderRadiusSM:P}=n;return{[`${a}-group`]:Object.assign(Object.assign(Object.assign({},(0,Ir.Wf)(n)),co(n)),{"&-rtl":{direction:"rtl"},"&-wrapper":Object.assign(Object.assign(Object.assign({display:"inline-block",width:"100%",textAlign:"start",verticalAlign:"top","&-rtl":{direction:"rtl"},"&-lg":{[`${a}-group-addon`]:{borderRadius:N,fontSize:n.inputFontSizeLG}},"&-sm":{[`${a}-group-addon`]:{borderRadius:P}}},vo(n)),po(n)),{[`&:not(${a}-compact-first-item):not(${a}-compact-last-item)${a}-compact-item`]:{[`${a}, ${a}-group-addon`]:{borderRadius:0}},[`&:not(${a}-compact-last-item)${a}-compact-first-item`]:{[`${a}, ${a}-group-addon`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&:not(${a}-compact-first-item)${a}-compact-last-item`]:{[`${a}, ${a}-group-addon`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`&:not(${a}-compact-last-item)${a}-compact-item`]:{[`${a}-affix-wrapper`]:{borderStartEndRadius:0,borderEndEndRadius:0}}})})}},Nt=n=>{const{componentCls:a,antCls:N}=n,P=`${a}-search`;return{[P]:{[a]:{"&:hover, &:focus":{[`+ ${a}-group-addon ${P}-button:not(${N}-btn-primary)`]:{borderInlineStartColor:n.colorPrimaryHover}}},[`${a}-affix-wrapper`]:{height:n.controlHeight,borderRadius:0},[`${a}-lg`]:{lineHeight:n.calc(n.lineHeightLG).sub(2e-4).equal()},[`> ${a}-group`]:{[`> ${a}-group-addon:last-child`]:{insetInlineStart:-1,padding:0,border:0,[`${P}-button`]:{marginInlineEnd:-1,paddingTop:0,paddingBottom:0,borderStartStartRadius:0,borderEndStartRadius:0,boxShadow:"none"},[`${P}-button:not(${N}-btn-primary)`]:{color:n.colorTextDescription,"&:hover":{color:n.colorPrimaryHover},"&:active":{color:n.colorPrimaryActive},[`&${N}-btn-loading::before`]:{insetInlineStart:0,insetInlineEnd:0,insetBlockStart:0,insetBlockEnd:0}}}},[`${P}-button`]:{height:n.controlHeight,"&:hover, &:focus":{zIndex:1}},"&-large":{[`${a}-affix-wrapper, ${P}-button`]:{height:n.controlHeightLG}},"&-small":{[`${a}-affix-wrapper, ${P}-button`]:{height:n.controlHeightSM}},"&-rtl":{direction:"rtl"},[`&${a}-compact-item`]:{[`&:not(${a}-compact-last-item)`]:{[`${a}-group-addon`]:{[`${a}-search-button`]:{marginInlineEnd:n.calc(n.lineWidth).mul(-1).equal(),borderRadius:0}}},[`&:not(${a}-compact-first-item)`]:{[`${a},${a}-affix-wrapper`]:{borderRadius:0}},[`> ${a}-group-addon ${a}-search-button, + > ${a}, + ${a}-affix-wrapper`]:{"&:hover, &:focus, &:active":{zIndex:2}},[`> ${a}-affix-wrapper-focused`]:{zIndex:2}}}}},F=n=>{const{componentCls:a,paddingLG:N}=n,P=`${a}-textarea`;return{[P]:{position:"relative","&-show-count":{[`> ${a}`]:{height:"100%"},[`${a}-data-count`]:{position:"absolute",bottom:n.calc(n.fontSize).mul(n.lineHeight).mul(-1).equal(),insetInlineEnd:0,color:n.colorTextDescription,whiteSpace:"nowrap",pointerEvents:"none"}},[` + &-allow-clear > ${a}, + &-affix-wrapper${P}-has-feedback ${a} + `]:{paddingInlineEnd:N},[`&-affix-wrapper${a}-affix-wrapper`]:{padding:0,[`> textarea${a}`]:{fontSize:"inherit",border:"none",outline:"none",background:"transparent","&:focus":{boxShadow:"none !important"}},[`${a}-suffix`]:{margin:0,"> *:not(:last-child)":{marginInline:0},[`${a}-clear-icon`]:{position:"absolute",insetInlineEnd:n.paddingInline,insetBlockStart:n.paddingXS},[`${P}-suffix`]:{position:"absolute",top:0,insetInlineEnd:n.paddingInline,bottom:0,zIndex:1,display:"inline-flex",alignItems:"center",margin:"auto",pointerEvents:"none"}}},[`&-affix-wrapper${a}-affix-wrapper-sm`]:{[`${a}-suffix`]:{[`${a}-clear-icon`]:{insetInlineEnd:n.paddingInlineSM}}}}}},H=n=>{const{componentCls:a}=n;return{[`${a}-out-of-range`]:{[`&, & input, & textarea, ${a}-show-count-suffix, ${a}-data-count`]:{color:n.colorError}}}};var ee=(0,Be.I$)("Input",n=>{const a=(0,Le.IX)(n,Er(n));return[ho(a),F(a),Eo(a),We(a),Nt(a),H(a),(0,$r.c)(a)]},Zr,{resetFont:!1});const te=n=>{const{componentCls:a}=n;return{[`${a}-disabled`]:{"&, &:hover":{cursor:"not-allowed",[`${a}-item-link`]:{color:n.colorTextDisabled,cursor:"not-allowed"}},"&:focus-visible":{cursor:"not-allowed",[`${a}-item-link`]:{color:n.colorTextDisabled,cursor:"not-allowed"}}},[`&${a}-disabled`]:{cursor:"not-allowed",[`${a}-item`]:{cursor:"not-allowed","&:hover, &:active":{backgroundColor:"transparent"},a:{color:n.colorTextDisabled,backgroundColor:"transparent",border:"none",cursor:"not-allowed"},"&-active":{borderColor:n.colorBorder,backgroundColor:n.itemActiveBgDisabled,"&:hover, &:active":{backgroundColor:n.itemActiveBgDisabled},a:{color:n.itemActiveColorDisabled}}},[`${a}-item-link`]:{color:n.colorTextDisabled,cursor:"not-allowed","&:hover, &:active":{backgroundColor:"transparent"},[`${a}-simple&`]:{backgroundColor:"transparent","&:hover, &:active":{backgroundColor:"transparent"}}},[`${a}-simple-pager`]:{color:n.colorTextDisabled},[`${a}-jump-prev, ${a}-jump-next`]:{[`${a}-item-link-icon`]:{opacity:0},[`${a}-item-ellipsis`]:{opacity:1}}},[`&${a}-simple`]:{[`${a}-prev, ${a}-next`]:{[`&${a}-disabled ${a}-item-link`]:{"&:hover, &:active":{backgroundColor:"transparent"}}}}}},me=n=>{const{componentCls:a}=n;return{[`&${a}-mini ${a}-total-text, &${a}-mini ${a}-simple-pager`]:{height:n.itemSizeSM,lineHeight:(0,_.bf)(n.itemSizeSM)},[`&${a}-mini ${a}-item`]:{minWidth:n.itemSizeSM,height:n.itemSizeSM,margin:0,lineHeight:(0,_.bf)(n.calc(n.itemSizeSM).sub(2).equal())},[`&${a}-mini:not(${a}-disabled) ${a}-item:not(${a}-item-active)`]:{backgroundColor:"transparent",borderColor:"transparent","&:hover":{backgroundColor:n.colorBgTextHover},"&:active":{backgroundColor:n.colorBgTextActive}},[`&${a}-mini ${a}-prev, &${a}-mini ${a}-next`]:{minWidth:n.itemSizeSM,height:n.itemSizeSM,margin:0,lineHeight:(0,_.bf)(n.itemSizeSM)},[`&${a}-mini:not(${a}-disabled)`]:{[`${a}-prev, ${a}-next`]:{[`&:hover ${a}-item-link`]:{backgroundColor:n.colorBgTextHover},[`&:active ${a}-item-link`]:{backgroundColor:n.colorBgTextActive},[`&${a}-disabled:hover ${a}-item-link`]:{backgroundColor:"transparent"}}},[` + &${a}-mini ${a}-prev ${a}-item-link, + &${a}-mini ${a}-next ${a}-item-link + `]:{backgroundColor:"transparent",borderColor:"transparent","&::after":{height:n.itemSizeSM,lineHeight:(0,_.bf)(n.itemSizeSM)}},[`&${a}-mini ${a}-jump-prev, &${a}-mini ${a}-jump-next`]:{height:n.itemSizeSM,marginInlineEnd:0,lineHeight:(0,_.bf)(n.itemSizeSM)},[`&${a}-mini ${a}-options`]:{marginInlineStart:n.paginationMiniOptionsMarginInlineStart,"&-size-changer":{top:n.miniOptionsSizeChangerTop},"&-quick-jumper":{height:n.itemSizeSM,lineHeight:(0,_.bf)(n.itemSizeSM),input:Object.assign(Object.assign({},no(n)),{width:n.paginationMiniQuickJumperInputWidth,height:n.controlHeightSM})}}}},nt=n=>{const{componentCls:a}=n;return{[` + &${a}-simple ${a}-prev, + &${a}-simple ${a}-next + `]:{height:n.itemSizeSM,lineHeight:(0,_.bf)(n.itemSizeSM),verticalAlign:"top",[`${a}-item-link`]:{height:n.itemSizeSM,backgroundColor:"transparent",border:0,"&:hover":{backgroundColor:n.colorBgTextHover},"&:active":{backgroundColor:n.colorBgTextActive},"&::after":{height:n.itemSizeSM,lineHeight:(0,_.bf)(n.itemSizeSM)}}},[`&${a}-simple ${a}-simple-pager`]:{display:"inline-block",height:n.itemSizeSM,marginInlineEnd:n.marginXS,input:{boxSizing:"border-box",height:"100%",padding:`0 ${(0,_.bf)(n.paginationItemPaddingInline)}`,textAlign:"center",backgroundColor:n.itemInputBg,border:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`,borderRadius:n.borderRadius,outline:"none",transition:`border-color ${n.motionDurationMid}`,color:"inherit","&:hover":{borderColor:n.colorPrimary},"&:focus":{borderColor:n.colorPrimaryHover,boxShadow:`${(0,_.bf)(n.inputOutlineOffset)} 0 ${(0,_.bf)(n.controlOutlineWidth)} ${n.controlOutline}`},"&[disabled]":{color:n.colorTextDisabled,backgroundColor:n.colorBgContainerDisabled,borderColor:n.colorBorder,cursor:"not-allowed"}}}}},h=n=>{const{componentCls:a}=n;return{[`${a}-jump-prev, ${a}-jump-next`]:{outline:0,[`${a}-item-container`]:{position:"relative",[`${a}-item-link-icon`]:{color:n.colorPrimary,fontSize:n.fontSizeSM,opacity:0,transition:`all ${n.motionDurationMid}`,"&-svg":{top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,margin:"auto"}},[`${a}-item-ellipsis`]:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,display:"block",margin:"auto",color:n.colorTextDisabled,letterSpacing:n.paginationEllipsisLetterSpacing,textAlign:"center",textIndent:n.paginationEllipsisTextIndent,opacity:1,transition:`all ${n.motionDurationMid}`}},"&:hover":{[`${a}-item-link-icon`]:{opacity:1},[`${a}-item-ellipsis`]:{opacity:0}}},[` + ${a}-prev, + ${a}-jump-prev, + ${a}-jump-next + `]:{marginInlineEnd:n.marginXS},[` + ${a}-prev, + ${a}-next, + ${a}-jump-prev, + ${a}-jump-next + `]:{display:"inline-block",minWidth:n.itemSize,height:n.itemSize,color:n.colorText,fontFamily:n.fontFamily,lineHeight:(0,_.bf)(n.itemSize),textAlign:"center",verticalAlign:"middle",listStyle:"none",borderRadius:n.borderRadius,cursor:"pointer",transition:`all ${n.motionDurationMid}`},[`${a}-prev, ${a}-next`]:{outline:0,button:{color:n.colorText,cursor:"pointer",userSelect:"none"},[`${a}-item-link`]:{display:"block",width:"100%",height:"100%",padding:0,fontSize:n.fontSizeSM,textAlign:"center",backgroundColor:"transparent",border:`${(0,_.bf)(n.lineWidth)} ${n.lineType} transparent`,borderRadius:n.borderRadius,outline:"none",transition:`all ${n.motionDurationMid}`},[`&:hover ${a}-item-link`]:{backgroundColor:n.colorBgTextHover},[`&:active ${a}-item-link`]:{backgroundColor:n.colorBgTextActive},[`&${a}-disabled:hover`]:{[`${a}-item-link`]:{backgroundColor:"transparent"}}},[`${a}-slash`]:{marginInlineEnd:n.paginationSlashMarginInlineEnd,marginInlineStart:n.paginationSlashMarginInlineStart},[`${a}-options`]:{display:"inline-block",marginInlineStart:n.margin,verticalAlign:"middle","&-size-changer":{display:"inline-block",width:"auto"},"&-quick-jumper":{display:"inline-block",height:n.controlHeight,marginInlineStart:n.marginXS,lineHeight:(0,_.bf)(n.controlHeight),verticalAlign:"top",input:Object.assign(Object.assign(Object.assign({},Wr(n)),kr(n,{borderColor:n.colorBorder,hoverBorderColor:n.colorPrimaryHover,activeBorderColor:n.colorPrimary,activeShadow:n.activeShadow})),{"&[disabled]":Object.assign({},Fr(n)),width:n.calc(n.controlHeightLG).mul(1.25).equal(),height:n.controlHeight,boxSizing:"border-box",margin:0,marginInlineStart:n.marginXS,marginInlineEnd:n.marginXS})}}}},E=n=>{const{componentCls:a}=n;return{[`${a}-item`]:{display:"inline-block",minWidth:n.itemSize,height:n.itemSize,marginInlineEnd:n.marginXS,fontFamily:n.fontFamily,lineHeight:(0,_.bf)(n.calc(n.itemSize).sub(2).equal()),textAlign:"center",verticalAlign:"middle",listStyle:"none",backgroundColor:n.itemBg,border:`${(0,_.bf)(n.lineWidth)} ${n.lineType} transparent`,borderRadius:n.borderRadius,outline:0,cursor:"pointer",userSelect:"none",a:{display:"block",padding:`0 ${(0,_.bf)(n.paginationItemPaddingInline)}`,color:n.colorText,"&:hover":{textDecoration:"none"}},[`&:not(${a}-item-active)`]:{"&:hover":{transition:`all ${n.motionDurationMid}`,backgroundColor:n.colorBgTextHover},"&:active":{backgroundColor:n.colorBgTextActive}},"&-active":{fontWeight:n.fontWeightStrong,backgroundColor:n.itemActiveBg,borderColor:n.colorPrimary,a:{color:n.colorPrimary},"&:hover":{borderColor:n.colorPrimaryHover},"&:hover a":{color:n.colorPrimaryHover}}}}},ye=n=>{const{componentCls:a}=n;return{[a]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,Ir.Wf)(n)),{display:"flex","&-start":{justifyContent:"start"},"&-center":{justifyContent:"center"},"&-end":{justifyContent:"end"},"ul, ol":{margin:0,padding:0,listStyle:"none"},"&::after":{display:"block",clear:"both",height:0,overflow:"hidden",visibility:"hidden",content:'""'},[`${a}-total-text`]:{display:"inline-block",height:n.itemSize,marginInlineEnd:n.marginXS,lineHeight:(0,_.bf)(n.calc(n.itemSize).sub(2).equal()),verticalAlign:"middle"}}),E(n)),h(n)),nt(n)),me(n)),te(n)),{[`@media only screen and (max-width: ${n.screenLG}px)`]:{[`${a}-item`]:{"&-after-jump-prev, &-before-jump-next":{display:"none"}}},[`@media only screen and (max-width: ${n.screenSM}px)`]:{[`${a}-options`]:{display:"none"}}}),[`&${n.componentCls}-rtl`]:{direction:"rtl"}}},Se=n=>{const{componentCls:a}=n;return{[`${a}:not(${a}-disabled)`]:{[`${a}-item`]:Object.assign({},(0,Ir.Qy)(n)),[`${a}-jump-prev, ${a}-jump-next`]:{"&:focus-visible":Object.assign({[`${a}-item-link-icon`]:{opacity:1},[`${a}-item-ellipsis`]:{opacity:0}},(0,Ir.oN)(n))},[`${a}-prev, ${a}-next`]:{[`&:focus-visible ${a}-item-link`]:Object.assign({},(0,Ir.oN)(n))}}}},Te=n=>Object.assign({itemBg:n.colorBgContainer,itemSize:n.controlHeight,itemSizeSM:n.controlHeightSM,itemActiveBg:n.colorBgContainer,itemLinkBg:n.colorBgContainer,itemActiveColorDisabled:n.colorTextDisabled,itemActiveBgDisabled:n.controlItemBgActiveDisabled,itemInputBg:n.colorBgContainer,miniOptionsSizeChangerTop:0},Zr(n)),Fe=n=>(0,Le.IX)(n,{inputOutlineOffset:0,paginationMiniOptionsMarginInlineStart:n.calc(n.marginXXS).div(2).equal(),paginationMiniQuickJumperInputWidth:n.calc(n.controlHeightLG).mul(1.1).equal(),paginationItemPaddingInline:n.calc(n.marginXXS).mul(1.5).equal(),paginationEllipsisLetterSpacing:n.calc(n.marginXXS).div(2).equal(),paginationSlashMarginInlineStart:n.marginSM,paginationSlashMarginInlineEnd:n.marginSM,paginationEllipsisTextIndent:"0.13em"},Er(n));var Xe=(0,Be.I$)("Pagination",n=>{const a=Fe(n);return[ye(a),Se(a)]},Te);const Je=n=>{const{componentCls:a}=n;return{[`${a}${a}-bordered${a}-disabled:not(${a}-mini)`]:{"&, &:hover":{[`${a}-item-link`]:{borderColor:n.colorBorder}},"&:focus-visible":{[`${a}-item-link`]:{borderColor:n.colorBorder}},[`${a}-item, ${a}-item-link`]:{backgroundColor:n.colorBgContainerDisabled,borderColor:n.colorBorder,[`&:hover:not(${a}-item-active)`]:{backgroundColor:n.colorBgContainerDisabled,borderColor:n.colorBorder,a:{color:n.colorTextDisabled}},[`&${a}-item-active`]:{backgroundColor:n.itemActiveBgDisabled}},[`${a}-prev, ${a}-next`]:{"&:hover button":{backgroundColor:n.colorBgContainerDisabled,borderColor:n.colorBorder,color:n.colorTextDisabled},[`${a}-item-link`]:{backgroundColor:n.colorBgContainerDisabled,borderColor:n.colorBorder}}},[`${a}${a}-bordered:not(${a}-mini)`]:{[`${a}-prev, ${a}-next`]:{"&:hover button":{borderColor:n.colorPrimaryHover,backgroundColor:n.itemBg},[`${a}-item-link`]:{backgroundColor:n.itemLinkBg,borderColor:n.colorBorder},[`&:hover ${a}-item-link`]:{borderColor:n.colorPrimary,backgroundColor:n.itemBg,color:n.colorPrimary},[`&${a}-disabled`]:{[`${a}-item-link`]:{borderColor:n.colorBorder,color:n.colorTextDisabled}}},[`${a}-item`]:{backgroundColor:n.itemBg,border:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`,[`&:hover:not(${a}-item-active)`]:{borderColor:n.colorPrimary,backgroundColor:n.itemBg,a:{color:n.colorPrimary}},"&-active":{borderColor:n.colorPrimary}}}}};var ct=(0,Be.bk)(["Pagination","bordered"],n=>{const a=Fe(n);return[Je(a)]},Te),xt=function(n,a){var N={};for(var P in n)Object.prototype.hasOwnProperty.call(n,P)&&a.indexOf(P)<0&&(N[P]=n[P]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var ae=0,P=Object.getOwnPropertySymbols(n);ae{const{align:a,prefixCls:N,selectPrefixCls:P,className:ae,rootClassName:Ne,style:ze,size:pt,locale:at,selectComponentClass:Ut,responsive:Ht,showSizeChanger:On}=n,on=xt(n,["align","prefixCls","selectPrefixCls","className","rootClassName","style","size","locale","selectComponentClass","responsive","showSizeChanger"]),{xs:Hn}=Me(Ht),[,Tn]=(0,R.ZP)(),{getPrefixCls:Gn,direction:Sn,pagination:Jt={}}=y.useContext(b.E_),Yt=Gn("pagination",N),[dn,Vn,f]=Xe(Yt),I=On!=null?On:Jt.showSizeChanger,oe=y.useMemo(()=>{const Zt=y.createElement("span",{className:`${Yt}-item-ellipsis`},"\u2022\u2022\u2022"),At=y.createElement("button",{className:`${Yt}-item-link`,type:"button",tabIndex:-1},Sn==="rtl"?y.createElement(jn,null):y.createElement(Nn,null)),Xt=y.createElement("button",{className:`${Yt}-item-link`,type:"button",tabIndex:-1},Sn==="rtl"?y.createElement(Nn,null):y.createElement(jn,null)),st=y.createElement("a",{className:`${Yt}-item-link`},y.createElement("div",{className:`${Yt}-item-container`},Sn==="rtl"?y.createElement(xe,{className:`${Yt}-item-link-icon`}):y.createElement(ht,{className:`${Yt}-item-link-icon`}),Zt)),M=y.createElement("a",{className:`${Yt}-item-link`},y.createElement("div",{className:`${Yt}-item-container`},Sn==="rtl"?y.createElement(ht,{className:`${Yt}-item-link-icon`}):y.createElement(xe,{className:`${Yt}-item-link-icon`}),Zt));return{prevIcon:At,nextIcon:Xt,jumpPrevIcon:st,jumpNextIcon:M}},[Sn,Yt]),[ve]=(0,Qr.Z)("Pagination",Xr.Z),Ie=Object.assign(Object.assign({},ve),at),it=(0,Q.Z)(pt),bt=it==="small"||!!(Hn&&!it&&Ht),Ot=Gn("select",P),Dt=j()({[`${Yt}-${a}`]:!!a,[`${Yt}-mini`]:bt,[`${Yt}-rtl`]:Sn==="rtl",[`${Yt}-bordered`]:Tn.wireframe},Jt==null?void 0:Jt.className,ae,Ne,Vn,f),Tt=Object.assign(Object.assign({},Jt==null?void 0:Jt.style),ze);return dn(y.createElement(y.Fragment,null,Tn.wireframe&&y.createElement(ct,{prefixCls:Yt}),y.createElement(Vr,Object.assign({},oe,on,{style:Tt,prefixCls:Yt,selectPrefixCls:Ot,className:Dt,selectComponentClass:Ut||(bt?Hr:Ur),locale:Ie,showSizeChanger:I}))))},$t=Et;function jt(n,a,N){var P=N||{},ae=P.noTrailing,Ne=ae===void 0?!1:ae,ze=P.noLeading,pt=ze===void 0?!1:ze,at=P.debounceMode,Ut=at===void 0?void 0:at,Ht,On=!1,on=0;function Hn(){Ht&&clearTimeout(Ht)}function Tn(Sn){var Jt=Sn||{},Yt=Jt.upcomingOnly,dn=Yt===void 0?!1:Yt;Hn(),On=!dn}function Gn(){for(var Sn=arguments.length,Jt=new Array(Sn),Yt=0;Ytn?pt?(on=Date.now(),Ne||(Ht=setTimeout(Ut?I:f,n))):f():Ne!==!0&&(Ht=setTimeout(Ut?I:f,Ut===void 0?n-Vn:n))}return Gn.cancel=Tn,Gn}function Gt(n,a,N){var P=N||{},ae=P.atBegin,Ne=ae===void 0?!1:ae;return jt(n,a,{debounceMode:Ne!==!1})}var Rt=s(96159);const xn=100,en=xn/5,ln=xn/2-en/2,an=ln*2*Math.PI,bn=50,_n=n=>{const{dotClassName:a,style:N,hasCircleCls:P}=n;return y.createElement("circle",{className:j()(`${a}-circle`,{[`${a}-circle-bg`]:P}),r:ln,cx:bn,cy:bn,strokeWidth:en,style:N})};var Bn=n=>{let{percent:a,prefixCls:N}=n;const P=`${N}-dot`,ae=`${P}-holder`,Ne=`${ae}-hidden`,[ze,pt]=y.useState(!1);(0,de.Z)(()=>{a!==0&&pt(!0)},[a!==0]);const at=Math.max(Math.min(a,100),0);if(!ze)return null;const Ut={strokeDashoffset:`${an/4}`,strokeDasharray:`${an*at/100} ${an*(100-at)/100}`};return y.createElement("span",{className:j()(ae,`${P}-progress`,at<=0&&Ne)},y.createElement("svg",{viewBox:`0 0 ${xn} ${xn}`,role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":at},y.createElement(_n,{dotClassName:P,hasCircleCls:!0}),y.createElement(_n,{dotClassName:P,style:Ut})))};function rn(n){const{prefixCls:a,percent:N=0}=n,P=`${a}-dot`,ae=`${P}-holder`,Ne=`${ae}-hidden`;return y.createElement(y.Fragment,null,y.createElement("span",{className:j()(ae,N>0&&Ne)},y.createElement("span",{className:j()(P,`${a}-dot-spin`)},[1,2,3,4].map(ze=>y.createElement("i",{className:`${a}-dot-item`,key:ze})))),y.createElement(Bn,{prefixCls:a,percent:N}))}function En(n){const{prefixCls:a,indicator:N,percent:P}=n,ae=`${a}-dot`;return N&&y.isValidElement(N)?(0,Rt.Tm)(N,{className:j()(N.props.className,ae),percent:P}):y.createElement(rn,{prefixCls:a,percent:P})}const yn=new _.E4("antSpinMove",{to:{opacity:1}}),Mn=new _.E4("antRotate",{to:{transform:"rotate(405deg)"}}),An=n=>{const{componentCls:a,calc:N}=n;return{[a]:Object.assign(Object.assign({},(0,Ir.Wf)(n)),{position:"absolute",display:"none",color:n.colorPrimary,fontSize:0,textAlign:"center",verticalAlign:"middle",opacity:0,transition:`transform ${n.motionDurationSlow} ${n.motionEaseInOutCirc}`,"&-spinning":{position:"relative",display:"inline-block",opacity:1},[`${a}-text`]:{fontSize:n.fontSize,paddingTop:N(N(n.dotSize).sub(n.fontSize)).div(2).add(2).equal()},"&-fullscreen":{position:"fixed",width:"100vw",height:"100vh",backgroundColor:n.colorBgMask,zIndex:n.zIndexPopupBase,inset:0,display:"flex",alignItems:"center",flexDirection:"column",justifyContent:"center",opacity:0,visibility:"hidden",transition:`all ${n.motionDurationMid}`,"&-show":{opacity:1,visibility:"visible"},[a]:{[`${a}-dot-holder`]:{color:n.colorWhite},[`${a}-text`]:{color:n.colorTextLightSolid}}},"&-nested-loading":{position:"relative",[`> div > ${a}`]:{position:"absolute",top:0,insetInlineStart:0,zIndex:4,display:"block",width:"100%",height:"100%",maxHeight:n.contentHeight,[`${a}-dot`]:{position:"absolute",top:"50%",insetInlineStart:"50%",margin:N(n.dotSize).mul(-1).div(2).equal()},[`${a}-text`]:{position:"absolute",top:"50%",width:"100%",textShadow:`0 1px 2px ${n.colorBgContainer}`},[`&${a}-show-text ${a}-dot`]:{marginTop:N(n.dotSize).div(2).mul(-1).sub(10).equal()},"&-sm":{[`${a}-dot`]:{margin:N(n.dotSizeSM).mul(-1).div(2).equal()},[`${a}-text`]:{paddingTop:N(N(n.dotSizeSM).sub(n.fontSize)).div(2).add(2).equal()},[`&${a}-show-text ${a}-dot`]:{marginTop:N(n.dotSizeSM).div(2).mul(-1).sub(10).equal()}},"&-lg":{[`${a}-dot`]:{margin:N(n.dotSizeLG).mul(-1).div(2).equal()},[`${a}-text`]:{paddingTop:N(N(n.dotSizeLG).sub(n.fontSize)).div(2).add(2).equal()},[`&${a}-show-text ${a}-dot`]:{marginTop:N(n.dotSizeLG).div(2).mul(-1).sub(10).equal()}}},[`${a}-container`]:{position:"relative",transition:`opacity ${n.motionDurationSlow}`,"&::after":{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,zIndex:10,width:"100%",height:"100%",background:n.colorBgContainer,opacity:0,transition:`all ${n.motionDurationSlow}`,content:'""',pointerEvents:"none"}},[`${a}-blur`]:{clear:"both",opacity:.5,userSelect:"none",pointerEvents:"none","&::after":{opacity:.4,pointerEvents:"auto"}}},"&-tip":{color:n.spinDotDefault},[`${a}-dot-holder`]:{width:"1em",height:"1em",fontSize:n.dotSize,display:"inline-block",transition:`transform ${n.motionDurationSlow} ease, opacity ${n.motionDurationSlow} ease`,transformOrigin:"50% 50%",lineHeight:1,color:n.colorPrimary,"&-hidden":{transform:"scale(0.3)",opacity:0}},[`${a}-dot-progress`]:{position:"absolute",top:"50%",transform:"translate(-50%, -50%)",insetInlineStart:"50%"},[`${a}-dot`]:{position:"relative",display:"inline-block",fontSize:n.dotSize,width:"1em",height:"1em","&-item":{position:"absolute",display:"block",width:N(n.dotSize).sub(N(n.marginXXS).div(2)).div(2).equal(),height:N(n.dotSize).sub(N(n.marginXXS).div(2)).div(2).equal(),background:"currentColor",borderRadius:"100%",transform:"scale(0.75)",transformOrigin:"50% 50%",opacity:.3,animationName:yn,animationDuration:"1s",animationIterationCount:"infinite",animationTimingFunction:"linear",animationDirection:"alternate","&:nth-child(1)":{top:0,insetInlineStart:0,animationDelay:"0s"},"&:nth-child(2)":{top:0,insetInlineEnd:0,animationDelay:"0.4s"},"&:nth-child(3)":{insetInlineEnd:0,bottom:0,animationDelay:"0.8s"},"&:nth-child(4)":{bottom:0,insetInlineStart:0,animationDelay:"1.2s"}},"&-spin":{transform:"rotate(45deg)",animationName:Mn,animationDuration:"1.2s",animationIterationCount:"infinite",animationTimingFunction:"linear"},"&-circle":{strokeLinecap:"round",transition:["stroke-dashoffset","stroke-dasharray","stroke","stroke-width","opacity"].map(P=>`${P} ${n.motionDurationSlow} ease`).join(","),fillOpacity:0,stroke:"currentcolor"},"&-circle-bg":{stroke:n.colorFillSecondary}},[`&-sm ${a}-dot`]:{"&, &-holder":{fontSize:n.dotSizeSM}},[`&-sm ${a}-dot-holder`]:{i:{width:N(N(n.dotSizeSM).sub(N(n.marginXXS).div(2))).div(2).equal(),height:N(N(n.dotSizeSM).sub(N(n.marginXXS).div(2))).div(2).equal()}},[`&-lg ${a}-dot`]:{"&, &-holder":{fontSize:n.dotSizeLG}},[`&-lg ${a}-dot-holder`]:{i:{width:N(N(n.dotSizeLG).sub(n.marginXXS)).div(2).equal(),height:N(N(n.dotSizeLG).sub(n.marginXXS)).div(2).equal()}},[`&${a}-show-text ${a}-text`]:{display:"block"}})}},sn=n=>{const{controlHeightLG:a,controlHeight:N}=n;return{contentHeight:400,dotSize:a/2,dotSizeSM:a*.35,dotSizeLG:N}};var wn=(0,Be.I$)("Spin",n=>{const a=(0,Le.IX)(n,{spinDotDefault:n.colorTextDescription});return[An(a)]},sn);const Kn=200,er=[[30,.05],[70,.03],[96,.01]];function Cn(n,a){const[N,P]=y.useState(0),ae=y.useRef(),Ne=a==="auto";return y.useEffect(()=>(Ne&&n&&(P(0),ae.current=setInterval(()=>{P(ze=>{const pt=100-ze;for(let at=0;at{clearInterval(ae.current)}),[Ne,n]),Ne?N:a}var ar=function(n,a){var N={};for(var P in n)Object.prototype.hasOwnProperty.call(n,P)&&a.indexOf(P)<0&&(N[P]=n[P]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var ae=0,P=Object.getOwnPropertySymbols(n);ae{var a;const{prefixCls:N,spinning:P=!0,delay:ae=0,className:Ne,rootClassName:ze,size:pt="default",tip:at,wrapperClassName:Ut,style:Ht,children:On,fullscreen:on=!1,indicator:Hn,percent:Tn}=n,Gn=ar(n,["prefixCls","spinning","delay","className","rootClassName","size","tip","wrapperClassName","style","children","fullscreen","indicator","percent"]),{getPrefixCls:Sn,direction:Jt,spin:Yt}=y.useContext(b.E_),dn=Sn("spin",N),[Vn,f,I]=wn(dn),[oe,ve]=y.useState(()=>P&&!br(P,ae)),Ie=Cn(oe,Tn);y.useEffect(()=>{if(P){const At=Gt(ae,()=>{ve(!0)});return At(),()=>{var Xt;(Xt=At==null?void 0:At.cancel)===null||Xt===void 0||Xt.call(At)}}ve(!1)},[ae,P]);const it=y.useMemo(()=>typeof On!="undefined"&&!on,[On,on]),bt=j()(dn,Yt==null?void 0:Yt.className,{[`${dn}-sm`]:pt==="small",[`${dn}-lg`]:pt==="large",[`${dn}-spinning`]:oe,[`${dn}-show-text`]:!!at,[`${dn}-rtl`]:Jt==="rtl"},Ne,!on&&ze,f,I),Ot=j()(`${dn}-container`,{[`${dn}-blur`]:oe}),Dt=(a=Hn!=null?Hn:Yt==null?void 0:Yt.indicator)!==null&&a!==void 0?a:Qn,Tt=Object.assign(Object.assign({},Yt==null?void 0:Yt.style),Ht),Zt=y.createElement("div",Object.assign({},Gn,{style:Tt,className:bt,"aria-live":"polite","aria-busy":oe}),y.createElement(En,{prefixCls:dn,indicator:Dt,percent:Ie}),at&&(it||on)?y.createElement("div",{className:`${dn}-text`},at):null);return Vn(it?y.createElement("div",Object.assign({},Gn,{className:j()(`${dn}-nested-loading`,Ut,f,I)}),oe&&y.createElement("div",{key:"loading"},Zt),y.createElement("div",{className:Ot,key:"container"},On)):on?y.createElement("div",{className:j()(`${dn}-fullscreen`,{[`${dn}-fullscreen-show`]:oe},ze,f,I)},Zt):Zt)};lr.setDefaultIndicator=n=>{Qn=n};var Wn=lr;const ie=y.createContext({}),w=ie.Consumer;var m=function(n,a){var N={};for(var P in n)Object.prototype.hasOwnProperty.call(n,P)&&a.indexOf(P)<0&&(N[P]=n[P]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var ae=0,P=Object.getOwnPropertySymbols(n);ae{const{getPrefixCls:N,direction:P}=y.useContext(b.E_),{gutter:ae,wrap:Ne}=y.useContext(ue),{prefixCls:ze,span:pt,order:at,offset:Ut,push:Ht,pull:On,className:on,children:Hn,flex:Tn,style:Gn}=n,Sn=m(n,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),Jt=N("col",ze),[Yt,dn,Vn]=Oe(Jt),f={};let I={};C.forEach(Ie=>{let it={};const bt=n[Ie];typeof bt=="number"?it.span=bt:typeof bt=="object"&&(it=bt||{}),delete Sn[Ie],I=Object.assign(Object.assign({},I),{[`${Jt}-${Ie}-${it.span}`]:it.span!==void 0,[`${Jt}-${Ie}-order-${it.order}`]:it.order||it.order===0,[`${Jt}-${Ie}-offset-${it.offset}`]:it.offset||it.offset===0,[`${Jt}-${Ie}-push-${it.push}`]:it.push||it.push===0,[`${Jt}-${Ie}-pull-${it.pull}`]:it.pull||it.pull===0,[`${Jt}-rtl`]:P==="rtl"}),it.flex&&(I[`${Jt}-${Ie}-flex`]=!0,f[`--${Jt}-${Ie}-flex`]=L(it.flex))});const oe=j()(Jt,{[`${Jt}-${pt}`]:pt!==void 0,[`${Jt}-order-${at}`]:at,[`${Jt}-offset-${Ut}`]:Ut,[`${Jt}-push-${Ht}`]:Ht,[`${Jt}-pull-${On}`]:On},on,I,dn,Vn),ve={};if(ae&&ae[0]>0){const Ie=ae[0]/2;ve.paddingLeft=Ie,ve.paddingRight=Ie}return Tn&&(ve.flex=L(Tn),Ne===!1&&!ve.minWidth&&(ve.minWidth=0)),Yt(y.createElement("div",Object.assign({},Sn,{style:Object.assign(Object.assign(Object.assign({},ve),Gn),f),className:oe,ref:a}),Hn))}),Re=function(n,a){var N={};for(var P in n)Object.prototype.hasOwnProperty.call(n,P)&&a.indexOf(P)<0&&(N[P]=n[P]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var ae=0,P=Object.getOwnPropertySymbols(n);ae{var{prefixCls:a,className:N,avatar:P,title:ae,description:Ne}=n,ze=Re(n,["prefixCls","className","avatar","title","description"]);const{getPrefixCls:pt}=(0,y.useContext)(b.E_),at=pt("list",a),Ut=j()(`${at}-item-meta`,N),Ht=y.createElement("div",{className:`${at}-item-meta-content`},ae&&y.createElement("h4",{className:`${at}-item-meta-title`},ae),Ne&&y.createElement("div",{className:`${at}-item-meta-description`},Ne));return y.createElement("div",Object.assign({},ze,{className:Ut}),P&&y.createElement("div",{className:`${at}-item-meta-avatar`},P),(ae||Ne)&&Ht)},Pe=y.forwardRef((n,a)=>{const{prefixCls:N,children:P,actions:ae,extra:Ne,styles:ze,className:pt,classNames:at,colStyle:Ut}=n,Ht=Re(n,["prefixCls","children","actions","extra","styles","className","classNames","colStyle"]),{grid:On,itemLayout:on}=(0,y.useContext)(ie),{getPrefixCls:Hn,list:Tn}=(0,y.useContext)(b.E_),Gn=oe=>{var ve,Ie;return j()((Ie=(ve=Tn==null?void 0:Tn.item)===null||ve===void 0?void 0:ve.classNames)===null||Ie===void 0?void 0:Ie[oe],at==null?void 0:at[oe])},Sn=oe=>{var ve,Ie;return Object.assign(Object.assign({},(Ie=(ve=Tn==null?void 0:Tn.item)===null||ve===void 0?void 0:ve.styles)===null||Ie===void 0?void 0:Ie[oe]),ze==null?void 0:ze[oe])},Jt=()=>{let oe=!1;return y.Children.forEach(P,ve=>{typeof ve=="string"&&(oe=!0)}),oe&&y.Children.count(P)>1},Yt=()=>on==="vertical"?!!Ne:!Jt(),dn=Hn("list",N),Vn=ae&&ae.length>0&&y.createElement("ul",{className:j()(`${dn}-item-action`,Gn("actions")),key:"actions",style:Sn("actions")},ae.map((oe,ve)=>y.createElement("li",{key:`${dn}-item-action-${ve}`},oe,ve!==ae.length-1&&y.createElement("em",{className:`${dn}-item-action-split`})))),f=On?"div":"li",I=y.createElement(f,Object.assign({},Ht,On?{}:{ref:a},{className:j()(`${dn}-item`,{[`${dn}-item-no-flex`]:!Yt()},pt)}),on==="vertical"&&Ne?[y.createElement("div",{className:`${dn}-item-main`,key:"content"},P,Vn),y.createElement("div",{className:j()(`${dn}-item-extra`,Gn("extra")),key:"extra",style:Sn("extra")},Ne)]:[P,Vn,(0,Rt.Tm)(Ne,{key:"extra"})]);return On?y.createElement(fe,{ref:a,flex:1,style:Ut},I):I});Pe.Meta=Ge;var Lt=Pe;const Wt=n=>{const{listBorderedCls:a,componentCls:N,paddingLG:P,margin:ae,itemPaddingSM:Ne,itemPaddingLG:ze,marginLG:pt,borderRadiusLG:at}=n;return{[a]:{border:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorBorder}`,borderRadius:at,[`${N}-header,${N}-footer,${N}-item`]:{paddingInline:P},[`${N}-pagination`]:{margin:`${(0,_.bf)(ae)} ${(0,_.bf)(pt)}`}},[`${a}${N}-sm`]:{[`${N}-item,${N}-header,${N}-footer`]:{padding:Ne}},[`${a}${N}-lg`]:{[`${N}-item,${N}-header,${N}-footer`]:{padding:ze}}}},gn=n=>{const{componentCls:a,screenSM:N,screenMD:P,marginLG:ae,marginSM:Ne,margin:ze}=n;return{[`@media screen and (max-width:${P}px)`]:{[a]:{[`${a}-item`]:{[`${a}-item-action`]:{marginInlineStart:ae}}},[`${a}-vertical`]:{[`${a}-item`]:{[`${a}-item-extra`]:{marginInlineStart:ae}}}},[`@media screen and (max-width: ${N}px)`]:{[a]:{[`${a}-item`]:{flexWrap:"wrap",[`${a}-action`]:{marginInlineStart:Ne}}},[`${a}-vertical`]:{[`${a}-item`]:{flexWrap:"wrap-reverse",[`${a}-item-main`]:{minWidth:n.contentWidth},[`${a}-item-extra`]:{margin:`auto auto ${(0,_.bf)(ze)}`}}}}}},_t=n=>{const{componentCls:a,antCls:N,controlHeight:P,minHeight:ae,paddingSM:Ne,marginLG:ze,padding:pt,itemPadding:at,colorPrimary:Ut,itemPaddingSM:Ht,itemPaddingLG:On,paddingXS:on,margin:Hn,colorText:Tn,colorTextDescription:Gn,motionDurationSlow:Sn,lineWidth:Jt,headerBg:Yt,footerBg:dn,emptyTextPadding:Vn,metaMarginBottom:f,avatarMarginRight:I,titleMarginBottom:oe,descriptionFontSize:ve}=n;return{[a]:Object.assign(Object.assign({},(0,Ir.Wf)(n)),{position:"relative","*":{outline:"none"},[`${a}-header`]:{background:Yt},[`${a}-footer`]:{background:dn},[`${a}-header, ${a}-footer`]:{paddingBlock:Ne},[`${a}-pagination`]:{marginBlockStart:ze,[`${N}-pagination-options`]:{textAlign:"start"}},[`${a}-spin`]:{minHeight:ae,textAlign:"center"},[`${a}-items`]:{margin:0,padding:0,listStyle:"none"},[`${a}-item`]:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:at,color:Tn,[`${a}-item-meta`]:{display:"flex",flex:1,alignItems:"flex-start",maxWidth:"100%",[`${a}-item-meta-avatar`]:{marginInlineEnd:I},[`${a}-item-meta-content`]:{flex:"1 0",width:0,color:Tn},[`${a}-item-meta-title`]:{margin:`0 0 ${(0,_.bf)(n.marginXXS)} 0`,color:Tn,fontSize:n.fontSize,lineHeight:n.lineHeight,"> a":{color:Tn,transition:`all ${Sn}`,"&:hover":{color:Ut}}},[`${a}-item-meta-description`]:{color:Gn,fontSize:ve,lineHeight:n.lineHeight}},[`${a}-item-action`]:{flex:"0 0 auto",marginInlineStart:n.marginXXL,padding:0,fontSize:0,listStyle:"none","& > li":{position:"relative",display:"inline-block",padding:`0 ${(0,_.bf)(on)}`,color:Gn,fontSize:n.fontSize,lineHeight:n.lineHeight,textAlign:"center","&:first-child":{paddingInlineStart:0}},[`${a}-item-action-split`]:{position:"absolute",insetBlockStart:"50%",insetInlineEnd:0,width:Jt,height:n.calc(n.fontHeight).sub(n.calc(n.marginXXS).mul(2)).equal(),transform:"translateY(-50%)",backgroundColor:n.colorSplit}}},[`${a}-empty`]:{padding:`${(0,_.bf)(pt)} 0`,color:Gn,fontSize:n.fontSizeSM,textAlign:"center"},[`${a}-empty-text`]:{padding:Vn,color:n.colorTextDisabled,fontSize:n.fontSize,textAlign:"center"},[`${a}-item-no-flex`]:{display:"block"}}),[`${a}-grid ${N}-col > ${a}-item`]:{display:"block",maxWidth:"100%",marginBlockEnd:Hn,paddingBlock:0,borderBlockEnd:"none"},[`${a}-vertical ${a}-item`]:{alignItems:"initial",[`${a}-item-main`]:{display:"block",flex:1},[`${a}-item-extra`]:{marginInlineStart:ze},[`${a}-item-meta`]:{marginBlockEnd:f,[`${a}-item-meta-title`]:{marginBlockStart:0,marginBlockEnd:oe,color:Tn,fontSize:n.fontSizeLG,lineHeight:n.lineHeightLG}},[`${a}-item-action`]:{marginBlockStart:pt,marginInlineStart:"auto","> li":{padding:`0 ${(0,_.bf)(pt)}`,"&:first-child":{paddingInlineStart:0}}}},[`${a}-split ${a}-item`]:{borderBlockEnd:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorSplit}`,"&:last-child":{borderBlockEnd:"none"}},[`${a}-split ${a}-header`]:{borderBlockEnd:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorSplit}`},[`${a}-split${a}-empty ${a}-footer`]:{borderTop:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorSplit}`},[`${a}-loading ${a}-spin-nested-loading`]:{minHeight:P},[`${a}-split${a}-something-after-last-item ${N}-spin-container > ${a}-items > ${a}-item:last-child`]:{borderBlockEnd:`${(0,_.bf)(n.lineWidth)} ${n.lineType} ${n.colorSplit}`},[`${a}-lg ${a}-item`]:{padding:On},[`${a}-sm ${a}-item`]:{padding:Ht},[`${a}:not(${a}-vertical)`]:{[`${a}-item-no-flex`]:{[`${a}-item-action`]:{float:"right"}}}}},Vt=n=>({contentWidth:220,itemPadding:`${(0,_.bf)(n.paddingContentVertical)} 0`,itemPaddingSM:`${(0,_.bf)(n.paddingContentVerticalSM)} ${(0,_.bf)(n.paddingContentHorizontal)}`,itemPaddingLG:`${(0,_.bf)(n.paddingContentVerticalLG)} ${(0,_.bf)(n.paddingContentHorizontalLG)}`,headerBg:"transparent",footerBg:"transparent",emptyTextPadding:n.padding,metaMarginBottom:n.padding,avatarMarginRight:n.padding,titleMarginBottom:n.paddingSM,descriptionFontSize:n.fontSize});var wt=(0,Be.I$)("List",n=>{const a=(0,Le.IX)(n,{listBorderedCls:`${n.componentCls}-bordered`,minHeight:n.controlHeightLG});return[_t(a),Wt(a),gn(a)]},Vt),fn=function(n,a){var N={};for(var P in n)Object.prototype.hasOwnProperty.call(n,P)&&a.indexOf(P)<0&&(N[P]=n[P]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var ae=0,P=Object.getOwnPropertySymbols(n);ae(St,kt)=>{var pn;ve(St),it(kt),N&&((pn=N==null?void 0:N[ke])===null||pn===void 0||pn.call(N,St,kt))},Xt=At("onChange"),st=At("onShowSizeChange"),M=(ke,St)=>{if(!dn)return null;let kt;return typeof Yt=="function"?kt=Yt(ke):Yt?kt=ke[Yt]:kt=ke.key,kt||(kt=`list-item-${St}`),y.createElement(y.Fragment,{key:kt},dn(ke,St))},G=()=>!!(On||N||Sn),B=bt("list",P),[le,Ce,Ue]=wt(B);let ot=Jt;typeof ot=="boolean"&&(ot={spinning:ot});const dt=!!(ot!=null&&ot.spinning),lt=(0,Q.Z)(Tn);let l="";switch(lt){case"large":l="lg";break;case"small":l="sm";break;default:break}const d=j()(B,{[`${B}-vertical`]:Ht==="vertical",[`${B}-${l}`]:l,[`${B}-split`]:Ne,[`${B}-bordered`]:ae,[`${B}-loading`]:dt,[`${B}-grid`]:!!on,[`${B}-something-after-last-item`]:G(),[`${B}-rtl`]:Dt==="rtl"},Tt==null?void 0:Tt.className,ze,pt,Ce,Ue),p=A(Zt,{total:Hn.length,current:oe,pageSize:Ie},N||{}),x=Math.ceil(p.total/p.pageSize);p.current>x&&(p.current=x);const W=N&&y.createElement("div",{className:j()(`${B}-pagination`)},y.createElement($t,Object.assign({align:"end"},p,{onChange:Xt,onShowSizeChange:st})));let ge=(0,r.Z)(Hn);N&&Hn.length>(p.current-1)*p.pageSize&&(ge=(0,r.Z)(Hn).splice((p.current-1)*p.pageSize,p.pageSize));const Ee=Object.keys(on||{}).some(ke=>["xs","sm","md","lg","xl","xxl"].includes(ke)),et=Me(Ee),Ze=y.useMemo(()=>{for(let ke=0;ke{if(!on)return;const ke=Ze&&on[Ze]?on[Ze]:on.column;if(ke)return{width:`${100/ke}%`,maxWidth:`${100/ke}%`}},[JSON.stringify(on),Ze]);let mt=dt&&y.createElement("div",{style:{minHeight:53}});if(ge.length>0){const ke=ge.map((St,kt)=>M(St,kt));mt=on?y.createElement(g,{gutter:on.gutter},y.Children.map(ke,St=>y.createElement("div",{key:St==null?void 0:St.key,style:_e},St))):y.createElement("ul",{className:`${B}-items`},ke)}else!Ut&&!dt&&(mt=y.createElement("div",{className:`${B}-empty-text`},(Vn==null?void 0:Vn.emptyText)||(Ot==null?void 0:Ot("List"))||y.createElement(we.Z,{componentName:"List"})));const qe=p.position||"bottom",rt=y.useMemo(()=>({grid:on,itemLayout:Ht}),[JSON.stringify(on),Ht]);return le(y.createElement(ie.Provider,{value:rt},y.createElement("div",Object.assign({ref:a,style:Object.assign(Object.assign({},Tt==null?void 0:Tt.style),at),className:d},f),(qe==="top"||qe==="both")&&W,Gn&&y.createElement("div",{className:`${B}-header`},Gn),y.createElement(Wn,Object.assign({},ot),mt,Ut),Sn&&y.createElement("div",{className:`${B}-footer`},Sn),On||(qe==="bottom"||qe==="both")&&W)))}const K=y.forwardRef(u);K.Item=Lt;var re=K},76745:function(Ve,k,s){"use strict";var r=s(67294);const y=(0,r.createContext)(void 0);k.Z=y},11312:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return b}});var r=s(62906),y=s(1413),X={yearFormat:"YYYY",dayFormat:"D",cellMeridiemFormat:"A",monthBeforeYear:!0},j=(0,y.Z)((0,y.Z)({},X),{},{locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"OK",clear:"Clear",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"}),Z=j,R={placeholder:"Select time",rangePlaceholder:["Start time","End time"]},Y={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"]},Z),timePickerLocale:Object.assign({},R)},O=Y;const $="${label} is not a valid ${type}";var b={locale:"en",Pagination:r.Z,DatePicker:Y,TimePicker:R,Calendar:O,global:{placeholder:"Please select"},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:$,method:$,array:$,object:$,number:$,date:$,boolean:$,integer:$,float:$,regexp:$,email:$,url:$,hex:$},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"}}},10110:function(Ve,k,s){"use strict";var r=s(67294),y=s(76745),X=s(11312);const j=(Z,A)=>{const R=r.useContext(y.Z),v=r.useMemo(()=>{var O;const $=A||X.Z[Z],T=(O=R==null?void 0:R[Z])!==null&&O!==void 0?O:{};return Object.assign(Object.assign({},typeof $=="function"?$():$),T||{})},[Z,A,R]),Y=r.useMemo(()=>{const O=R==null?void 0:R.locale;return R!=null&&R.exist&&!O?X.Z.locale:O},[R]);return[v,Y]};k.Z=j},79456:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return Nt}});var r=s(67294),y=s(95480),X=s(93967),j=s.n(X),Z=function(F,H){var ee={};for(var te in F)Object.prototype.hasOwnProperty.call(F,te)&&H.indexOf(te)<0&&(ee[te]=F[te]);if(F!=null&&typeof Object.getOwnPropertySymbols=="function")for(var me=0,te=Object.getOwnPropertySymbols(F);me{let F=0;return function(){let H=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return F+=1,`${H}${F}`}})(),Y=null;var O=null,$=s(89705),T=s(66680),b=s(98423),we=s(33603),Q=s(96159),J=s(53124),ue=s(35792),Be=(0,r.createContext)({prefixCls:"",firstLevel:!0,inlineCollapsed:!1}),Le=function(F,H){var ee={};for(var te in F)Object.prototype.hasOwnProperty.call(F,te)&&H.indexOf(te)<0&&(ee[te]=F[te]);if(F!=null&&typeof Object.getOwnPropertySymbols=="function")for(var me=0,te=Object.getOwnPropertySymbols(F);me{const{prefixCls:H,className:ee,dashed:te}=F,me=Le(F,["prefixCls","className","dashed"]),{getPrefixCls:nt}=r.useContext(J.E_),h=nt("menu",H),E=j()({[`${h}-item-divider-dashed`]:!!te},ee);return r.createElement(y.iz,Object.assign({className:E},me))},Ae=s(50344),V=s(92419),he=s(21770),q=s(60566),D=s(4173),Oe=F=>{const{space:H,form:ee,children:te}=F;if(te==null)return null;let me=te;return ee&&(me=r.createElement(q.Ux,{override:!0,status:!0},me)),H&&(me=r.createElement(D.BR,null,me)),me},He=s(87263),pe=s(11568);function Qe(F){const{sizePopupArrow:H,borderRadiusXS:ee,borderRadiusOuter:te}=F,me=H/2,nt=0,h=me,E=te*1/Math.sqrt(2),ye=me-te*(1-1/Math.sqrt(2)),Se=me-ee*(1/Math.sqrt(2)),Te=te*(Math.sqrt(2)-1)+ee*(1/Math.sqrt(2)),Fe=2*me-Se,Xe=Te,Je=2*me-E,ct=ye,xt=2*me-nt,zt=h,Et=me*Math.sqrt(2)+te*(Math.sqrt(2)-2),$t=te*(Math.sqrt(2)-1),jt=`polygon(${$t}px 100%, 50% ${$t}px, ${2*me-$t}px 100%, ${$t}px 100%)`,Gt=`path('M ${nt} ${h} A ${te} ${te} 0 0 0 ${E} ${ye} L ${Se} ${Te} A ${ee} ${ee} 0 0 1 ${Fe} ${Xe} L ${Je} ${ct} A ${te} ${te} 0 0 0 ${xt} ${zt} Z')`;return{arrowShadowWidth:Et,arrowPath:Gt,arrowPolygon:jt}}const ft=(F,H,ee)=>{const{sizePopupArrow:te,arrowPolygon:me,arrowPath:nt,arrowShadowWidth:h,borderRadiusXS:E,calc:ye}=F;return{pointerEvents:"none",width:te,height:te,overflow:"hidden","&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:te,height:ye(te).div(2).equal(),background:H,clipPath:{_multi_value_:!0,value:[me,nt]},content:'""'},"&::after":{content:'""',position:"absolute",width:h,height:h,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:`0 0 ${(0,pe.bf)(E)} 0`},transform:"translateY(50%) rotate(-135deg)",boxShadow:ee,zIndex:0,background:"transparent"}}},Pt=8;function g(F){const{contentRadius:H,limitVerticalRadius:ee}=F,te=H>12?H+2:12;return{arrowOffsetHorizontal:te,arrowOffsetVertical:ee?Pt:te}}function de(F,H){return F?H:{}}function ce(F,H,ee){const{componentCls:te,boxShadowPopoverArrow:me,arrowOffsetVertical:nt,arrowOffsetHorizontal:h}=F,{arrowDistance:E=0,arrowPlacement:ye={left:!0,right:!0,top:!0,bottom:!0}}=ee||{};return{[te]:Object.assign(Object.assign(Object.assign(Object.assign({[`${te}-arrow`]:[Object.assign(Object.assign({position:"absolute",zIndex:1,display:"block"},ft(F,H,me)),{"&:before":{background:H}})]},de(!!ye.top,{[[`&-placement-top > ${te}-arrow`,`&-placement-topLeft > ${te}-arrow`,`&-placement-topRight > ${te}-arrow`].join(",")]:{bottom:E,transform:"translateY(100%) rotate(180deg)"},[`&-placement-top > ${te}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},"&-placement-topLeft":{"--arrow-offset-horizontal":h,[`> ${te}-arrow`]:{left:{_skip_check_:!0,value:h}}},"&-placement-topRight":{"--arrow-offset-horizontal":`calc(100% - ${(0,pe.bf)(h)})`,[`> ${te}-arrow`]:{right:{_skip_check_:!0,value:h}}}})),de(!!ye.bottom,{[[`&-placement-bottom > ${te}-arrow`,`&-placement-bottomLeft > ${te}-arrow`,`&-placement-bottomRight > ${te}-arrow`].join(",")]:{top:E,transform:"translateY(-100%)"},[`&-placement-bottom > ${te}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},"&-placement-bottomLeft":{"--arrow-offset-horizontal":h,[`> ${te}-arrow`]:{left:{_skip_check_:!0,value:h}}},"&-placement-bottomRight":{"--arrow-offset-horizontal":`calc(100% - ${(0,pe.bf)(h)})`,[`> ${te}-arrow`]:{right:{_skip_check_:!0,value:h}}}})),de(!!ye.left,{[[`&-placement-left > ${te}-arrow`,`&-placement-leftTop > ${te}-arrow`,`&-placement-leftBottom > ${te}-arrow`].join(",")]:{right:{_skip_check_:!0,value:E},transform:"translateX(100%) rotate(90deg)"},[`&-placement-left > ${te}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},[`&-placement-leftTop > ${te}-arrow`]:{top:nt},[`&-placement-leftBottom > ${te}-arrow`]:{bottom:nt}})),de(!!ye.right,{[[`&-placement-right > ${te}-arrow`,`&-placement-rightTop > ${te}-arrow`,`&-placement-rightBottom > ${te}-arrow`].join(",")]:{left:{_skip_check_:!0,value:E},transform:"translateX(-100%) rotate(-90deg)"},[`&-placement-right > ${te}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},[`&-placement-rightTop > ${te}-arrow`]:{top:nt},[`&-placement-rightBottom > ${te}-arrow`]:{bottom:nt}}))}}function be(F,H,ee,te){if(te===!1)return{adjustX:!1,adjustY:!1};const me=te&&typeof te=="object"?te:{},nt={};switch(F){case"top":case"bottom":nt.shiftX=H.arrowOffsetHorizontal*2+ee,nt.shiftY=!0,nt.adjustY=!0;break;case"left":case"right":nt.shiftY=H.arrowOffsetVertical*2+ee,nt.shiftX=!0,nt.adjustX=!0;break}const h=Object.assign(Object.assign({},nt),me);return h.shiftX||(h.adjustX=!0),h.shiftY||(h.adjustY=!0),h}const Me={left:{points:["cr","cl"]},right:{points:["cl","cr"]},top:{points:["bc","tc"]},bottom:{points:["tc","bc"]},topLeft:{points:["bl","tl"]},leftTop:{points:["tr","tl"]},topRight:{points:["br","tr"]},rightTop:{points:["tl","tr"]},bottomRight:{points:["tr","br"]},rightBottom:{points:["bl","br"]},bottomLeft:{points:["tl","bl"]},leftBottom:{points:["br","bl"]}},$e={topLeft:{points:["bl","tc"]},leftTop:{points:["tr","cl"]},topRight:{points:["br","tc"]},rightTop:{points:["tl","cr"]},bottomRight:{points:["tr","bc"]},rightBottom:{points:["bl","cr"]},bottomLeft:{points:["tl","bc"]},leftBottom:{points:["br","cl"]}},yt=new Set(["topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"]);function Qt(F){const{arrowWidth:H,autoAdjustOverflow:ee,arrowPointAtCenter:te,offset:me,borderRadius:nt,visibleFirst:h}=F,E=H/2,ye={};return Object.keys(Me).forEach(Se=>{const Te=te&&$e[Se]||Me[Se],Fe=Object.assign(Object.assign({},Te),{offset:[0,0],dynamicInset:!0});switch(ye[Se]=Fe,yt.has(Se)&&(Fe.autoArrow=!1),Se){case"top":case"topLeft":case"topRight":Fe.offset[1]=-E-me;break;case"bottom":case"bottomLeft":case"bottomRight":Fe.offset[1]=E+me;break;case"left":case"leftTop":case"leftBottom":Fe.offset[0]=-E-me;break;case"right":case"rightTop":case"rightBottom":Fe.offset[0]=E+me;break}const Xe=g({contentRadius:nt,limitVerticalRadius:!0});if(te)switch(Se){case"topLeft":case"bottomLeft":Fe.offset[0]=-Xe.arrowOffsetHorizontal-E;break;case"topRight":case"bottomRight":Fe.offset[0]=Xe.arrowOffsetHorizontal+E;break;case"leftTop":case"rightTop":Fe.offset[1]=-Xe.arrowOffsetHorizontal*2+E;break;case"leftBottom":case"rightBottom":Fe.offset[1]=Xe.arrowOffsetHorizontal*2-E;break}Fe.overflow=be(Se,Xe,H,ee),h&&(Fe.htmlRegion="visibleFirst")}),ye}var nn=s(27288),vn=s(43945),Ln=s(25976),ht=s(14747),z=s(93590);const se=new pe.E4("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),Ye=new pe.E4("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),De=new pe.E4("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),xe=new pe.E4("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),je=new pe.E4("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),It=new pe.E4("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),cn=new pe.E4("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),Fn=new pe.E4("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),Nn=new pe.E4("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),qn=new pe.E4("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),or=new pe.E4("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),dr=new pe.E4("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),Zn={zoom:{inKeyframes:se,outKeyframes:Ye},"zoom-big":{inKeyframes:De,outKeyframes:xe},"zoom-big-fast":{inKeyframes:De,outKeyframes:xe},"zoom-left":{inKeyframes:cn,outKeyframes:Fn},"zoom-right":{inKeyframes:Nn,outKeyframes:qn},"zoom-up":{inKeyframes:je,outKeyframes:It},"zoom-down":{inKeyframes:or,outKeyframes:dr}},jn=(F,H)=>{const{antCls:ee}=F,te=`${ee}-${H}`,{inKeyframes:me,outKeyframes:nt}=Zn[H];return[(0,z.R)(te,me,nt,H==="zoom-big-fast"?F.motionDurationFast:F.motionDurationMid),{[` + ${te}-enter, + ${te}-appear + `]:{transform:"scale(0)",opacity:0,animationTimingFunction:F.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${te}-leave`]:{animationTimingFunction:F.motionEaseInOutCirc}}]},mn=["blue","purple","cyan","green","magenta","pink","red","orange","yellow","volcano","geekblue","lime","gold"];function Ft(F,H){return mn.reduce((ee,te)=>{const me=F[`${te}1`],nt=F[`${te}3`],h=F[`${te}6`],E=F[`${te}7`];return Object.assign(Object.assign({},ee),H(te,{lightColor:me,lightBorderColor:nt,darkColor:h,textColor:E}))},{})}var Ct=s(83262),Mt=s(83559);const tn=F=>{const{componentCls:H,tooltipMaxWidth:ee,tooltipColor:te,tooltipBg:me,tooltipBorderRadius:nt,zIndexPopup:h,controlHeight:E,boxShadowSecondary:ye,paddingSM:Se,paddingXS:Te}=F;return[{[H]:Object.assign(Object.assign(Object.assign(Object.assign({},(0,ht.Wf)(F)),{position:"absolute",zIndex:h,display:"block",width:"max-content",maxWidth:ee,visibility:"visible","--valid-offset-x":"var(--arrow-offset-horizontal, var(--arrow-x))",transformOrigin:["var(--valid-offset-x, 50%)","var(--arrow-y, 50%)"].join(" "),"&-hidden":{display:"none"},"--antd-arrow-background-color":me,[`${H}-inner`]:{minWidth:"1em",minHeight:E,padding:`${(0,pe.bf)(F.calc(Se).div(2).equal())} ${(0,pe.bf)(Te)}`,color:te,textAlign:"start",textDecoration:"none",wordWrap:"break-word",backgroundColor:me,borderRadius:nt,boxShadow:ye,boxSizing:"border-box"},[["&-placement-left","&-placement-leftTop","&-placement-leftBottom","&-placement-right","&-placement-rightTop","&-placement-rightBottom"].join(",")]:{[`${H}-inner`]:{borderRadius:F.min(nt,Pt)}},[`${H}-content`]:{position:"relative"}}),Ft(F,(Fe,Xe)=>{let{darkColor:Je}=Xe;return{[`&${H}-${Fe}`]:{[`${H}-inner`]:{backgroundColor:Je},[`${H}-arrow`]:{"--antd-arrow-background-color":Je}}}})),{"&-rtl":{direction:"rtl"}})},ce(F,"var(--antd-arrow-background-color)"),{[`${H}-pure`]:{position:"relative",maxWidth:"none",margin:F.sizePopupArrow}}]},qt=F=>Object.assign(Object.assign({zIndexPopup:F.zIndexPopupBase+70},g({contentRadius:F.borderRadius,limitVerticalRadius:!0})),Qe((0,Ct.IX)(F,{borderRadiusOuter:Math.min(F.borderRadiusOuter,4)})));var un=function(F){let H=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return(0,Mt.I$)("Tooltip",te=>{const{borderRadius:me,colorTextLightSolid:nt,colorBgSpotlight:h}=te,E=(0,Ct.IX)(te,{tooltipMaxWidth:250,tooltipColor:nt,tooltipBorderRadius:me,tooltipBg:h});return[tn(E),jn(te,"zoom-big-fast")]},qt,{resetStyle:!1,injectStyle:H})(F)},hn=s(74902);const gt=mn.map(F=>`${F}-inverse`),tt=null;function Ke(F){return(arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0)?[].concat((0,hn.Z)(gt),(0,hn.Z)(mn)).includes(F):mn.includes(F)}function mr(F){return tt.includes(F)}function rr(F,H){const ee=Ke(H),te=j()({[`${F}-${H}`]:H&&ee}),me={},nt={};return H&&!ee&&(me.background=H,nt["--antd-arrow-background-color"]=H),{className:te,overlayStyle:me,arrowStyle:nt}}var Sr=F=>{const{prefixCls:H,className:ee,placement:te="top",title:me,color:nt,overlayInnerStyle:h}=F,{getPrefixCls:E}=r.useContext(J.E_),ye=E("tooltip",H),[Se,Te,Fe]=un(ye),Xe=rr(ye,nt),Je=Xe.arrowStyle,ct=Object.assign(Object.assign({},h),Xe.overlayStyle),xt=j()(Te,Fe,ye,`${ye}-pure`,`${ye}-placement-${te}`,ee,Xe.className);return Se(r.createElement("div",{className:xt,style:Je},r.createElement("div",{className:`${ye}-arrow`}),r.createElement(V.G,Object.assign({},F,{className:Te,prefixCls:ye,overlayInnerStyle:ct}),me)))},pr=function(F,H){var ee={};for(var te in F)Object.prototype.hasOwnProperty.call(F,te)&&H.indexOf(te)<0&&(ee[te]=F[te]);if(F!=null&&typeof Object.getOwnPropertySymbols=="function")for(var me=0,te=Object.getOwnPropertySymbols(F);me{var ee,te;const{prefixCls:me,openClassName:nt,getTooltipContainer:h,overlayClassName:E,color:ye,overlayInnerStyle:Se,children:Te,afterOpenChange:Fe,afterVisibleChange:Xe,destroyTooltipOnHide:Je,arrow:ct=!0,title:xt,overlay:zt,builtinPlacements:Et,arrowPointAtCenter:$t=!1,autoAdjustOverflow:jt=!0}=F,Gt=!!ct,[,Rt]=(0,Ln.ZP)(),{getPopupContainer:xn,getPrefixCls:en,direction:ln}=r.useContext(J.E_),an=(0,nn.ln)("Tooltip"),bn=r.useRef(null),_n=()=>{var gn;(gn=bn.current)===null||gn===void 0||gn.forceAlign()};r.useImperativeHandle(H,()=>{var gn;return{forceAlign:_n,forcePopupAlign:()=>{an.deprecated(!1,"forcePopupAlign","forceAlign"),_n()},nativeElement:(gn=bn.current)===null||gn===void 0?void 0:gn.nativeElement}});const[Pn,Bn]=(0,he.Z)(!1,{value:(ee=F.open)!==null&&ee!==void 0?ee:F.visible,defaultValue:(te=F.defaultOpen)!==null&&te!==void 0?te:F.defaultVisible}),rn=!xt&&!zt&&xt!==0,En=gn=>{var _t,Vt;Bn(rn?!1:gn),rn||((_t=F.onOpenChange)===null||_t===void 0||_t.call(F,gn),(Vt=F.onVisibleChange)===null||Vt===void 0||Vt.call(F,gn))},yn=r.useMemo(()=>{var gn,_t;let Vt=$t;return typeof ct=="object"&&(Vt=(_t=(gn=ct.pointAtCenter)!==null&&gn!==void 0?gn:ct.arrowPointAtCenter)!==null&&_t!==void 0?_t:$t),Et||Qt({arrowPointAtCenter:Vt,autoAdjustOverflow:jt,arrowWidth:Gt?Rt.sizePopupArrow:0,borderRadius:Rt.borderRadius,offset:Rt.marginXXS,visibleFirst:!0})},[$t,ct,Et,Rt]),Mn=r.useMemo(()=>xt===0?xt:zt||xt||"",[zt,xt]),An=r.createElement(Oe,{space:!0},typeof Mn=="function"?Mn():Mn),{getPopupContainer:sn,placement:wn="top",mouseEnterDelay:Kn=.1,mouseLeaveDelay:er=.1,overlayStyle:Cn,rootClassName:ar}=F,Or=pr(F,["getPopupContainer","placement","mouseEnterDelay","mouseLeaveDelay","overlayStyle","rootClassName"]),Qn=en("tooltip",me),br=en(),lr=F["data-popover-inject"];let Wn=Pn;!("open"in F)&&!("visible"in F)&&rn&&(Wn=!1);const ie=r.isValidElement(Te)&&!(0,Q.M2)(Te)?Te:r.createElement("span",null,Te),w=ie.props,m=!w.className||typeof w.className=="string"?j()(w.className,nt||`${Qn}-open`):w.className,[L,C,ne]=un(Qn,!lr),fe=rr(Qn,ye),Re=fe.arrowStyle,Ge=Object.assign(Object.assign({},Se),fe.overlayStyle),ut=j()(E,{[`${Qn}-rtl`]:ln==="rtl"},fe.className,ar,C,ne),[Pe,Lt]=(0,He.Cn)("Tooltip",Or.zIndex),Wt=r.createElement(V.Z,Object.assign({},Or,{zIndex:Pe,showArrow:Gt,placement:wn,mouseEnterDelay:Kn,mouseLeaveDelay:er,prefixCls:Qn,overlayClassName:ut,overlayStyle:Object.assign(Object.assign({},Re),Cn),getTooltipContainer:sn||h||xn,ref:bn,builtinPlacements:yn,overlay:An,visible:Wn,onVisibleChange:En,afterVisibleChange:Fe!=null?Fe:Xe,overlayInnerStyle:Ge,arrowContent:r.createElement("span",{className:`${Qn}-arrow-content`}),motion:{motionName:(0,we.m)(br,"zoom-big-fast",F.transitionName),motionDeadline:1e3},destroyTooltipOnHide:!!Je}),Wn?(0,Q.Tm)(ie,{className:m}):ie);return L(r.createElement(vn.Z.Provider,{value:Lt},Wt))});Lr._InternalPanelDoNotUseOrYouWillBeFired=Sr;var Mr=Lr,Vr=F=>{var H;const{className:ee,children:te,icon:me,title:nt,danger:h}=F,{prefixCls:E,firstLevel:ye,direction:Se,disableMenuItemTitleTooltip:Te,inlineCollapsed:Fe}=r.useContext(Be),Xe=$t=>{const jt=te==null?void 0:te[0],Gt=r.createElement("span",{className:`${E}-title-content`},te);return(!me||r.isValidElement(te)&&te.type==="span")&&te&&$t&&ye&&typeof jt=="string"?r.createElement("div",{className:`${E}-inline-collapsed-noicon`},jt.charAt(0)):Gt},{siderCollapsed:Je}=r.useContext(R);let ct=nt;typeof nt=="undefined"?ct=ye?te:"":nt===!1&&(ct="");const xt={title:ct};!Je&&!Fe&&(xt.title=null,xt.open=!1);const zt=(0,Ae.Z)(te).length;let Et=r.createElement(y.ck,Object.assign({},(0,b.Z)(F,["title","icon","danger"]),{className:j()({[`${E}-item-danger`]:h,[`${E}-item-only-child`]:(me?zt+1:zt)===1},ee),title:typeof nt=="string"?nt:void 0}),(0,Q.Tm)(me,{className:j()(r.isValidElement(me)?(H=me.props)===null||H===void 0?void 0:H.className:"",`${E}-item-icon`)}),Xe(Fe));return Te||(Et=r.createElement(Mr,Object.assign({},xt,{placement:Se==="rtl"?"left":"right",overlayClassName:`${E}-inline-collapsed-tooltip`}),Et)),Et},Xr=s(42550),Qr=function(F,H){var ee={};for(var te in F)Object.prototype.hasOwnProperty.call(F,te)&&H.indexOf(te)<0&&(ee[te]=F[te]);if(F!=null&&typeof Object.getOwnPropertySymbols=="function")for(var me=0,te=Object.getOwnPropertySymbols(F);me({[F.componentCls]:{[`${F.antCls}-motion-collapse-legacy`]:{overflow:"hidden","&-active":{transition:`height ${F.motionDurationMid} ${F.motionEaseInOut}, + opacity ${F.motionDurationMid} ${F.motionEaseInOut} !important`}},[`${F.antCls}-motion-collapse`]:{overflow:"hidden",transition:`height ${F.motionDurationMid} ${F.motionEaseInOut}, + opacity ${F.motionDurationMid} ${F.motionEaseInOut} !important`}}}),Zr=s(67771),Fr=F=>{const{componentCls:H,motionDurationSlow:ee,horizontalLineHeight:te,colorSplit:me,lineWidth:nt,lineType:h,itemPaddingInline:E}=F;return{[`${H}-horizontal`]:{lineHeight:te,border:0,borderBottom:`${(0,pe.bf)(nt)} ${h} ${me}`,boxShadow:"none","&::after":{display:"block",clear:"both",height:0,content:'"\\20"'},[`${H}-item, ${H}-submenu`]:{position:"relative",display:"inline-block",verticalAlign:"bottom",paddingInline:E},[`> ${H}-item:hover, + > ${H}-item-active, + > ${H}-submenu ${H}-submenu-title:hover`]:{backgroundColor:"transparent"},[`${H}-item, ${H}-submenu-title`]:{transition:[`border-color ${ee}`,`background ${ee}`].join(",")},[`${H}-submenu-arrow`]:{display:"none"}}}},so=F=>{let{componentCls:H,menuArrowOffset:ee,calc:te}=F;return{[`${H}-rtl`]:{direction:"rtl"},[`${H}-submenu-rtl`]:{transformOrigin:"100% 0"},[`${H}-rtl${H}-vertical, + ${H}-submenu-rtl ${H}-vertical`]:{[`${H}-submenu-arrow`]:{"&::before":{transform:`rotate(-45deg) translateY(${(0,pe.bf)(te(ee).mul(-1).equal())})`},"&::after":{transform:`rotate(45deg) translateY(${(0,pe.bf)(ee)})`}}}}};const mo=F=>Object.assign({},(0,ht.oN)(F));var vo=(F,H)=>{const{componentCls:ee,itemColor:te,itemSelectedColor:me,groupTitleColor:nt,itemBg:h,subMenuItemBg:E,itemSelectedBg:ye,activeBarHeight:Se,activeBarWidth:Te,activeBarBorderWidth:Fe,motionDurationSlow:Xe,motionEaseInOut:Je,motionEaseOut:ct,itemPaddingInline:xt,motionDurationMid:zt,itemHoverColor:Et,lineType:$t,colorSplit:jt,itemDisabledColor:Gt,dangerItemColor:Rt,dangerItemHoverColor:xn,dangerItemSelectedColor:en,dangerItemActiveBg:ln,dangerItemSelectedBg:an,popupBg:bn,itemHoverBg:_n,itemActiveBg:Pn,menuSubMenuBg:Bn,horizontalItemSelectedColor:rn,horizontalItemSelectedBg:En,horizontalItemBorderRadius:yn,horizontalItemHoverBg:Mn}=F;return{[`${ee}-${H}, ${ee}-${H} > ${ee}`]:{color:te,background:h,[`&${ee}-root:focus-visible`]:Object.assign({},mo(F)),[`${ee}-item-group-title`]:{color:nt},[`${ee}-submenu-selected`]:{[`> ${ee}-submenu-title`]:{color:me}},[`${ee}-item, ${ee}-submenu-title`]:{color:te,[`&:not(${ee}-item-disabled):focus-visible`]:Object.assign({},mo(F))},[`${ee}-item-disabled, ${ee}-submenu-disabled`]:{color:`${Gt} !important`},[`${ee}-item:not(${ee}-item-selected):not(${ee}-submenu-selected)`]:{[`&:hover, > ${ee}-submenu-title:hover`]:{color:Et}},[`&:not(${ee}-horizontal)`]:{[`${ee}-item:not(${ee}-item-selected)`]:{"&:hover":{backgroundColor:_n},"&:active":{backgroundColor:Pn}},[`${ee}-submenu-title`]:{"&:hover":{backgroundColor:_n},"&:active":{backgroundColor:Pn}}},[`${ee}-item-danger`]:{color:Rt,[`&${ee}-item:hover`]:{[`&:not(${ee}-item-selected):not(${ee}-submenu-selected)`]:{color:xn}},[`&${ee}-item:active`]:{background:ln}},[`${ee}-item a`]:{"&, &:hover":{color:"inherit"}},[`${ee}-item-selected`]:{color:me,[`&${ee}-item-danger`]:{color:en},"a, a:hover":{color:"inherit"}},[`& ${ee}-item-selected`]:{backgroundColor:ye,[`&${ee}-item-danger`]:{backgroundColor:an}},[`&${ee}-submenu > ${ee}`]:{backgroundColor:Bn},[`&${ee}-popup > ${ee}`]:{backgroundColor:bn},[`&${ee}-submenu-popup > ${ee}`]:{backgroundColor:bn},[`&${ee}-horizontal`]:Object.assign(Object.assign({},H==="dark"?{borderBottom:0}:{}),{[`> ${ee}-item, > ${ee}-submenu`]:{top:Fe,marginTop:F.calc(Fe).mul(-1).equal(),marginBottom:0,borderRadius:yn,"&::after":{position:"absolute",insetInline:xt,bottom:0,borderBottom:`${(0,pe.bf)(Se)} solid transparent`,transition:`border-color ${Xe} ${Je}`,content:'""'},"&:hover, &-active, &-open":{background:Mn,"&::after":{borderBottomWidth:Se,borderBottomColor:rn}},"&-selected":{color:rn,backgroundColor:En,"&:hover":{backgroundColor:En},"&::after":{borderBottomWidth:Se,borderBottomColor:rn}}}}),[`&${ee}-root`]:{[`&${ee}-inline, &${ee}-vertical`]:{borderInlineEnd:`${(0,pe.bf)(Fe)} ${$t} ${jt}`}},[`&${ee}-inline`]:{[`${ee}-sub${ee}-inline`]:{background:E},[`${ee}-item`]:{position:"relative","&::after":{position:"absolute",insetBlock:0,insetInlineEnd:0,borderInlineEnd:`${(0,pe.bf)(Te)} solid ${me}`,transform:"scaleY(0.0001)",opacity:0,transition:[`transform ${zt} ${ct}`,`opacity ${zt} ${ct}`].join(","),content:'""'},[`&${ee}-item-danger`]:{"&::after":{borderInlineEndColor:en}}},[`${ee}-selected, ${ee}-item-selected`]:{"&::after":{transform:"scaleY(1)",opacity:1,transition:[`transform ${zt} ${Je}`,`opacity ${zt} ${Je}`].join(",")}}}}}};const Yr=F=>{const{componentCls:H,itemHeight:ee,itemMarginInline:te,padding:me,menuArrowSize:nt,marginXS:h,itemMarginBlock:E,itemWidth:ye,itemPaddingInline:Se}=F,Te=F.calc(nt).add(me).add(h).equal();return{[`${H}-item`]:{position:"relative",overflow:"hidden"},[`${H}-item, ${H}-submenu-title`]:{height:ee,lineHeight:(0,pe.bf)(ee),paddingInline:Se,overflow:"hidden",textOverflow:"ellipsis",marginInline:te,marginBlock:E,width:ye},[`> ${H}-item, + > ${H}-submenu > ${H}-submenu-title`]:{height:ee,lineHeight:(0,pe.bf)(ee)},[`${H}-item-group-list ${H}-submenu-title, + ${H}-submenu-title`]:{paddingInlineEnd:Te}}};var Yn=F=>{const{componentCls:H,iconCls:ee,itemHeight:te,colorTextLightSolid:me,dropdownWidth:nt,controlHeightLG:h,motionEaseOut:E,paddingXL:ye,itemMarginInline:Se,fontSizeLG:Te,motionDurationFast:Fe,motionDurationSlow:Xe,paddingXS:Je,boxShadowSecondary:ct,collapsedWidth:xt,collapsedIconSize:zt}=F,Et={height:te,lineHeight:(0,pe.bf)(te),listStylePosition:"inside",listStyleType:"disc"};return[{[H]:{"&-inline, &-vertical":Object.assign({[`&${H}-root`]:{boxShadow:"none"}},Yr(F))},[`${H}-submenu-popup`]:{[`${H}-vertical`]:Object.assign(Object.assign({},Yr(F)),{boxShadow:ct})}},{[`${H}-submenu-popup ${H}-vertical${H}-sub`]:{minWidth:nt,maxHeight:`calc(100vh - ${(0,pe.bf)(F.calc(h).mul(2.5).equal())})`,padding:"0",overflow:"hidden",borderInlineEnd:0,"&:not([class*='-active'])":{overflowX:"hidden",overflowY:"auto"}}},{[`${H}-inline`]:{width:"100%",[`&${H}-root`]:{[`${H}-item, ${H}-submenu-title`]:{display:"flex",alignItems:"center",transition:[`border-color ${Xe}`,`background ${Xe}`,`padding ${Fe} ${E}`].join(","),[`> ${H}-title-content`]:{flex:"auto",minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},"> *":{flex:"none"}}},[`${H}-sub${H}-inline`]:{padding:0,border:0,borderRadius:0,boxShadow:"none",[`& > ${H}-submenu > ${H}-submenu-title`]:Et,[`& ${H}-item-group-title`]:{paddingInlineStart:ye}},[`${H}-item`]:Et}},{[`${H}-inline-collapsed`]:{width:xt,[`&${H}-root`]:{[`${H}-item, ${H}-submenu ${H}-submenu-title`]:{[`> ${H}-inline-collapsed-noicon`]:{fontSize:Te,textAlign:"center"}}},[`> ${H}-item, + > ${H}-item-group > ${H}-item-group-list > ${H}-item, + > ${H}-item-group > ${H}-item-group-list > ${H}-submenu > ${H}-submenu-title, + > ${H}-submenu > ${H}-submenu-title`]:{insetInlineStart:0,paddingInline:`calc(50% - ${(0,pe.bf)(F.calc(Te).div(2).equal())} - ${(0,pe.bf)(Se)})`,textOverflow:"clip",[` + ${H}-submenu-arrow, + ${H}-submenu-expand-icon + `]:{opacity:0},[`${H}-item-icon, ${ee}`]:{margin:0,fontSize:zt,lineHeight:(0,pe.bf)(te),"+ span":{display:"inline-block",opacity:0}}},[`${H}-item-icon, ${ee}`]:{display:"inline-block"},"&-tooltip":{pointerEvents:"none",[`${H}-item-icon, ${ee}`]:{display:"none"},"a, a:hover":{color:me}},[`${H}-item-group-title`]:Object.assign(Object.assign({},ht.vS),{paddingInline:Je})}}]};const oo=F=>{const{componentCls:H,motionDurationSlow:ee,motionDurationMid:te,motionEaseInOut:me,motionEaseOut:nt,iconCls:h,iconSize:E,iconMarginInlineEnd:ye}=F;return{[`${H}-item, ${H}-submenu-title`]:{position:"relative",display:"block",margin:0,whiteSpace:"nowrap",cursor:"pointer",transition:[`border-color ${ee}`,`background ${ee}`,`padding calc(${ee} + 0.1s) ${me}`].join(","),[`${H}-item-icon, ${h}`]:{minWidth:E,fontSize:E,transition:[`font-size ${te} ${nt}`,`margin ${ee} ${me}`,`color ${ee}`].join(","),"+ span":{marginInlineStart:ye,opacity:1,transition:[`opacity ${ee} ${me}`,`margin ${ee}`,`color ${ee}`].join(",")}},[`${H}-item-icon`]:Object.assign({},(0,ht.Ro)()),[`&${H}-item-only-child`]:{[`> ${h}, > ${H}-item-icon`]:{marginInlineEnd:0}}},[`${H}-item-disabled, ${H}-submenu-disabled`]:{background:"none !important",cursor:"not-allowed","&::after":{borderColor:"transparent !important"},a:{color:"inherit !important"},[`> ${H}-submenu-title`]:{color:"inherit !important",cursor:"not-allowed"}}}},Br=F=>{const{componentCls:H,motionDurationSlow:ee,motionEaseInOut:te,borderRadius:me,menuArrowSize:nt,menuArrowOffset:h}=F;return{[`${H}-submenu`]:{"&-expand-icon, &-arrow":{position:"absolute",top:"50%",insetInlineEnd:F.margin,width:nt,color:"currentcolor",transform:"translateY(-50%)",transition:`transform ${ee} ${te}, opacity ${ee}`},"&-arrow":{"&::before, &::after":{position:"absolute",width:F.calc(nt).mul(.6).equal(),height:F.calc(nt).mul(.15).equal(),backgroundColor:"currentcolor",borderRadius:me,transition:[`background ${ee} ${te}`,`transform ${ee} ${te}`,`top ${ee} ${te}`,`color ${ee} ${te}`].join(","),content:'""'},"&::before":{transform:`rotate(45deg) translateY(${(0,pe.bf)(F.calc(h).mul(-1).equal())})`},"&::after":{transform:`rotate(-45deg) translateY(${(0,pe.bf)(h)})`}}}}},po=F=>{const{antCls:H,componentCls:ee,fontSize:te,motionDurationSlow:me,motionDurationMid:nt,motionEaseInOut:h,paddingXS:E,padding:ye,colorSplit:Se,lineWidth:Te,zIndexPopup:Fe,borderRadiusLG:Xe,subMenuItemBorderRadius:Je,menuArrowSize:ct,menuArrowOffset:xt,lineType:zt,groupTitleLineHeight:Et,groupTitleFontSize:$t}=F;return[{"":{[ee]:Object.assign(Object.assign({},(0,ht.dF)()),{"&-hidden":{display:"none"}})},[`${ee}-submenu-hidden`]:{display:"none"}},{[ee]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,ht.Wf)(F)),(0,ht.dF)()),{marginBottom:0,paddingInlineStart:0,fontSize:te,lineHeight:0,listStyle:"none",outline:"none",transition:`width ${me} cubic-bezier(0.2, 0, 0, 1) 0s`,"ul, ol":{margin:0,padding:0,listStyle:"none"},"&-overflow":{display:"flex",[`${ee}-item`]:{flex:"none"}},[`${ee}-item, ${ee}-submenu, ${ee}-submenu-title`]:{borderRadius:F.itemBorderRadius},[`${ee}-item-group-title`]:{padding:`${(0,pe.bf)(E)} ${(0,pe.bf)(ye)}`,fontSize:$t,lineHeight:Et,transition:`all ${me}`},[`&-horizontal ${ee}-submenu`]:{transition:[`border-color ${me} ${h}`,`background ${me} ${h}`].join(",")},[`${ee}-submenu, ${ee}-submenu-inline`]:{transition:[`border-color ${me} ${h}`,`background ${me} ${h}`,`padding ${nt} ${h}`].join(",")},[`${ee}-submenu ${ee}-sub`]:{cursor:"initial",transition:[`background ${me} ${h}`,`padding ${me} ${h}`].join(",")},[`${ee}-title-content`]:{display:"inline-flex",alignItems:"center",transition:`color ${me}`,"> a:first-child":{flexGrow:1},[`> ${H}-typography-ellipsis-single-line`]:{display:"inline",verticalAlign:"unset"},[`${ee}-item-extra`]:{marginInlineStart:"auto",paddingInlineStart:F.padding,fontSize:F.fontSizeSM,color:F.colorTextDescription}},[`${ee}-item a`]:{"&::before":{position:"absolute",inset:0,backgroundColor:"transparent",content:'""'}},[`${ee}-item-divider`]:{overflow:"hidden",lineHeight:0,borderColor:Se,borderStyle:zt,borderWidth:0,borderTopWidth:Te,marginBlock:Te,padding:0,"&-dashed":{borderStyle:"dashed"}}}),oo(F)),{[`${ee}-item-group`]:{[`${ee}-item-group-list`]:{margin:0,padding:0,[`${ee}-item, ${ee}-submenu-title`]:{paddingInline:`${(0,pe.bf)(F.calc(te).mul(2).equal())} ${(0,pe.bf)(ye)}`}}},"&-submenu":{"&-popup":{position:"absolute",zIndex:Fe,borderRadius:Xe,boxShadow:"none",transformOrigin:"0 0",[`&${ee}-submenu`]:{background:"transparent"},"&::before":{position:"absolute",inset:0,zIndex:-1,width:"100%",height:"100%",opacity:0,content:'""'},[`> ${ee}`]:Object.assign(Object.assign(Object.assign({borderRadius:Xe},oo(F)),Br(F)),{[`${ee}-item, ${ee}-submenu > ${ee}-submenu-title`]:{borderRadius:Je},[`${ee}-submenu-title::after`]:{transition:`transform ${me} ${h}`}})},"\n &-placement-leftTop,\n &-placement-bottomRight,\n ":{transformOrigin:"100% 0"},"\n &-placement-leftBottom,\n &-placement-topRight,\n ":{transformOrigin:"100% 100%"},"\n &-placement-rightBottom,\n &-placement-topLeft,\n ":{transformOrigin:"0 100%"},"\n &-placement-bottomLeft,\n &-placement-rightTop,\n ":{transformOrigin:"0 0"},"\n &-placement-leftTop,\n &-placement-leftBottom\n ":{paddingInlineEnd:F.paddingXS},"\n &-placement-rightTop,\n &-placement-rightBottom\n ":{paddingInlineStart:F.paddingXS},"\n &-placement-topRight,\n &-placement-topLeft\n ":{paddingBottom:F.paddingXS},"\n &-placement-bottomRight,\n &-placement-bottomLeft\n ":{paddingTop:F.paddingXS}}}),Br(F)),{[`&-inline-collapsed ${ee}-submenu-arrow, + &-inline ${ee}-submenu-arrow`]:{"&::before":{transform:`rotate(-45deg) translateX(${(0,pe.bf)(xt)})`},"&::after":{transform:`rotate(45deg) translateX(${(0,pe.bf)(F.calc(xt).mul(-1).equal())})`}},[`${ee}-submenu-open${ee}-submenu-inline > ${ee}-submenu-title > ${ee}-submenu-arrow`]:{transform:`translateY(${(0,pe.bf)(F.calc(ct).mul(.2).mul(-1).equal())})`,"&::after":{transform:`rotate(-45deg) translateX(${(0,pe.bf)(F.calc(xt).mul(-1).equal())})`},"&::before":{transform:`rotate(45deg) translateX(${(0,pe.bf)(xt)})`}}})},{[`${H}-layout-header`]:{[ee]:{lineHeight:"inherit"}}}]},Dr=F=>{var H,ee,te;const{colorPrimary:me,colorError:nt,colorTextDisabled:h,colorErrorBg:E,colorText:ye,colorTextDescription:Se,colorBgContainer:Te,colorFillAlter:Fe,colorFillContent:Xe,lineWidth:Je,lineWidthBold:ct,controlItemBgActive:xt,colorBgTextHover:zt,controlHeightLG:Et,lineHeight:$t,colorBgElevated:jt,marginXXS:Gt,padding:Rt,fontSize:xn,controlHeightSM:en,fontSizeLG:ln,colorTextLightSolid:an,colorErrorHover:bn}=F,_n=(H=F.activeBarWidth)!==null&&H!==void 0?H:0,Pn=(ee=F.activeBarBorderWidth)!==null&&ee!==void 0?ee:Je,Bn=(te=F.itemMarginInline)!==null&&te!==void 0?te:F.marginXXS,rn=new Ir.C(an).setAlpha(.65).toRgbString();return{dropdownWidth:160,zIndexPopup:F.zIndexPopupBase+50,radiusItem:F.borderRadiusLG,itemBorderRadius:F.borderRadiusLG,radiusSubMenuItem:F.borderRadiusSM,subMenuItemBorderRadius:F.borderRadiusSM,colorItemText:ye,itemColor:ye,colorItemTextHover:ye,itemHoverColor:ye,colorItemTextHoverHorizontal:me,horizontalItemHoverColor:me,colorGroupTitle:Se,groupTitleColor:Se,colorItemTextSelected:me,itemSelectedColor:me,colorItemTextSelectedHorizontal:me,horizontalItemSelectedColor:me,colorItemBg:Te,itemBg:Te,colorItemBgHover:zt,itemHoverBg:zt,colorItemBgActive:Xe,itemActiveBg:xt,colorSubItemBg:Fe,subMenuItemBg:Fe,colorItemBgSelected:xt,itemSelectedBg:xt,colorItemBgSelectedHorizontal:"transparent",horizontalItemSelectedBg:"transparent",colorActiveBarWidth:0,activeBarWidth:_n,colorActiveBarHeight:ct,activeBarHeight:ct,colorActiveBarBorderSize:Je,activeBarBorderWidth:Pn,colorItemTextDisabled:h,itemDisabledColor:h,colorDangerItemText:nt,dangerItemColor:nt,colorDangerItemTextHover:nt,dangerItemHoverColor:nt,colorDangerItemTextSelected:nt,dangerItemSelectedColor:nt,colorDangerItemBgActive:E,dangerItemActiveBg:E,colorDangerItemBgSelected:E,dangerItemSelectedBg:E,itemMarginInline:Bn,horizontalItemBorderRadius:0,horizontalItemHoverBg:"transparent",itemHeight:Et,groupTitleLineHeight:$t,collapsedWidth:Et*2,popupBg:jt,itemMarginBlock:Gt,itemPaddingInline:Rt,horizontalLineHeight:`${Et*1.15}px`,iconSize:xn,iconMarginInlineEnd:en-xn,collapsedIconSize:ln,groupTitleFontSize:xn,darkItemDisabledColor:new Ir.C(an).setAlpha(.25).toRgbString(),darkItemColor:rn,darkDangerItemColor:nt,darkItemBg:"#001529",darkPopupBg:"#001529",darkSubMenuItemBg:"#000c17",darkItemSelectedColor:an,darkItemSelectedBg:me,darkDangerItemSelectedBg:nt,darkItemHoverBg:"transparent",darkGroupTitleColor:rn,darkItemHoverColor:an,darkDangerItemHoverColor:bn,darkDangerItemSelectedColor:an,darkDangerItemActiveBg:nt,itemWidth:_n?`calc(100% + ${Pn}px)`:`calc(100% - ${Bn*2}px)`}};var Oo=function(F){let H=arguments.length>1&&arguments[1]!==void 0?arguments[1]:F,ee=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return(0,Mt.I$)("Menu",me=>{const{colorBgElevated:nt,controlHeightLG:h,fontSize:E,darkItemColor:ye,darkDangerItemColor:Se,darkItemBg:Te,darkSubMenuItemBg:Fe,darkItemSelectedColor:Xe,darkItemSelectedBg:Je,darkDangerItemSelectedBg:ct,darkItemHoverBg:xt,darkGroupTitleColor:zt,darkItemHoverColor:Et,darkItemDisabledColor:$t,darkDangerItemHoverColor:jt,darkDangerItemSelectedColor:Gt,darkDangerItemActiveBg:Rt,popupBg:xn,darkPopupBg:en}=me,ln=me.calc(E).div(7).mul(5).equal(),an=(0,Ct.IX)(me,{menuArrowSize:ln,menuHorizontalHeight:me.calc(h).mul(1.15).equal(),menuArrowOffset:me.calc(ln).mul(.25).equal(),menuSubMenuBg:nt,calc:me.calc,popupBg:xn}),bn=(0,Ct.IX)(an,{itemColor:ye,itemHoverColor:Et,groupTitleColor:zt,itemSelectedColor:Xe,itemBg:Te,popupBg:en,subMenuItemBg:Fe,itemActiveBg:"transparent",itemSelectedBg:Je,activeBarHeight:0,activeBarBorderWidth:0,itemHoverBg:xt,itemDisabledColor:$t,dangerItemColor:Se,dangerItemHoverColor:jt,dangerItemSelectedColor:Gt,dangerItemActiveBg:Rt,dangerItemSelectedBg:ct,menuSubMenuBg:Fe,horizontalItemSelectedColor:Xe,horizontalItemSelectedBg:Je});return[po(an),Fr(an),Yn(an),vo(an,"light"),vo(bn,"dark"),so(an),Er(an),(0,Zr.oN)(an,"slide-up"),(0,Zr.oN)(an,"slide-down"),jn(an,"zoom-big")]},Dr,{deprecatedTokens:[["colorGroupTitle","groupTitleColor"],["radiusItem","itemBorderRadius"],["radiusSubMenuItem","subMenuItemBorderRadius"],["colorItemText","itemColor"],["colorItemTextHover","itemHoverColor"],["colorItemTextHoverHorizontal","horizontalItemHoverColor"],["colorItemTextSelected","itemSelectedColor"],["colorItemTextSelectedHorizontal","horizontalItemSelectedColor"],["colorItemTextDisabled","itemDisabledColor"],["colorDangerItemText","dangerItemColor"],["colorDangerItemTextHover","dangerItemHoverColor"],["colorDangerItemTextSelected","dangerItemSelectedColor"],["colorDangerItemBgActive","dangerItemActiveBg"],["colorDangerItemBgSelected","dangerItemSelectedBg"],["colorItemBg","itemBg"],["colorItemBgHover","itemHoverBg"],["colorSubItemBg","subMenuItemBg"],["colorItemBgActive","itemActiveBg"],["colorItemBgSelectedHorizontal","horizontalItemSelectedBg"],["colorActiveBarWidth","activeBarWidth"],["colorActiveBarHeight","activeBarHeight"],["colorActiveBarBorderSize","activeBarBorderWidth"],["colorItemBgSelected","itemSelectedBg"]],injectStyle:ee,unitless:{groupTitleLineHeight:!0}})(F,H)},no=F=>{var H;const{popupClassName:ee,icon:te,title:me,theme:nt}=F,h=r.useContext(Be),{prefixCls:E,inlineCollapsed:ye,theme:Se}=h,Te=(0,y.Xl)();let Fe;if(!te)Fe=ye&&!Te.length&&me&&typeof me=="string"?r.createElement("div",{className:`${E}-inline-collapsed-noicon`},me.charAt(0)):r.createElement("span",{className:`${E}-title-content`},me);else{const ct=r.isValidElement(me)&&me.type==="span";Fe=r.createElement(r.Fragment,null,(0,Q.Tm)(te,{className:j()(r.isValidElement(te)?(H=te.props)===null||H===void 0?void 0:H.className:"",`${E}-item-icon`)}),ct?me:r.createElement("span",{className:`${E}-title-content`},me))}const Xe=r.useMemo(()=>Object.assign(Object.assign({},h),{firstLevel:!1}),[h]),[Je]=(0,He.Cn)("Menu");return r.createElement(Be.Provider,{value:Xe},r.createElement(y.Wd,Object.assign({},(0,b.Z)(F,["icon"]),{title:Fe,popupClassName:j()(E,ee,`${E}-${nt||Se}`),popupStyle:Object.assign({zIndex:Je},F.popupStyle)})))},Wr=function(F,H){var ee={};for(var te in F)Object.prototype.hasOwnProperty.call(F,te)&&H.indexOf(te)<0&&(ee[te]=F[te]);if(F!=null&&typeof Object.getOwnPropertySymbols=="function")for(var me=0,te=Object.getOwnPropertySymbols(F);me{var ee;const te=r.useContext(Ur),me=te||{},{getPrefixCls:nt,getPopupContainer:h,direction:E,menu:ye}=r.useContext(J.E_),Se=nt(),{prefixCls:Te,className:Fe,style:Xe,theme:Je="light",expandIcon:ct,_internalDisableMenuItemTitleTooltip:xt,inlineCollapsed:zt,siderCollapsed:Et,rootClassName:$t,mode:jt,selectable:Gt,onClick:Rt,overflowedIndicatorPopupClassName:xn}=F,en=Wr(F,["prefixCls","className","style","theme","expandIcon","_internalDisableMenuItemTitleTooltip","inlineCollapsed","siderCollapsed","rootClassName","mode","selectable","onClick","overflowedIndicatorPopupClassName"]),ln=(0,b.Z)(en,["collapsedWidth"]);(ee=me.validator)===null||ee===void 0||ee.call(me,{mode:jt});const an=(0,T.Z)(function(){var er;Rt==null||Rt.apply(void 0,arguments),(er=me.onClick)===null||er===void 0||er.call(me)}),bn=me.mode||jt,_n=Gt!=null?Gt:me.selectable,Pn=r.useMemo(()=>Et!==void 0?Et:zt,[zt,Et]),Bn={horizontal:{motionName:`${Se}-slide-up`},inline:(0,we.Z)(Se),other:{motionName:`${Se}-zoom-big`}},rn=nt("menu",Te||me.prefixCls),En=(0,ue.Z)(rn),[yn,Mn,An]=Oo(rn,En,!te),sn=j()(`${rn}-${Je}`,ye==null?void 0:ye.className,Fe),wn=r.useMemo(()=>{var er,Cn;if(typeof ct=="function"||co(ct))return ct||null;if(typeof me.expandIcon=="function"||co(me.expandIcon))return me.expandIcon||null;if(typeof(ye==null?void 0:ye.expandIcon)=="function"||co(ye==null?void 0:ye.expandIcon))return(ye==null?void 0:ye.expandIcon)||null;const ar=(er=ct!=null?ct:me==null?void 0:me.expandIcon)!==null&&er!==void 0?er:ye==null?void 0:ye.expandIcon;return(0,Q.Tm)(ar,{className:j()(`${rn}-submenu-expand-icon`,r.isValidElement(ar)?(Cn=ar.props)===null||Cn===void 0?void 0:Cn.className:void 0)})},[ct,me==null?void 0:me.expandIcon,ye==null?void 0:ye.expandIcon,rn]),Kn=r.useMemo(()=>({prefixCls:rn,inlineCollapsed:Pn||!1,direction:E,firstLevel:!0,theme:Je,mode:bn,disableMenuItemTitleTooltip:xt}),[rn,Pn,E,xt,Je]);return yn(r.createElement(Ur.Provider,{value:null},r.createElement(Be.Provider,{value:Kn},r.createElement(y.ZP,Object.assign({getPopupContainer:h,overflowedIndicator:r.createElement($.Z,null),overflowedIndicatorPopupClassName:j()(rn,`${rn}-${Je}`,xn),mode:bn,selectable:_n,onClick:an},ln,{inlineCollapsed:Pn,style:Object.assign(Object.assign({},ye==null?void 0:ye.style),Xe),className:sn,prefixCls:rn,direction:E,defaultMotions:Bn,expandIcon:wn,ref:H,rootClassName:j()($t,Mn,me.rootClassName,An,En),_internalComponents:ho})))))});const We=(0,r.forwardRef)((F,H)=>{const ee=(0,r.useRef)(null),te=r.useContext(R);return(0,r.useImperativeHandle)(H,()=>({menu:ee.current,focus:me=>{var nt;(nt=ee.current)===null||nt===void 0||nt.focus(me)}})),r.createElement(Eo,Object.assign({ref:ee},F,te))});We.Item=Vr,We.SubMenu=no,We.Divider=vt,We.ItemGroup=y.BW;var Nt=We},69895:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return Vn}});var r=s(67294),y=s(93967),X=s.n(y),j=s(87462),Z=s(74902),A=s(4942),R=s(1413),v=s(97685),Y=s(91),O=s(71002),$=s(21770),T=s(80334),b=s(8410),we=s(31131),Q=s(42550),J=function(I){var oe=I.className,ve=I.customizeIcon,Ie=I.customizeIconProps,it=I.children,bt=I.onMouseDown,Ot=I.onClick,Dt=typeof ve=="function"?ve(Ie):ve;return r.createElement("span",{className:oe,onMouseDown:function(Zt){Zt.preventDefault(),bt==null||bt(Zt)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:Ot,"aria-hidden":!0},Dt!==void 0?Dt:r.createElement("span",{className:X()(oe.split(/\s+/).map(function(Tt){return"".concat(Tt,"-icon")}))},it))},ue=J,_=function(I,oe,ve,Ie,it){var bt=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!1,Ot=arguments.length>6?arguments[6]:void 0,Dt=arguments.length>7?arguments[7]:void 0,Tt=r.useMemo(function(){if((0,O.Z)(Ie)==="object")return Ie.clearIcon;if(it)return it},[Ie,it]),Zt=r.useMemo(function(){return!!(!bt&&Ie&&(ve.length||Ot)&&!(Dt==="combobox"&&Ot===""))},[Ie,bt,ve.length,Ot,Dt]);return{allowClear:Zt,clearIcon:r.createElement(ue,{className:"".concat(I,"-clear"),onMouseDown:oe,customizeIcon:Tt},"\xD7")}},Be=r.createContext(null);function Le(){return r.useContext(Be)}function Bt(){var f=arguments.length>0&&arguments[0]!==void 0?arguments[0]:10,I=r.useState(!1),oe=(0,v.Z)(I,2),ve=oe[0],Ie=oe[1],it=r.useRef(null),bt=function(){window.clearTimeout(it.current)};r.useEffect(function(){return bt},[]);var Ot=function(Tt,Zt){bt(),it.current=window.setTimeout(function(){Ie(Tt),Zt&&Zt()},f)};return[ve,Ot,bt]}function vt(){var f=arguments.length>0&&arguments[0]!==void 0?arguments[0]:250,I=r.useRef(null),oe=r.useRef(null);r.useEffect(function(){return function(){window.clearTimeout(oe.current)}},[]);function ve(Ie){(Ie||I.current===null)&&(I.current=Ie),window.clearTimeout(oe.current),oe.current=window.setTimeout(function(){I.current=null},f)}return[function(){return I.current},ve]}function Ae(f,I,oe,ve){var Ie=r.useRef(null);Ie.current={open:I,triggerOpen:oe,customizedTrigger:ve},r.useEffect(function(){function it(bt){var Ot;if(!((Ot=Ie.current)!==null&&Ot!==void 0&&Ot.customizedTrigger)){var Dt=bt.target;Dt.shadowRoot&&bt.composed&&(Dt=bt.composedPath()[0]||Dt),Ie.current.open&&f().filter(function(Tt){return Tt}).every(function(Tt){return!Tt.contains(Dt)&&Tt!==Dt})&&Ie.current.triggerOpen(!1)}}return window.addEventListener("mousedown",it),function(){return window.removeEventListener("mousedown",it)}},[])}var V=s(15105);function he(f){return![V.Z.ESC,V.Z.SHIFT,V.Z.BACKSPACE,V.Z.TAB,V.Z.WIN_KEY,V.Z.ALT,V.Z.META,V.Z.WIN_KEY_RIGHT,V.Z.CTRL,V.Z.SEMICOLON,V.Z.EQUALS,V.Z.CAPS_LOCK,V.Z.CONTEXT_MENU,V.Z.F1,V.Z.F2,V.Z.F3,V.Z.F4,V.Z.F5,V.Z.F6,V.Z.F7,V.Z.F8,V.Z.F9,V.Z.F10,V.Z.F11,V.Z.F12].includes(f)}var q=s(64217),D=s(39983),U=function(I,oe){var ve,Ie=I.prefixCls,it=I.id,bt=I.inputElement,Ot=I.disabled,Dt=I.tabIndex,Tt=I.autoFocus,Zt=I.autoComplete,At=I.editable,Xt=I.activeDescendantId,st=I.value,M=I.maxLength,G=I.onKeyDown,B=I.onMouseDown,le=I.onChange,Ce=I.onPaste,Ue=I.onCompositionStart,ot=I.onCompositionEnd,dt=I.open,lt=I.attrs,l=bt||r.createElement("input",null),d=l,p=d.ref,x=d.props,W=x.onKeyDown,ge=x.onChange,Ee=x.onMouseDown,et=x.onCompositionStart,Ze=x.onCompositionEnd,_e=x.style;return(0,T.Kp)(!("maxLength"in l.props),"Passing 'maxLength' to input element directly may not work because input in BaseSelect is controlled."),l=r.cloneElement(l,(0,R.Z)((0,R.Z)((0,R.Z)({type:"search"},x),{},{id:it,ref:(0,Q.sQ)(oe,p),disabled:Ot,tabIndex:Dt,autoComplete:Zt||"off",autoFocus:Tt,className:X()("".concat(Ie,"-selection-search-input"),(ve=l)===null||ve===void 0||(ve=ve.props)===null||ve===void 0?void 0:ve.className),role:"combobox","aria-expanded":dt||!1,"aria-haspopup":"listbox","aria-owns":"".concat(it,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(it,"_list"),"aria-activedescendant":dt?Xt:void 0},lt),{},{value:At?st:"",maxLength:M,readOnly:!At,unselectable:At?null:"on",style:(0,R.Z)((0,R.Z)({},_e),{},{opacity:At?null:0}),onKeyDown:function(qe){G(qe),W&&W(qe)},onMouseDown:function(qe){B(qe),Ee&&Ee(qe)},onChange:function(qe){le(qe),ge&&ge(qe)},onCompositionStart:function(qe){Ue(qe),et&&et(qe)},onCompositionEnd:function(qe){ot(qe),Ze&&Ze(qe)},onPaste:Ce})),l},Oe=r.forwardRef(U),He=Oe;function pe(f){return Array.isArray(f)?f:f!==void 0?[f]:[]}var Qe=typeof window!="undefined"&&window.document&&window.document.documentElement,ft=Qe;function Pt(f){return f!=null}function g(f){return!f&&f!==0}function de(f){return["string","number"].includes((0,O.Z)(f))}function ce(f){var I=void 0;return f&&(de(f.title)?I=f.title.toString():de(f.label)&&(I=f.label.toString())),I}function be(f,I){ft?r.useLayoutEffect(f,I):r.useEffect(f,I)}function Me(f){var I;return(I=f.key)!==null&&I!==void 0?I:f.value}var $e=function(I){I.preventDefault(),I.stopPropagation()},yt=function(I){var oe=I.id,ve=I.prefixCls,Ie=I.values,it=I.open,bt=I.searchValue,Ot=I.autoClearSearchValue,Dt=I.inputRef,Tt=I.placeholder,Zt=I.disabled,At=I.mode,Xt=I.showSearch,st=I.autoFocus,M=I.autoComplete,G=I.activeDescendantId,B=I.tabIndex,le=I.removeIcon,Ce=I.maxTagCount,Ue=I.maxTagTextLength,ot=I.maxTagPlaceholder,dt=ot===void 0?function(kn){return"+ ".concat(kn.length," ...")}:ot,lt=I.tagRender,l=I.onToggleOpen,d=I.onRemove,p=I.onInputChange,x=I.onInputPaste,W=I.onInputKeyDown,ge=I.onInputMouseDown,Ee=I.onInputCompositionStart,et=I.onInputCompositionEnd,Ze=r.useRef(null),_e=(0,r.useState)(0),mt=(0,v.Z)(_e,2),qe=mt[0],rt=mt[1],ke=(0,r.useState)(!1),St=(0,v.Z)(ke,2),kt=St[0],pn=St[1],In="".concat(ve,"-selection"),$n=it||At==="multiple"&&Ot===!1||At==="tags"?bt:"",ir=At==="tags"||At==="multiple"&&Ot===!1||Xt&&(it||kt);be(function(){rt(Ze.current.scrollWidth)},[$n]);var Un=function(Dn,cr,hr,Tr,Cr){return r.createElement("span",{title:ce(Dn),className:X()("".concat(In,"-item"),(0,A.Z)({},"".concat(In,"-item-disabled"),hr))},r.createElement("span",{className:"".concat(In,"-item-content")},cr),Tr&&r.createElement(ue,{className:"".concat(In,"-item-remove"),onMouseDown:$e,onClick:Cr,customizeIcon:le},"\xD7"))},sr=function(Dn,cr,hr,Tr,Cr,qr){var ro=function(uo){$e(uo),l(!it)};return r.createElement("span",{onMouseDown:ro},lt({label:cr,value:Dn,disabled:hr,closable:Tr,onClose:Cr,isMaxTag:!!qr}))},tr=function(Dn){var cr=Dn.disabled,hr=Dn.label,Tr=Dn.value,Cr=!Zt&&!cr,qr=hr;if(typeof Ue=="number"&&(typeof hr=="string"||typeof hr=="number")){var ro=String(qr);ro.length>Ue&&(qr="".concat(ro.slice(0,Ue),"..."))}var Io=function(yo){yo&&yo.stopPropagation(),d(Dn)};return typeof lt=="function"?sr(Tr,qr,cr,Cr,Io):Un(Dn,qr,cr,Cr,Io)},Kt=function(Dn){var cr=typeof dt=="function"?dt(Dn):dt;return typeof lt=="function"?sr(void 0,cr,!1,!1,void 0,!0):Un({title:cr},cr,!1)},Rn=r.createElement("div",{className:"".concat(In,"-search"),style:{width:qe},onFocus:function(){pn(!0)},onBlur:function(){pn(!1)}},r.createElement(He,{ref:Dt,open:it,prefixCls:ve,id:oe,inputElement:null,disabled:Zt,autoFocus:st,autoComplete:M,editable:ir,activeDescendantId:G,value:$n,onKeyDown:W,onMouseDown:ge,onChange:p,onPaste:x,onCompositionStart:Ee,onCompositionEnd:et,tabIndex:B,attrs:(0,q.Z)(I,!0)}),r.createElement("span",{ref:Ze,className:"".concat(In,"-search-mirror"),"aria-hidden":!0},$n,"\xA0")),nr=r.createElement(D.Z,{prefixCls:"".concat(In,"-overflow"),data:Ie,renderItem:tr,renderRest:Kt,suffix:Rn,itemKey:Me,maxCount:Ce});return r.createElement(r.Fragment,null,nr,!Ie.length&&!$n&&r.createElement("span",{className:"".concat(In,"-placeholder")},Tt))},Qt=yt,nn=function(I){var oe=I.inputElement,ve=I.prefixCls,Ie=I.id,it=I.inputRef,bt=I.disabled,Ot=I.autoFocus,Dt=I.autoComplete,Tt=I.activeDescendantId,Zt=I.mode,At=I.open,Xt=I.values,st=I.placeholder,M=I.tabIndex,G=I.showSearch,B=I.searchValue,le=I.activeValue,Ce=I.maxLength,Ue=I.onInputKeyDown,ot=I.onInputMouseDown,dt=I.onInputChange,lt=I.onInputPaste,l=I.onInputCompositionStart,d=I.onInputCompositionEnd,p=I.title,x=r.useState(!1),W=(0,v.Z)(x,2),ge=W[0],Ee=W[1],et=Zt==="combobox",Ze=et||G,_e=Xt[0],mt=B||"";et&&le&&!ge&&(mt=le),r.useEffect(function(){et&&Ee(!1)},[et,le]);var qe=Zt!=="combobox"&&!At&&!G?!1:!!mt,rt=p===void 0?ce(_e):p,ke=r.useMemo(function(){return _e?null:r.createElement("span",{className:"".concat(ve,"-selection-placeholder"),style:qe?{visibility:"hidden"}:void 0},st)},[_e,qe,st,ve]);return r.createElement(r.Fragment,null,r.createElement("span",{className:"".concat(ve,"-selection-search")},r.createElement(He,{ref:it,prefixCls:ve,id:Ie,open:At,inputElement:oe,disabled:bt,autoFocus:Ot,autoComplete:Dt,editable:Ze,activeDescendantId:Tt,value:mt,onKeyDown:Ue,onMouseDown:ot,onChange:function(kt){Ee(!0),dt(kt)},onPaste:lt,onCompositionStart:l,onCompositionEnd:d,tabIndex:M,attrs:(0,q.Z)(I,!0),maxLength:et?Ce:void 0})),!et&&_e?r.createElement("span",{className:"".concat(ve,"-selection-item"),title:rt,style:qe?{visibility:"hidden"}:void 0},_e.label):null,ke)},vn=nn,Ln=function(I,oe){var ve=(0,r.useRef)(null),Ie=(0,r.useRef)(!1),it=I.prefixCls,bt=I.open,Ot=I.mode,Dt=I.showSearch,Tt=I.tokenWithEnter,Zt=I.disabled,At=I.autoClearSearchValue,Xt=I.onSearch,st=I.onSearchSubmit,M=I.onToggleOpen,G=I.onInputKeyDown,B=I.domRef;r.useImperativeHandle(oe,function(){return{focus:function(qe){ve.current.focus(qe)},blur:function(){ve.current.blur()}}});var le=vt(0),Ce=(0,v.Z)(le,2),Ue=Ce[0],ot=Ce[1],dt=function(qe){var rt=qe.which;(rt===V.Z.UP||rt===V.Z.DOWN)&&qe.preventDefault(),G&&G(qe),rt===V.Z.ENTER&&Ot==="tags"&&!Ie.current&&!bt&&(st==null||st(qe.target.value)),he(rt)&&M(!0)},lt=function(){ot(!0)},l=(0,r.useRef)(null),d=function(qe){Xt(qe,!0,Ie.current)!==!1&&M(!0)},p=function(){Ie.current=!0},x=function(qe){Ie.current=!1,Ot!=="combobox"&&d(qe.target.value)},W=function(qe){var rt=qe.target.value;if(Tt&&l.current&&/[\r\n]/.test(l.current)){var ke=l.current.replace(/[\r\n]+$/,"").replace(/\r\n/g," ").replace(/[\r\n]/g," ");rt=rt.replace(ke,l.current)}l.current=null,d(rt)},ge=function(qe){var rt=qe.clipboardData,ke=rt==null?void 0:rt.getData("text");l.current=ke||""},Ee=function(qe){var rt=qe.target;if(rt!==ve.current){var ke=document.body.style.msTouchAction!==void 0;ke?setTimeout(function(){ve.current.focus()}):ve.current.focus()}},et=function(qe){var rt=Ue();qe.target!==ve.current&&!rt&&!(Ot==="combobox"&&Zt)&&qe.preventDefault(),(Ot!=="combobox"&&(!Dt||!rt)||!bt)&&(bt&&At!==!1&&Xt("",!0,!1),M())},Ze={inputRef:ve,onInputKeyDown:dt,onInputMouseDown:lt,onInputChange:W,onInputPaste:ge,onInputCompositionStart:p,onInputCompositionEnd:x},_e=Ot==="multiple"||Ot==="tags"?r.createElement(Qt,(0,j.Z)({},I,Ze)):r.createElement(vn,(0,j.Z)({},I,Ze));return r.createElement("div",{ref:B,className:"".concat(it,"-selector"),onClick:Ee,onMouseDown:et},_e)},ht=r.forwardRef(Ln),z=ht,se=s(40228),Ye=["prefixCls","disabled","visible","children","popupElement","animation","transitionName","dropdownStyle","dropdownClassName","direction","placement","builtinPlacements","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","getPopupContainer","empty","getTriggerDOMNode","onPopupVisibleChange","onPopupMouseEnter"],De=function(I){var oe=I===!0?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:oe,adjustY:1},htmlRegion:"scroll"},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:oe,adjustY:1},htmlRegion:"scroll"},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:oe,adjustY:1},htmlRegion:"scroll"},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:oe,adjustY:1},htmlRegion:"scroll"}}},xe=function(I,oe){var ve=I.prefixCls,Ie=I.disabled,it=I.visible,bt=I.children,Ot=I.popupElement,Dt=I.animation,Tt=I.transitionName,Zt=I.dropdownStyle,At=I.dropdownClassName,Xt=I.direction,st=Xt===void 0?"ltr":Xt,M=I.placement,G=I.builtinPlacements,B=I.dropdownMatchSelectWidth,le=I.dropdownRender,Ce=I.dropdownAlign,Ue=I.getPopupContainer,ot=I.empty,dt=I.getTriggerDOMNode,lt=I.onPopupVisibleChange,l=I.onPopupMouseEnter,d=(0,Y.Z)(I,Ye),p="".concat(ve,"-dropdown"),x=Ot;le&&(x=le(Ot));var W=r.useMemo(function(){return G||De(B)},[G,B]),ge=Dt?"".concat(p,"-").concat(Dt):Tt,Ee=typeof B=="number",et=r.useMemo(function(){return Ee?null:B===!1?"minWidth":"width"},[B,Ee]),Ze=Zt;Ee&&(Ze=(0,R.Z)((0,R.Z)({},Ze),{},{width:B}));var _e=r.useRef(null);return r.useImperativeHandle(oe,function(){return{getPopupElement:function(){var qe;return(qe=_e.current)===null||qe===void 0?void 0:qe.popupElement}}}),r.createElement(se.Z,(0,j.Z)({},d,{showAction:lt?["click"]:[],hideAction:lt?["click"]:[],popupPlacement:M||(st==="rtl"?"bottomRight":"bottomLeft"),builtinPlacements:W,prefixCls:p,popupTransitionName:ge,popup:r.createElement("div",{onMouseEnter:l},x),ref:_e,stretch:et,popupAlign:Ce,popupVisible:it,getPopupContainer:Ue,popupClassName:X()(At,(0,A.Z)({},"".concat(p,"-empty"),ot)),popupStyle:Ze,getTriggerDOMNode:dt,onPopupVisibleChange:lt}),bt)},je=r.forwardRef(xe),It=je,cn=s(84506);function Fn(f,I){var oe=f.key,ve;return"value"in f&&(ve=f.value),oe!=null?oe:ve!==void 0?ve:"rc-index-key-".concat(I)}function Nn(f){return typeof f!="undefined"&&!Number.isNaN(f)}function qn(f,I){var oe=f||{},ve=oe.label,Ie=oe.value,it=oe.options,bt=oe.groupLabel,Ot=ve||(I?"children":"label");return{label:Ot,value:Ie||"value",options:it||"options",groupLabel:bt||Ot}}function or(f){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},oe=I.fieldNames,ve=I.childrenAsData,Ie=[],it=qn(oe,!1),bt=it.label,Ot=it.value,Dt=it.options,Tt=it.groupLabel;function Zt(At,Xt){Array.isArray(At)&&At.forEach(function(st){if(Xt||!(Dt in st)){var M=st[Ot];Ie.push({key:Fn(st,Ie.length),groupOption:Xt,data:st,label:st[bt],value:M})}else{var G=st[Tt];G===void 0&&ve&&(G=st.label),Ie.push({key:Fn(st,Ie.length),group:!0,data:st,label:G}),Zt(st[Dt],!0)}})}return Zt(f,!1),Ie}function dr(f){var I=(0,R.Z)({},f);return"props"in I||Object.defineProperty(I,"props",{get:function(){return(0,T.ZP)(!1,"Return type is option instead of Option instance. Please read value directly instead of reading from `props`."),I}}),I}var Zn=function(I,oe,ve){if(!oe||!oe.length)return null;var Ie=!1,it=function Ot(Dt,Tt){var Zt=(0,cn.Z)(Tt),At=Zt[0],Xt=Zt.slice(1);if(!At)return[Dt];var st=Dt.split(At);return Ie=Ie||st.length>1,st.reduce(function(M,G){return[].concat((0,Z.Z)(M),(0,Z.Z)(Ot(G,Xt)))},[]).filter(Boolean)},bt=it(I,oe);return Ie?typeof ve!="undefined"?bt.slice(0,ve):bt:null},jn=r.createContext(null),mn=jn;function Ft(f){var I=f.visible,oe=f.values;if(!I)return null;var ve=50;return r.createElement("span",{"aria-live":"polite",style:{width:0,height:0,position:"absolute",overflow:"hidden",opacity:0}},"".concat(oe.slice(0,ve).map(function(Ie){var it=Ie.label,bt=Ie.value;return["number","string"].includes((0,O.Z)(it))?it:bt}).join(", ")),oe.length>ve?", ...":null)}var Ct=["id","prefixCls","className","showSearch","tagRender","direction","omitDomProps","displayValues","onDisplayValuesChange","emptyOptions","notFoundContent","onClear","mode","disabled","loading","getInputElement","getRawInputElement","open","defaultOpen","onDropdownVisibleChange","activeValue","onActiveValueChange","activeDescendantId","searchValue","autoClearSearchValue","onSearch","onSearchSplit","tokenSeparators","allowClear","suffixIcon","clearIcon","OptionList","animation","transitionName","dropdownStyle","dropdownClassName","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","placement","builtinPlacements","getPopupContainer","showAction","onFocus","onBlur","onKeyUp","onKeyDown","onMouseDown"],Mt=["value","onChange","removeIcon","placeholder","autoFocus","maxTagCount","maxTagTextLength","maxTagPlaceholder","choiceTransitionName","onInputKeyDown","onPopupScroll","tabIndex"],tn=function(I){return I==="tags"||I==="multiple"},qt=r.forwardRef(function(f,I){var oe,ve=f.id,Ie=f.prefixCls,it=f.className,bt=f.showSearch,Ot=f.tagRender,Dt=f.direction,Tt=f.omitDomProps,Zt=f.displayValues,At=f.onDisplayValuesChange,Xt=f.emptyOptions,st=f.notFoundContent,M=st===void 0?"Not Found":st,G=f.onClear,B=f.mode,le=f.disabled,Ce=f.loading,Ue=f.getInputElement,ot=f.getRawInputElement,dt=f.open,lt=f.defaultOpen,l=f.onDropdownVisibleChange,d=f.activeValue,p=f.onActiveValueChange,x=f.activeDescendantId,W=f.searchValue,ge=f.autoClearSearchValue,Ee=f.onSearch,et=f.onSearchSplit,Ze=f.tokenSeparators,_e=f.allowClear,mt=f.suffixIcon,qe=f.clearIcon,rt=f.OptionList,ke=f.animation,St=f.transitionName,kt=f.dropdownStyle,pn=f.dropdownClassName,In=f.dropdownMatchSelectWidth,$n=f.dropdownRender,ir=f.dropdownAlign,Un=f.placement,sr=f.builtinPlacements,tr=f.getPopupContainer,Kt=f.showAction,Rn=Kt===void 0?[]:Kt,nr=f.onFocus,kn=f.onBlur,Dn=f.onKeyUp,cr=f.onKeyDown,hr=f.onMouseDown,Tr=(0,Y.Z)(f,Ct),Cr=tn(B),qr=(bt!==void 0?bt:Cr)||B==="combobox",ro=(0,R.Z)({},Tr);Mt.forEach(function(Rr){delete ro[Rr]}),Tt==null||Tt.forEach(function(Rr){delete ro[Rr]});var Io=r.useState(!1),uo=(0,v.Z)(Io,2),yo=uo[0],_r=uo[1];r.useEffect(function(){_r((0,we.Z)())},[]);var bo=r.useRef(null),jo=r.useRef(null),Kr=r.useRef(null),eo=r.useRef(null),ao=r.useRef(null),So=r.useRef(!1),Co=Bt(),Pr=(0,v.Z)(Co,3),Ar=Pr[0],io=Pr[1],fo=Pr[2];r.useImperativeHandle(I,function(){var Rr,wr;return{focus:(Rr=eo.current)===null||Rr===void 0?void 0:Rr.focus,blur:(wr=eo.current)===null||wr===void 0?void 0:wr.blur,scrollTo:function(zo){var Mo;return(Mo=ao.current)===null||Mo===void 0?void 0:Mo.scrollTo(zo)},nativeElement:bo.current||jo.current}});var Do=r.useMemo(function(){var Rr;if(B!=="combobox")return W;var wr=(Rr=Zt[0])===null||Rr===void 0?void 0:Rr.value;return typeof wr=="string"||typeof wr=="number"?String(wr):""},[W,B,Zt]),$o=B==="combobox"&&typeof Ue=="function"&&Ue()||null,To=typeof ot=="function"&&ot(),Zo=(0,Q.x1)(jo,To==null||(oe=To.props)===null||oe===void 0?void 0:oe.ref),Jo=r.useState(!1),Ro=(0,v.Z)(Jo,2),Vo=Ro[0],na=Ro[1];(0,b.Z)(function(){na(!0)},[]);var qo=(0,$.Z)(!1,{defaultValue:lt,value:dt}),Go=(0,v.Z)(qo,2),Bo=Go[0],Ho=Go[1],lo=Vo?Bo:!1,Fo=!M&&Xt;(le||Fo&&lo&&B==="combobox")&&(lo=!1);var Uo=Fo?!1:lo,Po=r.useCallback(function(Rr){var wr=Rr!==void 0?Rr:!lo;le||(Ho(wr),lo!==wr&&(l==null||l(wr)))},[le,lo,Ho,l]),vr=r.useMemo(function(){return(Ze||[]).some(function(Rr){return[` +`,`\r +`].includes(Rr)})},[Ze]),gr=r.useContext(mn)||{},Jn=gr.maxCount,ur=gr.rawValues,zr=function(wr,Ao,zo){if(!(Cr&&Nn(Jn)&&(ur==null?void 0:ur.size)>=Jn)){var Mo=!0,No=wr;p==null||p(null);var Yo=Zn(wr,Ze,Nn(Jn)?Jn-ur.size:void 0),_o=zo?null:Yo;return B!=="combobox"&&_o&&(No="",et==null||et(_o),Po(!1),Mo=!1),Ee&&Do!==No&&Ee(No,{source:Ao?"typing":"effect"}),Mo}},zn=function(wr){!wr||!wr.trim()||Ee(wr,{source:"submit"})};r.useEffect(function(){!lo&&!Cr&&B!=="combobox"&&zr("",!1,!1)},[lo]),r.useEffect(function(){Bo&&le&&Ho(!1),le&&!So.current&&io(!1)},[le]);var xr=vt(),jr=(0,v.Z)(xr,2),Lo=jr[0],go=jr[1],Wo=r.useRef(!1),ra=function(wr){var Ao=Lo(),zo=wr.key,Mo=zo==="Enter";if(Mo&&(B!=="combobox"&&wr.preventDefault(),lo||Po(!0)),go(!!Do),zo==="Backspace"&&!Ao&&Cr&&!Do&&Zt.length){for(var No=(0,Z.Z)(Zt),Yo=null,_o=No.length-1;_o>=0;_o-=1){var Xo=No[_o];if(!Xo.disabled){No.splice(_o,1),Yo=Xo;break}}Yo&&At(No,{type:"remove",values:[Yo]})}for(var ta=arguments.length,Qo=new Array(ta>1?ta-1:0),oa=1;oa1?Ao-1:0),Mo=1;Mo1?Yo-1:0),Xo=1;Xo=M},[Ot,M,ot==null?void 0:ot.size]),Ze=function(Rn){Rn.preventDefault()},_e=function(Rn){var nr;(nr=Ee.current)===null||nr===void 0||nr.scrollTo(typeof Rn=="number"?{index:Rn}:Rn)},mt=function(Rn){for(var nr=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,kn=ge.length,Dn=0;Dn1&&arguments[1]!==void 0?arguments[1]:!1;St(Rn);var kn={source:nr?"keyboard":"mouse"},Dn=ge[Rn];if(!Dn){B(null,-1,kn);return}B(Dn.value,Rn,kn)};(0,r.useEffect)(function(){kt(le!==!1?mt(0):-1)},[ge.length,Tt]);var pn=r.useCallback(function(Kt){return ot.has(Kt)&&Dt!=="combobox"},[Dt,(0,Z.Z)(ot).toString(),ot.size]);(0,r.useEffect)(function(){var Kt=setTimeout(function(){if(!Ot&&bt&&ot.size===1){var nr=Array.from(ot)[0],kn=ge.findIndex(function(Dn){var cr=Dn.data;return cr.value===nr});kn!==-1&&(kt(kn),_e(kn))}});if(bt){var Rn;(Rn=Ee.current)===null||Rn===void 0||Rn.scrollTo(void 0)}return function(){return clearTimeout(Kt)}},[bt,Tt]);var In=function(Rn){Rn!==void 0&&Ce(Rn,{selected:!ot.has(Rn)}),Ot||Zt(!1)};if(r.useImperativeHandle(oe,function(){return{onKeyDown:function(Rn){var nr=Rn.which,kn=Rn.ctrlKey;switch(nr){case V.Z.N:case V.Z.P:case V.Z.UP:case V.Z.DOWN:{var Dn=0;if(nr===V.Z.UP?Dn=-1:nr===V.Z.DOWN?Dn=1:Sr()&&kn&&(nr===V.Z.N?Dn=1:nr===V.Z.P&&(Dn=-1)),Dn!==0){var cr=mt(ke+Dn,Dn);_e(cr),kt(cr,!0)}break}case V.Z.ENTER:{var hr,Tr=ge[ke];Tr&&!(Tr!=null&&(hr=Tr.data)!==null&&hr!==void 0&&hr.disabled)&&!et?In(Tr.value):In(void 0),bt&&Rn.preventDefault();break}case V.Z.ESC:Zt(!1),bt&&Rn.stopPropagation()}},onKeyUp:function(){},scrollTo:function(Rn){_e(Rn)}}}),ge.length===0)return r.createElement("div",{role:"listbox",id:"".concat(it,"_list"),className:"".concat(W,"-empty"),onMouseDown:Ze},At);var $n=Object.keys(dt).map(function(Kt){return dt[Kt]}),ir=function(Rn){return Rn.label};function Un(Kt,Rn){var nr=Kt.group;return{role:nr?"presentation":"option",id:"".concat(it,"_list_").concat(Rn)}}var sr=function(Rn){var nr=ge[Rn];if(!nr)return null;var kn=nr.data||{},Dn=kn.value,cr=nr.group,hr=(0,q.Z)(kn,!0),Tr=ir(nr);return nr?r.createElement("div",(0,j.Z)({"aria-label":typeof Tr=="string"&&!cr?Tr:null},hr,{key:Rn},Un(nr,Rn),{"aria-selected":pn(Dn)}),Dn):null},tr={role:"listbox",id:"".concat(it,"_list")};return r.createElement(r.Fragment,null,lt&&r.createElement("div",(0,j.Z)({},tr,{style:{height:0,width:0,overflow:"hidden"}}),sr(ke-1),sr(ke),sr(ke+1)),r.createElement(yr.Z,{itemKey:"key",ref:Ee,data:ge,height:d,itemHeight:p,fullHeight:!1,onMouseDown:Ze,onScroll:Xt,virtual:lt,direction:l,innerProps:lt?null:tr},function(Kt,Rn){var nr=Kt.group,kn=Kt.groupOption,Dn=Kt.data,cr=Kt.label,hr=Kt.value,Tr=Dn.key;if(nr){var Cr,qr=(Cr=Dn.title)!==null&&Cr!==void 0?Cr:Xn(cr)?cr.toString():void 0;return r.createElement("div",{className:X()(W,"".concat(W,"-group"),Dn.className),title:qr},cr!==void 0?cr:Tr)}var ro=Dn.disabled,Io=Dn.title,uo=Dn.children,yo=Dn.style,_r=Dn.className,bo=(0,Y.Z)(Dn,pr),jo=(0,rr.Z)(bo,$n),Kr=pn(hr),eo=ro||!Kr&&et,ao="".concat(W,"-option"),So=X()(W,ao,_r,(0,A.Z)((0,A.Z)((0,A.Z)((0,A.Z)({},"".concat(ao,"-grouped"),kn),"".concat(ao,"-active"),ke===Rn&&!eo),"".concat(ao,"-disabled"),eo),"".concat(ao,"-selected"),Kr)),Co=ir(Kt),Pr=!Ue||typeof Ue=="function"||Kr,Ar=typeof Co=="number"?Co:Co||hr,io=Xn(Ar)?Ar.toString():void 0;return Io!==void 0&&(io=Io),r.createElement("div",(0,j.Z)({},(0,q.Z)(jo),lt?{}:Un(Kt,Rn),{"aria-selected":Kr,className:So,title:io,onMouseMove:function(){ke===Rn||eo||kt(Rn)},onClick:function(){eo||In(hr)},style:yo}),r.createElement("div",{className:"".concat(ao,"-content")},typeof x=="function"?x(Kt,{index:Rn}):Ar),r.isValidElement(Ue)||Kr,Pr&&r.createElement(ue,{className:"".concat(W,"-option-state"),customizeIcon:Ue,customizeIconProps:{value:hr,disabled:eo,isSelected:Kr}},Kr?"\u2713":null))}))},Mr=r.forwardRef(Lr),Nr=Mr,Vr=function(f,I){var oe=r.useRef({values:new Map,options:new Map}),ve=r.useMemo(function(){var it=oe.current,bt=it.values,Ot=it.options,Dt=f.map(function(At){if(At.label===void 0){var Xt;return(0,R.Z)((0,R.Z)({},At),{},{label:(Xt=bt.get(At.value))===null||Xt===void 0?void 0:Xt.label})}return At}),Tt=new Map,Zt=new Map;return Dt.forEach(function(At){Tt.set(At.value,At),Zt.set(At.value,I.get(At.value)||Ot.get(At.value))}),oe.current.values=Tt,oe.current.options=Zt,Dt},[f,I]),Ie=r.useCallback(function(it){return I.get(it)||oe.current.options.get(it)},[I]);return[ve,Ie]};function Xr(f,I){return pe(f).join("").toUpperCase().includes(I)}var Qr=function(f,I,oe,ve,Ie){return r.useMemo(function(){if(!oe||ve===!1)return f;var it=I.options,bt=I.label,Ot=I.value,Dt=[],Tt=typeof ve=="function",Zt=oe.toUpperCase(),At=Tt?ve:function(st,M){return Ie?Xr(M[Ie],Zt):M[it]?Xr(M[bt!=="children"?bt:"label"],Zt):Xr(M[Ot],Zt)},Xt=Tt?function(st){return dr(st)}:function(st){return st};return f.forEach(function(st){if(st[it]){var M=At(oe,Xt(st));if(M)Dt.push(st);else{var G=st[it].filter(function(B){return At(oe,Xt(B))});G.length&&Dt.push((0,R.Z)((0,R.Z)({},st),{},(0,A.Z)({},it,G)))}return}At(oe,Xt(st))&&Dt.push(st)}),Dt},[f,ve,Ie,oe,I])},fr=s(98924),Hr=0,Ur=(0,fr.Z)();function Ir(){var f;return Ur?(f=Hr,Hr+=1):f="TEST_OR_SSR",f}function $r(f){var I=r.useState(),oe=(0,v.Z)(I,2),ve=oe[0],Ie=oe[1];return r.useEffect(function(){Ie("rc_select_".concat(Ir()))},[]),f||ve}var Er=s(50344),Zr=["children","value"],to=["children"];function Fr(f){var I=f,oe=I.key,ve=I.props,Ie=ve.children,it=ve.value,bt=(0,Y.Z)(ve,Zr);return(0,R.Z)({key:oe,value:it!==void 0?it:oe,children:Ie},bt)}function kr(f){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return(0,Er.Z)(f).map(function(oe,ve){if(!r.isValidElement(oe)||!oe.type)return null;var Ie=oe,it=Ie.type.isSelectOptGroup,bt=Ie.key,Ot=Ie.props,Dt=Ot.children,Tt=(0,Y.Z)(Ot,to);return I||!it?Fr(oe):(0,R.Z)((0,R.Z)({key:"__RC_SELECT_GRP__".concat(bt===null?ve:bt,"__"),label:bt},Tt),{},{options:kr(Dt)})}).filter(function(oe){return oe})}var so=function(I,oe,ve,Ie,it){return r.useMemo(function(){var bt=I,Ot=!I;Ot&&(bt=kr(oe));var Dt=new Map,Tt=new Map,Zt=function(st,M,G){G&&typeof G=="string"&&st.set(M[G],M)},At=function Xt(st){for(var M=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,G=0;G1&&arguments[1]!==void 0?arguments[1]:!1,bt=0;bt0?vr(ur.options):ur.options}):ur})},Ar=r.useMemo(function(){return Ce?Pr(Co):Co},[Co,Ce,Kt]),io=r.useMemo(function(){return or(Ar,{fieldNames:Un,childrenAsData:$n})},[Ar,Un,$n]),fo=function(gr){var Jn=hr(gr);if(ro(Jn),ke&&(Jn.length!==_r.length||Jn.some(function(zn,xr){var jr;return((jr=_r[xr])===null||jr===void 0?void 0:jr.value)!==(zn==null?void 0:zn.value)}))){var ur=rt?Jn:Jn.map(function(zn){return zn.value}),zr=Jn.map(function(zn){return dr(bo(zn.value))});ke(In?ur:ur[0],In?zr:zr[0])}},Do=r.useState(null),$o=(0,v.Z)(Do,2),To=$o[0],Zo=$o[1],Jo=r.useState(0),Ro=(0,v.Z)(Jo,2),Vo=Ro[0],na=Ro[1],qo=d!==void 0?d:ve!=="combobox",Go=r.useCallback(function(vr,gr){var Jn=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},ur=Jn.source,zr=ur===void 0?"keyboard":ur;na(gr),bt&&ve==="combobox"&&vr!==null&&zr==="keyboard"&&Zo(String(vr))},[bt,ve]),Bo=function(gr,Jn,ur){var zr=function(){var Ko,ko=bo(gr);return[rt?{label:ko==null?void 0:ko[Un.label],value:gr,key:(Ko=ko==null?void 0:ko.key)!==null&&Ko!==void 0?Ko:gr}:gr,dr(ko)]};if(Jn&&st){var zn=zr(),xr=(0,v.Z)(zn,2),jr=xr[0],Lo=xr[1];st(jr,Lo)}else if(!Jn&&M&&ur!=="clear"){var go=zr(),Wo=(0,v.Z)(go,2),ra=Wo[0],ia=Wo[1];M(ra,ia)}},Ho=Jr(function(vr,gr){var Jn,ur=In?gr.selected:!0;ur?Jn=In?[].concat((0,Z.Z)(_r),[vr]):[vr]:Jn=_r.filter(function(zr){return zr.value!==vr}),fo(Jn),Bo(vr,ur),ve==="combobox"?Zo(""):(!tn||Xt)&&(Rn(""),Zo(""))}),lo=function(gr,Jn){fo(gr);var ur=Jn.type,zr=Jn.values;(ur==="remove"||ur==="clear")&&zr.forEach(function(zn){Bo(zn.value,!1,ur)})},Fo=function(gr,Jn){if(Rn(gr),Zo(null),Jn.source==="submit"){var ur=(gr||"").trim();if(ur){var zr=Array.from(new Set([].concat((0,Z.Z)(Kr),[ur])));fo(zr),Bo(ur,!0),Rn("")}return}Jn.source!=="blur"&&(ve==="combobox"&&fo(gr),Zt==null||Zt(gr))},Uo=function(gr){var Jn=gr;ve!=="tags"&&(Jn=gr.map(function(zr){var zn=Dn.get(zr);return zn==null?void 0:zn.value}).filter(function(zr){return zr!==void 0}));var ur=Array.from(new Set([].concat((0,Z.Z)(Kr),(0,Z.Z)(Jn))));fo(ur),ur.forEach(function(zr){Bo(zr,!0)})},Po=r.useMemo(function(){var vr=x!==!1&&B!==!1;return(0,R.Z)((0,R.Z)({},nr),{},{flattenOptions:io,onActiveValue:Go,defaultActiveFirstOption:qo,onSelect:Ho,menuItemSelectedIcon:p,rawValues:Kr,fieldNames:Un,virtual:vr,direction:W,listHeight:Ee,listItemHeight:Ze,childrenAsData:$n,maxCount:St,optionRender:lt})},[St,nr,io,Go,qo,Ho,p,Kr,Un,x,B,W,Ee,Ze,$n,lt]);return r.createElement(mn.Provider,{value:Po},r.createElement(un,(0,j.Z)({},kt,{id:pn,prefixCls:it,ref:I,omitDomProps:oo,mode:ve,displayValues:jo,onDisplayValuesChange:lo,direction:W,searchValue:Kt,onSearch:Fo,autoClearSearchValue:Xt,onSearchSplit:Uo,dropdownMatchSelectWidth:B,OptionList:Nr,emptyOptions:!io.length,activeValue:To,activeDescendantId:"".concat(pn,"_list_").concat(Vo)})))}),Dr=po;Dr.Option=Ke,Dr.OptGroup=gt;var Oo=Dr,wo=Oo,no=s(87263),Wr=s(33603),co=s(25682),ho=s(53124);function xo(f){return I=>r.createElement(co.ZP,{theme:{token:{motion:!1,zIndexPopupBase:0}}},r.createElement(f,Object.assign({},I)))}var We=(f,I,oe,ve)=>xo(it=>{const{prefixCls:bt,style:Ot}=it,Dt=r.useRef(null),[Tt,Zt]=r.useState(0),[At,Xt]=r.useState(0),[st,M]=(0,$.Z)(!1,{value:it.open}),{getPrefixCls:G}=r.useContext(ho.E_),B=G(I||"select",bt);r.useEffect(()=>{if(M(!0),typeof ResizeObserver!="undefined"){const Ue=new ResizeObserver(dt=>{const lt=dt[0].target;Zt(lt.offsetHeight+8),Xt(lt.offsetWidth)}),ot=setInterval(()=>{var dt;const lt=oe?`.${oe(B)}`:`.${B}-dropdown`,l=(dt=Dt.current)===null||dt===void 0?void 0:dt.querySelector(lt);l&&(clearInterval(ot),Ue.observe(l))},10);return()=>{clearInterval(ot),Ue.disconnect()}}},[]);let le=Object.assign(Object.assign({},it),{style:Object.assign(Object.assign({},Ot),{margin:0}),open:st,visible:st,getPopupContainer:()=>Dt.current});ve&&(le=ve(le));const Ce={paddingBottom:Tt,position:"relative",minWidth:At};return r.createElement("div",{ref:Dt,style:Ce},r.createElement(f,Object.assign({},le)))});const Nt=null;function F(f,I,oe){return X()({[`${f}-status-success`]:I==="success",[`${f}-status-warning`]:I==="warning",[`${f}-status-error`]:I==="error",[`${f}-status-validating`]:I==="validating",[`${f}-has-feedback`]:oe})}const H=(f,I)=>I||f;var ee=s(4366),te=s(98866),me=s(35792),nt=s(98675),h=s(60566),ye=function(f,I){let oe=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;var ve,Ie;const{variant:it,[f]:bt}=(0,r.useContext)(ho.E_),Ot=(0,r.useContext)(h.pg),Dt=bt==null?void 0:bt.variant;let Tt;typeof I!="undefined"?Tt=I:oe===!1?Tt="borderless":Tt=(Ie=(ve=Ot!=null?Ot:Dt)!==null&&ve!==void 0?ve:it)!==null&&Ie!==void 0?Ie:"outlined";const Zt=ho.tr.includes(Tt);return[Tt,Zt]},Se=s(4173),Te=s(25976);const Fe=f=>{const oe={overflow:{adjustX:!0,adjustY:!0,shiftY:!0},htmlRegion:f==="scroll"?"scroll":"visible",dynamicInset:!0};return{bottomLeft:Object.assign(Object.assign({},oe),{points:["tl","bl"],offset:[0,4]}),bottomRight:Object.assign(Object.assign({},oe),{points:["tr","br"],offset:[0,4]}),topLeft:Object.assign(Object.assign({},oe),{points:["bl","tl"],offset:[0,-4]}),topRight:Object.assign(Object.assign({},oe),{points:["br","tr"],offset:[0,-4]})}};function Xe(f,I){return f||Fe(I)}var Je=Xe,ct=s(14747),xt=s(80110),zt=s(83559),Et=s(83262),$t=s(67771),jt=s(11568),Gt=s(93590);const Rt=new jt.E4("antMoveDownIn",{"0%":{transform:"translate3d(0, 100%, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),xn=new jt.E4("antMoveDownOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(0, 100%, 0)",transformOrigin:"0 0",opacity:0}}),en=new jt.E4("antMoveLeftIn",{"0%":{transform:"translate3d(-100%, 0, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),ln=new jt.E4("antMoveLeftOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(-100%, 0, 0)",transformOrigin:"0 0",opacity:0}}),an=new jt.E4("antMoveRightIn",{"0%":{transform:"translate3d(100%, 0, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),bn=new jt.E4("antMoveRightOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(100%, 0, 0)",transformOrigin:"0 0",opacity:0}}),_n=new jt.E4("antMoveUpIn",{"0%":{transform:"translate3d(0, -100%, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),Pn=new jt.E4("antMoveUpOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(0, -100%, 0)",transformOrigin:"0 0",opacity:0}}),Bn={"move-up":{inKeyframes:_n,outKeyframes:Pn},"move-down":{inKeyframes:Rt,outKeyframes:xn},"move-left":{inKeyframes:en,outKeyframes:ln},"move-right":{inKeyframes:an,outKeyframes:bn}},rn=(f,I)=>{const{antCls:oe}=f,ve=`${oe}-${I}`,{inKeyframes:Ie,outKeyframes:it}=Bn[I];return[(0,Gt.R)(ve,Ie,it,f.motionDurationMid),{[` + ${ve}-enter, + ${ve}-appear + `]:{opacity:0,animationTimingFunction:f.motionEaseOutCirc},[`${ve}-leave`]:{animationTimingFunction:f.motionEaseInOutCirc}}]},En=f=>{const{optionHeight:I,optionFontSize:oe,optionLineHeight:ve,optionPadding:Ie}=f;return{position:"relative",display:"block",minHeight:I,padding:Ie,color:f.colorText,fontWeight:"normal",fontSize:oe,lineHeight:ve,boxSizing:"border-box"}};var Mn=f=>{const{antCls:I,componentCls:oe}=f,ve=`${oe}-item`,Ie=`&${I}-slide-up-enter${I}-slide-up-enter-active`,it=`&${I}-slide-up-appear${I}-slide-up-appear-active`,bt=`&${I}-slide-up-leave${I}-slide-up-leave-active`,Ot=`${oe}-dropdown-placement-`;return[{[`${oe}-dropdown`]:Object.assign(Object.assign({},(0,ct.Wf)(f)),{position:"absolute",top:-9999,zIndex:f.zIndexPopup,boxSizing:"border-box",padding:f.paddingXXS,overflow:"hidden",fontSize:f.fontSize,fontVariant:"initial",backgroundColor:f.colorBgElevated,borderRadius:f.borderRadiusLG,outline:"none",boxShadow:f.boxShadowSecondary,[` + ${Ie}${Ot}bottomLeft, + ${it}${Ot}bottomLeft + `]:{animationName:$t.fJ},[` + ${Ie}${Ot}topLeft, + ${it}${Ot}topLeft, + ${Ie}${Ot}topRight, + ${it}${Ot}topRight + `]:{animationName:$t.Qt},[`${bt}${Ot}bottomLeft`]:{animationName:$t.Uw},[` + ${bt}${Ot}topLeft, + ${bt}${Ot}topRight + `]:{animationName:$t.ly},"&-hidden":{display:"none"},[ve]:Object.assign(Object.assign({},En(f)),{cursor:"pointer",transition:`background ${f.motionDurationSlow} ease`,borderRadius:f.borderRadiusSM,"&-group":{color:f.colorTextDescription,fontSize:f.fontSizeSM,cursor:"default"},"&-option":{display:"flex","&-content":Object.assign({flex:"auto"},ct.vS),"&-state":{flex:"none",display:"flex",alignItems:"center"},[`&-active:not(${ve}-option-disabled)`]:{backgroundColor:f.optionActiveBg},[`&-selected:not(${ve}-option-disabled)`]:{color:f.optionSelectedColor,fontWeight:f.optionSelectedFontWeight,backgroundColor:f.optionSelectedBg,[`${ve}-option-state`]:{color:f.colorPrimary},[`&:has(+ ${ve}-option-selected:not(${ve}-option-disabled))`]:{borderEndStartRadius:0,borderEndEndRadius:0,[`& + ${ve}-option-selected:not(${ve}-option-disabled)`]:{borderStartStartRadius:0,borderStartEndRadius:0}}},"&-disabled":{[`&${ve}-option-selected`]:{backgroundColor:f.colorBgContainerDisabled},color:f.colorTextDisabled,cursor:"not-allowed"},"&-grouped":{paddingInlineStart:f.calc(f.controlPaddingHorizontal).mul(2).equal()}},"&-empty":Object.assign(Object.assign({},En(f)),{color:f.colorTextDisabled})}),"&-rtl":{direction:"rtl"}})},(0,$t.oN)(f,"slide-up"),(0,$t.oN)(f,"slide-down"),rn(f,"move-up"),rn(f,"move-down")]};const An=f=>{const{multipleSelectItemHeight:I,paddingXXS:oe,lineWidth:ve,INTERNAL_FIXED_ITEM_MARGIN:Ie}=f,it=f.max(f.calc(oe).sub(ve).equal(),0),bt=f.max(f.calc(it).sub(Ie).equal(),0);return{basePadding:it,containerPadding:bt,itemHeight:(0,jt.bf)(I),itemLineHeight:(0,jt.bf)(f.calc(I).sub(f.calc(f.lineWidth).mul(2)).equal())}},sn=f=>{const{multipleSelectItemHeight:I,selectHeight:oe,lineWidth:ve}=f;return f.calc(oe).sub(I).div(2).sub(ve).equal()},wn=f=>{const{componentCls:I,iconCls:oe,borderRadiusSM:ve,motionDurationSlow:Ie,paddingXS:it,multipleItemColorDisabled:bt,multipleItemBorderColorDisabled:Ot,colorIcon:Dt,colorIconHover:Tt,INTERNAL_FIXED_ITEM_MARGIN:Zt}=f;return{[`${I}-selection-overflow`]:{position:"relative",display:"flex",flex:"auto",flexWrap:"wrap",maxWidth:"100%","&-item":{flex:"none",alignSelf:"center",maxWidth:"100%",display:"inline-flex"},[`${I}-selection-item`]:{display:"flex",alignSelf:"center",flex:"none",boxSizing:"border-box",maxWidth:"100%",marginBlock:Zt,borderRadius:ve,cursor:"default",transition:`font-size ${Ie}, line-height ${Ie}, height ${Ie}`,marginInlineEnd:f.calc(Zt).mul(2).equal(),paddingInlineStart:it,paddingInlineEnd:f.calc(it).div(2).equal(),[`${I}-disabled&`]:{color:bt,borderColor:Ot,cursor:"not-allowed"},"&-content":{display:"inline-block",marginInlineEnd:f.calc(it).div(2).equal(),overflow:"hidden",whiteSpace:"pre",textOverflow:"ellipsis"},"&-remove":Object.assign(Object.assign({},(0,ct.Ro)()),{display:"inline-flex",alignItems:"center",color:Dt,fontWeight:"bold",fontSize:10,lineHeight:"inherit",cursor:"pointer",[`> ${oe}`]:{verticalAlign:"-0.2em"},"&:hover":{color:Tt}})}}}},Kn=(f,I)=>{const{componentCls:oe,INTERNAL_FIXED_ITEM_MARGIN:ve}=f,Ie=`${oe}-selection-overflow`,it=f.multipleSelectItemHeight,bt=sn(f),Ot=I?`${oe}-${I}`:"",Dt=An(f);return{[`${oe}-multiple${Ot}`]:Object.assign(Object.assign({},wn(f)),{[`${oe}-selector`]:{display:"flex",flexWrap:"wrap",alignItems:"center",height:"100%",paddingInline:Dt.basePadding,paddingBlock:Dt.containerPadding,borderRadius:f.borderRadius,[`${oe}-disabled&`]:{background:f.multipleSelectorBgDisabled,cursor:"not-allowed"},"&:after":{display:"inline-block",width:0,margin:`${(0,jt.bf)(ve)} 0`,lineHeight:(0,jt.bf)(it),visibility:"hidden",content:'"\\a0"'}},[`${oe}-selection-item`]:{height:Dt.itemHeight,lineHeight:(0,jt.bf)(Dt.itemLineHeight)},[`${Ie}-item + ${Ie}-item`]:{[`${oe}-selection-search`]:{marginInlineStart:0}},[`${Ie}-item-suffix`]:{height:"100%"},[`${oe}-selection-search`]:{display:"inline-flex",position:"relative",maxWidth:"100%",marginInlineStart:f.calc(f.inputPaddingHorizontalBase).sub(bt).equal(),"\n &-input,\n &-mirror\n ":{height:it,fontFamily:f.fontFamily,lineHeight:(0,jt.bf)(it),transition:`all ${f.motionDurationSlow}`},"&-input":{width:"100%",minWidth:4.1},"&-mirror":{position:"absolute",top:0,insetInlineStart:0,insetInlineEnd:"auto",zIndex:999,whiteSpace:"pre",visibility:"hidden"}},[`${oe}-selection-placeholder`]:{position:"absolute",top:"50%",insetInlineStart:f.inputPaddingHorizontalBase,insetInlineEnd:f.inputPaddingHorizontalBase,transform:"translateY(-50%)",transition:`all ${f.motionDurationSlow}`}})}};function er(f,I){const{componentCls:oe}=f,ve=I?`${oe}-${I}`:"",Ie={[`${oe}-multiple${ve}`]:{fontSize:f.fontSize,[`${oe}-selector`]:{[`${oe}-show-search&`]:{cursor:"text"}},[` + &${oe}-show-arrow ${oe}-selector, + &${oe}-allow-clear ${oe}-selector + `]:{paddingInlineEnd:f.calc(f.fontSizeIcon).add(f.controlPaddingHorizontal).equal()}}};return[Kn(f,I),Ie]}var ar=f=>{const{componentCls:I}=f,oe=(0,Et.IX)(f,{selectHeight:f.controlHeightSM,multipleSelectItemHeight:f.multipleItemHeightSM,borderRadius:f.borderRadiusSM,borderRadiusSM:f.borderRadiusXS}),ve=(0,Et.IX)(f,{fontSize:f.fontSizeLG,selectHeight:f.controlHeightLG,multipleSelectItemHeight:f.multipleItemHeightLG,borderRadius:f.borderRadiusLG,borderRadiusSM:f.borderRadius});return[er(f),er(oe,"sm"),{[`${I}-multiple${I}-sm`]:{[`${I}-selection-placeholder`]:{insetInline:f.calc(f.controlPaddingHorizontalSM).sub(f.lineWidth).equal()},[`${I}-selection-search`]:{marginInlineStart:2}}},er(ve,"lg")]};function Or(f,I){const{componentCls:oe,inputPaddingHorizontalBase:ve,borderRadius:Ie,fontSizeIcon:it}=f,bt=f.calc(f.controlHeight).sub(f.calc(f.lineWidth).mul(2)).equal(),Ot=f.calc(ve).add(it).equal(),Dt=I?`${oe}-${I}`:"";return{[`${oe}-single${Dt}`]:{fontSize:f.fontSize,height:f.controlHeight,[`${oe}-selector`]:Object.assign(Object.assign({},(0,ct.Wf)(f,!0)),{display:"flex",borderRadius:Ie,[`${oe}-selection-search`]:{position:"absolute",top:0,insetInlineStart:ve,insetInlineEnd:(0,jt.bf)(Ot),bottom:0,"&-input":{width:"100%",WebkitAppearance:"textfield"}},[` + ${oe}-selection-item, + ${oe}-selection-placeholder + `]:{padding:0,lineHeight:(0,jt.bf)(bt),transition:`all ${f.motionDurationSlow}, visibility 0s`,alignSelf:"center"},[`${oe}-selection-placeholder`]:{transition:"none",pointerEvents:"none"},[["&:after",`${oe}-selection-item:empty:after`,`${oe}-selection-placeholder:empty:after`].join(",")]:{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'}}),[` + &${oe}-show-arrow ${oe}-selection-item, + &${oe}-show-arrow ${oe}-selection-placeholder + `]:{paddingInlineEnd:f.showArrowPaddingInlineEnd},[`&${oe}-open ${oe}-selection-item`]:{color:f.colorTextPlaceholder},[`&:not(${oe}-customize-input)`]:{[`${oe}-selector`]:{width:"100%",height:"100%",padding:`0 ${(0,jt.bf)(ve)}`,[`${oe}-selection-search-input`]:{height:bt},"&:after":{lineHeight:(0,jt.bf)(bt)}}},[`&${oe}-customize-input`]:{[`${oe}-selector`]:{"&:after":{display:"none"},[`${oe}-selection-search`]:{position:"static",width:"100%"},[`${oe}-selection-placeholder`]:{position:"absolute",insetInlineStart:0,insetInlineEnd:0,padding:`0 ${(0,jt.bf)(ve)}`,"&:after":{display:"none"}}}}}}}function Qn(f){const{componentCls:I}=f,oe=f.calc(f.controlPaddingHorizontalSM).sub(f.lineWidth).equal();return[Or(f),Or((0,Et.IX)(f,{controlHeight:f.controlHeightSM,borderRadius:f.borderRadiusSM}),"sm"),{[`${I}-single${I}-sm`]:{[`&:not(${I}-customize-input)`]:{[`${I}-selection-search`]:{insetInlineStart:oe,insetInlineEnd:oe},[`${I}-selector`]:{padding:`0 ${(0,jt.bf)(oe)}`},[`&${I}-show-arrow ${I}-selection-search`]:{insetInlineEnd:f.calc(oe).add(f.calc(f.fontSize).mul(1.5)).equal()},[` + &${I}-show-arrow ${I}-selection-item, + &${I}-show-arrow ${I}-selection-placeholder + `]:{paddingInlineEnd:f.calc(f.fontSize).mul(1.5).equal()}}}},Or((0,Et.IX)(f,{controlHeight:f.singleItemHeightLG,fontSize:f.fontSizeLG,borderRadius:f.borderRadiusLG}),"lg")]}const br=f=>{const{fontSize:I,lineHeight:oe,lineWidth:ve,controlHeight:Ie,controlHeightSM:it,controlHeightLG:bt,paddingXXS:Ot,controlPaddingHorizontal:Dt,zIndexPopupBase:Tt,colorText:Zt,fontWeightStrong:At,controlItemBgActive:Xt,controlItemBgHover:st,colorBgContainer:M,colorFillSecondary:G,colorBgContainerDisabled:B,colorTextDisabled:le,colorPrimaryHover:Ce,colorPrimary:Ue,controlOutline:ot}=f,dt=Ot*2,lt=ve*2,l=Math.min(Ie-dt,Ie-lt),d=Math.min(it-dt,it-lt),p=Math.min(bt-dt,bt-lt);return{INTERNAL_FIXED_ITEM_MARGIN:Math.floor(Ot/2),zIndexPopup:Tt+50,optionSelectedColor:Zt,optionSelectedFontWeight:At,optionSelectedBg:Xt,optionActiveBg:st,optionPadding:`${(Ie-I*oe)/2}px ${Dt}px`,optionFontSize:I,optionLineHeight:oe,optionHeight:Ie,selectorBg:M,clearBg:M,singleItemHeightLG:bt,multipleItemBg:G,multipleItemBorderColor:"transparent",multipleItemHeight:l,multipleItemHeightSM:d,multipleItemHeightLG:p,multipleSelectorBgDisabled:B,multipleItemColorDisabled:le,multipleItemBorderColorDisabled:"transparent",showArrowPaddingInlineEnd:Math.ceil(f.fontSize*1.25),hoverBorderColor:Ce,activeBorderColor:Ue,activeOutlineColor:ot}},lr=(f,I)=>{const{componentCls:oe,antCls:ve,controlOutlineWidth:Ie}=f;return{[`&:not(${oe}-customize-input) ${oe}-selector`]:{border:`${(0,jt.bf)(f.lineWidth)} ${f.lineType} ${I.borderColor}`,background:f.selectorBg},[`&:not(${oe}-disabled):not(${oe}-customize-input):not(${ve}-pagination-size-changer)`]:{[`&:hover ${oe}-selector`]:{borderColor:I.hoverBorderHover},[`${oe}-focused& ${oe}-selector`]:{borderColor:I.activeBorderColor,boxShadow:`0 0 0 ${(0,jt.bf)(Ie)} ${I.activeOutlineColor}`,outline:0}}}},Wn=(f,I)=>({[`&${f.componentCls}-status-${I.status}`]:Object.assign({},lr(f,I))}),ie=f=>({"&-outlined":Object.assign(Object.assign(Object.assign(Object.assign({},lr(f,{borderColor:f.colorBorder,hoverBorderHover:f.hoverBorderColor,activeBorderColor:f.activeBorderColor,activeOutlineColor:f.activeOutlineColor})),Wn(f,{status:"error",borderColor:f.colorError,hoverBorderHover:f.colorErrorHover,activeBorderColor:f.colorError,activeOutlineColor:f.colorErrorOutline})),Wn(f,{status:"warning",borderColor:f.colorWarning,hoverBorderHover:f.colorWarningHover,activeBorderColor:f.colorWarning,activeOutlineColor:f.colorWarningOutline})),{[`&${f.componentCls}-disabled`]:{[`&:not(${f.componentCls}-customize-input) ${f.componentCls}-selector`]:{background:f.colorBgContainerDisabled,color:f.colorTextDisabled}},[`&${f.componentCls}-multiple ${f.componentCls}-selection-item`]:{background:f.multipleItemBg,border:`${(0,jt.bf)(f.lineWidth)} ${f.lineType} ${f.multipleItemBorderColor}`}})}),w=(f,I)=>{const{componentCls:oe,antCls:ve}=f;return{[`&:not(${oe}-customize-input) ${oe}-selector`]:{background:I.bg,border:`${(0,jt.bf)(f.lineWidth)} ${f.lineType} transparent`,color:I.color},[`&:not(${oe}-disabled):not(${oe}-customize-input):not(${ve}-pagination-size-changer)`]:{[`&:hover ${oe}-selector`]:{background:I.hoverBg},[`${oe}-focused& ${oe}-selector`]:{background:f.selectorBg,borderColor:I.activeBorderColor,outline:0}}}},m=(f,I)=>({[`&${f.componentCls}-status-${I.status}`]:Object.assign({},w(f,I))}),L=f=>({"&-filled":Object.assign(Object.assign(Object.assign(Object.assign({},w(f,{bg:f.colorFillTertiary,hoverBg:f.colorFillSecondary,activeBorderColor:f.activeBorderColor,color:f.colorText})),m(f,{status:"error",bg:f.colorErrorBg,hoverBg:f.colorErrorBgHover,activeBorderColor:f.colorError,color:f.colorError})),m(f,{status:"warning",bg:f.colorWarningBg,hoverBg:f.colorWarningBgHover,activeBorderColor:f.colorWarning,color:f.colorWarning})),{[`&${f.componentCls}-disabled`]:{[`&:not(${f.componentCls}-customize-input) ${f.componentCls}-selector`]:{borderColor:f.colorBorder,background:f.colorBgContainerDisabled,color:f.colorTextDisabled}},[`&${f.componentCls}-multiple ${f.componentCls}-selection-item`]:{background:f.colorBgContainer,border:`${(0,jt.bf)(f.lineWidth)} ${f.lineType} ${f.colorSplit}`}})}),C=f=>({"&-borderless":{[`${f.componentCls}-selector`]:{background:"transparent",borderColor:"transparent"},[`&${f.componentCls}-disabled`]:{[`&:not(${f.componentCls}-customize-input) ${f.componentCls}-selector`]:{color:f.colorTextDisabled}},[`&${f.componentCls}-multiple ${f.componentCls}-selection-item`]:{background:f.multipleItemBg,border:`${(0,jt.bf)(f.lineWidth)} ${f.lineType} ${f.multipleItemBorderColor}`},[`&${f.componentCls}-status-error`]:{[`${f.componentCls}-selection-item`]:{color:f.colorError}},[`&${f.componentCls}-status-warning`]:{[`${f.componentCls}-selection-item`]:{color:f.colorWarning}}}});var fe=f=>({[f.componentCls]:Object.assign(Object.assign(Object.assign({},ie(f)),L(f)),C(f))});const Re=f=>{const{componentCls:I}=f;return{position:"relative",transition:`all ${f.motionDurationMid} ${f.motionEaseInOut}`,input:{cursor:"pointer"},[`${I}-show-search&`]:{cursor:"text",input:{cursor:"auto",color:"inherit",height:"100%"}},[`${I}-disabled&`]:{cursor:"not-allowed",input:{cursor:"not-allowed"}}}},Ge=f=>{const{componentCls:I}=f;return{[`${I}-selection-search-input`]:{margin:0,padding:0,background:"transparent",border:"none",outline:"none",appearance:"none",fontFamily:"inherit","&::-webkit-search-cancel-button":{display:"none","-webkit-appearance":"none"}}}},ut=f=>{const{antCls:I,componentCls:oe,inputPaddingHorizontalBase:ve,iconCls:Ie}=f;return{[oe]:Object.assign(Object.assign({},(0,ct.Wf)(f)),{position:"relative",display:"inline-block",cursor:"pointer",[`&:not(${oe}-customize-input) ${oe}-selector`]:Object.assign(Object.assign({},Re(f)),Ge(f)),[`${oe}-selection-item`]:Object.assign(Object.assign({flex:1,fontWeight:"normal",position:"relative",userSelect:"none"},ct.vS),{[`> ${I}-typography`]:{display:"inline"}}),[`${oe}-selection-placeholder`]:Object.assign(Object.assign({},ct.vS),{flex:1,color:f.colorTextPlaceholder,pointerEvents:"none"}),[`${oe}-arrow`]:Object.assign(Object.assign({},(0,ct.Ro)()),{position:"absolute",top:"50%",insetInlineStart:"auto",insetInlineEnd:ve,height:f.fontSizeIcon,marginTop:f.calc(f.fontSizeIcon).mul(-1).div(2).equal(),color:f.colorTextQuaternary,fontSize:f.fontSizeIcon,lineHeight:1,textAlign:"center",pointerEvents:"none",display:"flex",alignItems:"center",transition:`opacity ${f.motionDurationSlow} ease`,[Ie]:{verticalAlign:"top",transition:`transform ${f.motionDurationSlow}`,"> svg":{verticalAlign:"top"},[`&:not(${oe}-suffix)`]:{pointerEvents:"auto"}},[`${oe}-disabled &`]:{cursor:"not-allowed"},"> *:not(:last-child)":{marginInlineEnd:8}}),[`${oe}-clear`]:{position:"absolute",top:"50%",insetInlineStart:"auto",insetInlineEnd:ve,zIndex:1,display:"inline-block",width:f.fontSizeIcon,height:f.fontSizeIcon,marginTop:f.calc(f.fontSizeIcon).mul(-1).div(2).equal(),color:f.colorTextQuaternary,fontSize:f.fontSizeIcon,fontStyle:"normal",lineHeight:1,textAlign:"center",textTransform:"none",cursor:"pointer",opacity:0,transition:`color ${f.motionDurationMid} ease, opacity ${f.motionDurationSlow} ease`,textRendering:"auto","&:before":{display:"block"},"&:hover":{color:f.colorTextTertiary}},[`&:hover ${oe}-clear`]:{opacity:1,background:f.colorBgBase,borderRadius:"50%"}}),[`${oe}-has-feedback`]:{[`${oe}-clear`]:{insetInlineEnd:f.calc(ve).add(f.fontSize).add(f.paddingXS).equal()}}}},Pe=f=>{const{componentCls:I}=f;return[{[I]:{[`&${I}-in-form-item`]:{width:"100%"}}},ut(f),Qn(f),ar(f),Mn(f),{[`${I}-rtl`]:{direction:"rtl"}},(0,xt.c)(f,{borderElCls:`${I}-selector`,focusElCls:`${I}-focused`})]};var Lt=(0,zt.I$)("Select",(f,I)=>{let{rootPrefixCls:oe}=I;const ve=(0,Et.IX)(f,{rootPrefixCls:oe,inputPaddingHorizontalBase:f.calc(f.paddingSM).sub(1).equal(),multipleSelectItemHeight:f.multipleItemHeight,selectHeight:f.controlHeight});return[Pe(ve),fe(ve)]},br,{unitless:{optionLineHeight:!0,optionSelectedFontWeight:!0}}),Wt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"},gn=Wt,_t=s(42135),Vt=function(I,oe){return r.createElement(_t.Z,(0,j.Z)({},I,{ref:oe,icon:gn}))},wt=r.forwardRef(Vt),fn=wt,u={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"},S=u,K=function(I,oe){return r.createElement(_t.Z,(0,j.Z)({},I,{ref:oe,icon:S}))},re=r.forwardRef(K),n=re,a=s(97937),N={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},name:"down",theme:"outlined"},P=N,ae=function(I,oe){return r.createElement(_t.Z,(0,j.Z)({},I,{ref:oe,icon:P}))},Ne=r.forwardRef(ae),ze=Ne,pt=s(50888),at={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z"}}]},name:"search",theme:"outlined"},Ut=at,Ht=function(I,oe){return r.createElement(_t.Z,(0,j.Z)({},I,{ref:oe,icon:Ut}))},On=r.forwardRef(Ht),on=On;function Hn(f){let{suffixIcon:I,clearIcon:oe,menuItemSelectedIcon:ve,removeIcon:Ie,loading:it,multiple:bt,hasFeedback:Ot,prefixCls:Dt,showSuffixIcon:Tt,feedbackIcon:Zt,showArrow:At,componentName:Xt}=f;const st=oe!=null?oe:r.createElement(n,null),M=Ce=>I===null&&!Ot&&!At?null:r.createElement(r.Fragment,null,Tt!==!1&&Ce,Ot&&Zt);let G=null;if(I!==void 0)G=M(I);else if(it)G=M(r.createElement(pt.Z,{spin:!0}));else{const Ce=`${Dt}-suffix`;G=Ue=>{let{open:ot,showSearch:dt}=Ue;return M(ot&&dt?r.createElement(on,{className:Ce}):r.createElement(ze,{className:Ce}))}}let B=null;ve!==void 0?B=ve:bt?B=r.createElement(fn,null):B=null;let le=null;return Ie!==void 0?le=Ie:le=r.createElement(a.Z,null),{clearIcon:st,suffixIcon:G,itemIcon:B,removeIcon:le}}function Tn(f,I){return I!==void 0?I:f!==null}var Gn=function(f,I){var oe={};for(var ve in f)Object.prototype.hasOwnProperty.call(f,ve)&&I.indexOf(ve)<0&&(oe[ve]=f[ve]);if(f!=null&&typeof Object.getOwnPropertySymbols=="function")for(var Ie=0,ve=Object.getOwnPropertySymbols(f);Ie{var oe;const{prefixCls:ve,bordered:Ie,className:it,rootClassName:bt,getPopupContainer:Ot,popupClassName:Dt,dropdownClassName:Tt,listHeight:Zt=256,placement:At,listItemHeight:Xt,size:st,disabled:M,notFoundContent:G,status:B,builtinPlacements:le,dropdownMatchSelectWidth:Ce,popupMatchSelectWidth:Ue,direction:ot,style:dt,allowClear:lt,variant:l,dropdownStyle:d,transitionName:p,tagRender:x,maxCount:W}=f,ge=Gn(f,["prefixCls","bordered","className","rootClassName","getPopupContainer","popupClassName","dropdownClassName","listHeight","placement","listItemHeight","size","disabled","notFoundContent","status","builtinPlacements","dropdownMatchSelectWidth","popupMatchSelectWidth","direction","style","allowClear","variant","dropdownStyle","transitionName","tagRender","maxCount"]),{getPopupContainer:Ee,getPrefixCls:et,renderEmpty:Ze,direction:_e,virtual:mt,popupMatchSelectWidth:qe,popupOverflow:rt,select:ke}=r.useContext(ho.E_),[,St]=(0,Te.ZP)(),kt=Xt!=null?Xt:St==null?void 0:St.controlHeight,pn=et("select",ve),In=et(),$n=ot!=null?ot:_e,{compactSize:ir,compactItemClassnames:Un}=(0,Se.ri)(pn,$n),[sr,tr]=ye("select",l,Ie),Kt=(0,me.Z)(pn),[Rn,nr,kn]=Lt(pn,Kt),Dn=r.useMemo(()=>{const{mode:$o}=f;if($o!=="combobox")return $o===Sn?"combobox":$o},[f.mode]),cr=Dn==="multiple"||Dn==="tags",hr=Tn(f.suffixIcon,f.showArrow),Tr=(oe=Ue!=null?Ue:Ce)!==null&&oe!==void 0?oe:qe,{status:Cr,hasFeedback:qr,isFormItemInput:ro,feedbackIcon:Io}=r.useContext(h.aM),uo=H(Cr,B);let yo;G!==void 0?yo=G:Dn==="combobox"?yo=null:yo=(Ze==null?void 0:Ze("Select"))||r.createElement(ee.Z,{componentName:"Select"});const{suffixIcon:_r,itemIcon:bo,removeIcon:jo,clearIcon:Kr}=Hn(Object.assign(Object.assign({},ge),{multiple:cr,hasFeedback:qr,feedbackIcon:Io,showSuffixIcon:hr,prefixCls:pn,componentName:"Select"})),eo=lt===!0?{clearIcon:Kr}:lt,ao=(0,rr.Z)(ge,["suffixIcon","itemIcon"]),So=X()(Dt||Tt,{[`${pn}-dropdown-${$n}`]:$n==="rtl"},bt,kn,Kt,nr),Co=(0,nt.Z)($o=>{var To;return(To=st!=null?st:ir)!==null&&To!==void 0?To:$o}),Pr=r.useContext(te.Z),Ar=M!=null?M:Pr,io=X()({[`${pn}-lg`]:Co==="large",[`${pn}-sm`]:Co==="small",[`${pn}-rtl`]:$n==="rtl",[`${pn}-${sr}`]:tr,[`${pn}-in-form-item`]:ro},F(pn,uo,qr),Un,ke==null?void 0:ke.className,it,bt,kn,Kt,nr),fo=r.useMemo(()=>At!==void 0?At:$n==="rtl"?"bottomRight":"bottomLeft",[At,$n]),[Do]=(0,no.Cn)("SelectLike",d==null?void 0:d.zIndex);return Rn(r.createElement(wo,Object.assign({ref:I,virtual:mt,showSearch:ke==null?void 0:ke.showSearch},ao,{style:Object.assign(Object.assign({},ke==null?void 0:ke.style),dt),dropdownMatchSelectWidth:Tr,transitionName:(0,Wr.m)(In,"slide-up",p),builtinPlacements:Je(le,rt),listHeight:Zt,listItemHeight:kt,mode:Dn,prefixCls:pn,placement:fo,direction:$n,suffixIcon:_r,menuItemSelectedIcon:bo,removeIcon:jo,allowClear:eo,notFoundContent:yo,className:io,getPopupContainer:Ot||Ee,dropdownClassName:So,disabled:Ar,dropdownStyle:Object.assign(Object.assign({},d),{zIndex:Do}),maxCount:cr?W:void 0,tagRender:cr?x:void 0})))},Yt=r.forwardRef(Jt),dn=We(Yt);Yt.SECRET_COMBOBOX_MODE_DO_NOT_USE=Sn,Yt.Option=Ke,Yt.OptGroup=gt,Yt._InternalPanelDoNotUseOrYouWillBeFired=dn;var Vn=Yt},4173:function(Ve,k,s){"use strict";s.d(k,{BR:function(){return v},ri:function(){return R}});var r=s(67294),y=s(93967),X=s.n(y),j=s(50344),Z=function(T,b){var we={};for(var Q in T)Object.prototype.hasOwnProperty.call(T,Q)&&b.indexOf(Q)<0&&(we[Q]=T[Q]);if(T!=null&&typeof Object.getOwnPropertySymbols=="function")for(var J=0,Q=Object.getOwnPropertySymbols(T);J{const we=r.useContext(A),Q=r.useMemo(()=>{if(!we)return"";const{compactDirection:J,isFirstItem:ue,isLastItem:_}=we,Be=J==="vertical"?"-vertical-":"-";return X()(`${T}-compact${Be}item`,{[`${T}-compact${Be}first-item`]:ue,[`${T}-compact${Be}last-item`]:_,[`${T}-compact${Be}item-rtl`]:b==="rtl"})},[T,b,we]);return{compactSize:we==null?void 0:we.compactSize,compactDirection:we==null?void 0:we.compactDirection,compactItemClassnames:Q}},v=T=>{let{children:b}=T;return r.createElement(A.Provider,{value:null},b)},Y=T=>{var{children:b}=T,we=Z(T,["children"]);return React.createElement(A.Provider,{value:we},b)},O=T=>{const{getPrefixCls:b,direction:we}=React.useContext(ConfigContext),{size:Q,direction:J,block:ue,prefixCls:_,className:Be,rootClassName:Le,children:Bt}=T,vt=Z(T,["size","direction","block","prefixCls","className","rootClassName","children"]),Ae=useSize(pe=>Q!=null?Q:pe),V=b("space-compact",_),[he,q]=useStyle(V),D=classNames(V,q,{[`${V}-rtl`]:we==="rtl",[`${V}-block`]:ue,[`${V}-vertical`]:J==="vertical"},Be,Le),U=React.useContext(A),Oe=toArray(Bt),He=React.useMemo(()=>Oe.map((pe,Qe)=>{const ft=(pe==null?void 0:pe.key)||`${V}-item-${Qe}`;return React.createElement(Y,{key:ft,compactSize:Ae,compactDirection:J,isFirstItem:Qe===0&&(!U||(U==null?void 0:U.isFirstItem)),isLastItem:Qe===Oe.length-1&&(!U||(U==null?void 0:U.isLastItem))},pe)}),[Q,Oe,U]);return Oe.length===0?null:he(React.createElement("div",Object.assign({className:D},vt),He))};var $=null},80110:function(Ve,k,s){"use strict";s.d(k,{c:function(){return X}});function r(j,Z,A){const{focusElCls:R,focus:v,borderElCls:Y}=A,O=Y?"> *":"",$=["hover",v?"focus":null,"active"].filter(Boolean).map(T=>`&:${T} ${O}`).join(",");return{[`&-item:not(${Z}-last-item)`]:{marginInlineEnd:j.calc(j.lineWidth).mul(-1).equal()},"&-item":Object.assign(Object.assign({[$]:{zIndex:2}},R?{[`&${R}`]:{zIndex:2}}:{}),{[`&[disabled] ${O}`]:{zIndex:0}})}}function y(j,Z,A){const{borderElCls:R}=A,v=R?`> ${R}`:"";return{[`&-item:not(${Z}-first-item):not(${Z}-last-item) ${v}`]:{borderRadius:0},[`&-item:not(${Z}-last-item)${Z}-first-item`]:{[`& ${v}, &${j}-sm ${v}, &${j}-lg ${v}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&-item:not(${Z}-first-item)${Z}-last-item`]:{[`& ${v}, &${j}-sm ${v}, &${j}-lg ${v}`]:{borderStartStartRadius:0,borderEndStartRadius:0}}}}function X(j){let Z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{focus:!0};const{componentCls:A}=j,R=`${A}-compact`;return{[R]:Object.assign(Object.assign({},r(j,R,Z)),y(A,R,Z))}}},14747:function(Ve,k,s){"use strict";s.d(k,{Lx:function(){return A},Qy:function(){return Y},Ro:function(){return j},Wf:function(){return X},dF:function(){return Z},du:function(){return R},oN:function(){return v},vS:function(){return y}});var r=s(11568);const y={overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},X=function($){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return{boxSizing:"border-box",margin:0,padding:0,color:$.colorText,fontSize:$.fontSize,lineHeight:$.lineHeight,listStyle:"none",fontFamily:T?"inherit":$.fontFamily}},j=()=>({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"}}),Z=()=>({"&::before":{display:"table",content:'""'},"&::after":{display:"table",clear:"both",content:'""'}}),A=$=>({a:{color:$.colorLink,textDecoration:$.linkDecoration,backgroundColor:"transparent",outline:"none",cursor:"pointer",transition:`color ${$.motionDurationSlow}`,"-webkit-text-decoration-skip":"objects","&:hover":{color:$.colorLinkHover},"&:active":{color:$.colorLinkActive},"&:active, &:hover":{textDecoration:$.linkHoverDecoration,outline:0},"&:focus":{textDecoration:$.linkFocusDecoration,outline:0},"&[disabled]":{color:$.colorTextDisabled,cursor:"not-allowed"}}}),R=($,T,b,we)=>{const Q=`[class^="${T}"], [class*=" ${T}"]`,J=b?`.${b}`:Q,ue={boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"}};let _={};return we!==!1&&(_={fontFamily:$.fontFamily,fontSize:$.fontSize}),{[J]:Object.assign(Object.assign(Object.assign({},_),ue),{[Q]:ue})}},v=$=>({outline:`${(0,r.bf)($.lineWidthFocus)} solid ${$.colorPrimaryBorder}`,outlineOffset:1,transition:"outline-offset 0s, outline 0s"}),Y=$=>({"&:focus-visible":Object.assign({},v($))}),O=$=>Object.assign(Object.assign({color:$.colorLink,textDecoration:$.linkDecoration,outline:"none",cursor:"pointer",transition:`all ${$.motionDurationSlow}`,border:0,padding:0,background:"none",userSelect:"none"},Y($)),{"&:focus, &:hover":{color:$.colorLinkHover},"&:active":{color:$.colorLinkActive}})},93590:function(Ve,k,s){"use strict";s.d(k,{R:function(){return X}});const r=j=>({animationDuration:j,animationFillMode:"both"}),y=j=>({animationDuration:j,animationFillMode:"both"}),X=function(j,Z,A,R){const Y=(arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1)?"&":"";return{[` + ${Y}${j}-enter, + ${Y}${j}-appear + `]:Object.assign(Object.assign({},r(R)),{animationPlayState:"paused"}),[`${Y}${j}-leave`]:Object.assign(Object.assign({},y(R)),{animationPlayState:"paused"}),[` + ${Y}${j}-enter${j}-enter-active, + ${Y}${j}-appear${j}-appear-active + `]:{animationName:Z,animationPlayState:"running"},[`${Y}${j}-leave${j}-leave-active`]:{animationName:A,animationPlayState:"running",pointerEvents:"none"}}}},67771:function(Ve,k,s){"use strict";s.d(k,{Qt:function(){return Z},Uw:function(){return j},fJ:function(){return X},ly:function(){return A},oN:function(){return T}});var r=s(11568),y=s(93590);const X=new r.E4("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),j=new r.E4("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),Z=new r.E4("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),A=new r.E4("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),R=new r.E4("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),v=new r.E4("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),Y=new r.E4("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),O=new r.E4("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),$={"slide-up":{inKeyframes:X,outKeyframes:j},"slide-down":{inKeyframes:Z,outKeyframes:A},"slide-left":{inKeyframes:R,outKeyframes:v},"slide-right":{inKeyframes:Y,outKeyframes:O}},T=(b,we)=>{const{antCls:Q}=b,J=`${Q}-${we}`,{inKeyframes:ue,outKeyframes:_}=$[we];return[(0,y.R)(J,ue,_,b.motionDurationMid),{[` + ${J}-enter, + ${J}-appear + `]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:b.motionEaseOutQuint,"&-prepare":{transform:"scale(1)"}},[`${J}-leave`]:{animationTimingFunction:b.motionEaseInQuint}}]}},21204:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return nt}});var r=s(67294),y=s(97937),X=s(89705),j=s(87462),Z={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{tag:"path",attrs:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"}}]},name:"plus",theme:"outlined"},A=Z,R=s(42135),v=function(E,ye){return r.createElement(R.Z,(0,j.Z)({},E,{ref:ye,icon:A}))},Y=r.forwardRef(v),O=Y,$=s(93967),T=s.n($),b=s(4942),we=s(1413),Q=s(97685),J=s(71002),ue=s(91),_=s(21770),Be=s(31131),Le=(0,r.createContext)(null),Bt=s(74902),vt=s(48555),Ae=s(66680),V=s(42550),he=s(75164),q=function(E){var ye=E.activeTabOffset,Se=E.horizontal,Te=E.rtl,Fe=E.indicator,Xe=Fe===void 0?{}:Fe,Je=Xe.size,ct=Xe.align,xt=ct===void 0?"center":ct,zt=(0,r.useState)(),Et=(0,Q.Z)(zt,2),$t=Et[0],jt=Et[1],Gt=(0,r.useRef)(),Rt=r.useCallback(function(en){return typeof Je=="function"?Je(en):typeof Je=="number"?Je:en},[Je]);function xn(){he.Z.cancel(Gt.current)}return(0,r.useEffect)(function(){var en={};if(ye)if(Se){en.width=Rt(ye.width);var ln=Te?"right":"left";xt==="start"&&(en[ln]=ye[ln]),xt==="center"&&(en[ln]=ye[ln]+ye.width/2,en.transform=Te?"translateX(50%)":"translateX(-50%)"),xt==="end"&&(en[ln]=ye[ln]+ye.width,en.transform="translateX(-100%)")}else en.height=Rt(ye.height),xt==="start"&&(en.top=ye.top),xt==="center"&&(en.top=ye.top+ye.height/2,en.transform="translateY(-50%)"),xt==="end"&&(en.top=ye.top+ye.height,en.transform="translateY(-100%)");return xn(),Gt.current=(0,he.Z)(function(){jt(en)}),xn},[ye,Se,Te,xt,Rt]),{style:$t}},D=q,U={width:0,height:0,left:0,top:0};function Oe(h,E,ye){return(0,r.useMemo)(function(){for(var Se,Te=new Map,Fe=E.get((Se=h[0])===null||Se===void 0?void 0:Se.key)||U,Xe=Fe.left+Fe.width,Je=0;Jewn?(An=yn,Pn.current="x"):(An=Mn,Pn.current="y"),E(-An,-An)&&En.preventDefault()}var rn=(0,r.useRef)(null);rn.current={onTouchStart:an,onTouchMove:bn,onTouchEnd:_n,onWheel:Bn},r.useEffect(function(){function En(sn){rn.current.onTouchStart(sn)}function yn(sn){rn.current.onTouchMove(sn)}function Mn(sn){rn.current.onTouchEnd(sn)}function An(sn){rn.current.onWheel(sn)}return document.addEventListener("touchmove",yn,{passive:!1}),document.addEventListener("touchend",Mn,{passive:!0}),h.current.addEventListener("touchstart",En,{passive:!0}),h.current.addEventListener("wheel",An,{passive:!1}),function(){document.removeEventListener("touchmove",yn),document.removeEventListener("touchend",Mn)}},[])}var de=s(8410);function ce(h){var E=(0,r.useState)(0),ye=(0,Q.Z)(E,2),Se=ye[0],Te=ye[1],Fe=(0,r.useRef)(0),Xe=(0,r.useRef)();return Xe.current=h,(0,de.o)(function(){var Je;(Je=Xe.current)===null||Je===void 0||Je.call(Xe)},[Se]),function(){Fe.current===Se&&(Fe.current+=1,Te(Fe.current))}}function be(h){var E=(0,r.useRef)([]),ye=(0,r.useState)({}),Se=(0,Q.Z)(ye,2),Te=Se[1],Fe=(0,r.useRef)(typeof h=="function"?h():h),Xe=ce(function(){var ct=Fe.current;E.current.forEach(function(xt){ct=xt(ct)}),E.current=[],Fe.current=ct,Te({})});function Je(ct){E.current.push(ct),Xe()}return[Fe.current,Je]}var Me={width:0,height:0,left:0,top:0,right:0};function $e(h,E,ye,Se,Te,Fe,Xe){var Je=Xe.tabs,ct=Xe.tabPosition,xt=Xe.rtl,zt,Et,$t;return["top","bottom"].includes(ct)?(zt="width",Et=xt?"right":"left",$t=Math.abs(ye)):(zt="height",Et="top",$t=-ye),(0,r.useMemo)(function(){if(!Je.length)return[0,0];for(var jt=Je.length,Gt=jt,Rt=0;RtMath.floor($t+E)){Gt=Rt-1;break}}for(var en=0,ln=jt-1;ln>=0;ln-=1){var an=h.get(Je[ln].key)||Me;if(an[Et]<$t){en=ln+1;break}}return en>=Gt?[0,0]:[en,Gt]},[h,E,Se,Te,Fe,$t,ct,Je.map(function(jt){return jt.key}).join("_"),xt])}function yt(h){var E;return h instanceof Map?(E={},h.forEach(function(ye,Se){E[Se]=ye})):E=h,JSON.stringify(E)}var Qt="TABS_DQ";function nn(h){return String(h).replace(/"/g,Qt)}function vn(h,E,ye,Se){return!(!ye||Se||h===!1||h===void 0&&(E===!1||E===null))}var Ln=r.forwardRef(function(h,E){var ye=h.prefixCls,Se=h.editable,Te=h.locale,Fe=h.style;return!Se||Se.showAdd===!1?null:r.createElement("button",{ref:E,type:"button",className:"".concat(ye,"-nav-add"),style:Fe,"aria-label":(Te==null?void 0:Te.addAriaLabel)||"Add tab",onClick:function(Je){Se.onEdit("add",{event:Je})}},Se.addIcon||"+")}),ht=Ln,z=r.forwardRef(function(h,E){var ye=h.position,Se=h.prefixCls,Te=h.extra;if(!Te)return null;var Fe,Xe={};return(0,J.Z)(Te)==="object"&&!r.isValidElement(Te)?Xe=Te:Xe.right=Te,ye==="right"&&(Fe=Xe.right),ye==="left"&&(Fe=Xe.left),Fe?r.createElement("div",{className:"".concat(Se,"-extra-content"),ref:E},Fe):null}),se=z,Ye=s(40228),De=s(15105),xe=De.Z.ESC,je=De.Z.TAB;function It(h){var E=h.visible,ye=h.triggerRef,Se=h.onVisibleChange,Te=h.autoFocus,Fe=h.overlayRef,Xe=r.useRef(!1),Je=function(){if(E){var Et,$t;(Et=ye.current)===null||Et===void 0||($t=Et.focus)===null||$t===void 0||$t.call(Et),Se==null||Se(!1)}},ct=function(){var Et;return(Et=Fe.current)!==null&&Et!==void 0&&Et.focus?(Fe.current.focus(),Xe.current=!0,!0):!1},xt=function(Et){switch(Et.keyCode){case xe:Je();break;case je:{var $t=!1;Xe.current||($t=ct()),$t?Et.preventDefault():Je();break}}};r.useEffect(function(){return E?(window.addEventListener("keydown",xt),Te&&(0,he.Z)(ct,3),function(){window.removeEventListener("keydown",xt),Xe.current=!1}):function(){Xe.current=!1}},[E])}var cn=(0,r.forwardRef)(function(h,E){var ye=h.overlay,Se=h.arrow,Te=h.prefixCls,Fe=(0,r.useMemo)(function(){var Je;return typeof ye=="function"?Je=ye():Je=ye,Je},[ye]),Xe=(0,V.sQ)(E,Fe==null?void 0:Fe.ref);return r.createElement(r.Fragment,null,Se&&r.createElement("div",{className:"".concat(Te,"-arrow")}),r.cloneElement(Fe,{ref:(0,V.Yr)(Fe)?Xe:void 0}))}),Fn=cn,Nn={adjustX:1,adjustY:1},qn=[0,0],or={topLeft:{points:["bl","tl"],overflow:Nn,offset:[0,-4],targetOffset:qn},top:{points:["bc","tc"],overflow:Nn,offset:[0,-4],targetOffset:qn},topRight:{points:["br","tr"],overflow:Nn,offset:[0,-4],targetOffset:qn},bottomLeft:{points:["tl","bl"],overflow:Nn,offset:[0,4],targetOffset:qn},bottom:{points:["tc","bc"],overflow:Nn,offset:[0,4],targetOffset:qn},bottomRight:{points:["tr","br"],overflow:Nn,offset:[0,4],targetOffset:qn}},dr=or,Zn=["arrow","prefixCls","transitionName","animation","align","placement","placements","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","visible","trigger","autoFocus","overlay","children","onVisibleChange"];function jn(h,E){var ye,Se=h.arrow,Te=Se===void 0?!1:Se,Fe=h.prefixCls,Xe=Fe===void 0?"rc-dropdown":Fe,Je=h.transitionName,ct=h.animation,xt=h.align,zt=h.placement,Et=zt===void 0?"bottomLeft":zt,$t=h.placements,jt=$t===void 0?dr:$t,Gt=h.getPopupContainer,Rt=h.showAction,xn=h.hideAction,en=h.overlayClassName,ln=h.overlayStyle,an=h.visible,bn=h.trigger,_n=bn===void 0?["hover"]:bn,Pn=h.autoFocus,Bn=h.overlay,rn=h.children,En=h.onVisibleChange,yn=(0,ue.Z)(h,Zn),Mn=r.useState(),An=(0,Q.Z)(Mn,2),sn=An[0],wn=An[1],Kn="visible"in h?an:sn,er=r.useRef(null),Cn=r.useRef(null),ar=r.useRef(null);r.useImperativeHandle(E,function(){return er.current});var Or=function(C){wn(C),En==null||En(C)};It({visible:Kn,triggerRef:ar,onVisibleChange:Or,autoFocus:Pn,overlayRef:Cn});var Qn=function(C){var ne=h.onOverlayClick;wn(!1),ne&&ne(C)},br=function(){return r.createElement(Fn,{ref:Cn,overlay:Bn,prefixCls:Xe,arrow:Te})},lr=function(){return typeof Bn=="function"?br:br()},Wn=function(){var C=h.minOverlayWidthMatchTrigger,ne=h.alignPoint;return"minOverlayWidthMatchTrigger"in h?C:!ne},ie=function(){var C=h.openClassName;return C!==void 0?C:"".concat(Xe,"-open")},w=r.cloneElement(rn,{className:T()((ye=rn.props)===null||ye===void 0?void 0:ye.className,Kn&&ie()),ref:(0,V.Yr)(rn)?(0,V.sQ)(ar,rn.ref):void 0}),m=xn;return!m&&_n.indexOf("contextMenu")!==-1&&(m=["click"]),r.createElement(Ye.Z,(0,j.Z)({builtinPlacements:jt},yn,{prefixCls:Xe,ref:er,popupClassName:T()(en,(0,b.Z)({},"".concat(Xe,"-show-arrow"),Te)),popupStyle:ln,action:_n,showAction:Rt,hideAction:m,popupPlacement:Et,popupAlign:xt,popupTransitionName:Je,popupAnimation:ct,popupVisible:Kn,stretch:Wn()?"minWidth":"",popup:lr(),onPopupVisibleChange:Or,onPopupClick:Qn,getPopupContainer:Gt}),w)}var mn=r.forwardRef(jn),Ft=mn,Ct=s(95480),Mt=r.forwardRef(function(h,E){var ye=h.prefixCls,Se=h.id,Te=h.tabs,Fe=h.locale,Xe=h.mobile,Je=h.more,ct=Je===void 0?{}:Je,xt=h.style,zt=h.className,Et=h.editable,$t=h.tabBarGutter,jt=h.rtl,Gt=h.removeAriaLabel,Rt=h.onTabClick,xn=h.getPopupContainer,en=h.popupClassName,ln=(0,r.useState)(!1),an=(0,Q.Z)(ln,2),bn=an[0],_n=an[1],Pn=(0,r.useState)(null),Bn=(0,Q.Z)(Pn,2),rn=Bn[0],En=Bn[1],yn=ct.icon,Mn=yn===void 0?"More":yn,An="".concat(Se,"-more-popup"),sn="".concat(ye,"-dropdown"),wn=rn!==null?"".concat(An,"-").concat(rn):null,Kn=Fe==null?void 0:Fe.dropdownAriaLabel;function er(Wn,ie){Wn.preventDefault(),Wn.stopPropagation(),Et.onEdit("remove",{key:ie,event:Wn})}var Cn=r.createElement(Ct.ZP,{onClick:function(ie){var w=ie.key,m=ie.domEvent;Rt(w,m),_n(!1)},prefixCls:"".concat(sn,"-menu"),id:An,tabIndex:-1,role:"listbox","aria-activedescendant":wn,selectedKeys:[rn],"aria-label":Kn!==void 0?Kn:"expanded dropdown"},Te.map(function(Wn){var ie=Wn.closable,w=Wn.disabled,m=Wn.closeIcon,L=Wn.key,C=Wn.label,ne=vn(ie,m,Et,w);return r.createElement(Ct.sN,{key:L,id:"".concat(An,"-").concat(L),role:"option","aria-controls":Se&&"".concat(Se,"-panel-").concat(L),disabled:w},r.createElement("span",null,C),ne&&r.createElement("button",{type:"button","aria-label":Gt||"remove",tabIndex:0,className:"".concat(sn,"-menu-item-remove"),onClick:function(Re){Re.stopPropagation(),er(Re,L)}},m||Et.removeIcon||"\xD7"))}));function ar(Wn){for(var ie=Te.filter(function(ne){return!ne.disabled}),w=ie.findIndex(function(ne){return ne.key===rn})||0,m=ie.length,L=0;Lst?"left":"right"})}),sn=(0,Q.Z)(An,2),wn=sn[0],Kn=sn[1],er=He(0,function(Xt,st){!Mn&&Rt&&Rt({direction:Xt>st?"top":"bottom"})}),Cn=(0,Q.Z)(er,2),ar=Cn[0],Or=Cn[1],Qn=(0,r.useState)([0,0]),br=(0,Q.Z)(Qn,2),lr=br[0],Wn=br[1],ie=(0,r.useState)([0,0]),w=(0,Q.Z)(ie,2),m=w[0],L=w[1],C=(0,r.useState)([0,0]),ne=(0,Q.Z)(C,2),fe=ne[0],Re=ne[1],Ge=(0,r.useState)([0,0]),ut=(0,Q.Z)(Ge,2),Pe=ut[0],Lt=ut[1],Wt=be(new Map),gn=(0,Q.Z)(Wt,2),_t=gn[0],Vt=gn[1],wt=Oe(an,_t,m[0]),fn=tt(lr,Mn),u=tt(m,Mn),S=tt(fe,Mn),K=tt(Pe,Mn),re=Math.floor(fn)P?P:Xt}var Ne=(0,r.useRef)(null),ze=(0,r.useState)(),pt=(0,Q.Z)(ze,2),at=pt[0],Ut=pt[1];function Ht(){Ut(Date.now())}function On(){Ne.current&&clearTimeout(Ne.current)}g(Bn,function(Xt,st){function M(G,B){G(function(le){var Ce=ae(le+B);return Ce})}return re?(Mn?M(Kn,Xt):M(Or,st),On(),Ht(),!0):!1}),(0,r.useEffect)(function(){return On(),at&&(Ne.current=setTimeout(function(){Ut(0)},100)),On},[at]);var on=$e(wt,n,Mn?wn:ar,u,S,K,(0,we.Z)((0,we.Z)({},h),{},{tabs:an})),Hn=(0,Q.Z)(on,2),Tn=Hn[0],Gn=Hn[1],Sn=(0,Ae.Z)(function(){var Xt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Xe,st=wt.get(Xt)||{width:0,height:0,left:0,right:0,top:0};if(Mn){var M=wn;Je?st.rightwn+n&&(M=st.right+st.width-n):st.left<-wn?M=-st.left:st.left+st.width>-wn+n&&(M=-(st.left+st.width-n)),Or(0),Kn(ae(M))}else{var G=ar;st.top<-ar?G=-st.top:st.top+st.height>-ar+n&&(G=-(st.top+st.height-n)),Kn(0),Or(ae(G))}}),Jt={};Et==="top"||Et==="bottom"?Jt[Je?"marginRight":"marginLeft"]=$t:Jt.marginTop=$t;var Yt=an.map(function(Xt,st){var M=Xt.key;return r.createElement(un,{id:Te,prefixCls:ln,key:M,tab:Xt,style:st===0?void 0:Jt,closable:Xt.closable,editable:xt,active:M===Xe,renderWrapper:jt,removeAriaLabel:zt==null?void 0:zt.removeAriaLabel,onClick:function(B){Gt(M,B)},onFocus:function(){Sn(M),Ht(),Bn.current&&(Je||(Bn.current.scrollLeft=0),Bn.current.scrollTop=0)}})}),dn=function(){return Vt(function(){var st,M=new Map,G=(st=rn.current)===null||st===void 0?void 0:st.getBoundingClientRect();return an.forEach(function(B){var le,Ce=B.key,Ue=(le=rn.current)===null||le===void 0?void 0:le.querySelector('[data-node-key="'.concat(nn(Ce),'"]'));if(Ue){var ot=hn(Ue,G),dt=(0,Q.Z)(ot,4),lt=dt[0],l=dt[1],d=dt[2],p=dt[3];M.set(Ce,{width:lt,height:l,left:d,top:p})}}),M})};(0,r.useEffect)(function(){dn()},[an.map(function(Xt){return Xt.key}).join("_")]);var Vn=ce(function(){var Xt=gt(bn),st=gt(_n),M=gt(Pn);Wn([Xt[0]-st[0]-M[0],Xt[1]-st[1]-M[1]]);var G=gt(yn);Re(G);var B=gt(En);Lt(B);var le=gt(rn);L([le[0]-G[0],le[1]-G[1]]),dn()}),f=an.slice(0,Tn),I=an.slice(Gn+1),oe=[].concat((0,Bt.Z)(f),(0,Bt.Z)(I)),ve=wt.get(Xe),Ie=D({activeTabOffset:ve,horizontal:Mn,indicator:xn,rtl:Je}),it=Ie.style;(0,r.useEffect)(function(){Sn()},[Xe,N,P,yt(ve),yt(wt),Mn]),(0,r.useEffect)(function(){Vn()},[Je]);var bt=!!oe.length,Ot="".concat(ln,"-nav-wrap"),Dt,Tt,Zt,At;return Mn?Je?(Tt=wn>0,Dt=wn!==P):(Dt=wn<0,Tt=wn!==N):(Zt=ar<0,At=ar!==N),r.createElement(vt.Z,{onResize:Vn},r.createElement("div",{ref:(0,V.x1)(E,bn),role:"tablist",className:T()("".concat(ln,"-nav"),ye),style:Se,onKeyDown:function(){Ht()}},r.createElement(se,{ref:_n,position:"left",extra:ct,prefixCls:ln}),r.createElement(vt.Z,{onResize:Vn},r.createElement("div",{className:T()(Ot,(0,b.Z)((0,b.Z)((0,b.Z)((0,b.Z)({},"".concat(Ot,"-ping-left"),Dt),"".concat(Ot,"-ping-right"),Tt),"".concat(Ot,"-ping-top"),Zt),"".concat(Ot,"-ping-bottom"),At)),ref:Bn},r.createElement(vt.Z,{onResize:Vn},r.createElement("div",{ref:rn,className:"".concat(ln,"-nav-list"),style:{transform:"translate(".concat(wn,"px, ").concat(ar,"px)"),transition:at?"none":void 0}},Yt,r.createElement(ht,{ref:yn,prefixCls:ln,locale:zt,editable:xt,style:(0,we.Z)((0,we.Z)({},Yt.length===0?void 0:Jt),{},{visibility:bt?"hidden":null})}),r.createElement("div",{className:T()("".concat(ln,"-ink-bar"),(0,b.Z)({},"".concat(ln,"-ink-bar-animated"),Fe.inkBar)),style:it}))))),r.createElement(tn,(0,j.Z)({},h,{removeAriaLabel:zt==null?void 0:zt.removeAriaLabel,ref:En,prefixCls:ln,tabs:oe,className:!bt&&a,tabMoving:!!at})),r.createElement(se,{ref:Pn,position:"right",extra:ct,prefixCls:ln})))}),mr=Ke,rr=r.forwardRef(function(h,E){var ye=h.prefixCls,Se=h.className,Te=h.style,Fe=h.id,Xe=h.active,Je=h.tabKey,ct=h.children;return r.createElement("div",{id:Fe&&"".concat(Fe,"-panel-").concat(Je),role:"tabpanel",tabIndex:Xe?0:-1,"aria-labelledby":Fe&&"".concat(Fe,"-tab-").concat(Je),"aria-hidden":!Xe,style:Te,className:T()(ye,Xe&&"".concat(ye,"-active"),Se),ref:E},ct)}),yr=rr,Sr=["renderTabBar"],pr=["label","key"],Xn=function(E){var ye=E.renderTabBar,Se=(0,ue.Z)(E,Sr),Te=r.useContext(Le),Fe=Te.tabs;if(ye){var Xe=(0,we.Z)((0,we.Z)({},Se),{},{panes:Fe.map(function(Je){var ct=Je.label,xt=Je.key,zt=(0,ue.Z)(Je,pr);return r.createElement(yr,(0,j.Z)({tab:ct,key:xt,tabKey:xt},zt))})});return ye(Xe,mr)}return r.createElement(mr,Se)},Lr=Xn,Mr=s(29372),Nr=["key","forceRender","style","className","destroyInactiveTabPane"],Vr=function(E){var ye=E.id,Se=E.activeKey,Te=E.animated,Fe=E.tabPosition,Xe=E.destroyInactiveTabPane,Je=r.useContext(Le),ct=Je.prefixCls,xt=Je.tabs,zt=Te.tabPane,Et="".concat(ct,"-tabpane");return r.createElement("div",{className:T()("".concat(ct,"-content-holder"))},r.createElement("div",{className:T()("".concat(ct,"-content"),"".concat(ct,"-content-").concat(Fe),(0,b.Z)({},"".concat(ct,"-content-animated"),zt))},xt.map(function($t){var jt=$t.key,Gt=$t.forceRender,Rt=$t.style,xn=$t.className,en=$t.destroyInactiveTabPane,ln=(0,ue.Z)($t,Nr),an=jt===Se;return r.createElement(Mr.ZP,(0,j.Z)({key:jt,visible:an,forceRender:Gt,removeOnLeave:!!(Xe||en),leavedClassName:"".concat(Et,"-hidden")},Te.tabPaneMotion),function(bn,_n){var Pn=bn.style,Bn=bn.className;return r.createElement(yr,(0,j.Z)({},ln,{prefixCls:Et,id:ye,tabKey:jt,animated:zt,active:an,style:(0,we.Z)((0,we.Z)({},Rt),Pn),className:T()(xn,Bn),ref:_n}))})})))},Xr=Vr,Qr=s(80334);function fr(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{inkBar:!0,tabPane:!1},E;return h===!1?E={inkBar:!1,tabPane:!1}:h===!0?E={inkBar:!0,tabPane:!1}:E=(0,we.Z)({inkBar:!0},(0,J.Z)(h)==="object"?h:{}),E.tabPaneMotion&&E.tabPane===void 0&&(E.tabPane=!0),!E.tabPaneMotion&&E.tabPane&&(E.tabPane=!1),E}var Hr=["id","prefixCls","className","items","direction","activeKey","defaultActiveKey","editable","animated","tabPosition","tabBarGutter","tabBarStyle","tabBarExtraContent","locale","more","destroyInactiveTabPane","renderTabBar","onChange","onTabClick","onTabScroll","getPopupContainer","popupClassName","indicator"],Ur=0,Ir=r.forwardRef(function(h,E){var ye=h.id,Se=h.prefixCls,Te=Se===void 0?"rc-tabs":Se,Fe=h.className,Xe=h.items,Je=h.direction,ct=h.activeKey,xt=h.defaultActiveKey,zt=h.editable,Et=h.animated,$t=h.tabPosition,jt=$t===void 0?"top":$t,Gt=h.tabBarGutter,Rt=h.tabBarStyle,xn=h.tabBarExtraContent,en=h.locale,ln=h.more,an=h.destroyInactiveTabPane,bn=h.renderTabBar,_n=h.onChange,Pn=h.onTabClick,Bn=h.onTabScroll,rn=h.getPopupContainer,En=h.popupClassName,yn=h.indicator,Mn=(0,ue.Z)(h,Hr),An=r.useMemo(function(){return(Xe||[]).filter(function(Pe){return Pe&&(0,J.Z)(Pe)==="object"&&"key"in Pe})},[Xe]),sn=Je==="rtl",wn=fr(Et),Kn=(0,r.useState)(!1),er=(0,Q.Z)(Kn,2),Cn=er[0],ar=er[1];(0,r.useEffect)(function(){ar((0,Be.Z)())},[]);var Or=(0,_.Z)(function(){var Pe;return(Pe=An[0])===null||Pe===void 0?void 0:Pe.key},{value:ct,defaultValue:xt}),Qn=(0,Q.Z)(Or,2),br=Qn[0],lr=Qn[1],Wn=(0,r.useState)(function(){return An.findIndex(function(Pe){return Pe.key===br})}),ie=(0,Q.Z)(Wn,2),w=ie[0],m=ie[1];(0,r.useEffect)(function(){var Pe=An.findIndex(function(Wt){return Wt.key===br});if(Pe===-1){var Lt;Pe=Math.max(0,Math.min(w,An.length-1)),lr((Lt=An[Pe])===null||Lt===void 0?void 0:Lt.key)}m(Pe)},[An.map(function(Pe){return Pe.key}).join("_"),br,w]);var L=(0,_.Z)(null,{value:ye}),C=(0,Q.Z)(L,2),ne=C[0],fe=C[1];(0,r.useEffect)(function(){ye||(fe("rc-tabs-".concat(Ur)),Ur+=1)},[]);function Re(Pe,Lt){Pn==null||Pn(Pe,Lt);var Wt=Pe!==br;lr(Pe),Wt&&(_n==null||_n(Pe))}var Ge={id:ne,activeKey:br,animated:wn,tabPosition:jt,rtl:sn,mobile:Cn},ut=(0,we.Z)((0,we.Z)({},Ge),{},{editable:zt,locale:en,more:ln,tabBarGutter:Gt,onTabClick:Re,onTabScroll:Bn,extra:xn,style:Rt,panes:null,getPopupContainer:rn,popupClassName:En,indicator:yn});return r.createElement(Le.Provider,{value:{tabs:An,prefixCls:Te}},r.createElement("div",(0,j.Z)({ref:E,id:ye,className:T()(Te,"".concat(Te,"-").concat(jt),(0,b.Z)((0,b.Z)((0,b.Z)({},"".concat(Te,"-mobile"),Cn),"".concat(Te,"-editable"),zt),"".concat(Te,"-rtl"),sn),Fe)},Mn),r.createElement(Lr,(0,j.Z)({},ut,{renderTabBar:bn})),r.createElement(Xr,(0,j.Z)({destroyInactiveTabPane:an},Ge,{animated:wn}))))}),$r=Ir,Er=$r,Zr=s(53124),to=s(35792),Fr=s(98675),kr=s(33603);const so={motionAppear:!1,motionEnter:!0,motionLeave:!0};function mo(h){let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{inkBar:!0,tabPane:!1},ye;return E===!1?ye={inkBar:!1,tabPane:!1}:E===!0?ye={inkBar:!0,tabPane:!0}:ye=Object.assign({inkBar:!0},typeof E=="object"?E:{}),ye.tabPane&&(ye.tabPaneMotion=Object.assign(Object.assign({},so),{motionName:(0,kr.m)(h,"switch")})),ye}var Jr=s(50344),vo=function(h,E){var ye={};for(var Se in h)Object.prototype.hasOwnProperty.call(h,Se)&&E.indexOf(Se)<0&&(ye[Se]=h[Se]);if(h!=null&&typeof Object.getOwnPropertySymbols=="function")for(var Te=0,Se=Object.getOwnPropertySymbols(h);TeE)}function Gr(h,E){if(h)return h;const ye=(0,Jr.Z)(E).map(Se=>{if(r.isValidElement(Se)){const{key:Te,props:Fe}=Se,Xe=Fe||{},{tab:Je}=Xe,ct=vo(Xe,["tab"]);return Object.assign(Object.assign({key:String(Te)},ct),{label:Je})}return null});return Yr(ye)}var Yn=s(11568),oo=s(14747),Br=s(83559),po=s(83262),Dr=s(67771),wo=h=>{const{componentCls:E,motionDurationSlow:ye}=h;return[{[E]:{[`${E}-switch`]:{"&-appear, &-enter":{transition:"none","&-start":{opacity:0},"&-active":{opacity:1,transition:`opacity ${ye}`}},"&-leave":{position:"absolute",transition:"none",inset:0,"&-start":{opacity:1},"&-active":{opacity:0,transition:`opacity ${ye}`}}}}},[(0,Dr.oN)(h,"slide-up"),(0,Dr.oN)(h,"slide-down")]]};const no=h=>{const{componentCls:E,tabsCardPadding:ye,cardBg:Se,cardGutter:Te,colorBorderSecondary:Fe,itemSelectedColor:Xe}=h;return{[`${E}-card`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-tab`]:{margin:0,padding:ye,background:Se,border:`${(0,Yn.bf)(h.lineWidth)} ${h.lineType} ${Fe}`,transition:`all ${h.motionDurationSlow} ${h.motionEaseInOut}`},[`${E}-tab-active`]:{color:Xe,background:h.colorBgContainer},[`${E}-ink-bar`]:{visibility:"hidden"}},[`&${E}-top, &${E}-bottom`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-tab + ${E}-tab`]:{marginLeft:{_skip_check_:!0,value:(0,Yn.bf)(Te)}}}},[`&${E}-top`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-tab`]:{borderRadius:`${(0,Yn.bf)(h.borderRadiusLG)} ${(0,Yn.bf)(h.borderRadiusLG)} 0 0`},[`${E}-tab-active`]:{borderBottomColor:h.colorBgContainer}}},[`&${E}-bottom`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-tab`]:{borderRadius:`0 0 ${(0,Yn.bf)(h.borderRadiusLG)} ${(0,Yn.bf)(h.borderRadiusLG)}`},[`${E}-tab-active`]:{borderTopColor:h.colorBgContainer}}},[`&${E}-left, &${E}-right`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-tab + ${E}-tab`]:{marginTop:(0,Yn.bf)(Te)}}},[`&${E}-left`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-tab`]:{borderRadius:{_skip_check_:!0,value:`${(0,Yn.bf)(h.borderRadiusLG)} 0 0 ${(0,Yn.bf)(h.borderRadiusLG)}`}},[`${E}-tab-active`]:{borderRightColor:{_skip_check_:!0,value:h.colorBgContainer}}}},[`&${E}-right`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-tab`]:{borderRadius:{_skip_check_:!0,value:`0 ${(0,Yn.bf)(h.borderRadiusLG)} ${(0,Yn.bf)(h.borderRadiusLG)} 0`}},[`${E}-tab-active`]:{borderLeftColor:{_skip_check_:!0,value:h.colorBgContainer}}}}}}},Wr=h=>{const{componentCls:E,itemHoverColor:ye,dropdownEdgeChildVerticalPadding:Se}=h;return{[`${E}-dropdown`]:Object.assign(Object.assign({},(0,oo.Wf)(h)),{position:"absolute",top:-9999,left:{_skip_check_:!0,value:-9999},zIndex:h.zIndexPopup,display:"block","&-hidden":{display:"none"},[`${E}-dropdown-menu`]:{maxHeight:h.tabsDropdownHeight,margin:0,padding:`${(0,Yn.bf)(Se)} 0`,overflowX:"hidden",overflowY:"auto",textAlign:{_skip_check_:!0,value:"left"},listStyleType:"none",backgroundColor:h.colorBgContainer,backgroundClip:"padding-box",borderRadius:h.borderRadiusLG,outline:"none",boxShadow:h.boxShadowSecondary,"&-item":Object.assign(Object.assign({},oo.vS),{display:"flex",alignItems:"center",minWidth:h.tabsDropdownWidth,margin:0,padding:`${(0,Yn.bf)(h.paddingXXS)} ${(0,Yn.bf)(h.paddingSM)}`,color:h.colorText,fontWeight:"normal",fontSize:h.fontSize,lineHeight:h.lineHeight,cursor:"pointer",transition:`all ${h.motionDurationSlow}`,"> span":{flex:1,whiteSpace:"nowrap"},"&-remove":{flex:"none",marginLeft:{_skip_check_:!0,value:h.marginSM},color:h.colorTextDescription,fontSize:h.fontSizeSM,background:"transparent",border:0,cursor:"pointer","&:hover":{color:ye}},"&:hover":{background:h.controlItemBgHover},"&-disabled":{"&, &:hover":{color:h.colorTextDisabled,background:"transparent",cursor:"not-allowed"}}})}})}},co=h=>{const{componentCls:E,margin:ye,colorBorderSecondary:Se,horizontalMargin:Te,verticalItemPadding:Fe,verticalItemMargin:Xe,calc:Je}=h;return{[`${E}-top, ${E}-bottom`]:{flexDirection:"column",[`> ${E}-nav, > div > ${E}-nav`]:{margin:Te,"&::before":{position:"absolute",right:{_skip_check_:!0,value:0},left:{_skip_check_:!0,value:0},borderBottom:`${(0,Yn.bf)(h.lineWidth)} ${h.lineType} ${Se}`,content:"''"},[`${E}-ink-bar`]:{height:h.lineWidthBold,"&-animated":{transition:`width ${h.motionDurationSlow}, left ${h.motionDurationSlow}, + right ${h.motionDurationSlow}`}},[`${E}-nav-wrap`]:{"&::before, &::after":{top:0,bottom:0,width:h.controlHeight},"&::before":{left:{_skip_check_:!0,value:0},boxShadow:h.boxShadowTabsOverflowLeft},"&::after":{right:{_skip_check_:!0,value:0},boxShadow:h.boxShadowTabsOverflowRight},[`&${E}-nav-wrap-ping-left::before`]:{opacity:1},[`&${E}-nav-wrap-ping-right::after`]:{opacity:1}}}},[`${E}-top`]:{[`> ${E}-nav, + > div > ${E}-nav`]:{"&::before":{bottom:0},[`${E}-ink-bar`]:{bottom:0}}},[`${E}-bottom`]:{[`> ${E}-nav, > div > ${E}-nav`]:{order:1,marginTop:ye,marginBottom:0,"&::before":{top:0},[`${E}-ink-bar`]:{top:0}},[`> ${E}-content-holder, > div > ${E}-content-holder`]:{order:0}},[`${E}-left, ${E}-right`]:{[`> ${E}-nav, > div > ${E}-nav`]:{flexDirection:"column",minWidth:Je(h.controlHeight).mul(1.25).equal(),[`${E}-tab`]:{padding:Fe,textAlign:"center"},[`${E}-tab + ${E}-tab`]:{margin:Xe},[`${E}-nav-wrap`]:{flexDirection:"column","&::before, &::after":{right:{_skip_check_:!0,value:0},left:{_skip_check_:!0,value:0},height:h.controlHeight},"&::before":{top:0,boxShadow:h.boxShadowTabsOverflowTop},"&::after":{bottom:0,boxShadow:h.boxShadowTabsOverflowBottom},[`&${E}-nav-wrap-ping-top::before`]:{opacity:1},[`&${E}-nav-wrap-ping-bottom::after`]:{opacity:1}},[`${E}-ink-bar`]:{width:h.lineWidthBold,"&-animated":{transition:`height ${h.motionDurationSlow}, top ${h.motionDurationSlow}`}},[`${E}-nav-list, ${E}-nav-operations`]:{flex:"1 0 auto",flexDirection:"column"}}},[`${E}-left`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-ink-bar`]:{right:{_skip_check_:!0,value:0}}},[`> ${E}-content-holder, > div > ${E}-content-holder`]:{marginLeft:{_skip_check_:!0,value:(0,Yn.bf)(Je(h.lineWidth).mul(-1).equal())},borderLeft:{_skip_check_:!0,value:`${(0,Yn.bf)(h.lineWidth)} ${h.lineType} ${h.colorBorder}`},[`> ${E}-content > ${E}-tabpane`]:{paddingLeft:{_skip_check_:!0,value:h.paddingLG}}}},[`${E}-right`]:{[`> ${E}-nav, > div > ${E}-nav`]:{order:1,[`${E}-ink-bar`]:{left:{_skip_check_:!0,value:0}}},[`> ${E}-content-holder, > div > ${E}-content-holder`]:{order:0,marginRight:{_skip_check_:!0,value:Je(h.lineWidth).mul(-1).equal()},borderRight:{_skip_check_:!0,value:`${(0,Yn.bf)(h.lineWidth)} ${h.lineType} ${h.colorBorder}`},[`> ${E}-content > ${E}-tabpane`]:{paddingRight:{_skip_check_:!0,value:h.paddingLG}}}}}},ho=h=>{const{componentCls:E,cardPaddingSM:ye,cardPaddingLG:Se,horizontalItemPaddingSM:Te,horizontalItemPaddingLG:Fe}=h;return{[E]:{"&-small":{[`> ${E}-nav`]:{[`${E}-tab`]:{padding:Te,fontSize:h.titleFontSizeSM}}},"&-large":{[`> ${E}-nav`]:{[`${E}-tab`]:{padding:Fe,fontSize:h.titleFontSizeLG}}}},[`${E}-card`]:{[`&${E}-small`]:{[`> ${E}-nav`]:{[`${E}-tab`]:{padding:ye}},[`&${E}-bottom`]:{[`> ${E}-nav ${E}-tab`]:{borderRadius:`0 0 ${(0,Yn.bf)(h.borderRadius)} ${(0,Yn.bf)(h.borderRadius)}`}},[`&${E}-top`]:{[`> ${E}-nav ${E}-tab`]:{borderRadius:`${(0,Yn.bf)(h.borderRadius)} ${(0,Yn.bf)(h.borderRadius)} 0 0`}},[`&${E}-right`]:{[`> ${E}-nav ${E}-tab`]:{borderRadius:{_skip_check_:!0,value:`0 ${(0,Yn.bf)(h.borderRadius)} ${(0,Yn.bf)(h.borderRadius)} 0`}}},[`&${E}-left`]:{[`> ${E}-nav ${E}-tab`]:{borderRadius:{_skip_check_:!0,value:`${(0,Yn.bf)(h.borderRadius)} 0 0 ${(0,Yn.bf)(h.borderRadius)}`}}}},[`&${E}-large`]:{[`> ${E}-nav`]:{[`${E}-tab`]:{padding:Se}}}}}},xo=h=>{const{componentCls:E,itemActiveColor:ye,itemHoverColor:Se,iconCls:Te,tabsHorizontalItemMargin:Fe,horizontalItemPadding:Xe,itemSelectedColor:Je,itemColor:ct}=h,xt=`${E}-tab`;return{[xt]:{position:"relative",WebkitTouchCallout:"none",WebkitTapHighlightColor:"transparent",display:"inline-flex",alignItems:"center",padding:Xe,fontSize:h.titleFontSize,background:"transparent",border:0,outline:"none",cursor:"pointer",color:ct,"&-btn, &-remove":Object.assign({"&:focus:not(:focus-visible), &:active":{color:ye}},(0,oo.Qy)(h)),"&-btn":{outline:"none",transition:`all ${h.motionDurationSlow}`,[`${xt}-icon:not(:last-child)`]:{marginInlineEnd:h.marginSM}},"&-remove":{flex:"none",marginRight:{_skip_check_:!0,value:h.calc(h.marginXXS).mul(-1).equal()},marginLeft:{_skip_check_:!0,value:h.marginXS},color:h.colorTextDescription,fontSize:h.fontSizeSM,background:"transparent",border:"none",outline:"none",cursor:"pointer",transition:`all ${h.motionDurationSlow}`,"&:hover":{color:h.colorTextHeading}},"&:hover":{color:Se},[`&${xt}-active ${xt}-btn`]:{color:Je,textShadow:h.tabsActiveTextShadow},[`&${xt}-disabled`]:{color:h.colorTextDisabled,cursor:"not-allowed"},[`&${xt}-disabled ${xt}-btn, &${xt}-disabled ${E}-remove`]:{"&:focus, &:active":{color:h.colorTextDisabled}},[`& ${xt}-remove ${Te}`]:{margin:0},[`${Te}:not(:last-child)`]:{marginRight:{_skip_check_:!0,value:h.marginSM}}},[`${xt} + ${xt}`]:{margin:{_skip_check_:!0,value:Fe}}}},Eo=h=>{const{componentCls:E,tabsHorizontalItemMarginRTL:ye,iconCls:Se,cardGutter:Te,calc:Fe}=h;return{[`${E}-rtl`]:{direction:"rtl",[`${E}-nav`]:{[`${E}-tab`]:{margin:{_skip_check_:!0,value:ye},[`${E}-tab:last-of-type`]:{marginLeft:{_skip_check_:!0,value:0}},[Se]:{marginRight:{_skip_check_:!0,value:0},marginLeft:{_skip_check_:!0,value:(0,Yn.bf)(h.marginSM)}},[`${E}-tab-remove`]:{marginRight:{_skip_check_:!0,value:(0,Yn.bf)(h.marginXS)},marginLeft:{_skip_check_:!0,value:(0,Yn.bf)(Fe(h.marginXXS).mul(-1).equal())},[Se]:{margin:0}}}},[`&${E}-left`]:{[`> ${E}-nav`]:{order:1},[`> ${E}-content-holder`]:{order:0}},[`&${E}-right`]:{[`> ${E}-nav`]:{order:0},[`> ${E}-content-holder`]:{order:1}},[`&${E}-card${E}-top, &${E}-card${E}-bottom`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-tab + ${E}-tab`]:{marginRight:{_skip_check_:!0,value:Te},marginLeft:{_skip_check_:!0,value:0}}}}},[`${E}-dropdown-rtl`]:{direction:"rtl"},[`${E}-menu-item`]:{[`${E}-dropdown-rtl`]:{textAlign:{_skip_check_:!0,value:"right"}}}}},We=h=>{const{componentCls:E,tabsCardPadding:ye,cardHeight:Se,cardGutter:Te,itemHoverColor:Fe,itemActiveColor:Xe,colorBorderSecondary:Je}=h;return{[E]:Object.assign(Object.assign(Object.assign(Object.assign({},(0,oo.Wf)(h)),{display:"flex",[`> ${E}-nav, > div > ${E}-nav`]:{position:"relative",display:"flex",flex:"none",alignItems:"center",[`${E}-nav-wrap`]:{position:"relative",display:"flex",flex:"auto",alignSelf:"stretch",overflow:"hidden",whiteSpace:"nowrap",transform:"translate(0)","&::before, &::after":{position:"absolute",zIndex:1,opacity:0,transition:`opacity ${h.motionDurationSlow}`,content:"''",pointerEvents:"none"}},[`${E}-nav-list`]:{position:"relative",display:"flex",transition:`opacity ${h.motionDurationSlow}`},[`${E}-nav-operations`]:{display:"flex",alignSelf:"stretch"},[`${E}-nav-operations-hidden`]:{position:"absolute",visibility:"hidden",pointerEvents:"none"},[`${E}-nav-more`]:{position:"relative",padding:ye,background:"transparent",border:0,color:h.colorText,"&::after":{position:"absolute",right:{_skip_check_:!0,value:0},bottom:0,left:{_skip_check_:!0,value:0},height:h.calc(h.controlHeightLG).div(8).equal(),transform:"translateY(100%)",content:"''"}},[`${E}-nav-add`]:Object.assign({minWidth:Se,minHeight:Se,marginLeft:{_skip_check_:!0,value:Te},padding:`0 ${(0,Yn.bf)(h.paddingXS)}`,background:"transparent",border:`${(0,Yn.bf)(h.lineWidth)} ${h.lineType} ${Je}`,borderRadius:`${(0,Yn.bf)(h.borderRadiusLG)} ${(0,Yn.bf)(h.borderRadiusLG)} 0 0`,outline:"none",cursor:"pointer",color:h.colorText,transition:`all ${h.motionDurationSlow} ${h.motionEaseInOut}`,"&:hover":{color:Fe},"&:active, &:focus:not(:focus-visible)":{color:Xe}},(0,oo.Qy)(h))},[`${E}-extra-content`]:{flex:"none"},[`${E}-ink-bar`]:{position:"absolute",background:h.inkBarColor,pointerEvents:"none"}}),xo(h)),{[`${E}-content`]:{position:"relative",width:"100%"},[`${E}-content-holder`]:{flex:"auto",minWidth:0,minHeight:0},[`${E}-tabpane`]:{outline:"none","&-hidden":{display:"none"}}}),[`${E}-centered`]:{[`> ${E}-nav, > div > ${E}-nav`]:{[`${E}-nav-wrap`]:{[`&:not([class*='${E}-nav-wrap-ping'])`]:{justifyContent:"center"}}}}}},Nt=h=>{const E=h.controlHeightLG;return{zIndexPopup:h.zIndexPopupBase+50,cardBg:h.colorFillAlter,cardHeight:E,cardPadding:`${(E-Math.round(h.fontSize*h.lineHeight))/2-h.lineWidth}px ${h.padding}px`,cardPaddingSM:`${h.paddingXXS*1.5}px ${h.padding}px`,cardPaddingLG:`${h.paddingXS}px ${h.padding}px ${h.paddingXXS*1.5}px`,titleFontSize:h.fontSize,titleFontSizeLG:h.fontSizeLG,titleFontSizeSM:h.fontSize,inkBarColor:h.colorPrimary,horizontalMargin:`0 0 ${h.margin}px 0`,horizontalItemGutter:32,horizontalItemMargin:"",horizontalItemMarginRTL:"",horizontalItemPadding:`${h.paddingSM}px 0`,horizontalItemPaddingSM:`${h.paddingXS}px 0`,horizontalItemPaddingLG:`${h.padding}px 0`,verticalItemPadding:`${h.paddingXS}px ${h.paddingLG}px`,verticalItemMargin:`${h.margin}px 0 0 0`,itemColor:h.colorText,itemSelectedColor:h.colorPrimary,itemHoverColor:h.colorPrimaryHover,itemActiveColor:h.colorPrimaryActive,cardGutter:h.marginXXS/2}};var F=(0,Br.I$)("Tabs",h=>{const E=(0,po.IX)(h,{tabsCardPadding:h.cardPadding,dropdownEdgeChildVerticalPadding:h.paddingXXS,tabsActiveTextShadow:"0 0 0.25px currentcolor",tabsDropdownHeight:200,tabsDropdownWidth:120,tabsHorizontalItemMargin:`0 0 0 ${(0,Yn.bf)(h.horizontalItemGutter)}`,tabsHorizontalItemMarginRTL:`0 0 0 ${(0,Yn.bf)(h.horizontalItemGutter)}`});return[ho(E),Eo(E),co(E),Wr(E),no(E),We(E),wo(E)]},Nt),ee=()=>null,te=function(h,E){var ye={};for(var Se in h)Object.prototype.hasOwnProperty.call(h,Se)&&E.indexOf(Se)<0&&(ye[Se]=h[Se]);if(h!=null&&typeof Object.getOwnPropertySymbols=="function")for(var Te=0,Se=Object.getOwnPropertySymbols(h);Te{var E,ye,Se,Te,Fe,Xe,Je,ct,xt,zt,Et;const{type:$t,className:jt,rootClassName:Gt,size:Rt,onEdit:xn,hideAdd:en,centered:ln,addIcon:an,removeIcon:bn,moreIcon:_n,more:Pn,popupClassName:Bn,children:rn,items:En,animated:yn,style:Mn,indicatorSize:An,indicator:sn}=h,wn=te(h,["type","className","rootClassName","size","onEdit","hideAdd","centered","addIcon","removeIcon","moreIcon","more","popupClassName","children","items","animated","style","indicatorSize","indicator"]),{prefixCls:Kn}=wn,{direction:er,tabs:Cn,getPrefixCls:ar,getPopupContainer:Or}=r.useContext(Zr.E_),Qn=ar("tabs",Kn),br=(0,to.Z)(Qn),[lr,Wn,ie]=F(Qn,br);let w;$t==="editable-card"&&(w={onEdit:(Ge,ut)=>{let{key:Pe,event:Lt}=ut;xn==null||xn(Ge==="add"?Lt:Pe,Ge)},removeIcon:(E=bn!=null?bn:Cn==null?void 0:Cn.removeIcon)!==null&&E!==void 0?E:r.createElement(y.Z,null),addIcon:(an!=null?an:Cn==null?void 0:Cn.addIcon)||r.createElement(O,null),showAdd:en!==!0});const m=ar(),L=(0,Fr.Z)(Rt),C=Gr(En,rn),ne=mo(Qn,yn),fe=Object.assign(Object.assign({},Cn==null?void 0:Cn.style),Mn),Re={align:(ye=sn==null?void 0:sn.align)!==null&&ye!==void 0?ye:(Se=Cn==null?void 0:Cn.indicator)===null||Se===void 0?void 0:Se.align,size:(Je=(Fe=(Te=sn==null?void 0:sn.size)!==null&&Te!==void 0?Te:An)!==null&&Fe!==void 0?Fe:(Xe=Cn==null?void 0:Cn.indicator)===null||Xe===void 0?void 0:Xe.size)!==null&&Je!==void 0?Je:Cn==null?void 0:Cn.indicatorSize};return lr(r.createElement(Er,Object.assign({direction:er,getPopupContainer:Or},wn,{items:C,className:T()({[`${Qn}-${L}`]:L,[`${Qn}-card`]:["card","editable-card"].includes($t),[`${Qn}-editable-card`]:$t==="editable-card",[`${Qn}-centered`]:ln},Cn==null?void 0:Cn.className,jt,Gt,Wn,ie,br),popupClassName:T()(Bn,Wn,ie,br),style:fe,editable:w,more:Object.assign({icon:(Et=(zt=(xt=(ct=Cn==null?void 0:Cn.more)===null||ct===void 0?void 0:ct.icon)!==null&&xt!==void 0?xt:Cn==null?void 0:Cn.moreIcon)!==null&&zt!==void 0?zt:_n)!==null&&Et!==void 0?Et:r.createElement(X.Z,null),transitionName:`${m}-slide-up`},Pn),prefixCls:Qn,animated:ne,indicator:Re})))};me.TabPane=ee;var nt=me},33083:function(Ve,k,s){"use strict";s.d(k,{Mj:function(){return R},uH:function(){return Z},u_:function(){return A}});var r=s(67294),y=s(11568),X=s(67164),j=s(2790);const Z=(0,y.jG)(X.Z),A={token:j.Z,override:{override:j.Z},hashed:!0},R=r.createContext(A)},9361:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return V}});var r=s(11568),y=s(67164),X=s(2790),j=s(1393),A=he=>{const q=he!=null&&he.algorithm?(0,r.jG)(he.algorithm):(0,r.jG)(y.Z),D=Object.assign(Object.assign({},X.Z),he==null?void 0:he.token);return(0,r.t2)(D,{override:he==null?void 0:he.token},q,j.Z)},R=s(25976),v=s(33083),Y=s(372),O=s(69594);function $(he){const{sizeUnit:q,sizeStep:D}=he,U=D-2;return{sizeXXL:q*(U+10),sizeXL:q*(U+6),sizeLG:q*(U+2),sizeMD:q*(U+2),sizeMS:q*(U+1),size:q*U,sizeSM:q*U,sizeXS:q*(U-1),sizeXXS:q*(U-1)}}var b=(he,q)=>{const D=q!=null?q:(0,y.Z)(he),U=D.fontSizeSM,Oe=D.controlHeight-4;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},D),$(q!=null?q:he)),(0,O.Z)(U)),{controlHeight:Oe}),(0,Y.Z)(Object.assign(Object.assign({},D),{controlHeight:Oe})))},we=s(84898),Q=s(57),J=s(10274);const ue=(he,q)=>new J.C(he).setAlpha(q).toRgbString(),_=(he,q)=>new J.C(he).lighten(q).toHexString(),Be=he=>{const q=(0,we.R_)(he,{theme:"dark"});return{1:q[0],2:q[1],3:q[2],4:q[3],5:q[6],6:q[5],7:q[4],8:q[6],9:q[5],10:q[4]}},Le=(he,q)=>{const D=he||"#000",U=q||"#fff";return{colorBgBase:D,colorTextBase:U,colorText:ue(U,.85),colorTextSecondary:ue(U,.65),colorTextTertiary:ue(U,.45),colorTextQuaternary:ue(U,.25),colorFill:ue(U,.18),colorFillSecondary:ue(U,.12),colorFillTertiary:ue(U,.08),colorFillQuaternary:ue(U,.04),colorBgSolid:ue(U,.95),colorBgSolidHover:ue(U,1),colorBgSolidActive:ue(U,.9),colorBgElevated:_(D,12),colorBgContainer:_(D,8),colorBgLayout:_(D,0),colorBgSpotlight:_(D,26),colorBgBlur:ue(U,.04),colorBorder:_(D,26),colorBorderSecondary:_(D,19)}};var vt=(he,q)=>{const D=Object.keys(X.M).map(Oe=>{const He=(0,we.R_)(he[Oe],{theme:"dark"});return new Array(10).fill(1).reduce((pe,Qe,ft)=>(pe[`${Oe}-${ft+1}`]=He[ft],pe[`${Oe}${ft+1}`]=He[ft],pe),{})}).reduce((Oe,He)=>(Oe=Object.assign(Object.assign({},Oe),He),Oe),{}),U=q!=null?q:(0,y.Z)(he);return Object.assign(Object.assign(Object.assign({},U),D),(0,Q.Z)(he,{generateColorPalettes:Be,generateNeutralColorPalettes:Le}))};function Ae(){const[he,q,D]=(0,R.ZP)();return{theme:he,token:q,hashId:D}}var V={defaultSeed:v.u_.token,useToken:Ae,defaultAlgorithm:y.Z,darkAlgorithm:vt,compactAlgorithm:b,getDesignToken:A,defaultConfig:v.u_,_internalContext:v.Mj}},67164:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return Q}});var r=s(84898),y=s(2790),X=s(57),Z=J=>{let ue=J,_=J,Be=J,Le=J;return J<6&&J>=5?ue=J+1:J<16&&J>=6?ue=J+2:J>=16&&(ue=16),J<7&&J>=5?_=4:J<8&&J>=7?_=5:J<14&&J>=8?_=6:J<16&&J>=14?_=7:J>=16&&(_=8),J<6&&J>=2?Be=1:J>=6&&(Be=2),J>4&&J<8?Le=4:J>=8&&(Le=6),{borderRadius:J,borderRadiusXS:Be,borderRadiusSM:_,borderRadiusLG:ue,borderRadiusOuter:Le}};function A(J){const{motionUnit:ue,motionBase:_,borderRadius:Be,lineWidth:Le}=J;return Object.assign({motionDurationFast:`${(_+ue).toFixed(1)}s`,motionDurationMid:`${(_+ue*2).toFixed(1)}s`,motionDurationSlow:`${(_+ue*3).toFixed(1)}s`,lineWidthBold:Le+1},Z(Be))}var R=s(372),v=s(69594);function Y(J){const{sizeUnit:ue,sizeStep:_}=J;return{sizeXXL:ue*(_+8),sizeXL:ue*(_+4),sizeLG:ue*(_+2),sizeMD:ue*(_+1),sizeMS:ue*_,size:ue*_,sizeSM:ue*(_-1),sizeXS:ue*(_-2),sizeXXS:ue*(_-3)}}var O=s(10274);const $=(J,ue)=>new O.C(J).setAlpha(ue).toRgbString(),T=(J,ue)=>new O.C(J).darken(ue).toHexString(),b=J=>{const ue=(0,r.R_)(J);return{1:ue[0],2:ue[1],3:ue[2],4:ue[3],5:ue[4],6:ue[5],7:ue[6],8:ue[4],9:ue[5],10:ue[6]}},we=(J,ue)=>{const _=J||"#fff",Be=ue||"#000";return{colorBgBase:_,colorTextBase:Be,colorText:$(Be,.88),colorTextSecondary:$(Be,.65),colorTextTertiary:$(Be,.45),colorTextQuaternary:$(Be,.25),colorFill:$(Be,.15),colorFillSecondary:$(Be,.06),colorFillTertiary:$(Be,.04),colorFillQuaternary:$(Be,.02),colorBgSolid:$(Be,1),colorBgSolidHover:$(Be,.75),colorBgSolidActive:$(Be,.95),colorBgLayout:T(_,4),colorBgContainer:T(_,0),colorBgElevated:T(_,0),colorBgSpotlight:$(Be,.85),colorBgBlur:"transparent",colorBorder:T(_,15),colorBorderSecondary:T(_,6)}};function Q(J){r.ez.pink=r.ez.magenta,r.Ti.pink=r.Ti.magenta;const ue=Object.keys(y.M).map(_=>{const Be=J[_]===r.ez[_]?r.Ti[_]:(0,r.R_)(J[_]);return new Array(10).fill(1).reduce((Le,Bt,vt)=>(Le[`${_}-${vt+1}`]=Be[vt],Le[`${_}${vt+1}`]=Be[vt],Le),{})}).reduce((_,Be)=>(_=Object.assign(Object.assign({},_),Be),_),{});return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},J),ue),(0,X.Z)(J,{generateColorPalettes:b,generateNeutralColorPalettes:we})),(0,v.Z)(J.fontSize)),Y(J)),(0,R.Z)(J)),A(J))}},2790:function(Ve,k,s){"use strict";s.d(k,{M:function(){return r}});const r={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"},y=Object.assign(Object.assign({},r),{colorPrimary:"#1677ff",colorSuccess:"#52c41a",colorWarning:"#faad14",colorError:"#ff4d4f",colorInfo:"#1677ff",colorLink:"",colorTextBase:"",colorBgBase:"",fontFamily:`-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, +'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', +'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});k.Z=y},57:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return y}});var r=s(10274);function y(X,j){let{generateColorPalettes:Z,generateNeutralColorPalettes:A}=j;const{colorSuccess:R,colorWarning:v,colorError:Y,colorInfo:O,colorPrimary:$,colorBgBase:T,colorTextBase:b}=X,we=Z($),Q=Z(R),J=Z(v),ue=Z(Y),_=Z(O),Be=A(T,b),Le=X.colorLink||X.colorInfo,Bt=Z(Le),vt=new r.C(ue[1]).mix(new r.C(ue[3]),50).toHexString();return Object.assign(Object.assign({},Be),{colorPrimaryBg:we[1],colorPrimaryBgHover:we[2],colorPrimaryBorder:we[3],colorPrimaryBorderHover:we[4],colorPrimaryHover:we[5],colorPrimary:we[6],colorPrimaryActive:we[7],colorPrimaryTextHover:we[8],colorPrimaryText:we[9],colorPrimaryTextActive:we[10],colorSuccessBg:Q[1],colorSuccessBgHover:Q[2],colorSuccessBorder:Q[3],colorSuccessBorderHover:Q[4],colorSuccessHover:Q[4],colorSuccess:Q[6],colorSuccessActive:Q[7],colorSuccessTextHover:Q[8],colorSuccessText:Q[9],colorSuccessTextActive:Q[10],colorErrorBg:ue[1],colorErrorBgHover:ue[2],colorErrorBgFilledHover:vt,colorErrorBgActive:ue[3],colorErrorBorder:ue[3],colorErrorBorderHover:ue[4],colorErrorHover:ue[5],colorError:ue[6],colorErrorActive:ue[7],colorErrorTextHover:ue[8],colorErrorText:ue[9],colorErrorTextActive:ue[10],colorWarningBg:J[1],colorWarningBgHover:J[2],colorWarningBorder:J[3],colorWarningBorderHover:J[4],colorWarningHover:J[4],colorWarning:J[6],colorWarningActive:J[7],colorWarningTextHover:J[8],colorWarningText:J[9],colorWarningTextActive:J[10],colorInfoBg:_[1],colorInfoBgHover:_[2],colorInfoBorder:_[3],colorInfoBorderHover:_[4],colorInfoHover:_[4],colorInfo:_[6],colorInfoActive:_[7],colorInfoTextHover:_[8],colorInfoText:_[9],colorInfoTextActive:_[10],colorLinkHover:Bt[4],colorLink:Bt[6],colorLinkActive:Bt[7],colorBgMask:new r.C("#000").setAlpha(.45).toRgbString(),colorWhite:"#fff"})}},372:function(Ve,k){"use strict";const s=r=>{const{controlHeight:y}=r;return{controlHeightSM:y*.75,controlHeightXS:y*.5,controlHeightLG:y*1.25}};k.Z=s},69594:function(Ve,k,s){"use strict";var r=s(51734);const y=X=>{const j=(0,r.Z)(X),Z=j.map(b=>b.size),A=j.map(b=>b.lineHeight),R=Z[1],v=Z[0],Y=Z[2],O=A[1],$=A[0],T=A[2];return{fontSizeSM:v,fontSize:R,fontSizeLG:Y,fontSizeXL:Z[3],fontSizeHeading1:Z[6],fontSizeHeading2:Z[5],fontSizeHeading3:Z[4],fontSizeHeading4:Z[3],fontSizeHeading5:Z[2],lineHeight:O,lineHeightLG:T,lineHeightSM:$,fontHeight:Math.round(O*R),fontHeightLG:Math.round(T*Y),fontHeightSM:Math.round($*v),lineHeightHeading1:A[6],lineHeightHeading2:A[5],lineHeightHeading3:A[4],lineHeightHeading4:A[3],lineHeightHeading5:A[2]}};k.Z=y},51734:function(Ve,k,s){"use strict";s.d(k,{D:function(){return r},Z:function(){return y}});function r(X){return(X+8)/X}function y(X){const j=new Array(10).fill(null).map((Z,A)=>{const R=A-1,v=X*Math.pow(Math.E,R/5),Y=A>1?Math.floor(v):Math.ceil(v);return Math.floor(Y/2)*2});return j[1]=X,j.map(Z=>({size:Z,lineHeight:r(Z)}))}},25976:function(Ve,k,s){"use strict";s.d(k,{ZP:function(){return b},NJ:function(){return Y}});var r=s(67294),y=s(11568),X="5.21.4",j=X,Z=s(33083),A=s(2790),R=s(1393),v=function(we,Q){var J={};for(var ue in we)Object.prototype.hasOwnProperty.call(we,ue)&&Q.indexOf(ue)<0&&(J[ue]=we[ue]);if(we!=null&&typeof Object.getOwnPropertySymbols=="function")for(var _=0,ue=Object.getOwnPropertySymbols(we);_{const ue=J.getDerivativeToken(we),{override:_}=Q,Be=v(Q,["override"]);let Le=Object.assign(Object.assign({},ue),{override:_});return Le=(0,R.Z)(Le),Be&&Object.entries(Be).forEach(Bt=>{let[vt,Ae]=Bt;const{theme:V}=Ae,he=v(Ae,["theme"]);let q=he;V&&(q=T(Object.assign(Object.assign({},Le),he),{override:he},V)),Le[vt]=q}),Le};function b(){const{token:we,hashed:Q,theme:J,override:ue,cssVar:_}=r.useContext(Z.Mj),Be=`${j}-${Q||""}`,Le=J||Z.uH,[Bt,vt,Ae]=(0,y.fp)(Le,[A.Z,we],{salt:Be,override:ue,getComputedToken:T,formatToken:R.Z,cssVar:_&&{prefix:_.prefix,key:_.key,unitless:Y,ignore:O,preserve:$}});return[Le,Ae,Q?vt:"",Bt,_]}},1393:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return R}});var r=s(10274),y=s(2790);function X(v){return v>=0&&v<=255}function j(v,Y){const{r:O,g:$,b:T,a:b}=new r.C(v).toRgb();if(b<1)return v;const{r:we,g:Q,b:J}=new r.C(Y).toRgb();for(let ue=.01;ue<=1;ue+=.01){const _=Math.round((O-we*(1-ue))/ue),Be=Math.round(($-Q*(1-ue))/ue),Le=Math.round((T-J*(1-ue))/ue);if(X(_)&&X(Be)&&X(Le))return new r.C({r:_,g:Be,b:Le,a:Math.round(ue*100)/100}).toRgbString()}return new r.C({r:O,g:$,b:T,a:1}).toRgbString()}var Z=j,A=function(v,Y){var O={};for(var $ in v)Object.prototype.hasOwnProperty.call(v,$)&&Y.indexOf($)<0&&(O[$]=v[$]);if(v!=null&&typeof Object.getOwnPropertySymbols=="function")for(var T=0,$=Object.getOwnPropertySymbols(v);T<$.length;T++)Y.indexOf($[T])<0&&Object.prototype.propertyIsEnumerable.call(v,$[T])&&(O[$[T]]=v[$[T]]);return O};function R(v){const{override:Y}=v,O=A(v,["override"]),$=Object.assign({},Y);Object.keys(y.Z).forEach(Le=>{delete $[Le]});const T=Object.assign(Object.assign({},O),$),b=480,we=576,Q=768,J=992,ue=1200,_=1600;if(T.motion===!1){const Le="0s";T.motionDurationFast=Le,T.motionDurationMid=Le,T.motionDurationSlow=Le}return Object.assign(Object.assign(Object.assign({},T),{colorFillContent:T.colorFillSecondary,colorFillContentHover:T.colorFill,colorFillAlter:T.colorFillQuaternary,colorBgContainerDisabled:T.colorFillTertiary,colorBorderBg:T.colorBgContainer,colorSplit:Z(T.colorBorderSecondary,T.colorBgContainer),colorTextPlaceholder:T.colorTextQuaternary,colorTextDisabled:T.colorTextQuaternary,colorTextHeading:T.colorText,colorTextLabel:T.colorTextSecondary,colorTextDescription:T.colorTextTertiary,colorTextLightSolid:T.colorWhite,colorHighlight:T.colorError,colorBgTextHover:T.colorFillSecondary,colorBgTextActive:T.colorFill,colorIcon:T.colorTextTertiary,colorIconHover:T.colorText,colorErrorOutline:Z(T.colorErrorBg,T.colorBgContainer),colorWarningOutline:Z(T.colorWarningBg,T.colorBgContainer),fontSizeIcon:T.fontSizeSM,lineWidthFocus:T.lineWidth*3,lineWidth:T.lineWidth,controlOutlineWidth:T.lineWidth*2,controlInteractiveSize:T.controlHeight/2,controlItemBgHover:T.colorFillTertiary,controlItemBgActive:T.colorPrimaryBg,controlItemBgActiveHover:T.colorPrimaryBgHover,controlItemBgActiveDisabled:T.colorFill,controlTmpOutline:T.colorFillQuaternary,controlOutline:Z(T.colorPrimaryBg,T.colorBgContainer),lineType:T.lineType,borderRadius:T.borderRadius,borderRadiusXS:T.borderRadiusXS,borderRadiusSM:T.borderRadiusSM,borderRadiusLG:T.borderRadiusLG,fontWeightStrong:600,opacityLoading:.65,linkDecoration:"none",linkHoverDecoration:"none",linkFocusDecoration:"none",controlPaddingHorizontal:12,controlPaddingHorizontalSM:8,paddingXXS:T.sizeXXS,paddingXS:T.sizeXS,paddingSM:T.sizeSM,padding:T.size,paddingMD:T.sizeMD,paddingLG:T.sizeLG,paddingXL:T.sizeXL,paddingContentHorizontalLG:T.sizeLG,paddingContentVerticalLG:T.sizeMS,paddingContentHorizontal:T.sizeMS,paddingContentVertical:T.sizeSM,paddingContentHorizontalSM:T.size,paddingContentVerticalSM:T.sizeXS,marginXXS:T.sizeXXS,marginXS:T.sizeXS,marginSM:T.sizeSM,margin:T.size,marginMD:T.sizeMD,marginLG:T.sizeLG,marginXL:T.sizeXL,marginXXL:T.sizeXXL,boxShadow:` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowSecondary:` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowTertiary:` + 0 1px 2px 0 rgba(0, 0, 0, 0.03), + 0 1px 6px -1px rgba(0, 0, 0, 0.02), + 0 2px 4px 0 rgba(0, 0, 0, 0.02) + `,screenXS:b,screenXSMin:b,screenXSMax:we-1,screenSM:we,screenSMMin:we,screenSMMax:Q-1,screenMD:Q,screenMDMin:Q,screenMDMax:J-1,screenLG:J,screenLGMin:J,screenLGMax:ue-1,screenXL:ue,screenXLMin:ue,screenXLMax:_-1,screenXXL:_,screenXXLMin:_,boxShadowPopoverArrow:"2px 2px 5px rgba(0, 0, 0, 0.05)",boxShadowCard:` + 0 1px 2px -2px ${new r.C("rgba(0, 0, 0, 0.16)").toRgbString()}, + 0 3px 6px 0 ${new r.C("rgba(0, 0, 0, 0.12)").toRgbString()}, + 0 5px 12px 4px ${new r.C("rgba(0, 0, 0, 0.09)").toRgbString()} + `,boxShadowDrawerRight:` + -6px 0 16px 0 rgba(0, 0, 0, 0.08), + -3px 0 6px -4px rgba(0, 0, 0, 0.12), + -9px 0 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowDrawerLeft:` + 6px 0 16px 0 rgba(0, 0, 0, 0.08), + 3px 0 6px -4px rgba(0, 0, 0, 0.12), + 9px 0 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowDrawerUp:` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowDrawerDown:` + 0 -6px 16px 0 rgba(0, 0, 0, 0.08), + 0 -3px 6px -4px rgba(0, 0, 0, 0.12), + 0 -9px 28px 8px rgba(0, 0, 0, 0.05) + `,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)"}),$)}},83559:function(Ve,k,s){"use strict";s.d(k,{A1:function(){return v},I$:function(){return R},bk:function(){return Y}});var r=s(67294),y=s(83262),X=s(53124),j=s(14747),Z=s(25976),A=s(53269);const{genStyleHooks:R,genComponentStyleHook:v,genSubStyleComponent:Y}=(0,y.rb)({usePrefix:()=>{const{getPrefixCls:O,iconPrefixCls:$}=(0,r.useContext)(X.E_);return{rootPrefixCls:O(),iconPrefixCls:$}},useToken:()=>{const[O,$,T,b,we]=(0,Z.ZP)();return{theme:O,realToken:$,hashId:T,token:b,cssVar:we}},useCSP:()=>{const{csp:O,iconPrefixCls:$}=(0,r.useContext)(X.E_);return(0,A.Z)($,O),O!=null?O:{}},getResetStyles:O=>[{"&":(0,j.Lx)(O)}],getCommonStyle:j.du,getCompUnitless:()=>Z.NJ})},53269:function(Ve,k,s){"use strict";var r=s(11568),y=s(14747),X=s(25976);const j=(Z,A)=>{const[R,v]=(0,X.ZP)();return(0,r.xy)({theme:R,token:v,hashId:"",path:["ant-design-icons",Z],nonce:()=>A==null?void 0:A.nonce,layer:{name:"antd"}},()=>[{[`.${Z}`]:Object.assign(Object.assign({},(0,y.Ro)()),{[`.${Z} .${Z}-icon`]:{display:"block"}})}])};k.Z=j},34814:function(Ve,k,s){"use strict";var r=s(67294),y=function(){return r.createElement(r.Fragment,null)};k.Z=y},47332:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return b}});var r=s(53683),y=s(67294);function X(we,Q){return v(we)||R(we,Q)||Z(we,Q)||j()}function j(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Z(we,Q){if(we){if(typeof we=="string")return A(we,Q);var J=Object.prototype.toString.call(we).slice(8,-1);if(J==="Object"&&we.constructor&&(J=we.constructor.name),J==="Map"||J==="Set")return Array.from(we);if(J==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(J))return A(we,Q)}}function A(we,Q){(Q==null||Q>we.length)&&(Q=we.length);for(var J=0,ue=new Array(Q);Jtt in gt?y(gt,tt,{enumerable:!0,configurable:!0,writable:!0,value:Ke}):gt[tt]=Ke,R=(gt,tt)=>{for(var Ke in tt||(tt={}))j.call(tt,Ke)&&A(gt,Ke,tt[Ke]);if(X)for(var Ke of X(tt))Z.call(tt,Ke)&&A(gt,Ke,tt[Ke]);return gt};const v=gt=>r.createElement("svg",R({viewBox:"64 64 896 896"},gt),r.createElement("path",{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-32 736H663.9V602.2h104l15.6-120.7H663.9v-77.1c0-35 9.7-58.8 59.8-58.8h63.9v-108c-11.1-1.5-49-4.8-93.2-4.8-92.2 0-155.3 56.3-155.3 159.6v89H434.9v120.7h104.3V848H176V176h672v672z"}));var Y="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNODgwIDExMkgxNDRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjczNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg3MzZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMzIgNzM2SDY2My45VjYwMi4yaDEwNGwxNS42LTEyMC43SDY2My45di03Ny4xYzAtMzUgOS43LTU4LjggNTkuOC01OC44aDYzLjl2LTEwOGMtMTEuMS0xLjUtNDktNC44LTkzLjItNC44LTkyLjIgMC0xNTUuMyA1Ni4zLTE1NS4zIDE1OS42djg5SDQzNC45djEyMC43aDEwNC4zVjg0OEgxNzZWMTc2aDY3MnY2NzJ6Ii8+PC9zdmc+",O=Object.defineProperty,$=Object.getOwnPropertySymbols,T=Object.prototype.hasOwnProperty,b=Object.prototype.propertyIsEnumerable,we=(gt,tt,Ke)=>tt in gt?O(gt,tt,{enumerable:!0,configurable:!0,writable:!0,value:Ke}):gt[tt]=Ke,Q=(gt,tt)=>{for(var Ke in tt||(tt={}))T.call(tt,Ke)&&we(gt,Ke,tt[Ke]);if($)for(var Ke of $(tt))b.call(tt,Ke)&&we(gt,Ke,tt[Ke]);return gt};const J=gt=>r.createElement("svg",Q({viewBox:"64 64 896 896"},gt),r.createElement("path",{d:"M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9a127.5 127.5 0 0 1 38.1 91v112.5c.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z"}));var ue="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNNTExLjYgNzYuM0MyNjQuMyA3Ni4yIDY0IDI3Ni40IDY0IDUyMy41IDY0IDcxOC45IDE4OS4zIDg4NSAzNjMuOCA5NDZjMjMuNSA1LjkgMTkuOS0xMC44IDE5LjktMjIuMnYtNzcuNWMtMTM1LjcgMTUuOS0xNDEuMi03My45LTE1MC4zLTg4LjlDMjE1IDcyNiAxNzEuNSA3MTggMTg0LjUgNzAzYzMwLjktMTUuOSA2Mi40IDQgOTguOSA1Ny45IDI2LjQgMzkuMSA3Ny45IDMyLjUgMTA0IDI2IDUuNy0yMy41IDE3LjktNDQuNSAzNC43LTYwLjgtMTQwLjYtMjUuMi0xOTkuMi0xMTEtMTk5LjItMjEzIDAtNDkuNSAxNi4zLTk1IDQ4LjMtMTMxLjctMjAuNC02MC41IDEuOS0xMTIuMyA0LjktMTIwIDU4LjEtNS4yIDExOC41IDQxLjYgMTIzLjIgNDUuMyAzMy04LjkgNzAuNy0xMy42IDExMi45LTEzLjYgNDIuNCAwIDgwLjIgNC45IDExMy41IDEzLjkgMTEuMy04LjYgNjcuMy00OC44IDEyMS4zLTQzLjkgMi45IDcuNyAyNC43IDU4LjMgNS41IDExOCAzMi40IDM2LjggNDguOSA4Mi43IDQ4LjkgMTMyLjMgMCAxMDIuMi01OSAxODguMS0yMDAgMjEyLjlhMTI3LjUgMTI3LjUgMCAwIDEgMzguMSA5MXYxMTIuNWMuOCA5IDAgMTcuOSAxNSAxNy45IDE3Ny4xLTU5LjcgMzA0LjYtMjI3IDMwNC42LTQyNC4xIDAtMjQ3LjItMjAwLjQtNDQ3LjMtNDQ3LjUtNDQ3LjN6Ii8+PC9zdmc+",_=Object.defineProperty,Be=Object.getOwnPropertySymbols,Le=Object.prototype.hasOwnProperty,Bt=Object.prototype.propertyIsEnumerable,vt=(gt,tt,Ke)=>tt in gt?_(gt,tt,{enumerable:!0,configurable:!0,writable:!0,value:Ke}):gt[tt]=Ke,Ae=(gt,tt)=>{for(var Ke in tt||(tt={}))Le.call(tt,Ke)&&vt(gt,Ke,tt[Ke]);if(Be)for(var Ke of Be(tt))Bt.call(tt,Ke)&&vt(gt,Ke,tt[Ke]);return gt};const V=gt=>r.createElement("svg",Ae({viewBox:"64 64 896 896"},gt),r.createElement("path",{d:"M913.9 552.2 805 181.4v-.1c-7.6-22.9-25.7-36.5-48.3-36.5-23.4 0-42.5 13.5-49.7 35.2l-71.4 213H388.8l-71.4-213c-7.2-21.7-26.3-35.2-49.7-35.2-23.1 0-42.5 14.8-48.4 36.6L110.5 552.2c-4.4 14.7 1.2 31.4 13.5 40.7l368.5 276.4c2.6 3.6 6.2 6.3 10.4 7.8l8.6 6.4 8.5-6.4c4.9-1.7 9-4.7 11.9-8.9l368.4-275.4c12.4-9.2 18-25.9 13.6-40.6zM751.7 193.4c1-1.8 2.9-1.9 3.5-1.9 1.1 0 2.5.3 3.4 3L818 394.3H684.5l67.2-200.9zm-487.4 1c.9-2.6 2.3-2.9 3.4-2.9 2.7 0 2.9.1 3.4 1.7l67.3 201.2H206.5l57.8-200zM158.8 558.7l28.2-97.3 202.4 270.2-230.6-172.9zm73.9-116.4h122.1l90.8 284.3-212.9-284.3zM512.9 776 405.7 442.3H620L512.9 776zm157.9-333.7h119.5L580 723.1l90.8-280.8zm-40.7 293.9 207.3-276.7 29.5 99.2-236.8 177.5z"}));var he="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNOTEzLjkgNTUyLjIgODA1IDE4MS40di0uMWMtNy42LTIyLjktMjUuNy0zNi41LTQ4LjMtMzYuNS0yMy40IDAtNDIuNSAxMy41LTQ5LjcgMzUuMmwtNzEuNCAyMTNIMzg4LjhsLTcxLjQtMjEzYy03LjItMjEuNy0yNi4zLTM1LjItNDkuNy0zNS4yLTIzLjEgMC00Mi41IDE0LjgtNDguNCAzNi42TDExMC41IDU1Mi4yYy00LjQgMTQuNyAxLjIgMzEuNCAxMy41IDQwLjdsMzY4LjUgMjc2LjRjMi42IDMuNiA2LjIgNi4zIDEwLjQgNy44bDguNiA2LjQgOC41LTYuNGM0LjktMS43IDktNC43IDExLjktOC45bDM2OC40LTI3NS40YzEyLjQtOS4yIDE4LTI1LjkgMTMuNi00MC42ek03NTEuNyAxOTMuNGMxLTEuOCAyLjktMS45IDMuNS0xLjkgMS4xIDAgMi41LjMgMy40IDNMODE4IDM5NC4zSDY4NC41bDY3LjItMjAwLjl6bS00ODcuNCAxYy45LTIuNiAyLjMtMi45IDMuNC0yLjkgMi43IDAgMi45LjEgMy40IDEuN2w2Ny4zIDIwMS4ySDIwNi41bDU3LjgtMjAwek0xNTguOCA1NTguN2wyOC4yLTk3LjMgMjAyLjQgMjcwLjItMjMwLjYtMTcyLjl6bTczLjktMTE2LjRoMTIyLjFsOTAuOCAyODQuMy0yMTIuOS0yODQuM3pNNTEyLjkgNzc2IDQwNS43IDQ0Mi4zSDYyMEw1MTIuOSA3NzZ6bTE1Ny45LTMzMy43aDExOS41TDU4MCA3MjMuMWw5MC44LTI4MC44em0tNDAuNyAyOTMuOSAyMDcuMy0yNzYuNyAyOS41IDk5LjItMjM2LjggMTc3LjV6Ii8+PC9zdmc+",q=Object.defineProperty,D=Object.getOwnPropertySymbols,U=Object.prototype.hasOwnProperty,Oe=Object.prototype.propertyIsEnumerable,He=(gt,tt,Ke)=>tt in gt?q(gt,tt,{enumerable:!0,configurable:!0,writable:!0,value:Ke}):gt[tt]=Ke,pe=(gt,tt)=>{for(var Ke in tt||(tt={}))U.call(tt,Ke)&&He(gt,Ke,tt[Ke]);if(D)for(var Ke of D(tt))Oe.call(tt,Ke)&&He(gt,Ke,tt[Ke]);return gt};const Qe=gt=>r.createElement("svg",pe({viewBox:"64 64 896 896"},gt),r.createElement("path",{d:"M847.7 112H176.3c-35.5 0-64.3 28.8-64.3 64.3v671.4c0 35.5 28.8 64.3 64.3 64.3h671.4c35.5 0 64.3-28.8 64.3-64.3V176.3c0-35.5-28.8-64.3-64.3-64.3zm0 736c-447.8-.1-671.7-.2-671.7-.3.1-447.8.2-671.7.3-671.7 447.8.1 671.7.2 671.7.3-.1 447.8-.2 671.7-.3 671.7zM230.6 411.9h118.7v381.8H230.6zm59.4-52.2c37.9 0 68.8-30.8 68.8-68.8a68.8 68.8 0 1 0-137.6 0c-.1 38 30.7 68.8 68.8 68.8zm252.3 245.1c0-49.8 9.5-98 71.2-98 60.8 0 61.7 56.9 61.7 101.2v185.7h118.6V584.3c0-102.8-22.2-181.9-142.3-181.9-57.7 0-96.4 31.7-112.3 61.7h-1.6v-52.2H423.7v381.8h118.6V604.8z"}));var ft="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNODQ3LjcgMTEySDE3Ni4zYy0zNS41IDAtNjQuMyAyOC44LTY0LjMgNjQuM3Y2NzEuNGMwIDM1LjUgMjguOCA2NC4zIDY0LjMgNjQuM2g2NzEuNGMzNS41IDAgNjQuMy0yOC44IDY0LjMtNjQuM1YxNzYuM2MwLTM1LjUtMjguOC02NC4zLTY0LjMtNjQuM3ptMCA3MzZjLTQ0Ny44LS4xLTY3MS43LS4yLTY3MS43LS4zLjEtNDQ3LjguMi02NzEuNy4zLTY3MS43IDQ0Ny44LjEgNjcxLjcuMiA2NzEuNy4zLS4xIDQ0Ny44LS4yIDY3MS43LS4zIDY3MS43ek0yMzAuNiA0MTEuOWgxMTguN3YzODEuOEgyMzAuNnptNTkuNC01Mi4yYzM3LjkgMCA2OC44LTMwLjggNjguOC02OC44YTY4LjggNjguOCAwIDEgMC0xMzcuNiAwYy0uMSAzOCAzMC43IDY4LjggNjguOCA2OC44em0yNTIuMyAyNDUuMWMwLTQ5LjggOS41LTk4IDcxLjItOTggNjAuOCAwIDYxLjcgNTYuOSA2MS43IDEwMS4ydjE4NS43aDExOC42VjU4NC4zYzAtMTAyLjgtMjIuMi0xODEuOS0xNDIuMy0xODEuOS01Ny43IDAtOTYuNCAzMS43LTExMi4zIDYxLjdoLTEuNnYtNTIuMkg0MjMuN3YzODEuOGgxMTguNlY2MDQuOHoiLz48L3N2Zz4=",Pt=Object.defineProperty,g=Object.getOwnPropertySymbols,de=Object.prototype.hasOwnProperty,ce=Object.prototype.propertyIsEnumerable,be=(gt,tt,Ke)=>tt in gt?Pt(gt,tt,{enumerable:!0,configurable:!0,writable:!0,value:Ke}):gt[tt]=Ke,Me=(gt,tt)=>{for(var Ke in tt||(tt={}))de.call(tt,Ke)&&be(gt,Ke,tt[Ke]);if(g)for(var Ke of g(tt))ce.call(tt,Ke)&&be(gt,Ke,tt[Ke]);return gt};const $e=gt=>r.createElement("svg",Me({viewBox:"64 64 896 896"},gt),r.createElement("path",{d:"M457.3 543c-68.1-17.7-145 16.2-174.6 76.2-30.1 61.2-1 129.1 67.8 151.3 71.2 23 155.2-12.2 184.4-78.3 28.7-64.6-7.2-131-77.6-149.2zm-52 156.2c-13.8 22.1-43.5 31.7-65.8 21.6-22-10-28.5-35.7-14.6-57.2 13.7-21.4 42.3-31 64.4-21.7 22.4 9.5 29.6 35 16 57.3zm45.5-58.5c-5 8.6-16.1 12.7-24.7 9.1-8.5-3.5-11.2-13.1-6.4-21.5 5-8.4 15.6-12.4 24.1-9.1 8.7 3.2 11.8 12.9 7 21.5zm334.5-197.2c15 4.8 31-3.4 35.9-18.3 11.8-36.6 4.4-78.4-23.2-109a111.39 111.39 0 0 0-106-34.3 28.45 28.45 0 0 0-21.9 33.8 28.39 28.39 0 0 0 33.8 21.8c18.4-3.9 38.3 1.8 51.9 16.7a54.2 54.2 0 0 1 11.3 53.3 28.45 28.45 0 0 0 18.2 36zm99.8-206c-56.7-62.9-140.4-86.9-217.7-70.5a32.98 32.98 0 0 0-25.4 39.3 33.12 33.12 0 0 0 39.3 25.5c55-11.7 114.4 5.4 154.8 50.1 40.3 44.7 51.2 105.7 34 159.1-5.6 17.4 3.9 36 21.3 41.7 17.4 5.6 36-3.9 41.6-21.2v-.1c24.1-75.4 8.9-161.1-47.9-223.9zM729 499c-12.2-3.6-20.5-6.1-14.1-22.1 13.8-34.7 15.2-64.7.3-86-28-40.1-104.8-37.9-192.8-1.1 0 0-27.6 12.1-20.6-9.8 13.5-43.5 11.5-79.9-9.6-101-47.7-47.8-174.6 1.8-283.5 110.6C127.3 471.1 80 557.5 80 632.2 80 775.1 263.2 862 442.5 862c235 0 391.3-136.5 391.3-245 0-65.5-55.2-102.6-104.8-118zM443 810.8c-143 14.1-266.5-50.5-275.8-144.5-9.3-93.9 99.2-181.5 242.2-195.6 143-14.2 266.5 50.5 275.8 144.4C694.4 709 586 796.6 443 810.8z"}));var yt="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNNDU3LjMgNTQzYy02OC4xLTE3LjctMTQ1IDE2LjItMTc0LjYgNzYuMi0zMC4xIDYxLjItMSAxMjkuMSA2Ny44IDE1MS4zIDcxLjIgMjMgMTU1LjItMTIuMiAxODQuNC03OC4zIDI4LjctNjQuNi03LjItMTMxLTc3LjYtMTQ5LjJ6bS01MiAxNTYuMmMtMTMuOCAyMi4xLTQzLjUgMzEuNy02NS44IDIxLjYtMjItMTAtMjguNS0zNS43LTE0LjYtNTcuMiAxMy43LTIxLjQgNDIuMy0zMSA2NC40LTIxLjcgMjIuNCA5LjUgMjkuNiAzNSAxNiA1Ny4zem00NS41LTU4LjVjLTUgOC42LTE2LjEgMTIuNy0yNC43IDkuMS04LjUtMy41LTExLjItMTMuMS02LjQtMjEuNSA1LTguNCAxNS42LTEyLjQgMjQuMS05LjEgOC43IDMuMiAxMS44IDEyLjkgNyAyMS41em0zMzQuNS0xOTcuMmMxNSA0LjggMzEtMy40IDM1LjktMTguMyAxMS44LTM2LjYgNC40LTc4LjQtMjMuMi0xMDlhMTExLjM5IDExMS4zOSAwIDAgMC0xMDYtMzQuMyAyOC40NSAyOC40NSAwIDAgMC0yMS45IDMzLjggMjguMzkgMjguMzkgMCAwIDAgMzMuOCAyMS44YzE4LjQtMy45IDM4LjMgMS44IDUxLjkgMTYuN2E1NC4yIDU0LjIgMCAwIDEgMTEuMyA1My4zIDI4LjQ1IDI4LjQ1IDAgMCAwIDE4LjIgMzZ6bTk5LjgtMjA2Yy01Ni43LTYyLjktMTQwLjQtODYuOS0yMTcuNy03MC41YTMyLjk4IDMyLjk4IDAgMCAwLTI1LjQgMzkuMyAzMy4xMiAzMy4xMiAwIDAgMCAzOS4zIDI1LjVjNTUtMTEuNyAxMTQuNCA1LjQgMTU0LjggNTAuMSA0MC4zIDQ0LjcgNTEuMiAxMDUuNyAzNCAxNTkuMS01LjYgMTcuNCAzLjkgMzYgMjEuMyA0MS43IDE3LjQgNS42IDM2LTMuOSA0MS42LTIxLjJ2LS4xYzI0LjEtNzUuNCA4LjktMTYxLjEtNDcuOS0yMjMuOXpNNzI5IDQ5OWMtMTIuMi0zLjYtMjAuNS02LjEtMTQuMS0yMi4xIDEzLjgtMzQuNyAxNS4yLTY0LjcuMy04Ni0yOC00MC4xLTEwNC44LTM3LjktMTkyLjgtMS4xIDAgMC0yNy42IDEyLjEtMjAuNi05LjggMTMuNS00My41IDExLjUtNzkuOS05LjYtMTAxLTQ3LjctNDcuOC0xNzQuNiAxLjgtMjgzLjUgMTEwLjZDMTI3LjMgNDcxLjEgODAgNTU3LjUgODAgNjMyLjIgODAgNzc1LjEgMjYzLjIgODYyIDQ0Mi41IDg2MmMyMzUgMCAzOTEuMy0xMzYuNSAzOTEuMy0yNDUgMC02NS41LTU1LjItMTAyLjYtMTA0LjgtMTE4ek00NDMgODEwLjhjLTE0MyAxNC4xLTI2Ni41LTUwLjUtMjc1LjgtMTQ0LjUtOS4zLTkzLjkgOTkuMi0xODEuNSAyNDIuMi0xOTUuNiAxNDMtMTQuMiAyNjYuNSA1MC41IDI3NS44IDE0NC40QzY5NC40IDcwOSA1ODYgNzk2LjYgNDQzIDgxMC44eiIvPjwvc3ZnPg==",Qt=Object.defineProperty,nn=Object.getOwnPropertySymbols,vn=Object.prototype.hasOwnProperty,Ln=Object.prototype.propertyIsEnumerable,ht=(gt,tt,Ke)=>tt in gt?Qt(gt,tt,{enumerable:!0,configurable:!0,writable:!0,value:Ke}):gt[tt]=Ke,z=(gt,tt)=>{for(var Ke in tt||(tt={}))vn.call(tt,Ke)&&ht(gt,Ke,tt[Ke]);if(nn)for(var Ke of nn(tt))Ln.call(tt,Ke)&&ht(gt,Ke,tt[Ke]);return gt};const se=gt=>r.createElement("svg",z({fillRule:"evenodd",viewBox:"64 64 896 896"},gt),r.createElement("path",{d:"M921 912 601.11 445.75l.55.43L890.08 112H793.7L558.74 384 372.15 112H119.37l298.65 435.31-.04-.04L103 912h96.39L460.6 609.38 668.2 912zM333.96 184.73l448.83 654.54H706.4L257.2 184.73z"}));var Ye="data:image/svg+xml;base64,PHN2ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiPjxwYXRoIGQ9Ik05MjEgOTEyIDYwMS4xMSA0NDUuNzVsLjU1LjQzTDg5MC4wOCAxMTJINzkzLjdMNTU4Ljc0IDM4NCAzNzIuMTUgMTEySDExOS4zN2wyOTguNjUgNDM1LjMxLS4wNC0uMDRMMTAzIDkxMmg5Ni4zOUw0NjAuNiA2MDkuMzggNjY4LjIgOTEyek0zMzMuOTYgMTg0LjczbDQ0OC44MyA2NTQuNTRINzA2LjRMMjU3LjIgMTg0LjczeiIvPjwvc3ZnPg==",De=Object.defineProperty,xe=Object.getOwnPropertySymbols,je=Object.prototype.hasOwnProperty,It=Object.prototype.propertyIsEnumerable,cn=(gt,tt,Ke)=>tt in gt?De(gt,tt,{enumerable:!0,configurable:!0,writable:!0,value:Ke}):gt[tt]=Ke,Fn=(gt,tt)=>{for(var Ke in tt||(tt={}))je.call(tt,Ke)&&cn(gt,Ke,tt[Ke]);if(xe)for(var Ke of xe(tt))It.call(tt,Ke)&&cn(gt,Ke,tt[Ke]);return gt};const Nn=gt=>r.createElement("svg",Fn({viewBox:"64 64 896 896"},gt),r.createElement("path",{d:"M854.6 370.6c-9.9-39.4 9.9-102.2 73.4-124.4l-67.9-3.6s-25.7-90-143.6-98c-117.8-8.1-194.9-3-195-3 .1 0 87.4 55.6 52.4 154.7-25.6 52.5-65.8 95.6-108.8 144.7-1.3 1.3-2.5 2.6-3.5 3.7C319.4 605 96 860 96 860c245.9 64.4 410.7-6.3 508.2-91.1 20.5-.2 35.9-.3 46.3-.3 135.8 0 250.6-117.6 245.9-248.4-3.2-89.9-31.9-110.2-41.8-149.6zm-204.1 334c-10.6 0-26.2.1-46.8.3l-23.6.2-17.8 15.5c-47.1 41-104.4 71.5-171.4 87.6-52.5 12.6-110 16.2-172.7 9.6 18-20.5 36.5-41.6 55.4-63.1 92-104.6 173.8-197.5 236.9-268.5l1.4-1.4 1.3-1.5c4.1-4.6 20.6-23.3 24.7-28.1 9.7-11.1 17.3-19.9 24.5-28.6 30.7-36.7 52.2-67.8 69-102.2l1.6-3.3 1.2-3.4c13.7-38.8 15.4-76.9 6.2-112.8 22.5.7 46.5 1.9 71.7 3.6 33.3 2.3 55.5 12.9 71.1 29.2 5.8 6 10.2 12.5 13.4 18.7 1 2 1.7 3.6 2.3 5l5 17.7c-15.7 34.5-19.9 73.3-11.4 107.2 3 11.8 6.9 22.4 12.3 34.4 2.1 4.7 9.5 20.1 11 23.3 10.3 22.7 15.4 43 16.7 78.7 3.3 94.6-82.7 181.9-182 181.9z"}));var qn="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNODU0LjYgMzcwLjZjLTkuOS0zOS40IDkuOS0xMDIuMiA3My40LTEyNC40bC02Ny45LTMuNnMtMjUuNy05MC0xNDMuNi05OGMtMTE3LjgtOC4xLTE5NC45LTMtMTk1LTMgLjEgMCA4Ny40IDU1LjYgNTIuNCAxNTQuNy0yNS42IDUyLjUtNjUuOCA5NS42LTEwOC44IDE0NC43LTEuMyAxLjMtMi41IDIuNi0zLjUgMy43QzMxOS40IDYwNSA5NiA4NjAgOTYgODYwYzI0NS45IDY0LjQgNDEwLjctNi4zIDUwOC4yLTkxLjEgMjAuNS0uMiAzNS45LS4zIDQ2LjMtLjMgMTM1LjggMCAyNTAuNi0xMTcuNiAyNDUuOS0yNDguNC0zLjItODkuOS0zMS45LTExMC4yLTQxLjgtMTQ5LjZ6bS0yMDQuMSAzMzRjLTEwLjYgMC0yNi4yLjEtNDYuOC4zbC0yMy42LjItMTcuOCAxNS41Yy00Ny4xIDQxLTEwNC40IDcxLjUtMTcxLjQgODcuNi01Mi41IDEyLjYtMTEwIDE2LjItMTcyLjcgOS42IDE4LTIwLjUgMzYuNS00MS42IDU1LjQtNjMuMSA5Mi0xMDQuNiAxNzMuOC0xOTcuNSAyMzYuOS0yNjguNWwxLjQtMS40IDEuMy0xLjVjNC4xLTQuNiAyMC42LTIzLjMgMjQuNy0yOC4xIDkuNy0xMS4xIDE3LjMtMTkuOSAyNC41LTI4LjYgMzAuNy0zNi43IDUyLjItNjcuOCA2OS0xMDIuMmwxLjYtMy4zIDEuMi0zLjRjMTMuNy0zOC44IDE1LjQtNzYuOSA2LjItMTEyLjggMjIuNS43IDQ2LjUgMS45IDcxLjcgMy42IDMzLjMgMi4zIDU1LjUgMTIuOSA3MS4xIDI5LjIgNS44IDYgMTAuMiAxMi41IDEzLjQgMTguNyAxIDIgMS43IDMuNiAyLjMgNWw1IDE3LjdjLTE1LjcgMzQuNS0xOS45IDczLjMtMTEuNCAxMDcuMiAzIDExLjggNi45IDIyLjQgMTIuMyAzNC40IDIuMSA0LjcgOS41IDIwLjEgMTEgMjMuMyAxMC4zIDIyLjcgMTUuNCA0MyAxNi43IDc4LjcgMy4zIDk0LjYtODIuNyAxODEuOS0xODIgMTgxLjl6Ii8+PC9zdmc+",or=Object.defineProperty,dr=Object.getOwnPropertySymbols,Zn=Object.prototype.hasOwnProperty,jn=Object.prototype.propertyIsEnumerable,mn=(gt,tt,Ke)=>tt in gt?or(gt,tt,{enumerable:!0,configurable:!0,writable:!0,value:Ke}):gt[tt]=Ke,Ft=(gt,tt)=>{for(var Ke in tt||(tt={}))Zn.call(tt,Ke)&&mn(gt,Ke,tt[Ke]);if(dr)for(var Ke of dr(tt))jn.call(tt,Ke)&&mn(gt,Ke,tt[Ke]);return gt};const Ct=gt=>r.createElement("svg",Ft({viewBox:"64 64 896 896"},gt),r.createElement("path",{d:"M564.7 230.1V803h60l25.2 71.4L756.3 803h131.5V230.1H564.7zm247.7 497h-59.9l-75.1 50.4-17.8-50.4h-18V308.3h170.7v418.8zM526.1 486.9H393.3c2.1-44.9 4.3-104.3 6.6-172.9h130.9l-.1-8.1c0-.6-.2-14.7-2.3-29.1-2.1-15-6.6-34.9-21-34.9H287.8c4.4-20.6 15.7-69.7 29.4-93.8l6.4-11.2-12.9-.7c-.8 0-19.6-.9-41.4 10.6-35.7 19-51.7 56.4-58.7 84.4-18.4 73.1-44.6 123.9-55.7 145.6-3.3 6.4-5.3 10.2-6.2 12.8-1.8 4.9-.8 9.8 2.8 13 10.5 9.5 38.2-2.9 38.5-3 .6-.3 1.3-.6 2.2-1 13.9-6.3 55.1-25 69.8-84.5h56.7c.7 32.2 3.1 138.4 2.9 172.9h-141l-2.1 1.5c-23.1 16.9-30.5 63.2-30.8 65.2l-1.4 9.2h167c-12.3 78.3-26.5 113.4-34 127.4-3.7 7-7.3 14-10.7 20.8-21.3 42.2-43.4 85.8-126.3 153.6-3.6 2.8-7 8-4.8 13.7 2.4 6.3 9.3 9.1 24.6 9.1 5.4 0 11.8-.3 19.4-1 49.9-4.4 100.8-18 135.1-87.6 17-35.1 31.7-71.7 43.9-108.9L497 850l5-12c.8-1.9 19-46.3 5.1-95.9l-.5-1.8-108.1-123-22 16.6c6.4-26.1 10.6-49.9 12.5-71.1h158.7v-8c0-40.1-18.5-63.9-19.2-64.9l-2.4-3z"}));var Mt="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSI2NCA2NCA4OTYgODk2Ij48cGF0aCBkPSJNNTY0LjcgMjMwLjFWODAzaDYwbDI1LjIgNzEuNEw3NTYuMyA4MDNoMTMxLjVWMjMwLjFINTY0Ljd6bTI0Ny43IDQ5N2gtNTkuOWwtNzUuMSA1MC40LTE3LjgtNTAuNGgtMThWMzA4LjNoMTcwLjd2NDE4Ljh6TTUyNi4xIDQ4Ni45SDM5My4zYzIuMS00NC45IDQuMy0xMDQuMyA2LjYtMTcyLjloMTMwLjlsLS4xLTguMWMwLS42LS4yLTE0LjctMi4zLTI5LjEtMi4xLTE1LTYuNi0zNC45LTIxLTM0LjlIMjg3LjhjNC40LTIwLjYgMTUuNy02OS43IDI5LjQtOTMuOGw2LjQtMTEuMi0xMi45LS43Yy0uOCAwLTE5LjYtLjktNDEuNCAxMC42LTM1LjcgMTktNTEuNyA1Ni40LTU4LjcgODQuNC0xOC40IDczLjEtNDQuNiAxMjMuOS01NS43IDE0NS42LTMuMyA2LjQtNS4zIDEwLjItNi4yIDEyLjgtMS44IDQuOS0uOCA5LjggMi44IDEzIDEwLjUgOS41IDM4LjItMi45IDM4LjUtMyAuNi0uMyAxLjMtLjYgMi4yLTEgMTMuOS02LjMgNTUuMS0yNSA2OS44LTg0LjVoNTYuN2MuNyAzMi4yIDMuMSAxMzguNCAyLjkgMTcyLjloLTE0MWwtMi4xIDEuNWMtMjMuMSAxNi45LTMwLjUgNjMuMi0zMC44IDY1LjJsLTEuNCA5LjJoMTY3Yy0xMi4zIDc4LjMtMjYuNSAxMTMuNC0zNCAxMjcuNC0zLjcgNy03LjMgMTQtMTAuNyAyMC44LTIxLjMgNDIuMi00My40IDg1LjgtMTI2LjMgMTUzLjYtMy42IDIuOC03IDgtNC44IDEzLjcgMi40IDYuMyA5LjMgOS4xIDI0LjYgOS4xIDUuNCAwIDExLjgtLjMgMTkuNC0xIDQ5LjktNC40IDEwMC44LTE4IDEzNS4xLTg3LjYgMTctMzUuMSAzMS43LTcxLjcgNDMuOS0xMDguOUw0OTcgODUwbDUtMTJjLjgtMS45IDE5LTQ2LjMgNS4xLTk1LjlsLS41LTEuOC0xMDguMS0xMjMtMjIgMTYuNmM2LjQtMjYuMSAxMC42LTQ5LjkgMTIuNS03MS4xaDE1OC43di04YzAtNDAuMS0xOC41LTYzLjktMTkuMi02NC45bC0yLjQtM3oiLz48L3N2Zz4=",tn=s(86896),qt={github:J,weibo:$e,twitter:se,x:se,gitlab:V,facebook:v,zhihu:Ct,yuque:Nn,linkedin:Qe},un=function(tt){var Ke=tt.icon,mr=tt.link,rr=(0,tn.Z)(),yr=(0,r.useMemo)(function(){return{Icon:qt[Ke],link:mr}},[Ke,mr]);return r.createElement("a",{className:"dumi-default-icon","data-dumi-tooltip":rr.formatMessage({id:"header.social.".concat(Ke)}),"data-dumi-tooltip-bottom":!0,target:"_blank",href:yr.link,rel:"noreferrer"},r.createElement(yr.Icon,null))},hn=un},62988:function(Ve,k,s){var r=s(61755),y=s(26665).each;function X(j,Z){this.query=j,this.isUnconditional=Z,this.handlers=[],this.mql=window.matchMedia(j);var A=this;this.listener=function(R){A.mql=R.currentTarget||R,A.assess()},this.mql.addListener(this.listener)}X.prototype={constuctor:X,addHandler:function(j){var Z=new r(j);this.handlers.push(Z),this.matches()&&Z.on()},removeHandler:function(j){var Z=this.handlers;y(Z,function(A,R){if(A.equals(j))return A.destroy(),!Z.splice(R,1)})},matches:function(){return this.mql.matches||this.isUnconditional},clear:function(){y(this.handlers,function(j){j.destroy()}),this.mql.removeListener(this.listener),this.handlers.length=0},assess:function(){var j=this.matches()?"on":"off";y(this.handlers,function(Z){Z[j]()})}},Ve.exports=X},38177:function(Ve,k,s){var r=s(62988),y=s(26665),X=y.each,j=y.isFunction,Z=y.isArray;function A(){if(!window.matchMedia)throw new Error("matchMedia not present, legacy browsers require a polyfill");this.queries={},this.browserIsIncapable=!window.matchMedia("only all").matches}A.prototype={constructor:A,register:function(R,v,Y){var O=this.queries,$=Y&&this.browserIsIncapable;return O[R]||(O[R]=new r(R,$)),j(v)&&(v={match:v}),Z(v)||(v=[v]),X(v,function(T){j(T)&&(T={match:T}),O[R].addHandler(T)}),this},unregister:function(R,v){var Y=this.queries[R];return Y&&(v?Y.removeHandler(v):(Y.clear(),delete this.queries[R])),this}},Ve.exports=A},61755:function(Ve){function k(s){this.options=s,!s.deferSetup&&this.setup()}k.prototype={constructor:k,setup:function(){this.options.setup&&this.options.setup(),this.initialised=!0},on:function(){!this.initialised&&this.setup(),this.options.match&&this.options.match()},off:function(){this.options.unmatch&&this.options.unmatch()},destroy:function(){this.options.destroy?this.options.destroy():this.off()},equals:function(s){return this.options===s||this.options.match===s}},Ve.exports=k},26665:function(Ve){function k(y,X){var j=0,Z=y.length,A;for(j;j=Ae||Ln<0||ft&&ht>=D}function Me(){var vn=J();if(be(vn))return $e(vn);Oe=setTimeout(Me,ce(vn))}function $e(vn){return Oe=void 0,Pt&&he?g(vn):(he=q=void 0,U)}function yt(){Oe!==void 0&&clearTimeout(Oe),pe=0,he=He=q=Oe=void 0}function Qt(){return Oe===void 0?U:$e(J())}function nn(){var vn=J(),Ln=be(vn);if(he=arguments,q=this,He=vn,Ln){if(Oe===void 0)return de(He);if(ft)return Oe=setTimeout(Me,Ae),g(He)}return Oe===void 0&&(Oe=setTimeout(Me,Ae)),U}return nn.cancel=yt,nn.flush=Qt,nn}function _(vt){var Ae=typeof vt;return!!vt&&(Ae=="object"||Ae=="function")}function Be(vt){return!!vt&&typeof vt=="object"}function Le(vt){return typeof vt=="symbol"||Be(vt)&&b.call(vt)==X}function Bt(vt){if(typeof vt=="number")return vt;if(Le(vt))return y;if(_(vt)){var Ae=typeof vt.valueOf=="function"?vt.valueOf():vt;vt=_(Ae)?Ae+"":Ae}if(typeof vt!="string")return vt===0?vt:+vt;vt=vt.replace(j,"");var V=A.test(vt);return V||R.test(vt)?v(vt.slice(2),V?2:8):Z.test(vt)?y:+vt}Ve.exports=ue},34155:function(Ve){var k=Ve.exports={},s,r;function y(){throw new Error("setTimeout has not been defined")}function X(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?s=setTimeout:s=y}catch(we){s=y}try{typeof clearTimeout=="function"?r=clearTimeout:r=X}catch(we){r=X}})();function j(we){if(s===setTimeout)return setTimeout(we,0);if((s===y||!s)&&setTimeout)return s=setTimeout,setTimeout(we,0);try{return s(we,0)}catch(Q){try{return s.call(null,we,0)}catch(J){return s.call(this,we,0)}}}function Z(we){if(r===clearTimeout)return clearTimeout(we);if((r===X||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(we);try{return r(we)}catch(Q){try{return r.call(null,we)}catch(J){return r.call(this,we)}}}var A=[],R=!1,v,Y=-1;function O(){!R||!v||(R=!1,v.length?A=v.concat(A):Y=-1,A.length&&$())}function $(){if(!R){var we=j(O);R=!0;for(var Q=A.length;Q;){for(v=A,A=[];++Y1)for(var J=1;J3&&arguments[3]!==void 0?arguments[3]:1;if(!We)return null;var ee=ht(We,Nt),te=ee.length,me=ee.findIndex(function(nt){return F===nt});return H<0?me===-1?me=te-1:me-=1:H>0&&(me+=1),me=(me+te)%te,ee[me]}var se=function(Nt,F){var H=new Set,ee=new Map,te=new Map;return Nt.forEach(function(me){var nt=document.querySelector("[data-menu-id='".concat(J(F,me),"']"));nt&&(H.add(nt),te.set(nt,me),ee.set(me,nt))}),{elements:H,key2element:ee,element2key:te}};function Ye(We,Nt,F,H,ee,te,me,nt,h,E){var ye=b.useRef(),Se=b.useRef();Se.current=Nt;var Te=function(){ft.Z.cancel(ye.current)};return b.useEffect(function(){return function(){Te()}},[]),function(Fe){var Xe=Fe.which;if([].concat(Qt,[be,Me,$e,yt]).includes(Xe)){var Je=te(),ct=se(Je,H),xt=ct,zt=xt.elements,Et=xt.key2element,$t=xt.element2key,jt=Et.get(Nt),Gt=Ln(jt,zt),Rt=$t.get(Gt),xn=nn(We,me(Rt,!0).length===1,F,Xe);if(!xn&&Xe!==$e&&Xe!==yt)return;(Qt.includes(Xe)||[$e,yt].includes(Xe))&&Fe.preventDefault();var en=function(En){if(En){var yn=En,Mn=En.querySelector("a");Mn!=null&&Mn.getAttribute("href")&&(yn=Mn);var An=$t.get(En);nt(An),Te(),ye.current=(0,ft.Z)(function(){Se.current===An&&yn.focus()})}};if([$e,yt].includes(Xe)||xn.sibling||!Gt){var ln;!Gt||We==="inline"?ln=ee.current:ln=vn(Gt);var an,bn=ht(ln,zt);Xe===$e?an=bn[0]:Xe===yt?an=bn[bn.length-1]:an=z(ln,zt,Gt,xn.offset),en(an)}else if(xn.inlineTrigger)h(Rt);else if(xn.offset>0)h(Rt,!0),Te(),ye.current=(0,ft.Z)(function(){ct=se(Je,H);var rn=Gt.getAttribute("aria-controls"),En=document.getElementById(rn),yn=z(En,ct.elements);en(yn)},5);else if(xn.offset<0){var _n=me(Rt,!0),Pn=_n[_n.length-2],Bn=Et.get(Pn);h(Pn,!1),en(Bn)}}E==null||E(Fe)}}function De(We){Promise.resolve().then(We)}var xe="__RC_UTIL_PATH_SPLIT__",je=function(Nt){return Nt.join(xe)},It=function(Nt){return Nt.split(xe)},cn="rc-menu-more";function Fn(){var We=b.useState({}),Nt=(0,Z.Z)(We,2),F=Nt[1],H=(0,b.useRef)(new Map),ee=(0,b.useRef)(new Map),te=b.useState([]),me=(0,Z.Z)(te,2),nt=me[0],h=me[1],E=(0,b.useRef)(0),ye=(0,b.useRef)(!1),Se=function(){ye.current||F({})},Te=(0,b.useCallback)(function(Et,$t){var jt=je($t);ee.current.set(jt,Et),H.current.set(Et,jt),E.current+=1;var Gt=E.current;De(function(){Gt===E.current&&Se()})},[]),Fe=(0,b.useCallback)(function(Et,$t){var jt=je($t);ee.current.delete(jt),H.current.delete(Et)},[]),Xe=(0,b.useCallback)(function(Et){h(Et)},[]),Je=(0,b.useCallback)(function(Et,$t){var jt=H.current.get(Et)||"",Gt=It(jt);return $t&&nt.includes(Gt[0])&&Gt.unshift(cn),Gt},[nt]),ct=(0,b.useCallback)(function(Et,$t){return Et.filter(function(jt){return jt!==void 0}).some(function(jt){var Gt=Je(jt,!0);return Gt.includes($t)})},[Je]),xt=function(){var $t=(0,j.Z)(H.current.keys());return nt.length&&$t.push(cn),$t},zt=(0,b.useCallback)(function(Et){var $t="".concat(H.current.get(Et)).concat(xe),jt=new Set;return(0,j.Z)(ee.current.keys()).forEach(function(Gt){Gt.startsWith($t)&&jt.add(ee.current.get(Gt))}),jt},[]);return b.useEffect(function(){return function(){ye.current=!0}},[]),{registerPath:Te,unregisterPath:Fe,refreshOverflowKeys:Xe,isSubPathKey:ct,getKeyPath:Je,getKeys:xt,getSubPathKeys:zt}}function Nn(We){var Nt=b.useRef(We);Nt.current=We;var F=b.useCallback(function(){for(var H,ee=arguments.length,te=new Array(ee),me=0;me1&&(zt.motionAppear=!1);var Et=zt.onVisibleChanged;return zt.onVisibleChanged=function($t){return!Te.current&&!$t&&ct(!0),Et==null?void 0:Et($t)},Je?null:b.createElement(vt,{mode:te,locked:!Te.current},b.createElement(to.ZP,(0,r.Z)({visible:xt},zt,{forceRender:h,removeOnLeave:!1,leavedClassName:"".concat(nt,"-hidden")}),function($t){var jt=$t.className,Gt=$t.style;return b.createElement(Nr,{id:Nt,className:jt,style:Gt},ee)}))}var kr=["style","className","title","eventKey","warnKey","disabled","internalPopupClose","children","itemIcon","expandIcon","popupClassName","popupOffset","popupStyle","onClick","onMouseEnter","onMouseLeave","onTitleClick","onTitleMouseEnter","onTitleMouseLeave"],so=["active"],mo=b.forwardRef(function(We,Nt){var F=We.style,H=We.className,ee=We.title,te=We.eventKey,me=We.warnKey,nt=We.disabled,h=We.internalPopupClose,E=We.children,ye=We.itemIcon,Se=We.expandIcon,Te=We.popupClassName,Fe=We.popupOffset,Xe=We.popupStyle,Je=We.onClick,ct=We.onMouseEnter,xt=We.onMouseLeave,zt=We.onTitleClick,Et=We.onTitleMouseEnter,$t=We.onTitleMouseLeave,jt=(0,A.Z)(We,kr),Gt=ue(te),Rt=b.useContext(Le),xn=Rt.prefixCls,en=Rt.mode,ln=Rt.openKeys,an=Rt.disabled,bn=Rt.overflowDisabled,_n=Rt.activeKey,Pn=Rt.selectedKeys,Bn=Rt.itemIcon,rn=Rt.expandIcon,En=Rt.onItemClick,yn=Rt.onOpenChange,Mn=Rt.onActive,An=b.useContext(He),sn=An._internalRenderSubMenuItem,wn=b.useContext(U),Kn=wn.isSubPathKey,er=D(),Cn="".concat(xn,"-submenu"),ar=an||nt,Or=b.useRef(),Qn=b.useRef(),br=ye!=null?ye:Bn,lr=Se!=null?Se:rn,Wn=ln.includes(te),ie=!bn&&Wn,w=Kn(Pn,te),m=tn(te,ar,Et,$t),L=m.active,C=(0,A.Z)(m,so),ne=b.useState(!1),fe=(0,Z.Z)(ne,2),Re=fe[0],Ge=fe[1],ut=function(N){ar||Ge(N)},Pe=function(N){ut(!0),ct==null||ct({key:te,domEvent:N})},Lt=function(N){ut(!1),xt==null||xt({key:te,domEvent:N})},Wt=b.useMemo(function(){return L||(en!=="inline"?Re||Kn([_n],te):!1)},[en,L,_n,Re,te,Kn]),gn=qt(er.length),_t=function(N){ar||(zt==null||zt({key:te,domEvent:N}),en==="inline"&&yn(te,!Wn))},Vt=Nn(function(a){Je==null||Je(gt(a)),En(a)}),wt=function(N){en!=="inline"&&yn(te,N)},fn=function(){Mn(te)},u=Gt&&"".concat(Gt,"-popup"),S=b.createElement("div",(0,r.Z)({role:"menuitem",style:gn,className:"".concat(Cn,"-title"),tabIndex:ar?null:-1,ref:Or,title:typeof ee=="string"?ee:null,"data-menu-id":bn&&Gt?null:Gt,"aria-expanded":ie,"aria-haspopup":!0,"aria-controls":u,"aria-disabled":ar,onClick:_t,onFocus:fn},C),ee,b.createElement(un,{icon:en!=="horizontal"?lr:void 0,props:(0,X.Z)((0,X.Z)({},We),{},{isOpen:ie,isSubMenu:!0})},b.createElement("i",{className:"".concat(Cn,"-arrow")}))),K=b.useRef(en);if(en!=="inline"&&er.length>1?K.current="vertical":K.current=en,!bn){var re=K.current;S=b.createElement(Zr,{mode:re,prefixCls:Cn,visible:!h&&ie&&en!=="inline",popupClassName:Te,popupOffset:Fe,popupStyle:Xe,popup:b.createElement(vt,{mode:re==="horizontal"?"vertical":re},b.createElement(Nr,{id:u,ref:Qn},E)),disabled:ar,onVisibleChange:wt},S)}var n=b.createElement(Y.Z.Item,(0,r.Z)({ref:Nt,role:"none"},jt,{component:"li",style:F,className:v()(Cn,"".concat(Cn,"-").concat(en),H,(0,y.Z)((0,y.Z)((0,y.Z)((0,y.Z)({},"".concat(Cn,"-open"),ie),"".concat(Cn,"-active"),Wt),"".concat(Cn,"-selected"),w),"".concat(Cn,"-disabled"),ar)),onMouseEnter:Pe,onMouseLeave:Lt}),S,!bn&&b.createElement(Fr,{id:u,open:ie,keyPath:er},E));return sn&&(n=sn(n,We,{selected:w,active:Wt,open:ie,disabled:ar})),b.createElement(vt,{onItemClick:Vt,mode:en==="horizontal"?"vertical":en,itemIcon:br,expandIcon:lr},n)}),Jr=b.forwardRef(function(We,Nt){var F=We.eventKey,H=We.children,ee=D(F),te=Xr(H,ee),me=he();b.useEffect(function(){if(me)return me.registerPath(F,ee),function(){me.unregisterPath(F,ee)}},[ee]);var nt;return me?nt=te:nt=b.createElement(mo,(0,r.Z)({ref:Nt},We),te),b.createElement(q.Provider,{value:ee},nt)}),vo=Jr,Yr=s(71002);function Gr(We){var Nt=We.className,F=We.style,H=b.useContext(Le),ee=H.prefixCls,te=he();return te?null:b.createElement("li",{role:"separator",className:v()("".concat(ee,"-item-divider"),Nt),style:F})}var Yn=["className","title","eventKey","children"],oo=b.forwardRef(function(We,Nt){var F=We.className,H=We.title,ee=We.eventKey,te=We.children,me=(0,A.Z)(We,Yn),nt=b.useContext(Le),h=nt.prefixCls,E="".concat(h,"-item-group");return b.createElement("li",(0,r.Z)({ref:Nt,role:"presentation"},me,{onClick:function(Se){return Se.stopPropagation()},className:v()(E,F)}),b.createElement("div",{role:"presentation",className:"".concat(E,"-title"),title:typeof H=="string"?H:void 0},H),b.createElement("ul",{role:"group",className:"".concat(E,"-list")},te))}),Br=b.forwardRef(function(We,Nt){var F=We.eventKey,H=We.children,ee=D(F),te=Xr(H,ee),me=he();return me?te:b.createElement(oo,(0,r.Z)({ref:Nt},(0,Ct.Z)(We,["warnKey"])),te)}),po=Br,Dr=["label","children","key","type","extra"];function Oo(We,Nt,F){var H=Nt.item,ee=Nt.group,te=Nt.submenu,me=Nt.divider;return(We||[]).map(function(nt,h){if(nt&&(0,Yr.Z)(nt)==="object"){var E=nt,ye=E.label,Se=E.children,Te=E.key,Fe=E.type,Xe=E.extra,Je=(0,A.Z)(E,Dr),ct=Te!=null?Te:"tmp-".concat(h);return Se||Fe==="group"?Fe==="group"?b.createElement(ee,(0,r.Z)({key:ct},Je,{title:ye}),Oo(Se,Nt,F)):b.createElement(te,(0,r.Z)({key:ct},Je,{title:ye}),Oo(Se,Nt,F)):Fe==="divider"?b.createElement(me,(0,r.Z)({key:ct},Je)):b.createElement(H,(0,r.Z)({key:ct},Je),ye,(!!Xe||Xe===0)&&b.createElement("span",{className:"".concat(F,"-item-extra")},Xe))}return null}).filter(function(nt){return nt})}function wo(We,Nt,F,H,ee){var te=We,me=(0,X.Z)({divider:Gr,item:pr,group:po,submenu:vo},H);return Nt&&(te=Oo(Nt,me,ee)),Xr(te,F)}var no=["prefixCls","rootClassName","style","className","tabIndex","items","children","direction","id","mode","inlineCollapsed","disabled","disabledOverflow","subMenuOpenDelay","subMenuCloseDelay","forceSubMenuRender","defaultOpenKeys","openKeys","activeKey","defaultActiveFirst","selectable","multiple","defaultSelectedKeys","selectedKeys","onSelect","onDeselect","inlineIndent","motion","defaultMotions","triggerSubMenuAction","builtinPlacements","itemIcon","expandIcon","overflowedIndicator","overflowedIndicatorPopupClassName","getPopupContainer","onClick","onOpenChange","onKeyDown","openAnimation","openTransitionName","_internalRenderMenuItem","_internalRenderSubMenuItem","_internalComponents"],Wr=[],co=b.forwardRef(function(We,Nt){var F,H=We,ee=H.prefixCls,te=ee===void 0?"rc-menu":ee,me=H.rootClassName,nt=H.style,h=H.className,E=H.tabIndex,ye=E===void 0?0:E,Se=H.items,Te=H.children,Fe=H.direction,Xe=H.id,Je=H.mode,ct=Je===void 0?"vertical":Je,xt=H.inlineCollapsed,zt=H.disabled,Et=H.disabledOverflow,$t=H.subMenuOpenDelay,jt=$t===void 0?.1:$t,Gt=H.subMenuCloseDelay,Rt=Gt===void 0?.1:Gt,xn=H.forceSubMenuRender,en=H.defaultOpenKeys,ln=H.openKeys,an=H.activeKey,bn=H.defaultActiveFirst,_n=H.selectable,Pn=_n===void 0?!0:_n,Bn=H.multiple,rn=Bn===void 0?!1:Bn,En=H.defaultSelectedKeys,yn=H.selectedKeys,Mn=H.onSelect,An=H.onDeselect,sn=H.inlineIndent,wn=sn===void 0?24:sn,Kn=H.motion,er=H.defaultMotions,Cn=H.triggerSubMenuAction,ar=Cn===void 0?"hover":Cn,Or=H.builtinPlacements,Qn=H.itemIcon,br=H.expandIcon,lr=H.overflowedIndicator,Wn=lr===void 0?"...":lr,ie=H.overflowedIndicatorPopupClassName,w=H.getPopupContainer,m=H.onClick,L=H.onOpenChange,C=H.onKeyDown,ne=H.openAnimation,fe=H.openTransitionName,Re=H._internalRenderMenuItem,Ge=H._internalRenderSubMenuItem,ut=H._internalComponents,Pe=(0,A.Z)(H,no),Lt=b.useMemo(function(){return[wo(Te,Se,Wr,ut,te),wo(Te,Se,Wr,{},te)]},[Te,Se,ut]),Wt=(0,Z.Z)(Lt,2),gn=Wt[0],_t=Wt[1],Vt=b.useState(!1),wt=(0,Z.Z)(Vt,2),fn=wt[0],u=wt[1],S=b.useRef(),K=dr(Xe),re=Fe==="rtl",n=(0,O.Z)(en,{value:ln,postState:function(ke){return ke||Wr}}),a=(0,Z.Z)(n,2),N=a[0],P=a[1],ae=function(ke){var St=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;function kt(){P(ke),L==null||L(ke)}St?(0,we.flushSync)(kt):kt()},Ne=b.useState(N),ze=(0,Z.Z)(Ne,2),pt=ze[0],at=ze[1],Ut=b.useRef(!1),Ht=b.useMemo(function(){return(ct==="inline"||ct==="vertical")&&xt?["vertical",xt]:[ct,!1]},[ct,xt]),On=(0,Z.Z)(Ht,2),on=On[0],Hn=On[1],Tn=on==="inline",Gn=b.useState(on),Sn=(0,Z.Z)(Gn,2),Jt=Sn[0],Yt=Sn[1],dn=b.useState(Hn),Vn=(0,Z.Z)(dn,2),f=Vn[0],I=Vn[1];b.useEffect(function(){Yt(on),I(Hn),Ut.current&&(Tn?P(pt):ae(Wr))},[on,Hn]);var oe=b.useState(0),ve=(0,Z.Z)(oe,2),Ie=ve[0],it=ve[1],bt=Ie>=gn.length-1||Jt!=="horizontal"||Et;b.useEffect(function(){Tn&&at(N)},[N]),b.useEffect(function(){return Ut.current=!0,function(){Ut.current=!1}},[]);var Ot=Fn(),Dt=Ot.registerPath,Tt=Ot.unregisterPath,Zt=Ot.refreshOverflowKeys,At=Ot.isSubPathKey,Xt=Ot.getKeyPath,st=Ot.getKeys,M=Ot.getSubPathKeys,G=b.useMemo(function(){return{registerPath:Dt,unregisterPath:Tt}},[Dt,Tt]),B=b.useMemo(function(){return{isSubPathKey:At}},[At]);b.useEffect(function(){Zt(bt?Wr:gn.slice(Ie+1).map(function(rt){return rt.key}))},[Ie,bt]);var le=(0,O.Z)(an||bn&&((F=gn[0])===null||F===void 0?void 0:F.key),{value:an}),Ce=(0,Z.Z)(le,2),Ue=Ce[0],ot=Ce[1],dt=Nn(function(rt){ot(rt)}),lt=Nn(function(){ot(void 0)});(0,b.useImperativeHandle)(Nt,function(){return{list:S.current,focus:function(ke){var St,kt=st(),pn=se(kt,K),In=pn.elements,$n=pn.key2element,ir=pn.element2key,Un=ht(S.current,In),sr=Ue!=null?Ue:Un[0]?ir.get(Un[0]):(St=gn.find(function(Rn){return!Rn.props.disabled}))===null||St===void 0?void 0:St.key,tr=$n.get(sr);if(sr&&tr){var Kt;tr==null||(Kt=tr.focus)===null||Kt===void 0||Kt.call(tr,ke)}}}});var l=(0,O.Z)(En||[],{value:yn,postState:function(ke){return Array.isArray(ke)?ke:ke==null?Wr:[ke]}}),d=(0,Z.Z)(l,2),p=d[0],x=d[1],W=function(ke){if(Pn){var St=ke.key,kt=p.includes(St),pn;rn?kt?pn=p.filter(function($n){return $n!==St}):pn=[].concat((0,j.Z)(p),[St]):pn=[St],x(pn);var In=(0,X.Z)((0,X.Z)({},ke),{},{selectedKeys:pn});kt?An==null||An(In):Mn==null||Mn(In)}!rn&&N.length&&Jt!=="inline"&&ae(Wr)},ge=Nn(function(rt){m==null||m(gt(rt)),W(rt)}),Ee=Nn(function(rt,ke){var St=N.filter(function(pn){return pn!==rt});if(ke)St.push(rt);else if(Jt!=="inline"){var kt=M(rt);St=St.filter(function(pn){return!kt.has(pn)})}(0,$.Z)(N,St,!0)||ae(St,!0)}),et=function(ke,St){var kt=St!=null?St:!N.includes(ke);Ee(ke,kt)},Ze=Ye(Jt,Ue,re,K,S,st,Xt,ot,et,C);b.useEffect(function(){u(!0)},[]);var _e=b.useMemo(function(){return{_internalRenderMenuItem:Re,_internalRenderSubMenuItem:Ge}},[Re,Ge]),mt=Jt!=="horizontal"||Et?gn:gn.map(function(rt,ke){return b.createElement(vt,{key:rt.key,overflowDisabled:ke>Ie},rt)}),qe=b.createElement(Y.Z,(0,r.Z)({id:Xe,ref:S,prefixCls:"".concat(te,"-overflow"),component:"ul",itemComponent:pr,className:v()(te,"".concat(te,"-root"),"".concat(te,"-").concat(Jt),h,(0,y.Z)((0,y.Z)({},"".concat(te,"-inline-collapsed"),f),"".concat(te,"-rtl"),re),me),dir:Fe,style:nt,role:"menu",tabIndex:ye,data:mt,renderRawItem:function(ke){return ke},renderRawRest:function(ke){var St=ke.length,kt=St?gn.slice(-St):null;return b.createElement(vo,{eventKey:cn,title:Wn,disabled:bt,internalPopupClose:St===0,popupClassName:ie},kt)},maxCount:Jt!=="horizontal"||Et?Y.Z.INVALIDATE:Y.Z.RESPONSIVE,ssr:"full","data-menu-list":!0,onVisibleChange:function(ke){it(ke)},onKeyDown:Ze},Pe));return b.createElement(He.Provider,{value:_e},b.createElement(Q.Provider,{value:K},b.createElement(vt,{prefixCls:te,rootClassName:me,mode:Jt,openKeys:N,rtl:re,disabled:zt,motion:fn?Kn:null,defaultMotions:fn?er:null,activeKey:Ue,onActive:dt,onInactive:lt,selectedKeys:p,inlineIndent:wn,subMenuOpenDelay:jt,subMenuCloseDelay:Rt,forceSubMenuRender:xn,builtinPlacements:Or,triggerSubMenuAction:ar,getPopupContainer:w,itemIcon:Qn,expandIcon:br,onItemClick:ge,onOpenChange:Ee},b.createElement(U.Provider,{value:B},qe),b.createElement("div",{style:{display:"none"},"aria-hidden":!0},b.createElement(V.Provider,{value:G},_t)))))}),ho=co,xo=ho;xo.Item=pr,xo.SubMenu=vo,xo.ItemGroup=po,xo.Divider=Gr;var Eo=xo},62906:function(Ve,k){"use strict";var s={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"};k.Z=s},8205:function(Ve,k,s){"use strict";function r(V){"@babel/helpers - typeof";return r=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(he){return typeof he}:function(he){return he&&typeof Symbol=="function"&&he.constructor===Symbol&&he!==Symbol.prototype?"symbol":typeof he},r(V)}Object.defineProperty(k,"__esModule",{value:!0}),k.PrevArrow=k.NextArrow=void 0;var y=Z(s(67294)),X=Z(s(93967)),j=s(15518);function Z(V){return V&&V.__esModule?V:{default:V}}function A(){return A=Object.assign?Object.assign.bind():function(V){for(var he=1;he=nn&&g<=yt:g===nn}),Ln={message:"dots",index:Me,slidesToScroll:Qe,currentSlide:g},ht=this.clickHandler.bind(this,Ln);be=be.concat(y.default.createElement("li",{key:Me,className:vn},y.default.cloneElement(this.props.customPaging(Me),{onClick:ht})))}return y.default.cloneElement(this.props.appendDots(be),R({className:this.props.dotsClass},ce))}}]),he}(y.default.PureComponent)},46066:function(Ve,k,s){"use strict";var r;r={value:!0},k.Z=void 0;var y=X(s(5798));function X(Z){return Z&&Z.__esModule?Z:{default:Z}}var j=k.Z=y.default},46948:function(Ve,k){"use strict";Object.defineProperty(k,"__esModule",{value:!0}),k.default=void 0;var s={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0,targetSlide:0},r=k.default=s},58517:function(Ve,k,s){"use strict";Object.defineProperty(k,"__esModule",{value:!0}),k.InnerSlider=void 0;var r=O(s(67294)),y=O(s(46948)),X=O(s(91296)),j=O(s(93967)),Z=s(15518),A=s(64740),R=s(16329),v=s(8205),Y=O(s(91033));function O(pe){return pe&&pe.__esModule?pe:{default:pe}}function $(pe){"@babel/helpers - typeof";return $=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(Qe){return typeof Qe}:function(Qe){return Qe&&typeof Symbol=="function"&&Qe.constructor===Symbol&&Qe!==Symbol.prototype?"symbol":typeof Qe},$(pe)}function T(){return T=Object.assign?Object.assign.bind():function(pe){for(var Qe=1;Qe=0)&&Object.prototype.propertyIsEnumerable.call(pe,Pt)&&(ft[Pt]=pe[Pt])}return ft}function we(pe,Qe){if(pe==null)return{};var ft={},Pt=Object.keys(pe),g,de;for(de=0;de=0)&&(ft[g]=pe[g]);return ft}function Q(pe,Qe){var ft=Object.keys(pe);if(Object.getOwnPropertySymbols){var Pt=Object.getOwnPropertySymbols(pe);Qe&&(Pt=Pt.filter(function(g){return Object.getOwnPropertyDescriptor(pe,g).enumerable})),ft.push.apply(ft,Pt)}return ft}function J(pe){for(var Qe=1;Qe0&&(g.setState(function(Me){return{lazyLoadedList:Me.lazyLoadedList.concat(ce)}}),g.props.onLazyLoad&&g.props.onLazyLoad(ce))}var be=J({listRef:g.list,trackRef:g.track},g.props);g.updateState(be,!0,function(){g.adaptHeight(),g.props.autoplay&&g.autoPlay("update")}),g.props.lazyLoad==="progressive"&&(g.lazyLoadTimer=setInterval(g.progressiveLazyLoad,1e3)),g.ro=new Y.default(function(){g.state.animating?(g.onWindowResized(!1),g.callbackTimers.push(setTimeout(function(){return g.onWindowResized()},g.props.speed))):g.onWindowResized()}),g.ro.observe(g.list),document.querySelectorAll&&Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),function(Me){Me.onfocus=g.props.pauseOnFocus?g.onSlideFocus:null,Me.onblur=g.props.pauseOnFocus?g.onSlideBlur:null}),window.addEventListener?window.addEventListener("resize",g.onWindowResized):window.attachEvent("onresize",g.onWindowResized)}),D(V(g),"componentWillUnmount",function(){g.animationEndCallback&&clearTimeout(g.animationEndCallback),g.lazyLoadTimer&&clearInterval(g.lazyLoadTimer),g.callbackTimers.length&&(g.callbackTimers.forEach(function(ce){return clearTimeout(ce)}),g.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",g.onWindowResized):window.detachEvent("onresize",g.onWindowResized),g.autoplayTimer&&clearInterval(g.autoplayTimer),g.ro.disconnect()}),D(V(g),"componentDidUpdate",function(ce){if(g.checkImagesLoad(),g.props.onReInit&&g.props.onReInit(),g.props.lazyLoad){var be=(0,Z.getOnDemandLazySlides)(J(J({},g.props),g.state));be.length>0&&(g.setState(function(yt){return{lazyLoadedList:yt.lazyLoadedList.concat(be)}}),g.props.onLazyLoad&&g.props.onLazyLoad(be))}g.adaptHeight();var Me=J(J({listRef:g.list,trackRef:g.track},g.props),g.state),$e=g.didPropsChange(ce);$e&&g.updateState(Me,$e,function(){g.state.currentSlide>=r.default.Children.count(g.props.children)&&g.changeSlide({message:"index",index:r.default.Children.count(g.props.children)-g.props.slidesToShow,currentSlide:g.state.currentSlide}),g.props.autoplay?g.autoPlay("update"):g.pause("paused")})}),D(V(g),"onWindowResized",function(ce){g.debouncedResize&&g.debouncedResize.cancel(),g.debouncedResize=(0,X.default)(function(){return g.resizeWindow(ce)},50),g.debouncedResize()}),D(V(g),"resizeWindow",function(){var ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,be=!!(g.track&&g.track.node);if(be){var Me=J(J({listRef:g.list,trackRef:g.track},g.props),g.state);g.updateState(Me,ce,function(){g.props.autoplay?g.autoPlay("update"):g.pause("paused")}),g.setState({animating:!1}),clearTimeout(g.animationEndCallback),delete g.animationEndCallback}}),D(V(g),"updateState",function(ce,be,Me){var $e=(0,Z.initializedState)(ce);ce=J(J(J({},ce),$e),{},{slideIndex:$e.currentSlide});var yt=(0,Z.getTrackLeft)(ce);ce=J(J({},ce),{},{left:yt});var Qt=(0,Z.getTrackCSS)(ce);(be||r.default.Children.count(g.props.children)!==r.default.Children.count(ce.children))&&($e.trackStyle=Qt),g.setState($e,Me)}),D(V(g),"ssrInit",function(){if(g.props.variableWidth){var ce=0,be=0,Me=[],$e=(0,Z.getPreClones)(J(J(J({},g.props),g.state),{},{slideCount:g.props.children.length})),yt=(0,Z.getPostClones)(J(J(J({},g.props),g.state),{},{slideCount:g.props.children.length}));g.props.children.forEach(function(cn){Me.push(cn.props.style.width),ce+=cn.props.style.width});for(var Qt=0;Qt<$e;Qt++)be+=Me[Me.length-1-Qt],ce+=Me[Me.length-1-Qt];for(var nn=0;nn=be&&g.onWindowResized()};if(!$e.onclick)$e.onclick=function(){return $e.parentNode.focus()};else{var Qt=$e.onclick;$e.onclick=function(nn){Qt(nn),$e.parentNode.focus()}}$e.onload||(g.props.lazyLoad?$e.onload=function(){g.adaptHeight(),g.callbackTimers.push(setTimeout(g.onWindowResized,g.props.speed))}:($e.onload=yt,$e.onerror=function(){yt(),g.props.onLazyLoadError&&g.props.onLazyLoadError()}))})}),D(V(g),"progressiveLazyLoad",function(){for(var ce=[],be=J(J({},g.props),g.state),Me=g.state.currentSlide;Me=-(0,Z.getPreClones)(be);$e--)if(g.state.lazyLoadedList.indexOf($e)<0){ce.push($e);break}ce.length>0?(g.setState(function(yt){return{lazyLoadedList:yt.lazyLoadedList.concat(ce)}}),g.props.onLazyLoad&&g.props.onLazyLoad(ce)):g.lazyLoadTimer&&(clearInterval(g.lazyLoadTimer),delete g.lazyLoadTimer)}),D(V(g),"slideHandler",function(ce){var be=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,Me=g.props,$e=Me.asNavFor,yt=Me.beforeChange,Qt=Me.onLazyLoad,nn=Me.speed,vn=Me.afterChange,Ln=g.state.currentSlide,ht=(0,Z.slideHandler)(J(J(J({index:ce},g.props),g.state),{},{trackRef:g.track,useCSS:g.props.useCSS&&!be})),z=ht.state,se=ht.nextState;if(z){yt&&yt(Ln,z.currentSlide);var Ye=z.lazyLoadedList.filter(function(De){return g.state.lazyLoadedList.indexOf(De)<0});Qt&&Ye.length>0&&Qt(Ye),!g.props.waitForAnimate&&g.animationEndCallback&&(clearTimeout(g.animationEndCallback),vn&&vn(Ln),delete g.animationEndCallback),g.setState(z,function(){$e&&g.asNavForIndex!==ce&&(g.asNavForIndex=ce,$e.innerSlider.slideHandler(ce)),se&&(g.animationEndCallback=setTimeout(function(){var De=se.animating,xe=b(se,["animating"]);g.setState(xe,function(){g.callbackTimers.push(setTimeout(function(){return g.setState({animating:De})},10)),vn&&vn(z.currentSlide),delete g.animationEndCallback})},nn))})}}),D(V(g),"changeSlide",function(ce){var be=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,Me=J(J({},g.props),g.state),$e=(0,Z.changeSlide)(Me,ce);if(!($e!==0&&!$e)&&(be===!0?g.slideHandler($e,be):g.slideHandler($e),g.props.autoplay&&g.autoPlay("update"),g.props.focusOnSelect)){var yt=g.list.querySelectorAll(".slick-current");yt[0]&&yt[0].focus()}}),D(V(g),"clickHandler",function(ce){g.clickable===!1&&(ce.stopPropagation(),ce.preventDefault()),g.clickable=!0}),D(V(g),"keyHandler",function(ce){var be=(0,Z.keyHandler)(ce,g.props.accessibility,g.props.rtl);be!==""&&g.changeSlide({message:be})}),D(V(g),"selectHandler",function(ce){g.changeSlide(ce)}),D(V(g),"disableBodyScroll",function(){var ce=function(Me){Me=Me||window.event,Me.preventDefault&&Me.preventDefault(),Me.returnValue=!1};window.ontouchmove=ce}),D(V(g),"enableBodyScroll",function(){window.ontouchmove=null}),D(V(g),"swipeStart",function(ce){g.props.verticalSwiping&&g.disableBodyScroll();var be=(0,Z.swipeStart)(ce,g.props.swipe,g.props.draggable);be!==""&&g.setState(be)}),D(V(g),"swipeMove",function(ce){var be=(0,Z.swipeMove)(ce,J(J(J({},g.props),g.state),{},{trackRef:g.track,listRef:g.list,slideIndex:g.state.currentSlide}));be&&(be.swiping&&(g.clickable=!1),g.setState(be))}),D(V(g),"swipeEnd",function(ce){var be=(0,Z.swipeEnd)(ce,J(J(J({},g.props),g.state),{},{trackRef:g.track,listRef:g.list,slideIndex:g.state.currentSlide}));if(be){var Me=be.triggerSlideHandler;delete be.triggerSlideHandler,g.setState(be),Me!==void 0&&(g.slideHandler(Me),g.props.verticalSwiping&&g.enableBodyScroll())}}),D(V(g),"touchEnd",function(ce){g.swipeEnd(ce),g.clickable=!0}),D(V(g),"slickPrev",function(){g.callbackTimers.push(setTimeout(function(){return g.changeSlide({message:"previous"})},0))}),D(V(g),"slickNext",function(){g.callbackTimers.push(setTimeout(function(){return g.changeSlide({message:"next"})},0))}),D(V(g),"slickGoTo",function(ce){var be=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(ce=Number(ce),isNaN(ce))return"";g.callbackTimers.push(setTimeout(function(){return g.changeSlide({message:"index",index:ce,currentSlide:g.state.currentSlide},be)},0))}),D(V(g),"play",function(){var ce;if(g.props.rtl)ce=g.state.currentSlide-g.props.slidesToScroll;else if((0,Z.canGoNext)(J(J({},g.props),g.state)))ce=g.state.currentSlide+g.props.slidesToScroll;else return!1;g.slideHandler(ce)}),D(V(g),"autoPlay",function(ce){g.autoplayTimer&&clearInterval(g.autoplayTimer);var be=g.state.autoplaying;if(ce==="update"){if(be==="hovered"||be==="focused"||be==="paused")return}else if(ce==="leave"){if(be==="paused"||be==="focused")return}else if(ce==="blur"&&(be==="paused"||be==="hovered"))return;g.autoplayTimer=setInterval(g.play,g.props.autoplaySpeed+50),g.setState({autoplaying:"playing"})}),D(V(g),"pause",function(ce){g.autoplayTimer&&(clearInterval(g.autoplayTimer),g.autoplayTimer=null);var be=g.state.autoplaying;ce==="paused"?g.setState({autoplaying:"paused"}):ce==="focused"?(be==="hovered"||be==="playing")&&g.setState({autoplaying:"focused"}):be==="playing"&&g.setState({autoplaying:"hovered"})}),D(V(g),"onDotsOver",function(){return g.props.autoplay&&g.pause("hovered")}),D(V(g),"onDotsLeave",function(){return g.props.autoplay&&g.state.autoplaying==="hovered"&&g.autoPlay("leave")}),D(V(g),"onTrackOver",function(){return g.props.autoplay&&g.pause("hovered")}),D(V(g),"onTrackLeave",function(){return g.props.autoplay&&g.state.autoplaying==="hovered"&&g.autoPlay("leave")}),D(V(g),"onSlideFocus",function(){return g.props.autoplay&&g.pause("focused")}),D(V(g),"onSlideBlur",function(){return g.props.autoplay&&g.state.autoplaying==="focused"&&g.autoPlay("blur")}),D(V(g),"render",function(){var ce=(0,j.default)("slick-slider",g.props.className,{"slick-vertical":g.props.vertical,"slick-initialized":!0}),be=J(J({},g.props),g.state),Me=(0,Z.extractObject)(be,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),$e=g.props.pauseOnHover;Me=J(J({},Me),{},{onMouseEnter:$e?g.onTrackOver:null,onMouseLeave:$e?g.onTrackLeave:null,onMouseOver:$e?g.onTrackOver:null,focusOnSelect:g.props.focusOnSelect&&g.clickable?g.selectHandler:null});var yt;if(g.props.dots===!0&&g.state.slideCount>=g.props.slidesToShow){var Qt=(0,Z.extractObject)(be,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),nn=g.props.pauseOnDotsHover;Qt=J(J({},Qt),{},{clickHandler:g.changeSlide,onMouseEnter:nn?g.onDotsLeave:null,onMouseOver:nn?g.onDotsOver:null,onMouseLeave:nn?g.onDotsLeave:null}),yt=r.default.createElement(R.Dots,Qt)}var vn,Ln,ht=(0,Z.extractObject)(be,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);ht.clickHandler=g.changeSlide,g.props.arrows&&(vn=r.default.createElement(v.PrevArrow,ht),Ln=r.default.createElement(v.NextArrow,ht));var z=null;g.props.vertical&&(z={height:g.state.listHeight});var se=null;g.props.vertical===!1?g.props.centerMode===!0&&(se={padding:"0px "+g.props.centerPadding}):g.props.centerMode===!0&&(se={padding:g.props.centerPadding+" 0px"});var Ye=J(J({},z),se),De=g.props.touchMove,xe={className:"slick-list",style:Ye,onClick:g.clickHandler,onMouseDown:De?g.swipeStart:null,onMouseMove:g.state.dragging&&De?g.swipeMove:null,onMouseUp:De?g.swipeEnd:null,onMouseLeave:g.state.dragging&&De?g.swipeEnd:null,onTouchStart:De?g.swipeStart:null,onTouchMove:g.state.dragging&&De?g.swipeMove:null,onTouchEnd:De?g.touchEnd:null,onTouchCancel:g.state.dragging&&De?g.swipeEnd:null,onKeyDown:g.props.accessibility?g.keyHandler:null},je={className:ce,dir:"ltr",style:g.props.style};return g.props.unslick&&(xe={className:"slick-list"},je={className:ce}),r.default.createElement("div",je,g.props.unslick?"":vn,r.default.createElement("div",T({ref:g.listRefHandler},xe),r.default.createElement(A.Track,T({ref:g.trackRefHandler},Me),g.props.children)),g.props.unslick?"":Ln,g.props.unslick?"":yt)}),g.list=null,g.track=null,g.state=J(J({},y.default),{},{currentSlide:g.props.initialSlide,targetSlide:g.props.initialSlide?g.props.initialSlide:0,slideCount:r.default.Children.count(g.props.children)}),g.callbackTimers=[],g.clickable=!0,g.debouncedResize=null;var de=g.ssrInit();return g.state=J(J({},g.state),de),g}return Be(ft,[{key:"didPropsChange",value:function(g){for(var de=!1,ce=0,be=Object.keys(this.props);ce1&&arguments[1]!==void 0?arguments[1]:!1;return He.innerSlider.slickGoTo(pe,Qe)}),Bt(_(He),"slickPause",function(){return He.innerSlider.pause("paused")}),Bt(_(He),"slickPlay",function(){return He.innerSlider.autoPlay("play")}),He.state={breakpoint:null},He._responsiveMediaHandlers=[],He}return b(U,[{key:"media",value:function(He,pe){V.register(He,pe),this._responsiveMediaHandlers.push({query:He,handler:pe})}},{key:"componentDidMount",value:function(){var He=this;if(this.props.responsive){var pe=this.props.responsive.map(function(ft){return ft.breakpoint});pe.sort(function(ft,Pt){return ft-Pt}),pe.forEach(function(ft,Pt){var g;Pt===0?g=(0,X.default)({minWidth:0,maxWidth:ft}):g=(0,X.default)({minWidth:pe[Pt-1]+1,maxWidth:ft}),(0,Z.canUseDOM)()&&He.media(g,function(){He.setState({breakpoint:ft})})});var Qe=(0,X.default)({minWidth:pe.slice(-1)[0]});(0,Z.canUseDOM)()&&this.media(Qe,function(){He.setState({breakpoint:null})})}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach(function(He){V.unregister(He.query,He.handler)})}},{key:"render",value:function(){var He=this,pe,Qe;this.state.breakpoint?(Qe=this.props.responsive.filter(function(Qt){return Qt.breakpoint===He.state.breakpoint}),pe=Qe[0].settings==="unslick"?"unslick":O(O(O({},j.default),this.props),Qe[0].settings)):pe=O(O({},j.default),this.props),pe.centerMode&&(pe.slidesToScroll>1,pe.slidesToScroll=1),pe.fade&&(pe.slidesToShow>1,pe.slidesToScroll>1,pe.slidesToShow=1,pe.slidesToScroll=1);var ft=r.default.Children.toArray(this.props.children);ft=ft.filter(function(Qt){return typeof Qt=="string"?!!Qt.trim():!!Qt}),pe.variableWidth&&(pe.rows>1||pe.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),pe.variableWidth=!1);for(var Pt=[],g=null,de=0;de=ft.length));$e+=1)Me.push(r.default.cloneElement(ft[$e],{key:100*de+10*be+$e,tabIndex:-1,style:{width:"".concat(100/pe.slidesPerRow,"%"),display:"inline-block"}}));ce.push(r.default.createElement("div",{key:10*de+be},Me))}pe.variableWidth?Pt.push(r.default.createElement("div",{key:de,style:{width:g}},ce)):Pt.push(r.default.createElement("div",{key:de},ce))}if(pe==="unslick"){var yt="regular slider "+(this.props.className||"");return r.default.createElement("div",{className:yt},ft)}else Pt.length<=pe.slidesToShow&&!pe.infinite&&(pe.unslick=!0);return r.default.createElement(y.InnerSlider,v({style:this.props.style,ref:this.innerSliderRefHandler},(0,Z.filterSettings)(pe)),Pt)}}]),U}(r.default.Component)},64740:function(Ve,k,s){"use strict";Object.defineProperty(k,"__esModule",{value:!0}),k.Track=void 0;var r=j(s(67294)),y=j(s(93967)),X=s(15518);function j(D){return D&&D.__esModule?D:{default:D}}function Z(D){"@babel/helpers - typeof";return Z=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(U){return typeof U}:function(U){return U&&typeof Symbol=="function"&&U.constructor===Symbol&&U!==Symbol.prototype?"symbol":typeof U},Z(D)}function A(){return A=Object.assign?Object.assign.bind():function(D){for(var U=1;U=U.slideCount,U.centerMode?(Qe=Math.floor(U.slidesToShow/2),He=(ft-U.currentSlide)%U.slideCount===0,ft>U.currentSlide-Qe-1&&ft<=U.currentSlide+Qe&&(Oe=!0)):Oe=U.currentSlide<=ft&&ft=U.slideCount?Pt=U.targetSlide-U.slideCount:Pt=U.targetSlide;var g=ft===Pt;return{"slick-slide":!0,"slick-active":Oe,"slick-center":He,"slick-cloned":pe,"slick-current":g}},Ae=function(U){var Oe={};return(U.variableWidth===void 0||U.variableWidth===!1)&&(Oe.width=U.slideWidth),U.fade&&(Oe.position="relative",U.vertical?Oe.top=-U.index*parseInt(U.slideHeight):Oe.left=-U.index*parseInt(U.slideWidth),Oe.opacity=U.currentSlide===U.index?1:0,Oe.zIndex=U.currentSlide===U.index?999:998,U.useCSS&&(Oe.transition="opacity "+U.speed+"ms "+U.cssEase+", visibility "+U.speed+"ms "+U.cssEase)),Oe},V=function(U,Oe){return U.key||Oe},he=function(U){var Oe,He=[],pe=[],Qe=[],ft=r.default.Children.count(U.children),Pt=(0,X.lazyStartIndex)(U),g=(0,X.lazyEndIndex)(U);return r.default.Children.forEach(U.children,function(de,ce){var be,Me={message:"children",index:ce,slidesToScroll:U.slidesToScroll,currentSlide:U.currentSlide};!U.lazyLoad||U.lazyLoad&&U.lazyLoadedList.indexOf(ce)>=0?be=de:be=r.default.createElement("div",null);var $e=Ae(_(_({},U),{},{index:ce})),yt=be.props.className||"",Qt=vt(_(_({},U),{},{index:ce}));if(He.push(r.default.cloneElement(be,{key:"original"+V(be,ce),"data-index":ce,className:(0,y.default)(Qt,yt),tabIndex:"-1","aria-hidden":!Qt["slick-active"],style:_(_({outline:"none"},be.props.style||{}),$e),onClick:function(Ln){be.props&&be.props.onClick&&be.props.onClick(Ln),U.focusOnSelect&&U.focusOnSelect(Me)}})),U.infinite&&U.fade===!1){var nn=ft-ce;nn<=(0,X.getPreClones)(U)&&(Oe=-nn,Oe>=Pt&&(be=de),Qt=vt(_(_({},U),{},{index:Oe})),pe.push(r.default.cloneElement(be,{key:"precloned"+V(be,Oe),"data-index":Oe,tabIndex:"-1",className:(0,y.default)(Qt,yt),"aria-hidden":!Qt["slick-active"],style:_(_({},be.props.style||{}),$e),onClick:function(Ln){be.props&&be.props.onClick&&be.props.onClick(Ln),U.focusOnSelect&&U.focusOnSelect(Me)}}))),Oe=ft+ce,Oe0?1:0):0},ue=k.lazySlidesOnRight=function(z){return z.centerMode?Math.floor((z.slidesToShow-1)/2)+1+(parseInt(z.centerPadding)>0?1:0):z.slidesToShow},_=k.getWidth=function(z){return z&&z.offsetWidth||0},Be=k.getHeight=function(z){return z&&z.offsetHeight||0},Le=k.getSwipeDirection=function(z){var se=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,Ye,De,xe,je;return Ye=z.startX-z.curX,De=z.startY-z.curY,xe=Math.atan2(De,Ye),je=Math.round(xe*180/Math.PI),je<0&&(je=360-Math.abs(je)),je<=45&&je>=0||je<=360&&je>=315?"left":je>=135&&je<=225?"right":se===!0?je>=35&&je<=135?"up":"down":"vertical"},Bt=k.canGoNext=function(z){var se=!0;return z.infinite||(z.centerMode&&z.currentSlide>=z.slideCount-1||z.slideCount<=z.slidesToShow||z.currentSlide>=z.slideCount-z.slidesToShow)&&(se=!1),se},vt=k.extractObject=function(z,se){var Ye={};return se.forEach(function(De){return Ye[De]=z[De]}),Ye},Ae=k.initializedState=function(z){var se=r.default.Children.count(z.children),Ye=z.listRef,De=Math.ceil(_(Ye)),xe=z.trackRef&&z.trackRef.node,je=Math.ceil(_(xe)),It;if(z.vertical)It=De;else{var cn=z.centerMode&&parseInt(z.centerPadding)*2;typeof z.centerPadding=="string"&&z.centerPadding.slice(-1)==="%"&&(cn*=De/100),It=Math.ceil((De-cn)/z.slidesToShow)}var Fn=Ye&&Be(Ye.querySelector('[data-index="0"]')),Nn=Fn*z.slidesToShow,qn=z.currentSlide===void 0?z.initialSlide:z.currentSlide;z.rtl&&z.currentSlide===void 0&&(qn=se-1-z.initialSlide);var or=z.lazyLoadedList||[],dr=T(A(A({},z),{},{currentSlide:qn,lazyLoadedList:or}));or=or.concat(dr);var Zn={slideCount:se,slideWidth:It,listWidth:De,trackWidth:je,currentSlide:qn,slideHeight:Fn,listHeight:Nn,lazyLoadedList:or};return z.autoplaying===null&&z.autoplay&&(Zn.autoplaying="playing"),Zn},V=k.slideHandler=function(z){var se=z.waitForAnimate,Ye=z.animating,De=z.fade,xe=z.infinite,je=z.index,It=z.slideCount,cn=z.lazyLoad,Fn=z.currentSlide,Nn=z.centerMode,qn=z.slidesToScroll,or=z.slidesToShow,dr=z.useCSS,Zn=z.lazyLoadedList;if(se&&Ye)return{};var jn=je,mn,Ft,Ct,Mt={},tn={},qt=xe?je:O(je,0,It-1);if(De){if(!xe&&(je<0||je>=It))return{};je<0?jn=je+It:je>=It&&(jn=je-It),cn&&Zn.indexOf(jn)<0&&(Zn=Zn.concat(jn)),Mt={animating:!0,currentSlide:jn,lazyLoadedList:Zn,targetSlide:jn},tn={animating:!1,targetSlide:jn}}else mn=jn,jn<0?(mn=jn+It,xe?It%qn!==0&&(mn=It-It%qn):mn=0):!Bt(z)&&jn>Fn?jn=mn=Fn:Nn&&jn>=It?(jn=xe?It:It-1,mn=xe?0:It-1):jn>=It&&(mn=jn-It,xe?It%qn!==0&&(mn=0):mn=It-or),!xe&&jn+or>=It&&(mn=It-or),Ft=de(A(A({},z),{},{slideIndex:jn})),Ct=de(A(A({},z),{},{slideIndex:mn})),xe||(Ft===Ct&&(jn=mn),Ft=Ct),cn&&(Zn=Zn.concat(T(A(A({},z),{},{currentSlide:jn})))),dr?(Mt={animating:!0,currentSlide:mn,trackStyle:g(A(A({},z),{},{left:Ft})),lazyLoadedList:Zn,targetSlide:qt},tn={animating:!1,currentSlide:mn,trackStyle:Pt(A(A({},z),{},{left:Ct})),swipeLeft:null,targetSlide:qt}):Mt={currentSlide:mn,trackStyle:Pt(A(A({},z),{},{left:Ct})),lazyLoadedList:Zn,targetSlide:qt};return{state:Mt,nextState:tn}},he=k.changeSlide=function(z,se){var Ye,De,xe,je,It,cn=z.slidesToScroll,Fn=z.slidesToShow,Nn=z.slideCount,qn=z.currentSlide,or=z.targetSlide,dr=z.lazyLoad,Zn=z.infinite;if(je=Nn%cn!==0,Ye=je?0:(Nn-qn)%cn,se.message==="previous")xe=Ye===0?cn:Fn-Ye,It=qn-xe,dr&&!Zn&&(De=qn-xe,It=De===-1?Nn-1:De),Zn||(It=or-cn);else if(se.message==="next")xe=Ye===0?cn:Ye,It=qn+xe,dr&&!Zn&&(It=(qn+cn)%Nn+Ye),Zn||(It=or+cn);else if(se.message==="dots")It=se.index*se.slidesToScroll;else if(se.message==="children"){if(It=se.index,Zn){var jn=$e(A(A({},z),{},{targetSlide:It}));It>se.currentSlide&&jn==="left"?It=It-Nn:It10)return{scrolling:!0};It&&(Ct.swipeLength=tt);var Ke=(cn?-1:1)*(Ct.curX>Ct.startX?1:-1);It&&(Ke=Ct.curY>Ct.startY?1:-1);var mr=Math.ceil(jn/mn),rr=Le(se.touchObject,It),yr=Ct.swipeLength;return Ft||(Fn===0&&(rr==="right"||rr==="down")||Fn+1>=mr&&(rr==="left"||rr==="up")||!Bt(se)&&(rr==="left"||rr==="up"))&&(yr=Ct.swipeLength*Nn,qn===!1&&or&&(or(rr),hn.edgeDragged=!0)),!dr&&Mt&&(Mt(rr),hn.swiped=!0),xe?un=gt+yr*(tn/qt)*Ke:cn?un=gt-yr*Ke:un=gt+yr*Ke,It&&(un=gt+yr*Ke),hn=A(A({},hn),{},{touchObject:Ct,swipeLeft:un,trackStyle:Pt(A(A({},se),{},{left:un}))}),Math.abs(Ct.curX-Ct.startX)10&&(hn.swiping=!0,$(z)),hn}},Oe=k.swipeEnd=function(z,se){var Ye=se.dragging,De=se.swipe,xe=se.touchObject,je=se.listWidth,It=se.touchThreshold,cn=se.verticalSwiping,Fn=se.listHeight,Nn=se.swipeToSlide,qn=se.scrolling,or=se.onSwipe,dr=se.targetSlide,Zn=se.currentSlide,jn=se.infinite;if(!Ye)return De&&$(z),{};var mn=cn?Fn/It:je/It,Ft=Le(xe,cn),Ct={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(qn||!xe.swipeLength)return Ct;if(xe.swipeLength>mn){$(z),or&&or(Ft);var Mt,tn,qt=jn?Zn:dr;switch(Ft){case"left":case"up":tn=qt+Qe(se),Mt=Nn?pe(se,tn):tn,Ct.currentDirection=0;break;case"right":case"down":tn=qt-Qe(se),Mt=Nn?pe(se,tn):tn,Ct.currentDirection=1;break;default:Mt=qt}Ct.triggerSlideHandler=Mt}else{var un=de(se);Ct.trackStyle=g(A(A({},se),{},{left:un}))}return Ct},He=k.getNavigableIndexes=function(z){for(var se=z.infinite?z.slideCount*2:z.slideCount,Ye=z.infinite?z.slidesToShow*-1:0,De=z.infinite?z.slidesToShow*-1:0,xe=[];YeYe[Ye.length-1])se=Ye[Ye.length-1];else for(var xe in Ye){if(sez.swipeLeft*-1)return Ye=cn,!1}else if(cn.offsetLeft-se+_(cn)/2>z.swipeLeft*-1)return Ye=cn,!1;return!0}),!Ye)return 0;var je=z.rtl===!0?z.slideCount-z.currentSlide:z.currentSlide,It=Math.abs(Ye.dataset.index-je)||1;return It}else return z.slidesToScroll},ft=k.checkSpecKeys=function(z,se){return se.reduce(function(Ye,De){return Ye&&z.hasOwnProperty(De)},!0)?null:console.error("Keys Missing:",z)},Pt=k.getTrackCSS=function(z){ft(z,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var se,Ye,De=z.slideCount+2*z.slidesToShow;z.vertical?Ye=De*z.slideHeight:se=Me(z)*z.slideWidth;var xe={opacity:1,transition:"",WebkitTransition:""};if(z.useTransform){var je=z.vertical?"translate3d(0px, "+z.left+"px, 0px)":"translate3d("+z.left+"px, 0px, 0px)",It=z.vertical?"translate3d(0px, "+z.left+"px, 0px)":"translate3d("+z.left+"px, 0px, 0px)",cn=z.vertical?"translateY("+z.left+"px)":"translateX("+z.left+"px)";xe=A(A({},xe),{},{WebkitTransform:je,transform:It,msTransform:cn})}else z.vertical?xe.top=z.left:xe.left=z.left;return z.fade&&(xe={opacity:1}),se&&(xe.width=se),Ye&&(xe.height=Ye),window&&!window.addEventListener&&window.attachEvent&&(z.vertical?xe.marginTop=z.left+"px":xe.marginLeft=z.left+"px"),xe},g=k.getTrackAnimateCSS=function(z){ft(z,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var se=Pt(z);return z.useTransform?(se.WebkitTransition="-webkit-transform "+z.speed+"ms "+z.cssEase,se.transition="transform "+z.speed+"ms "+z.cssEase):z.vertical?se.transition="top "+z.speed+"ms "+z.cssEase:se.transition="left "+z.speed+"ms "+z.cssEase,se},de=k.getTrackLeft=function(z){if(z.unslick)return 0;ft(z,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var se=z.slideIndex,Ye=z.trackRef,De=z.infinite,xe=z.centerMode,je=z.slideCount,It=z.slidesToShow,cn=z.slidesToScroll,Fn=z.slideWidth,Nn=z.listWidth,qn=z.variableWidth,or=z.slideHeight,dr=z.fade,Zn=z.vertical,jn=0,mn,Ft,Ct=0;if(dr||z.slideCount===1)return 0;var Mt=0;if(De?(Mt=-ce(z),je%cn!==0&&se+cn>je&&(Mt=-(se>je?It-(se-je):je%cn)),xe&&(Mt+=parseInt(It/2))):(je%cn!==0&&se+cn>je&&(Mt=It-je%cn),xe&&(Mt=parseInt(It/2))),jn=Mt*Fn,Ct=Mt*or,Zn?mn=se*or*-1+Ct:mn=se*Fn*-1+jn,qn===!0){var tn,qt=Ye&&Ye.node;if(tn=se+ce(z),Ft=qt&&qt.childNodes[tn],mn=Ft?Ft.offsetLeft*-1:0,xe===!0){tn=De?se+ce(z):se,Ft=qt&&qt.children[tn],mn=0;for(var un=0;unz.currentSlide?z.targetSlide>z.currentSlide+yt(z)?"left":"right":z.targetSlide0&&(je+=1),De&&se%2===0&&(je+=1),je}return De?0:se-1},Qt=k.slidesOnLeft=function(z){var se=z.slidesToShow,Ye=z.centerMode,De=z.rtl,xe=z.centerPadding;if(Ye){var je=(se-1)/2+1;return parseInt(xe)>0&&(je+=1),!De&&se%2===0&&(je+=1),je}return De?se-1:0},nn=k.canUseDOM=function(){return!!(typeof window!="undefined"&&window.document&&window.document.createElement)},vn=k.validSettings=Object.keys(y.default);function Ln(ht){return vn.reduce(function(z,se){return ht.hasOwnProperty(se)&&(z[se]=ht[se]),z},{})}},71169:function(Ve){var k=function(s){return s.replace(/[A-Z]/g,function(r){return"-"+r.toLowerCase()}).toLowerCase()};Ve.exports=k},35480:function(Ve,k,s){"use strict";s.d(k,{ZP:function(){return G}});var r=function(l,d){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(p,x){p.__proto__=x}||function(p,x){for(var W in x)Object.prototype.hasOwnProperty.call(x,W)&&(p[W]=x[W])},r(l,d)};function y(l,d){if(typeof d!="function"&&d!==null)throw new TypeError("Class extends value "+String(d)+" is not a constructor or null");r(l,d);function p(){this.constructor=l}l.prototype=d===null?Object.create(d):(p.prototype=d.prototype,new p)}var X=function(){return X=Object.assign||function(d){for(var p,x=1,W=arguments.length;x=0;et--)(Ee=l[et])&&(ge=(W<3?Ee(ge):W>3?Ee(d,p,ge):Ee(d,p))||ge);return W>3&&ge&&Object.defineProperty(d,p,ge),ge}function A(l,d){return function(p,x){d(p,x,l)}}function R(l,d,p,x,W,ge){function Ee(In){if(In!==void 0&&typeof In!="function")throw new TypeError("Function expected");return In}for(var et=x.kind,Ze=et==="getter"?"get":et==="setter"?"set":"value",_e=!d&&l?x.static?l:l.prototype:null,mt=d||(_e?Object.getOwnPropertyDescriptor(_e,x.name):{}),qe,rt=!1,ke=p.length-1;ke>=0;ke--){var St={};for(var kt in x)St[kt]=kt==="access"?{}:x[kt];for(var kt in x.access)St.access[kt]=x.access[kt];St.addInitializer=function(In){if(rt)throw new TypeError("Cannot add initializers after decoration has completed");ge.push(Ee(In||null))};var pn=(0,p[ke])(et==="accessor"?{get:mt.get,set:mt.set}:mt[Ze],St);if(et==="accessor"){if(pn===void 0)continue;if(pn===null||typeof pn!="object")throw new TypeError("Object expected");(qe=Ee(pn.get))&&(mt.get=qe),(qe=Ee(pn.set))&&(mt.set=qe),(qe=Ee(pn.init))&&W.unshift(qe)}else(qe=Ee(pn))&&(et==="field"?W.unshift(qe):mt[Ze]=qe)}_e&&Object.defineProperty(_e,x.name,mt),rt=!0}function v(l,d,p){for(var x=arguments.length>2,W=0;W0&&ge[ge.length-1])&&(_e[0]===6||_e[0]===2)){p=0;continue}if(_e[0]===3&&(!ge||_e[1]>ge[0]&&_e[1]=l.length&&(l=void 0),{value:l&&l[x++],done:!l}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")}function ue(l,d){var p=typeof Symbol=="function"&&l[Symbol.iterator];if(!p)return l;var x=p.call(l),W,ge=[],Ee;try{for(;(d===void 0||d-- >0)&&!(W=x.next()).done;)ge.push(W.value)}catch(et){Ee={error:et}}finally{try{W&&!W.done&&(p=x.return)&&p.call(x)}finally{if(Ee)throw Ee.error}}return ge}function _(){for(var l=[],d=0;d1||et(rt,ke)})})}function et(rt,ke){try{Ze(x[rt](ke))}catch(St){qe(ge[0][3],St)}}function Ze(rt){rt.value instanceof Bt?Promise.resolve(rt.value.v).then(_e,mt):qe(ge[0][2],rt)}function _e(rt){et("next",rt)}function mt(rt){et("throw",rt)}function qe(rt,ke){rt(ke),ge.shift(),ge.length&&et(ge[0][0],ge[0][1])}}function Ae(l){var d,p;return d={},x("next"),x("throw",function(W){throw W}),x("return"),d[Symbol.iterator]=function(){return this},d;function x(W,ge){d[W]=l[W]?function(Ee){return(p=!p)?{value:Bt(l[W](Ee)),done:!1}:ge?ge(Ee):Ee}:ge}}function V(l){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var d=l[Symbol.asyncIterator],p;return d?d.call(l):(l=typeof J=="function"?J(l):l[Symbol.iterator](),p={},x("next"),x("throw"),x("return"),p[Symbol.asyncIterator]=function(){return this},p);function x(ge){p[ge]=l[ge]&&function(Ee){return new Promise(function(et,Ze){Ee=l[ge](Ee),W(et,Ze,Ee.done,Ee.value)})}}function W(ge,Ee,et,Ze){Promise.resolve(Ze).then(function(_e){ge({value:_e,done:et})},Ee)}}function he(l,d){return Object.defineProperty?Object.defineProperty(l,"raw",{value:d}):l.raw=d,l}var q=Object.create?function(l,d){Object.defineProperty(l,"default",{enumerable:!0,value:d})}:function(l,d){l.default=d};function D(l){if(l&&l.__esModule)return l;var d={};if(l!=null)for(var p in l)p!=="default"&&Object.prototype.hasOwnProperty.call(l,p)&&we(d,l,p);return q(d,l),d}function U(l){return l&&l.__esModule?l:{default:l}}function Oe(l,d,p,x){if(p==="a"&&!x)throw new TypeError("Private accessor was defined without a getter");if(typeof d=="function"?l!==d||!x:!d.has(l))throw new TypeError("Cannot read private member from an object whose class did not declare it");return p==="m"?x:p==="a"?x.call(l):x?x.value:d.get(l)}function He(l,d,p,x,W){if(x==="m")throw new TypeError("Private method is not writable");if(x==="a"&&!W)throw new TypeError("Private accessor was defined without a setter");if(typeof d=="function"?l!==d||!W:!d.has(l))throw new TypeError("Cannot write private member to an object whose class did not declare it");return x==="a"?W.call(l,p):W?W.value=p:d.set(l,p),p}function pe(l,d){if(d===null||typeof d!="object"&&typeof d!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof l=="function"?d===l:l.has(d)}function Qe(l,d,p){if(d!=null){if(typeof d!="object"&&typeof d!="function")throw new TypeError("Object expected.");var x;if(p){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");x=d[Symbol.asyncDispose]}if(x===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");x=d[Symbol.dispose]}if(typeof x!="function")throw new TypeError("Object not disposable.");l.stack.push({value:d,dispose:x,async:p})}else p&&l.stack.push({async:!0});return d}var ft=typeof SuppressedError=="function"?SuppressedError:function(l,d,p){var x=new Error(p);return x.name="SuppressedError",x.error=l,x.suppressed=d,x};function Pt(l){function d(x){l.error=l.hasError?new ft(x,l.error,"An error was suppressed during disposal."):x,l.hasError=!0}function p(){for(;l.stack.length;){var x=l.stack.pop();try{var W=x.dispose&&x.dispose.call(x.value);if(x.async)return Promise.resolve(W).then(p,function(ge){return d(ge),p()})}catch(ge){d(ge)}}if(l.hasError)throw l.error}return p()}var g={__extends:y,__assign:X,__rest:j,__decorate:Z,__param:A,__metadata:$,__awaiter:T,__generator:b,__createBinding:we,__exportStar:Q,__values:J,__read:ue,__spread:_,__spreadArrays:Be,__spreadArray:Le,__await:Bt,__asyncGenerator:vt,__asyncDelegator:Ae,__asyncValues:V,__makeTemplateObject:he,__importStar:D,__importDefault:U,__classPrivateFieldGet:Oe,__classPrivateFieldSet:He,__classPrivateFieldIn:pe,__addDisposableResource:Qe,__disposeResources:Pt},de=s(67294),ce=s(96774),be=s.n(ce),Me="-ms-",$e="-moz-",yt="-webkit-",Qt="comm",nn="rule",vn="decl",Ln="@page",ht="@media",z="@import",se="@charset",Ye="@viewport",De="@supports",xe="@document",je="@namespace",It="@keyframes",cn="@font-face",Fn="@counter-style",Nn="@font-feature-values",qn="@layer",or="@scope",dr=Math.abs,Zn=String.fromCharCode,jn=Object.assign;function mn(l,d){return qt(l,0)^45?(((d<<2^qt(l,0))<<2^qt(l,1))<<2^qt(l,2))<<2^qt(l,3):0}function Ft(l){return l.trim()}function Ct(l,d){return(l=d.exec(l))?l[0]:l}function Mt(l,d,p){return l.replace(d,p)}function tn(l,d,p){return l.indexOf(d,p)}function qt(l,d){return l.charCodeAt(d)|0}function un(l,d,p){return l.slice(d,p)}function hn(l){return l.length}function gt(l){return l.length}function tt(l,d){return d.push(l),l}function Ke(l,d){return l.map(d).join("")}function mr(l,d){return l.filter(function(p){return!Ct(p,d)})}var rr=1,yr=1,Sr=0,pr=0,Xn=0,Lr="";function Mr(l,d,p,x,W,ge,Ee,et){return{value:l,root:d,parent:p,type:x,props:W,children:ge,line:rr,column:yr,length:Ee,return:"",siblings:et}}function Nr(l,d){return jn(Mr("",null,null,"",null,null,0,l.siblings),l,{length:-l.length},d)}function Vr(l){for(;l.root;)l=Nr(l.root,{children:[l]});tt(l,l.siblings)}function Xr(){return Xn}function Qr(){return Xn=pr>0?qt(Lr,--pr):0,yr--,Xn===10&&(yr=1,rr--),Xn}function fr(){return Xn=pr2||$r(Xn)>3?"":" "}function so(l){for(;fr();)switch($r(Xn)){case 0:append(Yr(pr-1),l);break;case 2:append(to(Xn),l);break;default:append(from(Xn),l)}return l}function mo(l,d){for(;--d&&fr()&&!(Xn<48||Xn>102||Xn>57&&Xn<65||Xn>70&&Xn<97););return Ir(l,Ur()+(d<6&&Hr()==32&&fr()==32))}function Jr(l){for(;fr();)switch(Xn){case l:return pr;case 34:case 39:l!==34&&l!==39&&Jr(Xn);break;case 40:l===41&&Jr(l);break;case 92:fr();break}return pr}function vo(l,d){for(;fr()&&l+Xn!==57;)if(l+Xn===84&&Hr()===47)break;return"/*"+Ir(d,pr-1)+"*"+Zn(l===47?l:fr())}function Yr(l){for(;!$r(Hr());)fr();return Ir(l,pr)}function Gr(l,d){for(var p="",x=0;x6)switch(qt(l,d+1)){case 109:if(qt(l,d+4)!==45)break;case 102:return Mt(l,/(.+:)(.+)-([^]+)/,"$1"+yt+"$2-$3$1"+$e+(qt(l,d+3)==108?"$3":"$2-$3"))+l;case 115:return~tn(l,"stretch",0)?oo(Mt(l,"stretch","fill-available"),d,p)+l:l}break;case 5152:case 5920:return Mt(l,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(x,W,ge,Ee,et,Ze,_e){return Me+W+":"+ge+_e+(Ee?Me+W+"-span:"+(et?Ze:+Ze-+ge)+_e:"")+l});case 4949:if(qt(l,d+6)===121)return Mt(l,":",":"+yt)+l;break;case 6444:switch(qt(l,qt(l,14)===45?18:11)){case 120:return Mt(l,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+yt+(qt(l,14)===45?"inline-":"")+"box$3$1"+yt+"$2$3$1"+Me+"$2box$3")+l;case 100:return Mt(l,":",":"+Me)+l}break;case 5719:case 2647:case 2135:case 3927:case 2391:return Mt(l,"scroll-","scroll-snap-")+l}return l}function Br(l){var d=gt(l);return function(p,x,W,ge){for(var Ee="",et=0;et-1&&!l.return)switch(l.type){case vn:l.return=oo(l.value,l.length,p);return;case It:return Gr([Nr(l,{value:Mt(l.value,"@","@"+yt)})],x);case nn:if(l.length)return Ke(p=l.props,function(W){switch(Ct(W,x=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":Vr(Nr(l,{props:[Mt(W,/:(read-\w+)/,":"+$e+"$1")]})),Vr(Nr(l,{props:[W]})),jn(l,{props:mr(p,x)});break;case"::placeholder":Vr(Nr(l,{props:[Mt(W,/:(plac\w+)/,":"+yt+"input-$1")]})),Vr(Nr(l,{props:[Mt(W,/:(plac\w+)/,":"+$e+"$1")]})),Vr(Nr(l,{props:[Mt(W,/:(plac\w+)/,Me+"input-$1")]})),Vr(Nr(l,{props:[W]})),jn(l,{props:mr(p,x)});break}return""})}}function Oo(l){switch(l.type){case RULESET:l.props=l.props.map(function(d){return combine(tokenize(d),function(p,x,W){switch(charat(p,0)){case 12:return substr(p,1,strlen(p));case 0:case 40:case 43:case 62:case 126:return p;case 58:W[++x]==="global"&&(W[x]="",W[++x]="\f"+substr(W[x],x=1,-1));case 32:return x===1?"":p;default:switch(x){case 0:return l=p,sizeof(W)>1?"":p;case(x=sizeof(W)-1):case 2:return x===2?p+l+l:p+l;default:return p}}})})}}function wo(l){return Zr(no("",null,null,null,[""],l=Er(l),0,[0],l))}function no(l,d,p,x,W,ge,Ee,et,Ze){for(var _e=0,mt=0,qe=Ee,rt=0,ke=0,St=0,kt=1,pn=1,In=1,$n=0,ir="",Un=W,sr=ge,tr=x,Kt=ir;pn;)switch(St=$n,$n=fr()){case 40:if(St!=108&&qt(Kt,qe-1)==58){tn(Kt+=Mt(to($n),"&","&\f"),"&\f",dr(_e?et[_e-1]:0))!=-1&&(In=-1);break}case 34:case 39:case 91:Kt+=to($n);break;case 9:case 10:case 13:case 32:Kt+=kr(St);break;case 92:Kt+=mo(Ur()-1,7);continue;case 47:switch(Hr()){case 42:case 47:tt(co(vo(fr(),Ur()),d,p,Ze),Ze);break;default:Kt+="/"}break;case 123*kt:et[_e++]=hn(Kt)*In;case 125*kt:case 59:case 0:switch($n){case 0:case 125:pn=0;case 59+mt:In==-1&&(Kt=Mt(Kt,/\f/g,"")),ke>0&&hn(Kt)-qe&&tt(ke>32?ho(Kt+";",x,p,qe-1,Ze):ho(Mt(Kt," ","")+";",x,p,qe-2,Ze),Ze);break;case 59:Kt+=";";default:if(tt(tr=Wr(Kt,d,p,_e,mt,W,et,ir,Un=[],sr=[],qe,ge),ge),$n===123)if(mt===0)no(Kt,d,tr,tr,Un,ge,qe,et,sr);else switch(rt===99&&qt(Kt,3)===110?100:rt){case 100:case 108:case 109:case 115:no(l,tr,tr,x&&tt(Wr(l,tr,tr,0,0,W,et,ir,W,Un=[],qe,sr),sr),W,sr,qe,et,x?Un:sr);break;default:no(Kt,tr,tr,tr,[""],sr,0,et,sr)}}_e=mt=ke=0,kt=In=1,ir=Kt="",qe=Ee;break;case 58:qe=1+hn(Kt),ke=St;default:if(kt<1){if($n==123)--kt;else if($n==125&&kt++==0&&Qr()==125)continue}switch(Kt+=Zn($n),$n*kt){case 38:In=mt>0?1:(Kt+="\f",-1);break;case 44:et[_e++]=(hn(Kt)-1)*In,In=1;break;case 64:Hr()===45&&(Kt+=to(fr())),rt=Hr(),mt=qe=hn(ir=Kt+=Yr(Ur())),$n++;break;case 45:St===45&&hn(Kt)==2&&(kt=0)}}return ge}function Wr(l,d,p,x,W,ge,Ee,et,Ze,_e,mt,qe){for(var rt=W-1,ke=W===0?ge:[""],St=gt(ke),kt=0,pn=0,In=0;kt0?ke[$n]+" "+ir:Mt(ir,/&\f/g,ke[$n])))&&(Ze[In++]=Un);return Mr(l,d,p,W===0?nn:et,Ze,_e,mt,qe)}function co(l,d,p,x){return Mr(l,d,p,Qt,Zn(Xr()),un(l,2,-2),0,x)}function ho(l,d,p,x,W){return Mr(l,d,p,vn,un(l,0,x),un(l,x+1,-1),x,W)}var xo={animationIterationCount:1,aspectRatio: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},Eo=s(34155),We=typeof Eo!="undefined"&&{NODE_ENV:"production",PUBLIC_PATH:"/"}!==void 0&&({NODE_ENV:"production",PUBLIC_PATH:"/"}.REACT_APP_SC_ATTR||{NODE_ENV:"production",PUBLIC_PATH:"/"}.SC_ATTR)||"data-styled",Nt="active",F="data-styled-version",H="6.1.13",ee=`/*!sc*/ +`,te=typeof window!="undefined"&&"HTMLElement"in window,me=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof Eo!="undefined"&&{NODE_ENV:"production",PUBLIC_PATH:"/"}!==void 0&&{NODE_ENV:"production",PUBLIC_PATH:"/"}.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&{NODE_ENV:"production",PUBLIC_PATH:"/"}.REACT_APP_SC_DISABLE_SPEEDY!==""?{NODE_ENV:"production",PUBLIC_PATH:"/"}.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&{NODE_ENV:"production",PUBLIC_PATH:"/"}.REACT_APP_SC_DISABLE_SPEEDY:typeof Eo!="undefined"&&{NODE_ENV:"production",PUBLIC_PATH:"/"}!==void 0&&{NODE_ENV:"production",PUBLIC_PATH:"/"}.SC_DISABLE_SPEEDY!==void 0&&{NODE_ENV:"production",PUBLIC_PATH:"/"}.SC_DISABLE_SPEEDY!==""&&{NODE_ENV:"production",PUBLIC_PATH:"/"}.SC_DISABLE_SPEEDY!=="false"&&{NODE_ENV:"production",PUBLIC_PATH:"/"}.SC_DISABLE_SPEEDY),nt={},h=/invalid hook call/i,E=new Set,ye=function(l,d){if(0)var p,x,W,ge},Se=Object.freeze([]),Te=Object.freeze({});function Fe(l,d,p){return p===void 0&&(p=Te),l.theme!==p.theme&&l.theme||d||p.theme}var Xe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),Je=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,ct=/(^-|-$)/g;function xt(l){return l.replace(Je,"-").replace(ct,"")}var zt=/(a)(d)/gi,Et=52,$t=function(l){return String.fromCharCode(l+(l>25?39:97))};function jt(l){var d,p="";for(d=Math.abs(l);d>Et;d=d/Et|0)p=$t(d%Et)+p;return($t(d%Et)+p).replace(zt,"$1-$2")}var Gt,Rt=5381,xn=function(l,d){for(var p=d.length;p;)l=33*l^d.charCodeAt(--p);return l},en=function(l){return xn(Rt,l)};function ln(l){return jt(en(l)>>>0)}function an(l){return l.displayName||l.name||"Component"}function bn(l){return typeof l=="string"&&!0}var _n=typeof Symbol=="function"&&Symbol.for,Pn=_n?Symbol.for("react.memo"):60115,Bn=_n?Symbol.for("react.forward_ref"):60112,rn={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},En={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},yn={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Mn=((Gt={})[Bn]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Gt[Pn]=yn,Gt);function An(l){return("type"in(d=l)&&d.type.$$typeof)===Pn?yn:"$$typeof"in l?Mn[l.$$typeof]:rn;var d}var sn=Object.defineProperty,wn=Object.getOwnPropertyNames,Kn=Object.getOwnPropertySymbols,er=Object.getOwnPropertyDescriptor,Cn=Object.getPrototypeOf,ar=Object.prototype;function Or(l,d,p){if(typeof d!="string"){if(ar){var x=Cn(d);x&&x!==ar&&Or(l,x,p)}var W=wn(d);Kn&&(W=W.concat(Kn(d)));for(var ge=An(l),Ee=An(d),et=0;et0?" Args: ".concat(d.join(", ")):""))}var fe=function(){function l(d){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=d}return l.prototype.indexOfGroup=function(d){for(var p=0,x=0;x=this.groupSizes.length){for(var x=this.groupSizes,W=x.length,ge=W;d>=ge;)if((ge<<=1)<0)throw ne(16,"".concat(d));this.groupSizes=new Uint32Array(ge),this.groupSizes.set(x),this.length=ge;for(var Ee=W;Ee=this.length||this.groupSizes[d]===0)return p;for(var x=this.groupSizes[d],W=this.indexOfGroup(d),ge=W+x,Ee=W;Ee=0){var x=document.createTextNode(p);return this.element.insertBefore(x,this.nodes[d]||null),this.length++,!0}return!1},l.prototype.deleteRule=function(d){this.element.removeChild(this.nodes[d]),this.length--},l.prototype.getRule=function(d){return d0&&(pn+="".concat(In,","))}),Ze+="".concat(St).concat(kt,'{content:"').concat(pn,'"}').concat(ee)},mt=0;mt0?".".concat(d):rt},mt=Ze.slice();mt.push(function(rt){rt.type===nn&&rt.value.includes("&")&&(rt.props[0]=rt.props[0].replace(ae,p).replace(x,_e))}),Ee.prefix&&mt.push(Dr),mt.push(Yn);var qe=function(rt,ke,St,kt){ke===void 0&&(ke=""),St===void 0&&(St=""),kt===void 0&&(kt="&"),d=kt,p=ke,x=new RegExp("\\".concat(p,"\\b"),"g");var pn=rt.replace(Ne,""),In=wo(St||ke?"".concat(St," ").concat(ke," { ").concat(pn," }"):pn);Ee.namespace&&(In=ze(In,Ee.namespace));var $n=[];return Gr(In,Br(mt.concat(po(function(ir){return $n.push(ir)})))),$n};return qe.hash=Ze.length?Ze.reduce(function(rt,ke){return ke.name||ne(15),xn(rt,ke.name)},Rt).toString():"",qe}var at=new P,Ut=pt(),Ht=de.createContext({shouldForwardProp:void 0,styleSheet:at,stylis:Ut}),On=Ht.Consumer,on=de.createContext(void 0);function Hn(){return(0,de.useContext)(Ht)}function Tn(l){var d=(0,de.useState)(l.stylisPlugins),p=d[0],x=d[1],W=Hn().styleSheet,ge=(0,de.useMemo)(function(){var Ze=W;return l.sheet?Ze=l.sheet:l.target&&(Ze=Ze.reconstructWithOptions({target:l.target},!1)),l.disableCSSOMInjection&&(Ze=Ze.reconstructWithOptions({useCSSOMInjection:!1})),Ze},[l.disableCSSOMInjection,l.sheet,l.target,W]),Ee=(0,de.useMemo)(function(){return pt({options:{namespace:l.namespace,prefix:l.enableVendorPrefixes},plugins:p})},[l.enableVendorPrefixes,l.namespace,p]);(0,de.useEffect)(function(){be()(p,l.stylisPlugins)||x(l.stylisPlugins)},[l.stylisPlugins]);var et=(0,de.useMemo)(function(){return{shouldForwardProp:l.shouldForwardProp,styleSheet:ge,stylis:Ee}},[l.shouldForwardProp,ge,Ee]);return de.createElement(Ht.Provider,{value:et},de.createElement(on.Provider,{value:Ee},l.children))}var Gn=function(){function l(d,p){var x=this;this.inject=function(W,ge){ge===void 0&&(ge=Ut);var Ee=x.name+ge.hash;W.hasNameForId(x.id,Ee)||W.insertRules(x.id,Ee,ge(x.rules,Ee,"@keyframes"))},this.name=d,this.id="sc-keyframes-".concat(d),this.rules=p,m(this,function(){throw ne(12,String(x.name))})}return l.prototype.getName=function(d){return d===void 0&&(d=Ut),this.name+d.hash},l}(),Sn=function(l){return l>="A"&&l<="Z"};function Jt(l){for(var d="",p=0;p>>0);if(!p.hasNameForId(this.componentId,Ee)){var et=x(ge,".".concat(Ee),void 0,this.componentId);p.insertRules(this.componentId,Ee,et)}W=lr(W,Ee),this.staticRulesId=Ee}else{for(var Ze=xn(this.baseHash,x.hash),_e="",mt=0;mt>>0);p.hasNameForId(this.componentId,ke)||p.insertRules(this.componentId,ke,x(_e,".".concat(ke),void 0,this.componentId)),W=lr(W,ke)}}return W},l}(),ve=de.createContext(void 0),Ie=ve.Consumer;function it(){var l=c(ve);if(!l)throw ne(18);return l}function bt(l){var d=o.useContext(ve),p=i(function(){return function(x,W){if(!x)throw ne(14);if(Qn(x)){var ge=x(W);return ge}if(Array.isArray(x)||typeof x!="object")throw ne(8);return W?t(t({},W),x):x}(l.theme,d)},[l.theme,d]);return l.children?o.createElement(ve.Provider,{value:p},l.children):null}var Ot={},Dt=new Set;function Tt(l,d,p){var x=br(l),W=l,ge=!bn(l),Ee=d.attrs,et=Ee===void 0?Se:Ee,Ze=d.componentId,_e=Ze===void 0?function(Un,sr){var tr=typeof Un!="string"?"sc":xt(Un);Ot[tr]=(Ot[tr]||0)+1;var Kt="".concat(tr,"-").concat(ln(H+tr+Ot[tr]));return sr?"".concat(sr,"-").concat(Kt):Kt}(d.displayName,d.parentComponentId):Ze,mt=d.displayName,qe=mt===void 0?function(Un){return bn(Un)?"styled.".concat(Un):"Styled(".concat(an(Un),")")}(l):mt,rt=d.displayName&&d.componentId?"".concat(xt(d.displayName),"-").concat(d.componentId):d.componentId||_e,ke=x&&W.attrs?W.attrs.concat(et).filter(Boolean):et,St=d.shouldForwardProp;if(x&&W.shouldForwardProp){var kt=W.shouldForwardProp;if(d.shouldForwardProp){var pn=d.shouldForwardProp;St=function(Un,sr){return kt(Un,sr)&&pn(Un,sr)}}else St=kt}var In=new oe(p,rt,x?W.componentStyle:void 0);function $n(Un,sr){return function(tr,Kt,Rn){var nr=tr.attrs,kn=tr.componentStyle,Dn=tr.defaultProps,cr=tr.foldedComponentIds,hr=tr.styledComponentId,Tr=tr.target,Cr=de.useContext(ve),qr=Hn(),ro=tr.shouldForwardProp||qr.shouldForwardProp,Io=Fe(Kt,Cr,Dn)||Te,uo=function(eo,ao,So){for(var Co,Pr=X(X({},ao),{className:void 0,theme:So}),Ar=0;Ar2&&P.registerId(this.componentId+d),this.removeStyles(d,x),this.createStyles(d,p,x,W)},l}();function le(l){for(var d=[],p=1;p").concat(p,"")},this.getStyleTags=function(){if(d.sealed)throw ne(2);return d._emitSheetCSS()},this.getStyleElement=function(){var p;if(d.sealed)throw ne(2);var x=d.instance.toString();if(!x)return[];var W=((p={})[We]="",p[F]=H,p.dangerouslySetInnerHTML={__html:x},p),ge=u();return ge&&(W.nonce=ge),[de.createElement("style",X({},W,{key:"sc-0-0"}))]},this.seal=function(){d.sealed=!0},this.instance=new P({isServer:!0}),this.sealed=!1}return l.prototype.collectStyles=function(d){if(this.sealed)throw ne(2);return de.createElement(Tn,{sheet:this.instance},d)},l.prototype.interleaveWithNodeStream=function(d){throw ne(3)},l}(),dt={StyleSheet:P,mainSheet:at},lt="__sc-".concat(We,"__")},65116:function(Ve,k,s){var r=s(37923);function y(X){if(Array.isArray(X))return r(X)}Ve.exports=y,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},25098:function(Ve){function k(s){if(s===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return s}Ve.exports=k,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},64599:function(Ve,k,s){var r=s(96263);function y(X,j){var Z=typeof Symbol!="undefined"&&X[Symbol.iterator]||X["@@iterator"];if(!Z){if(Array.isArray(X)||(Z=r(X))||j&&X&&typeof X.length=="number"){Z&&(X=Z);var A=0,R=function(){};return{s:R,n:function(){return A>=X.length?{done:!0}:{done:!1,value:X[A++]}},e:function(T){throw T},f:R}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var v=!0,Y=!1,O;return{s:function(){Z=Z.call(X)},n:function(){var T=Z.next();return v=T.done,T},e:function(T){Y=!0,O=T},f:function(){try{!v&&Z.return!=null&&Z.return()}finally{if(Y)throw O}}}}Ve.exports=y,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},26037:function(Ve,k,s){var r=s(48374),y=s(21771),X=s(73408);function j(Z){var A=y();return function(){var v=r(Z),Y;if(A){var O=r(this).constructor;Y=Reflect.construct(v,arguments,O)}else Y=v.apply(this,arguments);return X(this,Y)}}Ve.exports=j,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},48374:function(Ve){function k(s){return Ve.exports=k=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(y){return y.__proto__||Object.getPrototypeOf(y)},Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports,k(s)}Ve.exports=k,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},31996:function(Ve,k,s){var r=s(21314);function y(X,j){if(typeof j!="function"&&j!==null)throw new TypeError("Super expression must either be null or a function");X.prototype=Object.create(j&&j.prototype,{constructor:{value:X,writable:!0,configurable:!0}}),Object.defineProperty(X,"prototype",{writable:!1}),j&&r(X,j)}Ve.exports=y,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},21771:function(Ve){function k(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(s){return!1}}Ve.exports=k,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},96936:function(Ve){function k(s){if(typeof Symbol!="undefined"&&s[Symbol.iterator]!=null||s["@@iterator"]!=null)return Array.from(s)}Ve.exports=k,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},88619:function(Ve){function k(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}Ve.exports=k,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},73408:function(Ve,k,s){var r=s(52677).default,y=s(25098);function X(j,Z){if(Z&&(r(Z)==="object"||typeof Z=="function"))return Z;if(Z!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return y(j)}Ve.exports=X,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},21314:function(Ve){function k(s,r){return Ve.exports=k=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(X,j){return X.__proto__=j,X},Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports,k(s,r)}Ve.exports=k,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},68400:function(Ve){function k(s,r){return r||(r=s.slice(0)),Object.freeze(Object.defineProperties(s,{raw:{value:Object.freeze(r)}}))}Ve.exports=k,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},19632:function(Ve,k,s){var r=s(65116),y=s(96936),X=s(96263),j=s(88619);function Z(A){return r(A)||y(A)||X(A)||j()}Ve.exports=Z,Ve.exports.__esModule=!0,Ve.exports.default=Ve.exports},15861:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return y}});function r(X,j,Z,A,R,v,Y){try{var O=X[v](Y),$=O.value}catch(T){return void Z(T)}O.done?j($):Promise.resolve($).then(A,R)}function y(X){return function(){var j=this,Z=arguments;return new Promise(function(A,R){var v=X.apply(j,Z);function Y($){r(v,A,R,Y,O,"next",$)}function O($){r(v,A,R,Y,O,"throw",$)}Y(void 0)})}}},74165:function(Ve,k,s){"use strict";s.d(k,{Z:function(){return y}});var r=s(71002);function y(){"use strict";y=function(){return j};var X,j={},Z=Object.prototype,A=Z.hasOwnProperty,R=Object.defineProperty||function(g,de,ce){g[de]=ce.value},v=typeof Symbol=="function"?Symbol:{},Y=v.iterator||"@@iterator",O=v.asyncIterator||"@@asyncIterator",$=v.toStringTag||"@@toStringTag";function T(g,de,ce){return Object.defineProperty(g,de,{value:ce,enumerable:!0,configurable:!0,writable:!0}),g[de]}try{T({},"")}catch(g){T=function(ce,be,Me){return ce[be]=Me}}function b(g,de,ce,be){var Me=de&&de.prototype instanceof Le?de:Le,$e=Object.create(Me.prototype),yt=new ft(be||[]);return R($e,"_invoke",{value:Oe(g,ce,yt)}),$e}function we(g,de,ce){try{return{type:"normal",arg:g.call(de,ce)}}catch(be){return{type:"throw",arg:be}}}j.wrap=b;var Q="suspendedStart",J="suspendedYield",ue="executing",_="completed",Be={};function Le(){}function Bt(){}function vt(){}var Ae={};T(Ae,Y,function(){return this});var V=Object.getPrototypeOf,he=V&&V(V(Pt([])));he&&he!==Z&&A.call(he,Y)&&(Ae=he);var q=vt.prototype=Le.prototype=Object.create(Ae);function D(g){["next","throw","return"].forEach(function(de){T(g,de,function(ce){return this._invoke(de,ce)})})}function U(g,de){function ce(Me,$e,yt,Qt){var nn=we(g[Me],g,$e);if(nn.type!=="throw"){var vn=nn.arg,Ln=vn.value;return Ln&&(0,r.Z)(Ln)=="object"&&A.call(Ln,"__await")?de.resolve(Ln.__await).then(function(ht){ce("next",ht,yt,Qt)},function(ht){ce("throw",ht,yt,Qt)}):de.resolve(Ln).then(function(ht){vn.value=ht,yt(vn)},function(ht){return ce("throw",ht,yt,Qt)})}Qt(nn.arg)}var be;R(this,"_invoke",{value:function($e,yt){function Qt(){return new de(function(nn,vn){ce($e,yt,nn,vn)})}return be=be?be.then(Qt,Qt):Qt()}})}function Oe(g,de,ce){var be=Q;return function(Me,$e){if(be===ue)throw Error("Generator is already running");if(be===_){if(Me==="throw")throw $e;return{value:X,done:!0}}for(ce.method=Me,ce.arg=$e;;){var yt=ce.delegate;if(yt){var Qt=He(yt,ce);if(Qt){if(Qt===Be)continue;return Qt}}if(ce.method==="next")ce.sent=ce._sent=ce.arg;else if(ce.method==="throw"){if(be===Q)throw be=_,ce.arg;ce.dispatchException(ce.arg)}else ce.method==="return"&&ce.abrupt("return",ce.arg);be=ue;var nn=we(g,de,ce);if(nn.type==="normal"){if(be=ce.done?_:J,nn.arg===Be)continue;return{value:nn.arg,done:ce.done}}nn.type==="throw"&&(be=_,ce.method="throw",ce.arg=nn.arg)}}}function He(g,de){var ce=de.method,be=g.iterator[ce];if(be===X)return de.delegate=null,ce==="throw"&&g.iterator.return&&(de.method="return",de.arg=X,He(g,de),de.method==="throw")||ce!=="return"&&(de.method="throw",de.arg=new TypeError("The iterator does not provide a '"+ce+"' method")),Be;var Me=we(be,g.iterator,de.arg);if(Me.type==="throw")return de.method="throw",de.arg=Me.arg,de.delegate=null,Be;var $e=Me.arg;return $e?$e.done?(de[g.resultName]=$e.value,de.next=g.nextLoc,de.method!=="return"&&(de.method="next",de.arg=X),de.delegate=null,Be):$e:(de.method="throw",de.arg=new TypeError("iterator result is not an object"),de.delegate=null,Be)}function pe(g){var de={tryLoc:g[0]};1 in g&&(de.catchLoc=g[1]),2 in g&&(de.finallyLoc=g[2],de.afterLoc=g[3]),this.tryEntries.push(de)}function Qe(g){var de=g.completion||{};de.type="normal",delete de.arg,g.completion=de}function ft(g){this.tryEntries=[{tryLoc:"root"}],g.forEach(pe,this),this.reset(!0)}function Pt(g){if(g||g===""){var de=g[Y];if(de)return de.call(g);if(typeof g.next=="function")return g;if(!isNaN(g.length)){var ce=-1,be=function Me(){for(;++ce=0;--Me){var $e=this.tryEntries[Me],yt=$e.completion;if($e.tryLoc==="root")return be("end");if($e.tryLoc<=this.prev){var Qt=A.call($e,"catchLoc"),nn=A.call($e,"finallyLoc");if(Qt&&nn){if(this.prev<$e.catchLoc)return be($e.catchLoc,!0);if(this.prev<$e.finallyLoc)return be($e.finallyLoc)}else if(Qt){if(this.prev<$e.catchLoc)return be($e.catchLoc,!0)}else{if(!nn)throw Error("try statement without catch or finally");if(this.prev<$e.finallyLoc)return be($e.finallyLoc)}}}},abrupt:function(de,ce){for(var be=this.tryEntries.length-1;be>=0;--be){var Me=this.tryEntries[be];if(Me.tryLoc<=this.prev&&A.call(Me,"finallyLoc")&&this.prev=0;--ce){var be=this.tryEntries[ce];if(be.finallyLoc===de)return this.complete(be.completion,be.afterLoc),Qe(be),Be}},catch:function(de){for(var ce=this.tryEntries.length-1;ce>=0;--ce){var be=this.tryEntries[ce];if(be.tryLoc===de){var Me=be.completion;if(Me.type==="throw"){var $e=Me.arg;Qe(be)}return $e}}throw Error("illegal catch attempt")},delegateYield:function(de,ce,be){return this.delegate={iterator:Pt(de),resultName:ce,nextLoc:be},this.method==="next"&&(this.arg=X),Be}},j}},89380:function(Ve,k){"use strict";var s=function(v,Y,O,$){function T(b){return b instanceof O?b:new O(function(we){we(b)})}return new(O||(O=Promise))(function(b,we){function Q(_){try{ue($.next(_))}catch(Be){we(Be)}}function J(_){try{ue($.throw(_))}catch(Be){we(Be)}}function ue(_){_.done?b(_.value):T(_.value).then(Q,J)}ue(($=$.apply(v,Y||[])).next())})};function r(v){let Y=0,O=0,$=v;do Y+=$.offsetTop||0,O+=$.offsetLeft||0,$=$.offsetParent;while($);return{top:Y,left:O}}class y{constructor(Y){this.element=Y}getHorizontalScroll(){return this.element.scrollLeft}getVerticalScroll(){return this.element.scrollTop}getMaxHorizontalScroll(){return this.element.scrollWidth-this.element.clientWidth}getMaxVerticalScroll(){return this.element.scrollHeight-this.element.clientHeight}getHorizontalElementScrollOffset(Y,O){return r(Y).left-r(O).left}getVerticalElementScrollOffset(Y,O){return r(Y).top-r(O).top}scrollTo(Y,O){this.element.scrollLeft=Y,this.element.scrollTop=O}}class X{constructor(){this.element=window}getHorizontalScroll(){return window.scrollX||document.documentElement.scrollLeft}getVerticalScroll(){return window.scrollY||document.documentElement.scrollTop}getMaxHorizontalScroll(){return Math.max(document.body.scrollWidth,document.documentElement.scrollWidth,document.body.offsetWidth,document.documentElement.offsetWidth,document.body.clientWidth,document.documentElement.clientWidth)-window.innerWidth}getMaxVerticalScroll(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)-window.innerHeight}getHorizontalElementScrollOffset(Y){return(window.scrollX||document.documentElement.scrollLeft)+Y.getBoundingClientRect().left}getVerticalElementScrollOffset(Y){return(window.scrollY||document.documentElement.scrollTop)+Y.getBoundingClientRect().top}scrollTo(Y,O){window.scrollTo(Y,O)}}const j={elements:[],cancelMethods:[],add:(v,Y)=>{j.elements.push(v),j.cancelMethods.push(Y)},remove:(v,Y)=>{const O=j.elements.indexOf(v);O>-1&&(Y&&j.cancelMethods[O](),j.elements.splice(O,1),j.cancelMethods.splice(O,1))}},Z=typeof window!="undefined",A={cancelOnUserAction:!0,easing:v=>--v*v*v+1,elementToScroll:Z?window:null,horizontalOffset:0,maxDuration:3e3,minDuration:250,speed:500,verticalOffset:0};function R(v,Y={}){return s(this,void 0,void 0,function*(){if(Z){if(!window.Promise)throw"Browser doesn't support Promises, and animated-scroll-to depends on it, please provide a polyfill."}else return new Promise(U=>{U(!1)});let O,$,T,b=Object.assign(Object.assign({},A),Y);const we=b.elementToScroll===window,Q=!!b.elementToScroll.nodeName;if(!we&&!Q)throw"Element to scroll needs to be either window or DOM element.";const J=we?document.documentElement:b.elementToScroll;getComputedStyle(J).getPropertyValue("scroll-behavior")==="smooth"&&console.warn(`${J.tagName} has "scroll-behavior: smooth" which can mess up with animated-scroll-to's animations`);const _=we?new X:new y(b.elementToScroll);if(v instanceof Element){if(T=v,Q&&(!b.elementToScroll.contains(T)||b.elementToScroll.isSameNode(T)))throw"options.elementToScroll has to be a parent of scrollToElement";O=_.getHorizontalElementScrollOffset(T,b.elementToScroll),$=_.getVerticalElementScrollOffset(T,b.elementToScroll)}else if(typeof v=="number")O=_.getHorizontalScroll(),$=v;else if(Array.isArray(v)&&v.length===2)O=v[0]===null?_.getHorizontalScroll():v[0],$=v[1]===null?_.getVerticalScroll():v[1];else throw`Wrong function signature. Check documentation. +Available method signatures are: + animateScrollTo(y:number, options) + animateScrollTo([x:number | null, y:number | null], options) + animateScrollTo(scrollToElement:Element, options)`;O+=b.horizontalOffset,$+=b.verticalOffset;const Be=_.getMaxHorizontalScroll(),Le=_.getHorizontalScroll();O>Be&&(O=Be);const Bt=O-Le,vt=_.getMaxVerticalScroll(),Ae=_.getVerticalScroll();$>vt&&($=vt);const V=$-Ae,he=Math.abs(Math.round(Bt/1e3*b.speed)),q=Math.abs(Math.round(V/1e3*b.speed));let D=he>q?he:q;return Db.maxDuration&&(D=b.maxDuration),new Promise((U,Oe)=>{Bt===0&&V===0&&U(!0),j.remove(_.element,!0);let He;const pe=()=>{de(),cancelAnimationFrame(He),U(!1)};j.add(_.element,pe);const Qe=Me=>Me.preventDefault(),ft=b.cancelOnUserAction?pe:Qe,Pt=b.cancelOnUserAction?{passive:!0}:{passive:!1},g=["wheel","touchstart","keydown","mousedown"],de=()=>{g.forEach(Me=>{_.element.removeEventListener(Me,ft,Pt)})};g.forEach(Me=>{_.element.addEventListener(Me,ft,Pt)});const ce=Date.now(),be=()=>{var Me=Date.now()-ce,$e=Me/D;const yt=Math.round(Le+Bt*b.easing($e)),Qt=Math.round(Ae+V*b.easing($e));Me