@zero-library/chat-agent 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +3 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +3 -3
- package/dist/index.esm.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/utils.ts","../src/stores/Context.ts","../src/ui/common/markdownAlert/styles.module.less","../src/ui/common/markdownAlert/AppCard.tsx","../src/ui/common/markdownAlert/FileView.tsx","../src/services/file.ts","../src/ui/common/markdownAlert/components/DocDrawer.tsx","../src/ui/common/markdownAlert/IndexQuote.tsx","../src/ui/common/markdownAlert/MdEdit.tsx","../src/ui/common/markdownAlert/FileEdit.tsx","../src/ui/common/markdownAlert/QuoteList.tsx","../src/core/constants.ts","../src/stores/index.ts","../src/core/fetchRequest.ts","../src/services/index.ts","../src/ui/layouts/index.tsx","../src/ui/common/AgentHeader.tsx","../src/ui/common/ConversationList.tsx","../src/ui/common/styles.module.less","../src/ui/common/markdownAlert/index.ts","../src/components/MessageRender.tsx","../src/ui/common/BubbleListItems.tsx","../src/ui/common/MessageAIRender.tsx","../src/components/Attachments.tsx","../src/components/ChatSender.tsx","../src/ui/common/ChatSender.tsx","../src/ui/common/ConversationListHeader.tsx","../src/ui/common/SenderPromptsItems.tsx","../src/ui/layouts/styles.module.less"],"names":["copyText","message","dayjs","createValtioContext","styles_module_default","appCard","fileView","fileEdit","fileEditHeader","fileEditContent","quoteList","mdEdit","jsx","Spin","jsxs","Flex","FileIcon","request","useState","useEffect","Drawer","RenderMarkdown","Empty","isExternal","useRef","Popover","Tag","MarkdownEditor","Button","PlayCircleOutlined","CopyOutlined","Fragment","Collapse","CaretRightOutlined","notify","getToken","TOKEN_KEY","proxy","shouldRender","deepMerge","getCurrentUser","OK","loadingMessage","nsConversations","nsBody","nsBodyWidth","nsBubbleList","nsAgentHeader","nsChatTitle","nsChatHeaderPopover","chatWelcomeWrap","chatWelcome","chatWelcomePrompts","senderListTitle","senderList","senderListItem","senderListFooter","nsChatUserName","nsSenderReferenceHeaderTitle","nsSenderReferenceHeaderContent","useSnapshot","InfiniteScroll","RedoOutlined","Conversations","DeleteOutlined","RenderWrapper","Avatar","Space","PlusOutlined","CommentOutlined","CloseOutlined","Bubble","Attachments","useMemo","Typography","classNames","CloseCircleOutlined","isBoolean","UserAvatar","OpenAIOutlined","Welcome","Prompts","LikeOutlined","DislikeOutlined","forwardRef","useRefState","useDebounce","isNumber","isObject","isNullOrUnDef","useImperativeHandle","CloudUploadOutlined","useSyncInput","Badge","PaperClipOutlined","Sender","Suggestion","ChatSender_default","EnterOutlined","List","nsPreviewHeader","nsPreviewHeaderTitle","XProvider","Splitter","downloadFile","FilePreview"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BO,SAAS,SAAA,CACd,QACA,QAAA,EAGG;AACH,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,MAAW,CAAC,SAAA,EAAW,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3D,IAAA,MAAM,GAAA,GAAM,SAAA;AACZ,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAK,OAAA,CAAsC,MAAM,CAAA;AAAA,IAC7D,WAAW,OAAO,OAAA,KAAY,QAAA,IAAY,MAAA,IAAU,WAAW,MAAA,EAAQ;AACrE,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,OAAkB,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,OAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,UAAA,CACd,SACA,QAAA,EAGK;AACL,EAAA,OAAO,OAAA,EAAS,IAAI,CAAC,MAAA,KAAW,UAAgB,MAAA,EAAQ,QAAQ,CAAC,CAAA,IAAK,EAAC;AACzE;AAGO,SAAS,kBAAA,CAAmB,KAAa,MAAA,EAA8B;AAC5E,EAAA,MAAM,QAAQ,IAAI,eAAA;AAAA,IAChB,MAAA,CAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,KAAK,GAAG,CAAA,KAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,GAAI,CAAC,CAAC,GAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAC,CAAE;AAAA,IACnI,QAAA,EAAS;AACX,EAAA,OAAO,KAAA,GAAQ,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,GAAI,GAAA,GAAM,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,GAAK,GAAA;AACpE;AAnEA,IAIa,MAMA,YAAA,EA2DA,SAAA;AArEb,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mBAAA,GAAA;AAIO,IAAM,IAAA,GAAO,CAAC,KAAA,KAAkB;AACrC,MAAAA,eAAA,CAAS,KAAK,CAAA,CAAE,IAAA,CAAK,MAAM;AACzB,QAAAC,YAAA,CAAQ,QAAQ,0BAAM,CAAA;AAAA,MACxB,CAAC,CAAA;AAAA,IACH,CAAA;AAEO,IAAM,YAAA,GAAe,CAAC,SAAA,KAA+B;AAC1D,MAAA,MAAM,MAAMC,sBAAA,EAAM;AAClB,MAAA,MAAM,MAAA,GAASA,uBAAM,SAAS,CAAA;AAE9B,MAAA,IAAI,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA,EAAG;AAC7B,QAAA,OAAO,cAAA;AAAA,MACT;AAEA,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AACzC,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,OAAO,uBAAA;AAAA,MACT,CAAA,MAAA,IAAW,aAAa,EAAA,EAAI;AAC1B,QAAA,OAAO,wBAAA;AAAA,MACT,CAAA,MAAA,IAAW,aAAa,GAAA,EAAK;AAC3B,QAAA,OAAO,0BAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,OAAO,cAAA;AAAA,MACT;AAAA,IACF,CAAA;AAyCO,IAAM,SAAA,GAAY,CAAC,IAAA,KAAgC;AACxD,MAAA,OAAO,IAAI,OAAA,CAAgB,CAAC,OAAA,EAAS,MAAA,KAAW;AAC9C,QAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,QAAA,MAAA,CAAO,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,MAAgB,CAAA;AACrD,QAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AACjB,QAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,MAC3B,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AC5EA,IAI+B,YAAA,EAA8B,YAAA;AAJ7D,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AAIO,IAAA,CAAM,EAAE,cAAA,EAAgB,YAAA,EAAc,cAAA,EAAgB,iBAAiBC,0BAAA,EAAmC;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACJjH,IAAAC,sBAAAA;AAAA,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gDAAA,GAAA;AAAA,IAAAA,sBAAAA,GAAA;AAAA,MAAC,OAAA,EAAAC,uBAAAA;AAAA,MAgBA,QAAA,EAAAC,wBAAAA;AAAA,MAOA,QAAA,EAAAC,wBAAAA;AAAA,MAKU,cAAA,EAAAC,8BAAAA;AAAA,MAIA,eAAA,EAAAC,+BAAAA;AAAA,MAIV,SAAA,EAAAC,yBAAAA;AAAA,MAWA,MAAA,EAAAC;AAAA,KAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/CD,IAAA,eAAA,GAAA,EAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAeO,eAAA;AAfP,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yCAAA,GAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAaA,IAAO,eAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,SAAA,CAAU,WAAA,CAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,UAAU,IAAA,CAAK,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,MAExF,CAAA;AACA,MAAA,uBACEC,eAACC,SAAAA,EAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAK,SAC5B,QAAA,kBAAAC,eAAAA,CAACC,WAAA,EAAK,QAAA,EAAQ,MAAC,GAAA,EAAK,CAAA,EAAG,OAAM,QAAA,EAAS,SAAA,EAAWX,sBAAAA,CAAO,OAAA,EAAS,OAAA,EAC/D,QAAA,EAAA;AAAA,wBAAAQ,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,wBACxBA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,IAAA,CAAK,OAAA,EACxC,QAAA,EAAA,IAAA,CAAK,OAAA,EACR;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/BA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAWO,gBAAA;AAXP,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0CAAA,GAAA;AAGA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAOA,IAAO,gBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,SAAA,CAAU,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,MAClC,CAAA;AACA,MAAA,uBACEA,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,MAAK,OAAA,EAC5B,QAAA,kBAAAC,gBAACC,SAAAA,EAAA,EAAK,KAAK,CAAA,EAAG,KAAA,EAAM,UAAS,SAAA,EAAWX,sBAAAA,CAAO,UAAU,OAAA,EACvD,QAAA,EAAA;AAAA,wBAAAQ,cAAAA,CAACI,eAAA,EAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,wBAC/BJ,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,IAAA,CAAK,QAAA,EACxC,QAAA,EAAA,IAAA,CAAK,QAAA,EACR;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AC1BA,IAgCa,QAAA;AAhCb,IAAA,SAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sBAAA,GAAA;AAgCO,IAAM,QAAA,GAAW,CAAC,SAAA,KAA2C;AAClE,MAAA,OAAOK,cAAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,SAAS,CAAA,CAAE,CAAA;AAAA,IAC3C,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AClCA,IAWO,iBAAA;AAXP,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sDAAA,GAAA;AAGA,IAAA,SAAA,EAAA;AAQA,IAAO,oBAAQ,CAAC,EAAE,OAAO,IAAA,EAAM,OAAA,EAAS,SAAQ,KAAa;AAC3D,MAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAAS,EAAE,CAAA;AACzC,MAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,MAAA,MAAM,aAAa,YAAY;AAC7B,QAAA,IAAI;AACF,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,OAAO,CAAA;AAClC,UAAA,UAAA,CAAW,GAAA,CAAI,MAAM,OAAO,CAAA;AAAA,QAC9B,CAAA,SAAE;AACA,UAAA,UAAA,CAAW,KAAK,CAAA;AAAA,QAClB;AAAA,MACF,CAAA;AACA,MAAAC,gBAAU,MAAM;AACd,QAAA,UAAA,EAAW;AAAA,MACb,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACZ,MAAA,uBACEP,cAAAA,CAACQ,WAAA,EAAA,EAAO,KAAA,EAAc,IAAA,EAAM,KAAA,EAAO,KAAA,EAAM,MAAA,EAAO,IAAA,EAAY,OAAA,EAC1D,QAAA,kBAAAR,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAU,QAAA,EAAA,OAAA,mBAAUD,cAAAA,CAACS,qBAAA,EAAA,EAAe,OAAA,EAAkB,CAAA,mBAAKT,cAAAA,CAACU,UAAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,GAAG,CAAA,EAC1G,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/BA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAcO,kBAAA;AAdP,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4CAAA,GAAA;AAIA,IAAA,cAAA,EAAA;AAUA,IAAO,kBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIJ,eAAS,KAAK,CAAA;AACtC,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,QAAA,IAAIK,iBAAA,CAAW,IAAA,CAAK,OAAO,CAAA,EAAG;AAC5B,UAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,QACpC,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd;AAAA,MACF,CAAA;AACA,MAAA,MAAM,0BACJX,cAAAA,CAAC,SACC,QAAA,kBAAAA,cAAAA,CAACG,WAAA,EAAK,KAAA,EAAM,UAAS,GAAA,EAAK,CAAA,EAExB,0BAAAH,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAmB,QAAA,EAAA,IAAA,CAAK,QAAA,EAAS,GACtC,CAAA,EACF,CAAA;AAEF,MAAA,MAAM,OAAA,GAAUY,aAAuB,IAAI,CAAA;AAE3C,MAAAL,gBAAU,MAAM;AACd,QAAA,MAAM,KAAK,OAAA,CAAQ,OAAA;AACnB,QAAA,IAAI,CAAC,EAAA,EAAI;AAET,QAAA,MAAM,WAAW,EAAA,CAAG,sBAAA;AACpB,QAAA,IAAI,CAAC,QAAA,EAAU;AAGf,QAAA,QAAA,CAAS,YAAY,EAAE,CAAA;AAAA,MACzB,CAAA,EAAG,EAAE,CAAA;AACL,MAAA,uBACEL,eAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,WAAU,oBAAA,EAC3B,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,MAAK,OAAA,EAC5B,QAAA,kBAAAD,cAAAA,CAACa,YAAAA,EAAA,EAAQ,OAAA,EAAS,SAChB,QAAA,kBAAAb,cAAAA,CAACc,QAAA,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,KAAA,EAAM,YAAA,EAAa,SAAA,EAAU,gBAAA,EAChD,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA,EACF,CAAA,EACF,CAAA;AAAA,QACC,IAAA,oBAAQd,cAAAA,CAAC,iBAAA,EAAA,EAAU,SAAS,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,UAAU,IAAA,EAAY,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAAA,OAAA,EAC9G,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACxDA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAcO,cAAA;AAdP,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wCAAA,GAAA;AAGA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAUA,IAAO,cAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,MAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIM,eAAS,EAAE,CAAA;AACrC,MAAA,MAAM,OAAO,MAAM;AACjB,QAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,KAAK,CAAA;AAC1B,QAAA,SAAA,CAAU,YAAY,0BAAA,EAAQ,IAAI,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,MACtD,CAAA;AACA,MAAAC,gBAAU,MAAM;AACd,QAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,MACvB,CAAA,EAAG,CAAC,IAAA,CAAK,OAAO,CAAC,CAAA;AACjB,MAAA,uBACEP,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,IAAA,EAAK,OAAA,EAC5B,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWV,uBAAO,MAAA,EACrB,QAAA,EAAA;AAAA,wBAAAQ,cAAAA,CAACe,yBAAe,QAAA,EAAU,OAAA,EAAS,OAAc,QAAA,EAAU,QAAA,EAAU,aAAa,KAAA,EAAO,CAAA;AAAA,QACxF,CAAC,2BACAf,cAAAA,CAACG,WAAA,EAAK,OAAA,EAAQ,OAAM,SAAA,EAAU,QAAA,EAC5B,0BAAAH,cAAAA,CAACgB,WAAAA,EAAA,EAAO,KAAA,EAAM,SAAA,EAAU,SAAQ,UAAA,EAAW,OAAA,EAAS,IAAA,EAAM,QAAA,EAAA,oEAAA,EAE1D,CAAA,EACF;AAAA,OAAA,EAEJ,CAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtCA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAaO,gBAAA;AAbP,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0CAAA,GAAA;AAKA,IAAA,UAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAMA,IAAO,gBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,YAAY,YAAA,EAAa;AAE/B,MAAA,MAAM,YAAY,MAAM;AACtB,QAAA,SAAA,CAAU,UAAA,CAAW,MAAM,IAAI,CAAA;AAAA,MACjC,CAAA;AAWA,MAAA,uBACEd,gBAACC,SAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,SAAA,EAAWX,uBAAO,QAAA,EAC/B,QAAA,EAAA;AAAA,wBAAAU,eAAAA,CAACC,SAAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,eAAA,EAAgB,SAAA,EAAWX,sBAAAA,CAAO,cAAA,EACrE,QAAA,EAAA;AAAA,0BAAAU,eAAAA,CAACC,WAAA,EAAK,GAAA,EAAK,GAAG,KAAA,EAAM,QAAA,EAAS,WAAU,QAAA,EACrC,QAAA,EAAA;AAAA,4BAAAH,eAACI,eAAAA,EAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,UAAU,EAAA,EAAI,CAAA;AAAA,4BACtCJ,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,IAAA,CAAK,QAAA,EACxC,QAAA,EAAA,IAAA,CAAK,QAAA,EACR;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,IAAA,EAAK,OAAA,EAC5B,QAAA,kBAAAC,eAAAA,CAACC,SAAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAH,eAACgB,WAAAA,EAAA,EAAO,KAAA,EAAM,SAAA,EAAU,SAAQ,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,IAAA,kBAAMhB,cAAAA,CAACiB,wBAAA,EAAA,EAAmB,CAAA,EAAI,OAAA,EAAS,WAAW,QAAA,EAAA,0BAAA,EAEtG,CAAA;AAAA,4BACAjB,eAACgB,WAAAA,EAAA,EAAO,OAAM,SAAA,EAAU,OAAA,EAAQ,QAAO,IAAA,EAAK,OAAA,EAAQ,sBAAMhB,cAAAA,CAACkB,sBAAa,CAAA,EAAI,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,EAAG,QAAA,EAAA,cAAA,EAE/G;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAlB,cAAAA,CAACG,SAAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,OAAM,QAAA,EAAS,SAAA,EAAWX,sBAAAA,CAAO,eAAA,EAC7C,0BAAAQ,cAAAA,CAACS,qBAAAA,EAAA,EAAe,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA,EACzC;AAAA,OAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtDA,IAAA,iBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAiBO,iBAAA;AAjBP,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2CAAA,GAAA;AAKA,IAAA,cAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAWA,IAAO,iBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIH,eAAS,KAAK,CAAA;AACtC,MAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,cAAAA,CAAS,EAAe,CAAA;AAC5D,MAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAoB;AACnC,QAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,QAAA,IAAIK,iBAAAA,CAAW,IAAA,CAAK,OAAO,CAAA,EAAG;AAC5B,UAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,QACpC,CAAA,MAAO;AACL,UAAA,aAAA,CAAc,IAAI,CAAA;AAClB,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd;AAAA,MACF,CAAA;AACA,MAAA,uBACET,eAAAA,CAAAiB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAnB,eAACC,SAAAA,EAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAK,SAC5B,QAAA,kBAAAD,cAAAA;AAAA,UAACoB,aAAA;AAAA,UAAA;AAAA,YACC,WAAW5B,sBAAAA,CAAO,SAAA;AAAA,YAClB,QAAA,EAAU,KAAA;AAAA,YACV,KAAA,EAAK,IAAA;AAAA,YACL,UAAA,EAAY,CAAC,EAAE,QAAA,EAAS,qBAAMQ,cAAAA,CAACqB,wBAAA,EAAA,EAAmB,MAAA,EAAQ,QAAA,GAAW,EAAA,GAAK,CAAA,EAAG,CAAA;AAAA,YAC7E,KAAA,EAAO;AAAA,cACL;AAAA,gBACE,GAAA,EAAK,GAAA;AAAA,gBACL,KAAA,EAAO,0BAAA;AAAA,gBACP,QAAA,kBACErB,cAAAA,CAACG,SAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,GAAA,EAAK,CAAA,EACjB,QAAA,EAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,qBACdH,cAAAA,CAAC,GAAA,EAAA,EAAqB,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA,EAAG,SAAA,EAAU,gBAAA,EAC3D,QAAA,EAAA,IAAA,CAAK,KAAA,EAAA,EADA,IAAA,CAAK,OAEb,CACD,CAAA,EACH;AAAA;AAEJ;AACF;AAAA,SACF,EACF,CAAA;AAAA,QACC,IAAA,oBAAQA,cAAAA,CAAC,iBAAA,EAAA,EAAU,SAAS,UAAA,CAAW,OAAA,EAAS,KAAA,EAAO,UAAA,CAAW,OAAO,IAAA,EAAY,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAAA,OAAA,EACvH,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACzDO,IAAM,mBAAA,GAAsB,WAAA;AAE5B,IAAM,WAAA,GAAkC;AAAA,EAC7C,CAAA,EAAG,MAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;;;ACEA,UAAA,EAAA;;;ACLA,UAAA,EAAA;AAYA,SAAS,YAAA,CAAa,OAAwB,OAAA,EAAkC;AAC9E,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,CAAQ,OAAO,KAAA,KAAU,QAAA,GAAW,QAAQ,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACnE;AACF;AAEA,SAAS,WAAA,CAAY,QAAgB,OAAA,EAA0C;AAC7E,EAAA,IAAI,OAAA,GAAU,MAAA;AACd,EAAA,IAAI,cAAA,GAAiB,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACxC,EAAA,IAAI,YAAA,GAAe,EAAA;AAEnB,EAAA,OAAO,mBAAmB,EAAA,EAAI;AAC5B,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,QAAA,GAAW,KAAA;AAEf,IAAA,KAAA,IAAS,CAAA,GAAI,cAAA,EAAgB,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACpD,MAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,MAAA,IAAI,SAAS,GAAA,IAAO,OAAA,CAAQ,CAAA,GAAI,CAAC,MAAM,IAAA,EAAM;AAC3C,QAAA,QAAA,GAAW,CAAC,QAAA;AAAA,MACd;AACA,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,IAAI,SAAS,GAAA,EAAK,UAAA,EAAA;AAClB,QAAA,IAAI,SAAS,GAAA,EAAK,UAAA,EAAA;AAAA,MACpB;AACA,MAAA,IAAI,eAAe,CAAA,EAAG;AACpB,QAAA,YAAA,GAAe,CAAA;AACf,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,cAAA,EAAgB,eAAe,CAAC,CAAA;AACjE,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACpC,QAAA,YAAA,CAAa,QAAQ,OAAO,CAAA;AAAA,MAC9B,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,IAAA,CAAK,+BAA+B,UAAU,CAAA;AAAA,MACxD;AACA,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,YAAA,GAAe,CAAC,EAAE,IAAA,EAAK;AAC/C,MAAA,cAAA,GAAiB,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACpC,MAAA,YAAA,GAAe,EAAA;AAAA,IACjB,CAAA,MAAO;AACL,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAGA,eAAe,eAAA,CAAgB,QAAgBX,QAAAA,EAAkB;AAC/D,EAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,GAAG,MAAM,CAAA,EAAA,EAAKA,QAAO,CAAA,CAAE,CAAA;AAC/C,EAAA,OAAA,CAAQ,KAAA,CAAM,kBAAkB,KAAK,CAAA;AACrC,EAAA,MAAMiC,YAAA,CAAO,MAAM,sDAAY,CAAA;AACjC;AAGA,eAAe,oBAAA,CAAqB,UAAoB,OAAA,EAAqC;AAC3F,EAAA,MAAM,EAAE,SAAQ,GAAI,OAAA;AACpB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAM,SAAA,EAAU;AACxC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAA,GAAS,WAAA,CAAY,QAAQ,OAAO,CAAA;AACpC,MAAA;AAAA,IACF;AACA,IAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,IAAA,MAAA,GAAS,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,EACtC;AACF;AAGA,eAAsB,QAAQ,GAAA,EAAa,IAAA,GAAY,EAAC,EAAG,OAAA,GAAuB,EAAC,EAAG;AACpF,EAAA,MAAM,EAAE,SAAS,KAAA,EAAO,MAAA,GAAS,QAAQ,OAAA,GAAU,EAAC,EAAG,MAAA,EAAO,GAAI,OAAA;AAElE,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAA,EAAQ,gBAAA,CAAiB,OAAA,EAAS,MAAM,UAAA,CAAW,OAAO,CAAA;AAE1D,EAAA,IAAI,YAAY,MAAA,GAAS,GAAA;AACzB,EAAA,IAAI,IAAA,GAAY,IAAA;AAEhB,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,SAAA,GAAY,kBAAA,CAAmB,WAAW,IAAI,CAAA;AAC9C,IAAA,IAAA,GAAO,MAAA;AAAA,EACT,CAAA,MAAO;AACL,IAAA,IAAI,EAAE,gBAAgB,QAAA,CAAA,EAAW;AAC/B,MAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAC1B,MAAA,IAAA,GAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,SAAA,EAAW;AAAA,IACtC,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,GAAIC,iBAAS,IAAK,EAAE,CAACC,gBAAS,GAAGD,iBAAS,EAAE;AAAA,MAC5C,GAAG;AAAA,KACL;AAAA,IACA,IAAA;AAAA,IACA,QAAQ,UAAA,CAAW;AAAA,GACpB,CAAA;AAED,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAMlC,QAAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,OAAO,MAAM,eAAA,CAAgB,QAAA,CAAS,MAAA,EAAQA,QAAO,CAAA;AAAA,EACvD;AAEA,EAAA,IAAI,MAAA,IAAU,SAAS,IAAA,EAAM;AAE3B,IAAA,OAAO,oBAAA,CAAqB,UAAU,OAAO,CAAA;AAAA,EAC/C;AAGA,EAAA,MAAM,CAAA,GAAK,MAAM,QAAA,CAAS,IAAA,EAAK;AAC/B,EAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAK;AAClB,IAAA,OAAO,MAAM,eAAA,CAAgB,CAAA,CAAE,IAAA,EAAM,EAAE,OAAO,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,CAAA;AACT;AAGA,IAAM,MAAM,CAAC,GAAA,EAAa,MAAA,GAA8B,IAAI,OAAA,GAAuC,EAAC,KAClG,OAAA,CAAQ,KAAK,MAAA,EAAQ,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAEpD,IAAM,OAAO,CAAC,GAAA,EAAa,IAAA,GAAY,IAAI,OAAA,GAAuC,EAAC,KAAM,OAAA,CAAQ,KAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA;AAE1I,IAAM,MAAM,CAAC,GAAA,EAAa,IAAA,GAAY,IAAI,OAAA,GAAuC,EAAC,KAAM,OAAA,CAAQ,KAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAExI,IAAM,MAAM,CAAC,GAAA,EAAa,IAAA,GAAY,IAAI,OAAA,GAAuC,EAAC,KAAM,OAAA,CAAQ,KAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA;AAE3I,IAAO,uBAAQ,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,MAAM,GAAA,EAAI;;;ACnGtC,IAAM,cAAA,GAAiB,CAAC,OAAA,KAAoD;AACjF,EAAA,OAAOgB,cAAAA,CAAQ,GAAA,CAAI,eAAA,EAAiB,EAAE,SAAS,CAAA;AACjD,CAAA;AASO,IAAM,cAAc,MAA+B;AACxD,EAAA,OAAOA,cAAAA,CAAQ,IAAI,QAAQ,CAAA;AAC7B,CAAA;AAUO,IAAM,kBAAA,GAAqB,CAAC,MAAA,KAA6E;AAC9G,EAAA,OAAOA,cAAAA,CAAQ,GAAA,CAAI,qBAAA,EAAuB,MAAM,CAAA;AAClD,CAAA;AAMO,IAAM,kBAAA,GAAqB,CAAC,MAAA,KAAiD;AAClF,EAAA,OAAOA,cAAAA,CAAQ,MAAA,CAAO,qBAAA,EAAuB,MAAM,CAAA;AACrD,CAAA;AA0BO,IAAM,iBAAA,GAAoB,CAAC,MAAA,KAAiE;AACjG,EAAA,OAAOA,cAAAA,CAAQ,GAAA,CAAI,gBAAA,EAAkB,MAAM,CAAA;AAC7C,CAAA;AAEO,IAAM,yBAAA,GAA4B,CAAC,OAAA,EAA0B,SAAA,KAA6E;AAC/I,EAAA,OAAOA,eAAQ,GAAA,CAAI,0BAAA,EAA4B,EAAE,OAAA,EAAS,WAAW,CAAA;AACvE,CAAA;AAQO,IAAM,cAAA,GAAiB,CAAC,MAAA,KAA6C;AAC1E,EAAA,OAAOA,cAAAA,CAAQ,GAAA,CAAI,yBAAA,EAA2B,MAAM,CAAA;AACtD,CAAA;AAEO,IAAM,UAAA,GAAa,CAAC,QAAA,KAA8C;AACvE,EAAA,OAAOA,cAAAA,CAAQ,IAAA,CAAK,aAAA,EAAe,QAAQ,CAAA;AAC7C,CAAA;AAkDO,IAAM,eAAA,GAAkB,CAAC,MAAA,KAA4B;AAC1D,EAAA,OAAO,oBAAA,CAAa,IAAA;AAAA,IAClB,aAAA;AAAA,IACA,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAK;AAAA,IAC1B;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS,CAAC,KAAA,KAAkB;AAC1B,QAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC9B,UAAA,MAAA,CAAO,eAAe,KAAK,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA;AACF,GACF;AACF,CAAA;;;AF7DA,IAAM,aAAA,GAAgB;AAAA,EACpB,gBAAA,EAAkB,IAAA;AAAA,EAClB,sBAAA,EAAwB,IAAA;AAAA,EACxB,OAAA,EAAS,IAAA;AAAA,EACT,WAAA,EAAa,IAAA;AAAA,EACb,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,IAAA;AAAA,EACR,aAAA,EAAe,IAAA;AAAA,EACf,YAAA,EAAc,KAAA;AAAA,EACd,cAAA,EAAgB,KAAA;AAAA,EAChB,aAAA,EAAe,KAAA;AAAA,EACf,MAAA,EAAQ,IAAA;AAAA,EACR,WAAA,EAAa,IAAA;AAAA,EACb,yBAAA,EAA2B,IAAA;AAAA,EAC3B,wBAAA,EAA0B,IAAA;AAAA,EAC1B,cAAA,EAAgB;AAClB,CAAA;AACO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,SAASoB,YAAA,CAAM;AAAA,IACnB,OAAO,EAAC;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,OAAA,EAAS;AAAA,MACP,MAAM,EAAC;AAAA,MACP,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA,KAGV;AAAA,IACA,UAAU,EAAC;AAAA,IACX,QAAQ;AAAC,GACV,CAAA;AAED,EAAA,MAAM,aAAa,CAAC,IAAA,GAAO,EAAC,EAAiC,SAAS,KAAA,KAAU;AAC9E,IAAA,IAAIC,mBAAA,CAAa,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,EAAG;AACvC,MAAA,MAAA,CAAO,OAAA,GAAU;AAAA,QACf,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAK,MAAsB,OAAA,EAAS;AAClC,QAAA,MAAA,CAAO,IAAA,CAAM,IAAA,CAAqB,OAAA,EAAS,QAAQ,CAAA;AAAA,MACrD,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAI,wDAAW,CAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,KAAuB;AACxC,IAAA,MAAA,CAAO,MAAA,GAASC,gBAAA,CAAU,aAAA,EAAe,MAAM,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,CAAC,MAAA,GAAS,EAAC,KAAoB;AACrD,IAAA,MAAA,CAAO,MAAA,GAAS,EAAE,KAAA,EAAO,EAAA,EAAI,GAAG,MAAA,EAAO;AAAA,EACzC,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,GAAQ,EAAC,KAAmB;AAC5C,IAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AAAA,EACjB,CAAA;AACA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,MAAA,CAAO,QAAA,GAAW,SAAA,CAAUC,qBAAA,EAAe,EAAG;AAAA,MAC5C,EAAA,EAAI,IAAA;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,QAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,SAASH,YAAA,CAAM;AAAA;AAAA,IAEnB,MAAM,EAAC;AAAA,IACP,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AAAA,IAChB,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,OAAA,GAAU,KAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,eAAeA,YAAA,CAAM;AAAA;AAAA,IAEzB,QAAQ,EAAC;AAAA,IACT,UAAU;AAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAOZ,CAAA;AACD,EAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,KAAgC;AACrD,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,UAAA,GAAa,UAAA;AAAA,EAC9D,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,OAAA,KAAyC;AAC3D,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,OAAA,GAAU,OAAA;AAAA,EAC3D,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,GAAQ,EAAC,KAAkC;AAC9D,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,KAAA,GAAQ,KAAA;AAAA,EACzD,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,KAAsD;AAC3E,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,UAAA,GAAa,UAAA;AAAA,EAC9D,CAAA;AACA,EAAA,MAAM,kBAAA,GAAqB,CAAC,GAAA,KAA6B;AACvD,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,CAAE,cAAc,MAAA,EAAQ;AACnD,MAAA,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,CAAE,YAAA,GAAe,EAAC;AAAA,IAC7C;AAAA,EACF,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAO,cAAA,EAAqCpC,QAAAA,KAAkC;AACpG,IAAA,IAAI,CAACA,QAAAA,CAAQ,EAAA,IAAM,CAACA,SAAQ,OAAA,EAAS;AACrC,IAAA,MAAM,EAAE,MAAK,GAAI,MAAM,0BAA0B,KAAA,CAAM,MAAA,CAAO,EAAA,EAAIA,QAAAA,CAAQ,EAAE,CAAA;AAC5E,IAAA,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,YAAA,GAAe,IAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,cAAA,EAAqC,SAAA,EAAmB,QAAgB,KAAA,KAAkB;AAChH,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,CAAe,EAAE,OAAA,EAAS,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAChG,MAAA,YAAA,CAAa,SAAS,cAAc,CAAA,CAAE,QAAQ,KAAA,CAAM,KAAK,EAAE,QAAA,GAAW,MAAA;AAAA,IACxE,CAAA,SAAE;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgBoC,YAAA,CAAM;AAAA,IAC1B,IAAA,EAAM;AAAA,MACJ,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ,EAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,IACA,OAAA,EAAS,KAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,cAAA,GAAiB,OAAO,GAAA,KAA6B;AACzD,IAAA,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,GAAI;AAAA,MAC3B,OAAA,EAAS,EAAA;AAAA,MACT,OAAO,EAAC;AAAA;AAAA,MACR,UAAA,EAAY,KAAA;AAAA,MACZ,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,EAAA;AAAA,QACR,OAAA,EAAS,KAAA;AAAA,QACT,OAAO;AAAC,OACV;AAAA,MACA,cAAc;AAAC;AAAA,KACjB;AAAA,EACF,CAAA;AACA,EAAA,MAAM,QAAQA,YAAA,CAAM;AAAA,IAClB,QAAQ,EAAC;AAAA,IACT,OAAA,EAAS,KAAA;AAAA,IACT,QAAQ;AAAC,GACV,CAAA;AAED,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,GAAS,EAAC,KAAyB;AACzD,IAAA,KAAA,CAAM,MAAA,GAAS;AAAA,MACb,SAAA,EAAW,CAAA;AAAA,MACX,GAAG;AAAA,KACL;AAAA,EACF,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,OAClB,EAAE,MAAA,EAAQ,UAAU,QAAA,GAAW,KAAA,IAC/B,cAAA,KACG;AACH,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAarC,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,EAAA,KAAO,OAAA,EAAS;AAEjC,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,KAAA,EAAO,sBAAsB,OAAO,CAAA;AACpE,IAAA,IAAI,eAAe,KAAA,EAAO;AAE1B,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,MAAA,IAAI,QAAA,EAAU;AAAA,MAEd;AACA,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,eAAe,OAAO,CAAA;AAC7C,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,cAAA,EAAe;AACf,MAAA,MAAA,CAAO,KAAA,EAAO,qBAAqB,OAAO,CAAA;AAC1C,MAAA,kBAAA,CAAmB,EAAE,GAAA,EAAK,cAAA,EAAgB,CAAA;AAAA,IAC5C,CAAA,SAAE;AACA,MAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,KAAwB;AACxD,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,IAAO,CAAA,EAAG,MAAM,MAAA,CAAO,EAAE,IAAI,mBAAmB,CAAA,CAAA;AACtE,IAAA,IAAI,YAAA,CAAa,MAAA,CAAO,GAAA,KAAQ,OAAA,EAAS;AAEzC,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,KAAA,EAAO,6BAA6B,OAAO,CAAA;AAC3E,IAAA,IAAI,eAAe,KAAA,EAAO;AAE1B,IAAA,YAAA,CAAa,SAAS,IAAA,EAAM,GAAA,GAAM,IAAA,GAAQ,EAAE,KAAK,OAAA,EAAQ;AAEzD,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,EAAG;AACnC,MAAA,cAAA,CAAe,OAAO,CAAA;AAAA,IACxB;AACA,IAAA,MAAA,CAAO,KAAA,EAAO,4BAA4B,OAAO,CAAA;AACjD,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA,IAAK,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAEvG,MAAA,WAAA,CAAY,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,IACtC;AAAA,EACF,CAAA;AACA,EAAA,MAAM,gBAAA,GAAmB,OAAO,OAAA,EAA0B,MAAA,EAAiB,QAAQ,EAAA,KAAO;AACxF,IAAA,IAAI;AACF,MAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AACxB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,kBAAA,CAAmB,EAAE,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAChG,MAAA,IAAI,KAAA,CAAM,MAAA,CAAO,EAAA,KAAO,OAAA,EAAS;AACjC,MAAA,MAAM,KAAA,GAAQ,UAAA,CAA4C,IAAA,EAAM,KAAA,IAAS,EAAC,EAAG;AAAA,QAC3E,GAAA,EAAK,IAAA;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,CAAC,CAAA,KAAc;AACpB,UAAA,OAAO,YAAA,CAAa,EAAE,UAAU,CAAA;AAAA,QAClC,CAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,aAAA,CAAc,IAAA,GAAO;AAAA,QACnB,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,SAAS,CAAC,GAAG,cAAc,IAAA,CAAK,KAAA,EAAO,GAAG,KAAK,CAAA,GAAI;AAAA,OAC5D;AAAA,IAIF,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,OAAA,GAAU,KAAA;AAAA,IAC1B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,OAAA,EAA0B,cAAA,EAAqC,MAAA,KAAoB;AAE5G,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,IAAI,CAAC,cAAA,CAAe,QAAA,CAAS,mBAAmB,CAAA,EAAG;AACjD,QAAA,IAAI;AAEF,UAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,iBAAA,CAAkB;AAAA,YACvC,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAAA,YACrB,OAAA;AAAA,YACA,cAAA;AAAA,YACA;AAAA;AAAA,WAED,CAAA;AAED,UAAA,MAAM,WAAA,GAAc,UAAA,CAAkD,IAAA,EAAM,KAAA,IAAS,EAAC,EAAG;AAAA,YACvF,EAAA,EAAI,WAAA;AAAA,YACJ,IAAA,EAAM,CAAC,GAAA,KAAQ,WAAA,CAAY,IAAI,IAAI,CAAA;AAAA,YACnC,OAAA,EAAS,SAAA;AAAA,YACT,KAAA,EAAO,OAAA;AAAA,YACP,QAAA,EAAU,UAAA;AAAA,YACV,MAAA,EAAQ;AAAA,WACT,CAAA;AACD,UAAA,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,GAAU;AAAA,YAC9C,GAAG,IAAA;AAAA,YACH,KAAA,EAAO,MAAA,GAAS,CAAC,GAAG,WAAA,EAAa,GAAG,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,GAAI;AAAA,WAC7F;AAAA,QACF,CAAA,SAAE;AAAA,QAEF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAO,IAAA,KAAuB;AACpD,IAAA,IAAI;AACF,MAAA,aAAA,CAAc,UAAA,GAAa,IAAA;AAC3B,MAAA,MAAM,kBAAA,CAAmB,EAAE,OAAA,EAAS,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,cAAA,EAAgB,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AAC3G,MAAApC,YAAAA,CAAQ,QAAQ,0BAAM,CAAA;AACtB,MAAA,aAAA,CAAc,IAAA,CAAK,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,KAAQ,IAAA,CAAK,GAAG,CAAA;AAC1F,MAAA,IAAI,YAAA,CAAa,MAAA,CAAO,GAAA,KAAQ,IAAA,CAAK,GAAA,EAAK;AACxC,QAAA,YAAA,CAAa,MAAA,GAAS;AAAA,UACpB,KAAK,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,EAAE,IAAI,mBAAmB,CAAA;AAAA,SAChD;AAAA,MACF;AACA,MAAA,OAAO,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAAA,IACvC,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,UAAA,GAAa,KAAA;AAAA,IAC7B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,GAAA,EAA0B,KAAA,KAAkB;AACrE,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9B,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,aAAA,CAAc,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,CAAA;AAC1F,MAAA,IAAI,UAAU,EAAA,EAAI;AAChB,QAAA,YAAA,CAAa,SAAS,GAAG,CAAA,CAAE,QAAQ,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MAC1D;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,wBAAA,GAA2B,CAAC,GAAA,EAA0B,KAAA,EAAe,KAAA,KAAiC;AAE1G,IAAA,IAAI,KAAA,CAAM,cAAA,IAAkB,KAAA,CAAM,cAAA,KAAmB,GAAA,IAAO,CAAC,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,EAAG;AACxG,MAAA,YAAA,CAAa,SAAS,KAAA,CAAM,cAAc,CAAA,GAAI,YAAA,CAAa,SAAS,GAAG,CAAA;AACvE,MAAA,OAAO,YAAA,CAAa,SAAS,GAAG,CAAA;AAEhC,MAAA,IAAI,GAAA,KAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK;AACnC,QAAA,YAAA,CAAa,MAAA,GAAS;AAAA,UACpB,KAAK,KAAA,CAAM;AAAA,SACb;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA,EAAG;AACnC,QAAA,gBAAA,CAAiB,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,MAClC;AAAA,IACF;AACA,IAAA,IAAI,cAAc,EAAC;AACnB,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,EAAG;AAC/C,MAAA,WAAA,GAAc,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,CAAA;AAAA,IACxG,CAAA,MAAA,IAAW,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,EAAG;AACrC,MAAA,WAAA,GAAc,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,CAAA;AAAA,IACvF;AAEA,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,IAAI,KAAA,CAAM,SAAS,sBAAA,EAAwB;AACzC,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,WAAA,CAAY,WAAW,SAAA,CAAU,OAAA;AACjC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,KAAA,CAAM,SAAS,kBAAA,EAAoB;AACrC,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,WAAA,CAAY,KAAK,SAAA,CAAU,SAAA;AAC3B,MAAA,WAAA,CAAY,MAAA,GAAS,SAAA;AAAA,IACvB;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC9B,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,WAAA,CAAY,MAAA,GAAS,OAAA;AACrB,MAAA,WAAA,CAAY,UAAU,SAAA,CAAU,OAAA;AAAA,IAClC,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,SAASwC,SAAA,EAAI;AAC1C,MAAA,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAAA,IAC9B;AAEA,IAAA,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,CAAE,OAAA,GAAU,KAAA;AAAA,EACxD,CAAA;AAEA,EAAA,MAAM,cAAc,OAAOxC,QAAAA,EAAsC,KAAA,GAAQ,IAAmB,MAAA,KAAuC;AACjI,IAAA,MAAM,cAAA,GAAiB,aAAa,MAAA,CAAO,GAAA;AAC3C,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,EAAS;AACnD,IAAA,IAAI,gBAA4C,EAAA,EAC9C,UAAA;AACF,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,UAAA;AACzD,IAAA,IAAIA,QAAAA,EAAS;AACX,MAAA,aAAA,GAAgBA,QAAAA;AAChB,MAAA,UAAA,GAAa,KAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,IAAI,UAAA,EAAY,IAAA,KAAS,CAAA,IAAK,UAAA,EAAY,SAAS,QAAA,EAAU;AAC3D,QAAA,aAAA,GAAgB,UAAA,CAAW,QAAQ,QAAA,GAAW,IAAA;AAAA,MAChD;AACA,MAAA,aAAA,GAAgB,aAAA,GAAgB,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA;AACtE,MAAA,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,KAAA;AAAA,IACrD;AACA,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,MAAM,aAAa,MAAM,MAAA,CAAO,KAAA,EAAO,YAAA,GAAe,eAAe,UAAU,CAAA;AAC/E,IAAA,IAAI,eAAe,KAAA,EAAO;AAE1B,IAAA,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,GAAU,IAAA;AAEhD,IAAA,MAAM,OAAA,GAAgC;AAAA,MACpC,EAAA,EAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,MACtB,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,aAAA;AAAA,MACT,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAGA,IAAA,MAAM,aAAA,GAAgB,CAAA,YAAA,EAAe,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAoC;AAAA,MACxC,EAAA,EAAI,aAAA;AAAA,MACJ,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,EAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,YAAA,CAAa,SAAS,cAAc,CAAA,CAAE,QAAQ,KAAA,CAAM,IAAA,CAAK,SAAS,WAAW,CAAA;AAE7E,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,MAAA,WAAA,CAAY,SAAS,EAAC;AAAA,IACxB;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQA,WAAU,EAAC,GAAI,UAAA,EAAY,MAAA,EAAQ,MAAM,CAAA;AAEzF,IAAA,IAAI,CAACA,QAAAA,EAAS;AACZ,MAAA,UAAA,CAAW,EAAE,CAAA;AACb,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA,aAAA,EAAc;AACd,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AACA,IAAA,kBAAA,CAAmB,cAAc,CAAA;AACjC,IAAA,IAAI;AACF,MAAA,eAAA,CAAgB;AAAA,QACd,OAAA,EAAS,MAAM,MAAA,CAAO,EAAA;AAAA,QACtB,cAAA,EAAgB,cAAA,CAAe,QAAA,CAAS,mBAAmB,IAAI,KAAA,CAAA,GAAY,cAAA;AAAA,QAC3E,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,GAAG,WAAA;AAAA,QACH,cAAA,EAAgB,CAAC,KAAA,KAAU;AAEzB,UAAA,wBAAA,CAAyB,cAAA,EAAgB,eAAe,KAAK,CAAA;AAAA,QAC/D;AAAA,OACD,CAAA;AAED,MAAA,MAAA,CAAO,OAAO,WAAA,IAAc;AAAA,IAC9B,SAAS,KAAA,EAAO;AAEd,MAAA,iBAAA,CAAkB,gBAAgB,aAAa,CAAA;AAC/C,MAAA,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,GAAU,KAAA;AAAA,IAClD;AAAA,EACF,CAAA;AACA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,OAAA,GAAU,KAAA;AAAA,EAC3D,CAAA;AACA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;AG1jBA,YAAA,EAAA;;;ACNA,YAAA,EAAA;;;ACEA,YAAA,EAAA;;;ACPA,IAAA,qBAAA,GAAA;AAAA,EAAC,cAAA,EAAAyC,8BAAAA;AAAA,EAOA,eAAA,EAAAC,+BAAAA;AAAA,EAkBA,MAAA,EAAAC,sBAAAA;AAAA,EAGQ,WAAA,EAAAC,2BAAAA;AAAA,EAOR,YAAA,EAAAC,4BAAAA;AAAA,EA2BA,aAAA,EAAAC,6BAAAA;AAAA,EAIe,WAAA,EAAAC,2BAAAA;AAAA,EAIA,mBAAA,EAAAC,mCAAAA;AAAA,EAWf,eAAA,EAAAC,+BAAAA;AAAA,EAGiB,WAAA,EAAAC,2BAAAA;AAAA,EAIA,kBAAA,EAAAC,kCAAAA;AAAA,EAGjB,eAAA,EAAAC,+BAAAA;AAAA,EAGA,UAAA,EAAAC,0BAAAA;AAAA,EASY,cAAA,EAAAC,8BAAAA;AAAA,EAUA,gBAAA,EAAAC,gCAAAA;AAAA,EAGZ,cAAA,EAAAC,8BAAAA;AAAA,EAIA,4BAAA,EAAAC,4CAAAA;AAAA,EAGA,8BAAA,EAAAC;AAAA,CAAA;ADjHD,IAAO,2BAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAaC,kBAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,kBAAA,GAAqBA,kBAAA,CAAY,SAAA,CAAU,aAAa,CAAA;AAC9D,EAAA,MAAM,iBAAA,GAAoBA,kBAAA,CAAY,SAAA,CAAU,YAAY,CAAA;AAE5D,EAAAzC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA,CAAW,OAAO,EAAA,EAAI;AACxB,MAAA,SAAA,CAAU,gBAAA,CAAiB,UAAA,CAAW,MAAA,CAAO,EAAE,CAAA;AAAA,IACjD;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,CAAW,MAAA,CAAO,EAAE,CAAC,CAAA;AACzB,EAAA,uBACEP,cAAA,CAAAmB,mBAAA,EAAA,EACE,QAAA,kBAAAnB,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAA6B,IAAG,eAAA,EAC5C,QAAA,EAAA,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,MAAA,mBAC7BA,cAAA;AAAA,IAACiD,+BAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,MAC1C,MAAM,MAAM;AACV,QAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,QAAA,SAAA,CAAU,iBAAiB,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,kBAAA,CAAmB,KAAK,MAAM,CAAA;AAAA,MACjF,CAAA;AAAA,MACA,OAAA,EAAS,mBAAmB,IAAA,CAAK,OAAA;AAAA,MACjC,MAAA,kBACEjD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eACb,QAAA,kBAAAA,cAAA,CAACC,SAAA,EAAA,EAAK,SAAA,kBAAWD,cAAA,CAACkD,sBAAa,IAAA,EAAI,IAAA,EAAC,CAAA,EAAI,IAAA,EAAK,SAAQ,CAAA,EACvD,CAAA;AAAA,MAEF,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAS;AAAA,MAC5B,gBAAA,EAAiB,eAAA;AAAA,MAEjB,QAAA,kBAAAlD,cAAA;AAAA,QAACmD,eAAA;AAAA,QAAA;AAAA,UACC,WAAW,qBAAA,CAAO,eAAA;AAAA,UAClB,KAAA,EAAO,mBAAmB,IAAA,CAAK,KAAA;AAAA,UAC/B,SAAA,EAAW,kBAAkB,MAAA,CAAO,GAAA;AAAA,UACpC,gBAAgB,OAAO,GAAA,KAAQ,UAAU,kBAAA,CAAmB,EAAE,KAAK,CAAA;AAAA,UACnE,SAAA,EAAS,IAAA;AAAA,UACT,IAAA,EAAM,CAAC,YAAA,MAAkB;AAAA,YACvB,KAAA,EAAO;AAAA,cACL;AAAA,gBACE,KAAA,EAAO,0BAAA;AAAA,gBACP,GAAA,EAAK,QAAA;AAAA,gBACL,IAAA,iCAAOC,oBAAA,EAAA,EAAe,CAAA;AAAA,gBACtB,MAAA,EAAQ,IAAA;AAAA,gBACR,OAAA,EAAS,CAAC,QAAA,KAAa;AACrB,kBAAA,QAAA,CAAS,SAAS,eAAA,EAAgB;AAClC,kBAAA,SAAA,CAAU,gBAAgB,YAAY,CAAA;AAAA,gBACxC;AAAA;AACF;AACF,WACF;AAAA;AAAA;AACF;AAAA,GACF,kCAEC1C,UAAA,EAAA,EAAM,WAAA,EAAY,wCAAS,KAAA,EAAOA,UAAA,CAAM,sBAAA,EAAwB,CAAA,EAErE,CAAA,EACF,CAAA;AAEJ,CAAA;AD3DA,IAAO,sBAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAasC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAcA,kBAAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAChD,EAA2BA,kBAAAA,CAAY,SAAA,CAAU,aAAa;AAC9D,EAAA,uBACEhD,cAAAA,CAAAmB,mBAAAA,EAAA,EACE,QAAA,kBAAAjB,eAAA,CAACC,SAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,SAAA,EAAW,qBAAA,CAAO,aAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAACC,SAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAM,QAAA,EAClB,QAAA,EAAA;AAAA,sBAAAH,cAAAA;AAAA,QAACqD,oBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,WAAA;AAAA,UAC5B,gBAAA,kBACEnD,eAAA,CAAAiB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAnB,cAAAA,CAACsD,WAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS,GAAA,EAAK,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,4BAC/EtD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,sBAAO,WAAA,EAAc,QAAA,EAAA,UAAA,CAAW,OAAO,IAAA,EAAK;AAAA,WAAA,EAC9D;AAAA;AAAA,OAEJ;AAAA,MAAG;AAAA,KAAA,EACL,CAAA;AAAA,oBACAE,eAAA,CAACqD,UAAA,EAAA,EAAM,IAAA,EAAM,CAAA,EACX,QAAA,EAAA;AAAA,sBAAAvD,cAAAA;AAAA,QAACqD,oBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,wBAAA;AAAA,UAC5B,kCAAkBrD,cAAAA,CAACgB,WAAA,EAAA,EAAO,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,IAAA,kBAAMhB,eAACwD,kBAAA,EAAA,EAAa,CAAA,EAAI,SAAS,MAAM,SAAA,CAAU,oBAAmB,EAAG;AAAA;AAAA,OAC5H;AAAA,sBAEAxD,cAAAA;AAAA,QAACqD,oBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,yBAAA;AAAA,UAC5B,kCACErD,cAAAA;AAAA,YAACa,YAAA;AAAA,YAAA;AAAA,cACC,iBAAA,EAAmB,CAAC,CAAA,KAAM,CAAA;AAAA,cAC1B,SAAA,EAAU,QAAA;AAAA,cACV,UAAA,EAAY,EAAE,IAAA,EAAM,qBAAA,CAAO,mBAAA,EAAoB;AAAA,cAC/C,OAAA,kBAASb,cAAAA,CAAC,wBAAA,EAAA,EAAiB,CAAA;AAAA,cAC3B,OAAA,EAAS,CAAC,OAAO,CAAA;AAAA,cAEjB,QAAA,kBAAAA,cAAAA,CAACgB,WAAA,EAAA,EAAO,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,IAAA,kBAAMhB,cAAAA,CAACyD,qBAAA,EAAA,EAAgB,CAAA,EAAI;AAAA;AAAA;AAC9D;AAAA,OAEJ;AAAA,sBAEAzD,cAAAA;AAAA,QAACqD,oBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,cAAA;AAAA,UAC5B,kCAAkBrD,cAAAA,CAACgB,WAAA,EAAA,EAAO,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,OAAO,aAAA,EAAe,IAAA,kBAAMhB,cAAAA,CAAC0D,uBAAc,CAAA,EAAI;AAAA;AAAA;AACzH,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ,CAAA;;;AGzDO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,SAAS,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,YAAA,EAAA,EAAA,eAAA,CAAA,CAAA;AAAA,EACf,UAAU,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,aAAA,EAAA,EAAA,gBAAA,CAAA,CAAA;AAAA,EAChB,YAAY,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,eAAA,EAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,EAClB,QAAQ,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,WAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AAAA,EACd,UAAU,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,aAAA,EAAA,EAAA,gBAAA,CAAA,CAAA;AAAA,EAChB,WAAW,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,cAAA,EAAA,EAAA,iBAAA,CAAA;AACnB,CAAA;ACIA,IAAO,wBAAQ,CAAC,EAAE,OAAA,EAAArE,QAAAA,EAAS,WAAU,KAAa;AAChD,EAAA,uBACEa,eAAAA,CAACC,SAAAA,EAAA,EAAK,UAAQ,IAAA,EACX,QAAA,EAAA;AAAA,IAAAd,QAAAA,CAAQ,OAAA,oBAAWW,cAAAA,CAAC2D,YAAO,SAAA,EAAsB,OAAA,kBAAS3D,cAAAA,CAACS,uBAAA,EAAe,OAAA,EAASpB,QAAAA,CAAQ,OAAA,EAAS,kBAAoC,CAAA,EAAI,CAAA;AAAA,IAC5IA,SAAQ,KAAA,EAAO,GAAA,CAAI,CAAC,IAAA,EAAM,0BACzBW,cAAAA;AAAA,MAAC2D,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,OAAA;AAAA,QAEV,OAAA,EAAQ,YAAA;AAAA,QACR,SAAA;AAAA,QACA,yBACE3D,cAAAA;AAAA,UAAC4D,aAAA,CAAY,QAAA;AAAA,UAAZ;AAAA,YAEC,IAAA,EAAM;AAAA,cACJ,KAAK,IAAA,CAAK,EAAA;AAAA,cACV,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,KAAK,IAAA,CAAK;AAAA;AACZ,WAAA;AAAA,UALK;AAAA;AAMP,OAAA;AAAA,MAXG;AAAA,KAcR;AAAA,GAAA,EAoCH,CAAA;AAEJ,CAAA;;;AC7DA,UAAA,EAAA;AAEA,YAAA,EAAA;ACIA,SAAS,oBAAoB,OAAA,EAI3B;AACA,EAAA,IAAI,IAAA,GAAO,OAAA;AACX,EAAA,MAAM,gBAA0B,EAAC;AACjC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,MAAM,KAAA,GAAQ,yBAAA;AACd,EAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3C,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAChC,IAAA,aAAA,CAAc,KAAK,SAAS,CAAA;AAC5B,IAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,WAAA,CAAY,SAAS,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,WAAA,CAAY,UAAU,CAAA;AAC9C,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,MAAA,GAAS,QAAQ,KAAA,CAAM,SAAS,CAAA,CAAE,OAAA,CAAQ,WAAW,EAAE,CAAA;AACvD,IAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,IAAA,EAAM,aAAA,EAAe,aAAa,MAAA,EAAO;AACjE;AAEA,SAAS,mBAAA,CAAoB,OAAA,EAAiB,KAAA,EAAe,GAAA,EAAa;AACxE,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,KAAA;AAAA,IACA,0BAAU5D,cAAAA,CAACS,qBAAAA,EAAA,EAAe,SAAkB,gBAAA,EAAoC;AAAA,GAClF;AACF;AAEA,IAAO,0BAAQ,CAAC,EAAE,OAAA,EAAApB,QAAAA,EAAS,WAAU,KAAa;AAChD,EAAA,MAAM,EAAE,WAAA,EAAa,aAAA,EAAe,WAAA,EAAY,GAAIwE,cAAQ,MAAM;AAChE,IAAA,IAAI,CAACxE,QAAAA,EAAS,OAAA,EAAS,OAAO,EAAE,WAAA,EAAa,EAAA,EAAI,aAAA,EAAe,EAAC,EAAG,WAAA,EAAa,EAAA,EAAG;AACpF,IAAA,OAAO,mBAAA,CAAoBA,SAAQ,OAAO,CAAA;AAAA,EAC5C,CAAA,EAAG,CAACA,QAAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAA,MAAM,YAAY,CAACA,QAAAA,IAAY,CAACA,QAAAA,CAAQ,OAAA,IAAWA,SAAQ,MAAA,KAAW,SAAA;AACtE,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEW,eAAC8D,eAAA,EAAA,EACC,QAAA,kBAAA9D,eAACC,SAAAA,EAAA,EAAK,IAAA,EAAM,OAAA,EAAS,CAAA,EACvB,CAAA;AAAA,EAEJ;AACA,EAAA,uBACED,cAAAA,CAACG,SAAAA,EAAA,EAAK,QAAA,EAAQ,MACZ,QAAA,kBAAAH,cAAAA;AAAA,IAAC2D,QAAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,SAAA,EAAWI,4BAAA,CAAW,EAAE,CAAC,qBAAA,CAAO,cAAc,GAAG1E,QAAAA,CAAQ,MAAA,KAAW,SAAA,EAAW,CAAA;AAAA,MAC/E,OAAA,kBACEa,eAAAA,CAAAiB,mBAAAA,EAAA,EAEG,QAAA,EAAA;AAAA,QAAA,aAAA,CAAc,MAAA,GAAS,qBACtBnB,cAAAA;AAAA,UAACoB,aAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAK,IAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,gBAAA,EAAkB,cAAc,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE,CAAA;AAAA,YAC1D,KAAA,EAAO,aAAA,CAAc,GAAA,CAAI,CAAC,OAAA,EAAS,KAAA,KAAU,mBAAA,CAAoB,OAAA,EAAS,CAAA,wBAAA,CAAA,EAAQ,CAAA,MAAA,EAAS,KAAK,CAAA,CAAE,CAAC;AAAA;AAAA,SACrG;AAAA,QAID,+BACCpB,cAAAA;AAAA,UAACoB,aAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAK,IAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,gBAAA,EAAkB,CAAC,cAAc,CAAA;AAAA,YACjC,OAAO,CAAC,mBAAA,CAAoB,WAAA,EAAa,mCAAA,EAAY,cAAc,CAAC;AAAA;AAAA,SACtE;AAAA,QAID,eAAe/B,QAAAA,CAAQ,MAAA,KAAW,OAAA,mBACjCa,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAACgE,yBAAA,EAAA,EAAoB,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE;AAAA,SAAA,EACzC,oBAEAhE,cAAAA,CAACS,uBAAA,EAAe,OAAA,EAAS,aAAa,gBAAA,EAAoC;AAAA,OAAA,EAE9E;AAAA;AAAA,GAEJ,EACF,CAAA;AAEJ,CAAA;ADpFA,IAAO,uBAAA,GAAQ,CAAC,EAAE,MAAA,GAAS,MAAK,KAAa;AAC3C,EAAA,MAAM,YAAY,YAAA,EAAa;AAE/B,EAAA,MAAM,UAAA,GAAauC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA,CAAY,SAAA,CAAU,YAAY,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAcA,kBAAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAEhD,EAAA,MAAM,iBAAA,GAAoBa,cAAQ,MAAM;AACtC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW,KAAA;AAAA,QACX,MAAA,EAAA,CAASI,iBAAU,MAAM,CAAA,GAAI,SAAS,MAAA,EAAQ,IAAA,oBAC5CjE,cAAAA,CAACkE,iBAAA,EAAA,EAAW,MAAM,EAAA,EAAI,SAAA,EAAW,YAAY,QAAA,EAAU,OAAA,EAAS,UAAU,WAAA,CAAY,QAAA,EAAU,MAAM,CAAA,GACpG;AAAA,OACN;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,WAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,SAASD,gBAAA,CAAU,MAAM,CAAA,GAAI,MAAA,GAAS,QAAQ,SAAA,IAAa,EAAE,GAAA,EAAK,UAAA,CAAW,OAAO,OAAA,EAAS,IAAA,kBAAMjE,cAAAA,CAACmE,oBAAA,EAAA,EAAe,GAAG,GAAI;AAAA;AAC5H,KACF;AAAA,EACF,GAAG,CAAC,WAAA,CAAY,UAAU,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAC,CAAA;AAEpD,EAAA,MAAM,WAAA,GAAcN,aAAAA;AAAA,IAClB,MAAM,iBAAA,CAAkB,QAAA,CAAS,kBAAkB,MAAA,CAAO,GAAG,KAAM,EAAC;AAAA,IACpE,CAAC,iBAAA,CAAkB,QAAA,CAAS,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAC;AAAA,GAC3D;AACA,EAAA,MAAM,eAAA,GAAkBA,aAAAA;AAAA,IACtB,MAAM;AAAA,MACJ;AAAA,QACE,GAAA,EAAK,aAAA;AAAA,QACL,OAAA,kBACE3D,eAAAA,CAACqD,UAAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,qBAAA,CAAO,eAAA,EACtD,QAAA,EAAA;AAAA,0BAAAvD,cAAAA;AAAA,YAACoE,SAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWL,4BAAAA,CAAW,qBAAA,CAAO,WAAA,EAAa,QAAQ,CAAA;AAAA,cAClD,OAAA,EAAQ,YAAA;AAAA,cACR,IAAA,kBAAM/D,cAAAA,CAACsD,WAAAA,EAAA,EAAO,KAAA,EAAM,QAAA,EAAS,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS,CAAA;AAAA,cACvE,KAAA,EAAO,CAAA,8BAAA,EAAQ,UAAA,CAAW,MAAA,CAAO,QAAQ,EAAE,CAAA,CAAA;AAAA,cAC3C,WAAA,EAAa,UAAA,CAAW,MAAA,CAAO,WAAA,IAAe;AAAA;AAAA,WAChD;AAAA,UACC,UAAA,CAAW,MAAA,CAAO,kBAAA,EAAoB,MAAA,GAAS,qBAC9CtD,cAAAA;AAAA,YAACqE,SAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,QAAA;AAAA,cACV,IAAA,EAAI,IAAA;AAAA,cACJ,KAAA,EAAO;AAAA,gBACL;AAAA,kBACE,GAAA,EAAK,GAAA;AAAA,kBACL,KAAA,EAAO,qCAAA;AAAA,kBACP,QAAA,EAAU,WAAW,MAAA,CAAO,kBAAA,CAAmB,IAAI,CAAC,EAAE,QAAA,EAAU,EAAA,EAAG,MAAO;AAAA,oBACxE,GAAA,EAAK,EAAA;AAAA,oBACL,6BACErE,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,MAAM,SAAA,CAAU,aAAA,CAAc,QAAQ,CAAA,EAAG,WAAW+D,4BAAAA,CAAW,qBAAA,CAAO,kBAAA,EAAoB,eAAe,GACrH,QAAA,EAAA,QAAA,EACH;AAAA,mBAEJ,CAAE;AAAA;AACJ;AACF;AAAA;AACF,SAAA,EAEJ,CAAA;AAAA,QAEF,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,CAAC,WAAW,MAAM;AAAA,GACpB;AAEA,EAAA,MAAM,YAAA,GAAeF,aAAAA;AAAA,IACnB,MACE,WAAA,EAAa,YAAA,EAAc,MAAA,GACvB;AAAA,MACE;AAAA,QACE,GAAA,EAAK,cAAA;AAAA,QACL,yBACE7D,cAAAA;AAAA,UAACqE,SAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,QAAA;AAAA,YACV,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM;AAAA,gBACJ,QAAA,EAAU;AAAA;AACZ,aACF;AAAA,YACA,QAAA,EAAQ,IAAA;AAAA,YACR,KAAA,EAAO,aAAa,YAAA,CAAa,GAAA,CAAI,CAAC,EAAE,QAAA,EAAU,IAAG,MAAO;AAAA,cAC1D,GAAA,EAAK,EAAA;AAAA,cACL,WAAA,kBAAarE,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,MAAM,SAAA,CAAU,aAAA,CAAc,QAAQ,CAAA,EAAI,QAAA,EAAA,QAAA,EAAS;AAAA,aACjF,CAAE;AAAA;AAAA,SACJ;AAAA,QAEF,OAAA,EAAS,YAAA;AAAA,QACT,QAAQ,EAAE,KAAA,EAAO,EAAE,UAAA,EAAY,UAAS;AAAE;AAC5C,QAEF,EAAC;AAAA,IACP,CAAC,aAAa,YAAY;AAAA,GAC5B;AAEA,EAAA,MAAM,WAAA,GAAc6D,cAAQ,MAAM;AAChC,IAAA,OAAA,CAAQ,WAAA,EAAa,SAAS,KAAA,IAAS,IAAI,GAAA,CAAI,CAACxE,UAAS,KAAA,KAAU;AAQjE,MAAA,OAAO;AAAA,QACL,GAAA,EAAKA,QAAAA,CAAQ,EAAA,IAAM,CAAC,KAAA;AAAA,QACpB,SAAA,EAAW,iBAAA,CAAkBA,QAAAA,CAAQ,IAAI,CAAA,CAAE,SAAA;AAAA,QAC3C,OAAA,EAAS,YAAA;AAAA,QACT,MAAA,EAAQ,iBAAA,CAAkBA,QAAAA,CAAQ,IAAI,CAAA,CAAE,MAAA;AAAA,QACxC,OAAA,EACEA,QAAAA,CAAQ,IAAA,KAAS,WAAA,mBACfW,cAAAA,CAAC,uBAAA,EAAA,EAAgB,OAAA,EAASX,QAAAA,EAAiC,SAAA,EAAW,iBAAA,CAAkBA,QAAAA,CAAQ,IAAI,EAAE,SAAA,EAAW,CAAA,mBAEjHW,cAAAA,CAAC,qBAAA,EAAA,EAAkB,OAAA,EAASX,QAAAA,EAAiC,SAAA,EAAW,iBAAA,CAAkBA,QAAAA,CAAQ,IAAI,CAAA,CAAE,SAAA,EAAW,CAAA;AAAA;AAAA,QAGvH,MAAA,EAAQA,SAAQ,IAAA,KAAS,WAAA,IAAeA,SAAQ,EAAA,oBAC9Ca,eAAAA,CAACC,SAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAACgB,aAAA,EAAO,OAAA,EAAS,MAAM,IAAA,CAAK3B,QAAAA,CAAQ,OAAiB,CAAA,EAAG,KAAA,EAAM,WAAU,OAAA,EAAQ,MAAA,EAAO,MAAK,OAAA,EAAQ,IAAA,kBAAMW,cAAAA,CAACkB,kBAAAA,EAAA,EAAa,CAAA,EAAI,CAAA;AAAA,0BAC5HlB,cAAAA;AAAA,YAACgB,WAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO3B,QAAAA,CAAQ,QAAA,KAAa,MAAA,GAAS,SAAA,GAAY,SAAA;AAAA,cACjD,QAAA,EAAUA,SAAQ,MAAA,KAAW,SAAA;AAAA,cAC7B,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAQ,MAAA;AAAA,cACR,IAAA,kBAAMW,cAAAA,CAACsE,kBAAA,EAAA,EAAa,CAAA;AAAA,cACpB,OAAA,EAAS,MAAM,SAAA,CAAU,QAAA,CAAS,iBAAA,CAAkB,OAAO,GAAA,EAAKjF,QAAAA,CAAQ,EAAA,EAAI,MAAA,EAAQ,KAAK;AAAA;AAAA,WAC3F;AAAA,0BACAW,cAAAA;AAAA,YAACgB,WAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO3B,QAAAA,CAAQ,QAAA,KAAa,SAAA,GAAY,SAAA,GAAY,SAAA;AAAA,cACpD,QAAA,EAAUA,SAAQ,MAAA,KAAW,SAAA;AAAA,cAC7B,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAQ,MAAA;AAAA,cACR,IAAA,kBAAMW,cAAAA,CAACuE,qBAAA,EAAA,EAAgB,CAAA;AAAA,cACvB,OAAA,EAAS,MAAM,SAAA,CAAU,QAAA,CAAS,iBAAA,CAAkB,OAAO,GAAA,EAAKlF,QAAAA,CAAQ,EAAA,EAAI,SAAA,EAAW,KAAK;AAAA;AAAA;AAC9F,SAAA,EAGF;AAAA;AAAA;AAAA;AAAA,OAKJ;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,WAAA,EAAa,OAAO,CAAC,CAAA;AACzB,EAAA,MAAM,eAAA,GAAkBwE,cAAQ,MAAM;AACpC,IAAA,MAAM,OAAO,EAAC;AACd,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,IAAA,CAAK,GAAG,WAAA,EAAa,GAAG,YAAY,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAC,GAAG,eAAe,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,WAAA,EAAa,YAAA,EAAc,eAAe,CAAC,CAAA;AAE/C,EAAA,MAAM,OAAA,GAAUjD,aAAmC,IAAI,CAAA;AACvD,EAAAL,gBAAU,MAAM;AAQd,IAAA,IACE,gBAAgB,MAAA,IAAA,CACf,OAAA,CAAQ,OAAA,EAAS,aAAA,CAAc,gBAAgB,CAAA,KAAA,CAC5C,OAAA,CAAQ,OAAA,EAAS,aAAA,CAAc,aAAa,CAAA,KAAM,OAAA,CAAQ,SAAS,aAAA,CAAc,YAAA,IAAgB,MACnG,GAAA,EACF;AACA,MAAA,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,EAAE,GAAA,EAAK,eAAA,CAAgB,eAAA,CAAgB,MAAA,GAAS,CAAC,CAAA,CAAE,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,IAClG;AAAA,EACF,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AACpB,EAAA,uBACEP,cAAAA;AAAA,IAAC2D,QAAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MAEC,GAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,eAAA;AAAA,MACP,SAAA,EAAWI,4BAAAA,CAAW,qBAAA,CAAO,YAAA,EAAc,eAAe,gBAAgB;AAAA,KAAA;AAAA,IAHrE,kBAAkB,MAAA,CAAO;AAAA,GAIhC;AAEJ,CAAA;;;AEtMA,UAAA,EAAA;AAaA,IAAO,mBAAA,GAAQS,gBAAA,CAAW,CAAC,EAAE,UAAU,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAa,QAAA,GAAW,EAAC,EAAG,QAAA,EAAU,WAAA,IAAsB,GAAA,KAAQ;AAC3H,EAAA,MAAM,WAAA,GAAc5D,YAAAA,CAAoB,EAAE,CAAA;AAC1C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAA,EAAkB,gBAAgB,CAAA,GAAI6D,kBAAA,CAAkD,EAAE,CAAA;AAEhH,EAAAlE,gBAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,UAAU,QAAQ,CAAA,KAAM,KAAK,SAAA,CAAU,WAAA,CAAY,OAAO,CAAA,EAAG;AACpE,MAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACtB,MAAA,MAAM,MAAA,GAA+C,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QAC3E,GAAG,IAAA;AAAA,QACH,KAAK,IAAA,CAAK,EAAA;AAAA,QACV,MAAA,EAAQ;AAAA,OACV,CAAE,CAAA;AACF,MAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzB;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AACb,EAAAA,gBAAU,MAAM;AAEd,IAAA,MAAM,KAAA,GAAQ,aAAA,CACX,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CACvC,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,MAAM,CAAA,GAAI,EAAE,GAAG,IAAA,EAAK;AACpB,MAAA,OAAO,CAAA,CAAE,MAAA;AACT,MAAA,OAAO,CAAA,CAAE,GAAA;AACT,MAAA,OAAO,CAAA,CAAE,IAAA;AACT,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AACH,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAClB,EAAA,MAAM,UAAA,GAAamE,kBAAA,CAAY,CAAC,QAAA,KAAqB;AACnD,IAAArF,YAAAA,CAAQ,MAAM,QAAQ,CAAA;AAAA,EACxB,GAAG,GAAG,CAAA;AACN,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAoB;AAE1C,IAAA,IAAIsF,gBAAS,QAAQ,CAAA,IAAK,MAAM,MAAA,GAAS,aAAA,CAAc,SAAS,QAAA,EAAU;AACxE,MAAA,UAAA,CAAW,CAAA,oCAAA,EAAS,QAAQ,CAAA,kBAAA,CAAK,CAAA;AACjC,MAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAO,EAAE,IAAA,EAAK,KAAW;AAE/C,IAAA,IAAI,QAAA,IAAY,IAAA,CAAK,IAAA,GAAO,QAAA,EAAU;AAGpC,MAAAtF,YAAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,gBAAA,CAAiB;AAAA,MACf,GAAG,gBAAA,EAAiB;AAAA,MACpB;AAAA,QACE,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA,EAAS,EAAA;AAAA,QACT,MAAM,IAAA,CAAK;AAAA;AACb,KACD,CAAA;AACD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,IAAI,CAAA;AAC5B,MAAA,IAAIuF,eAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACxC,UAAA,IAAIC,oBAAA,CAAc,WAAA,CAAY,GAAG,CAAC,CAAA,EAAG;AACrC,UAAA,QAAA,CAAS,MAAA,CAAO,GAAA,EAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,QACvC,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAW,QAAQ,CAAA;AAE1C,MAAA,IAAI,CAAC,IAAA,EAAM,GAAA,IAAO,IAAA,EAAM,SAAS,OAAA,EAAS;AACxC,QAAA,IAAA,CAAK,GAAA,GAAM,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,MAEjC;AAEA,MAAA,gBAAA;AAAA,QACE,gBAAA,EAAiB,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5B,UAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,IAAA,CAAK,GAAA,EAAK;AACtB,YAAA,OAAO,EAAE,GAAG,IAAA,EAAO,GAAA,EAAK,IAAA,CAAM,IAAI,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,IAAA,EAAK;AAAA,UACjE,CAAA,MAAO;AACL,YAAA,OAAO,CAAA;AAAA,UACT;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,8CAAW,KAAK,CAAA;AAC5B,MAAA,gBAAA;AAAA,QACE,gBAAA,EAAiB,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5B,UAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,IAAA,CAAK,GAAA,EAAK;AACtB,YAAA,OAAO,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,OAAA,EAAS,aAAa,0BAAA,EAAO;AAAA,UACtD,CAAA,MAAO;AACL,YAAA,OAAO,CAAA;AAAA,UACT;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAA0B;AAE1C,IAAA,gBAAA,CAAiB,aAAA,CAAc,OAAO,CAAC,CAAA,KAAM,EAAE,GAAA,KAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAClE,CAAA;AACA,EAAAC,yBAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAO;AAAA,MACL,cAAc,MAAM;AAClB,QAAA,MAAM,QAAQ,gBAAA,EAAiB;AAC/B,QAAA,MAAM,iBAAiB,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,WAAW,CAAA;AACzE,QAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,UAAAzF,YAAAA,CAAQ,MAAM,oEAAa,CAAA;AAC3B,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,OAAO,CAAA;AACjE,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAAA,YAAAA,CAAQ,MAAM,8DAAY,CAAA;AAC1B,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,KACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,SAAA,GAAYwE,cAAQ,MAAM;AAC9B,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,IAAA,MAAM,WAAA,GAAoC;AAAA,MACxC,QAAA,EAAU;AAAA,QACR,MAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAO,CAAC,MAAA,EAAQ,SAAS,MAAA,EAAQ,MAAA,EAAQ,SAAS,MAAM;AAAA,KAC1D;AACA,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,MAAA,EAAQ,OAAA,CAAQ,CAAC,IAAA,KAAS;AACxB,MAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,MACnC;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,IACxB;AAEA,IAAA,OAAO,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACE7D,cAAAA;AAAA,IAAC4D,aAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,eAAA;AAAA,MACV,MAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,CAACe,eAAA,CAAS,QAAQ,KAAK,QAAA,GAAW,CAAA;AAAA,MAC5C,QAAA;AAAA,MACA,aAAA,EAAe,eAAA;AAAA,MACf,YAAA,EAAc,CAAC,IAAA,EAAM,KAAA,KAAU,eAAe,KAAK,CAAA;AAAA,MACnD,KAAA,EAAO,aAAA;AAAA,MACP,QAAA;AAAA,MACA,WAAA,EAAa,CAAC,IAAA,KACZ,IAAA,KAAS,SACL,EAAE,KAAA,EAAO,8CAAU,GACnB;AAAA,QACE,IAAA,kBAAM3E,cAAAA,CAAC+E,yBAAA,EAAA,EAAoB,CAAA;AAAA,QAC3B,KAAA,EAAO,0BAAA;AAAA,QACP,WAAA,kBACE/E,cAAAA,CAAC,KAAA,EAAA,EACC,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,0GAAiB,CAAA,EAExB;AAAA;AAEJ;AAAA,GAER;AAEJ,CAAC,CAAA;AC/KD,IAAO,kBAAA,GAAQwE,gBAAAA;AAAA,EACb,CACE;AAAA,IACE,WAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAW,EAAC;AAAA,IACZ,UAAA,GAAa,KAAA;AAAA,IACb,OAAA,GAAU,KAAA;AAAA,IACV,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,SAAA,GAAY5D,aAA8B,IAAI,CAAA;AACpD,IAAA,MAAM,EAAE,UAAA,EAAY,aAAA,KAAkBoE,mBAAA,CAAa,OAAA,IAAW,IAAI,eAAe,CAAA;AAEjF,IAAA,MAAM,eAAA,GAAkB,UAAA,EAAY,OAAA,oBAClChF,cAAAA,CAACiF,UAAA,EAAA,EAAM,GAAA,EAAK,CAAC,CAAC,QAAA,EAAU,MAAA,IAAU,CAAC,YACjC,QAAA,kBAAAjF,cAAAA,CAACgB,WAAAA,EAAA,EAAO,IAAA,EAAK,MAAA,EAAO,IAAA,kBAAMhB,cAAAA,CAACkF,uBAAA,EAAA,EAAkB,CAAA,EAAI,OAAA,EAAS,MAAM,kBAAA,CAAmB,CAAC,UAAU,GAAG,CAAA,EACnG,CAAA;AAGF,IAAA,MAAM,iBAAiBtE,YAAAA,EAAY;AACnC,IAAA,MAAM,YAAA,mBACJV,eAAAA,CAAAiB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAnB,cAAAA,CAACmF,QAAA,CAAO,MAAA,EAAP,EAAc,KAAA,EAAM,4BAAO,IAAA,EAAM,UAAA,EAAY,YAAA,EAAc,kBAAA,EAC1D,QAAA,kBAAAnF,cAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,cAAA;AAAA,UACL,QAAA;AAAA,UACA,QAAA,EAAU,gBAAA;AAAA,UACV,QAAQ,UAAA,EAAY,gBAAA;AAAA,UACpB,UAAU,UAAA,EAAY,YAAA;AAAA,UACtB,aAAa,UAAA,EAAY;AAAA;AAAA,OAC3B,EACF,CAAA;AAAA,MACC;AAAA,KAAA,EACH,CAAA;AAEF,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,IAAI,CAAC,cAAA,CAAe,OAAA,EAAS,gBAAgB,cAAA,CAAe,OAAA,CAAQ,cAAa,EAAG;AAClF,QAAA,MAAA,EAAO;AAAA,MACT;AAAA,IACF,CAAA;AAGA,IAAA8E,yBAAAA;AAAA,MACE,GAAA;AAAA,MACA,OAAO;AAAA,QACL,KAAA,EAAO,CAAC,OAAA,KAA2C;AACjD,UAAA,SAAA,CAAU,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,QAClC;AAAA,OACF,CAAA;AAAA,MACA;AAAC,KACH;AAEA,IAAA,uBACE9E,cAAAA,CAACoF,YAAA,EAAA,EAAW,KAAA,EAAO,IAAI,QAAA,EAAU,CAAC,OAAA,KAAY,aAAA,CAAc,IAAI,OAAO,CAAA,EAAA,CAAI,GACxE,QAAA,EAAA,CAAC,uBACApF,cAAAA;AAAA,MAACmF,QAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAQ,YAAA;AAAA,QACR,QAAA;AAAA,QACA,QAAA,EAAU,aAAA;AAAA,QACV,OAAA;AAAA,QACA,QAAA,EAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QAGnC,QAAA;AAAA,QACA,MAAA,EAAQ,CAAC,EAAE,UAAA,EAAW,KAAM;AAC1B,UAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,UAAA;AACtC,UAAA,uBACEjF,eAAAA,CAACC,SAAAA,EAAA,EAAK,UAAQ,IAAA,EACZ,QAAA,EAAA;AAAA,4BAAAD,eAAAA,CAACC,WAAA,EAAK,OAAA,EAAQ,iBAAgB,KAAA,EAAM,QAAA,EAAS,KAAK,EAAA,EAChD,QAAA,EAAA;AAAA,8BAAAD,eAAAA,CAACC,WAAA,EAAK,SAAA,EAAU,UAAS,GAAA,EAAK,CAAA,EAAG,OAAM,QAAA,EACpC,QAAA,EAAA;AAAA,gBAAA,eAAA;AAAA,gBACA,WAAA;AAAA,gBAAa;AAAA,eAAA,EAChB,CAAA;AAAA,8BACAH,cAAAA,CAACG,SAAAA,EAAA,EAAK,KAAA,EAAM,UAAU,QAAA,EAAA,OAAA,mBAAUH,cAAAA,CAAC,aAAA,EAAA,EAAc,oBAAKA,cAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,iBAAiB,CAAA,EAAG;AAAA,aAAA,EAC1F,CAAA;AAAA,YACC;AAAA,WAAA,EACH,CAAA;AAAA,QAEJ,CAAA;AAAA,QACA,OAAA,EAAS,KAAA;AAAA,QACT,aAAa,WAAA,IAAe;AAAA;AAAA,KAC9B,EAEJ,CAAA;AAAA,EAEJ;AACF,CAAA;;;AC1HA,YAAA,EAAA;AAGA,IAAOqF,sBAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAE/B,EAAA,MAAM,UAAA,GAAarC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA,CAAY,SAAA,CAAU,YAAY,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAcA,kBAAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAEhD,EAAA,MAAM,WAAA,GAAca,aAAAA;AAAA,IAClB,MAAM,iBAAA,CAAkB,QAAA,CAAS,kBAAkB,MAAA,CAAO,GAAG,KAAM,EAAC;AAAA,IACpE,CAAC,iBAAA,CAAkB,QAAA,CAAS,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAC;AAAA,GAC3D;AACA,EAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAgB;AACvC,IAAA,IAAI,aAAa,OAAA,EAAS;AAC1B,IAAA,SAAA,CAAU,WAAW,GAAG,CAAA;AACxB,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,SAAA,CAAU,WAAA,EAAY;AAAA,IACxB,GAAG,EAAE,CAAA;AAAA,EACP,CAAA;AACA,EAAA,uBACE7D,cAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAa,WAAA,CAAY,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,WAAA;AAAA,MAC/C,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,UAAU,WAAA,CAAY,KAAA;AAAA,MACtB,YAAY,WAAA,CAAY,UAAA;AAAA,MACxB,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,iBAAiB,SAAA,CAAU,UAAA;AAAA,MAC3B,kBAAkB,SAAA,CAAU,WAAA;AAAA,MAC5B,oBAAoB,SAAA,CAAU,aAAA;AAAA,MAC9B,MAAA,EAAQ,MAAM,SAAA,CAAU,WAAA,EAAY;AAAA,MACpC,OAAA,EAAS,SAAA,CAAU,MAAA,CAAO,KAAA,EAAO,aAAA;AAAA,MACjC,UAAA,EAAY;AAAA,QACV,GAAI,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAY,UAAA;AAAA,QACnC,WAAA,EAAa,EAAE,OAAA,EAAS,UAAA,CAAW,OAAO,EAAA;AAAG,OAC/C;AAAA,MACA,WAAA,kBACEE,eAAAA,CAAAiB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAnB,cAAAA;AAAA,UAACgB,WAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,KAAA,EAAO,UAAA,CAAW,MAAA,CAAO,SAAA,KAAc,IAAI,SAAA,GAAY,SAAA;AAAA,YACvD,OAAA,EAAQ,QAAA;AAAA,YACR,OAAA,EAAS,MAAM,SAAA,CAAU,cAAA,CAAe,EAAE,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,SAAA,KAAc,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAA;AAAA,YACjG,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAhB,cAAAA,CAACqD,oBAAAA,EAAA,EAAc,OAAA,EAAS,WAAA,CAAY,OAAO,cAAA,EAAgD;AAAA,OAAA,EAC7F,CAAA;AAAA,MAEF,6BACErD,cAAAA;AAAA,QAACmF,QAAAA,CAAO,MAAA;AAAA,QAAP;AAAA,UACC,uBACEjF,eAAAA,CAACC,SAAAA,EAAA,EAAK,KAAK,CAAA,EACT,QAAA,EAAA;AAAA,4BAAAH,eAACsF,mBAAA,EAAA,EAAc,CAAA;AAAA,4BACftF,cAAAA,CAAC8D,eAAAA,CAAW,IAAA,EAAX,EAAgB,IAAA,EAAK,WAAA,EAAY,QAAA,EAAQ,IAAA,EACvC,QAAA,EAAA,WAAA,EAAa,UAAA,EAAY,OAAA,EAAS,IAAA,EACrC;AAAA,WAAA,EACF,CAAA;AAAA,UAEF,IAAA,EAAM,CAAC,CAAC,WAAA,EAAa,YAAY,OAAA,EAAS,IAAA;AAAA,UAC1C,YAAA,EAAc,MAAM,SAAA,CAAU,aAAA,EAAc;AAAA,UAC5C,UAAA,EAAY;AAAA,YACV,QAAQ,qBAAA,CAAO,4BAAA;AAAA,YACf,SAASpC,mBAAAA,CAAa,WAAA,CAAY,OAAO,aAA4C,CAAA,GAAI,KAAK,qBAAA,CAAO;AAAA,WACvG;AAAA,UAEA,QAAA,kBAAA1B,cAAAA;AAAA,YAACqD,oBAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,YAAY,MAAA,CAAO,aAAA;AAAA,cAC5B,gBAAA,kBACErD,cAAAA,CAACG,SAAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EACR,QAAA,EAAA,CAAC,0BAAA,EAAQ,0BAAM,CAAA,CAAE,GAAA,CAAI,CAAC,wBACrBD,eAAAA,CAACc,WAAAA,EAAA,EAAiB,KAAA,EAAM,SAAA,EAAU,OAAA,EAAQ,QAAA,EAAS,OAAA,EAAS,MAAM,eAAA,CAAgB,GAAG,CAAA,EAClF,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBAAI;AAAA,eAAA,EAAA,EADM,GAEb,CACD,CAAA,EACH;AAAA;AAAA;AAEJ;AAAA;AACF;AAAA,GAEJ;AAEJ,CAAA;;;ACxFA,YAAA,EAAA;AAGA,IAAO,iCAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAagC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAE9C,EAAA,uBACE9C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,gBAACC,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAK,CAAA,EACxB,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAACsD,aAAA,EAAO,IAAA,EAAM,IAAI,GAAA,EAAK,UAAA,CAAW,OAAO,OAAA,EAAS,CAAA;AAAA,sBAClDtD,eAAC,MAAA,EAAA,EAAK,SAAA,EAAW,sBAAO,cAAA,EAAiB,QAAA,EAAA,UAAA,CAAW,OAAO,IAAA,EAAK;AAAA,KAAA,EAClE,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAACgB,WAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAK,IAAA;AAAA,QACL,IAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS,MAAM,SAAA,CAAU,kBAAA,EAAmB;AAAA,QAC5C,SAAA,EAAW+C,6BAAW,QAAQ,CAAA;AAAA,QAC9B,IAAA,kBAAM/D,cAAAA,CAACwD,kBAAAA,EAAA,EAAa,CAAA;AAAA,QACrB,QAAA,EAAA;AAAA;AAAA;AAED,GAAA,EACF,CAAA;AAEJ,CAAA;;;ACxBA,YAAA,EAAA;AAIA,IAAO,6BAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAaR,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAE9C,EAAA,MAAM,SAAA,GAAYa,aAAAA;AAAA,IAChB,MACE,UAAA,CAAW,MAAA,CAAO,MAAA,EAAQ,MAAA,GAAS,CAAA,oBACjC3D,eAAAA,CAACC,SAAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,MAAI,IAAA,EAChB,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAACgB,aAAA,EAAO,QAAA,EAAQ,MAAC,KAAA,EAAM,SAAA,EAAU,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAA,0BAAA,EAEhD,CAAA;AAAA,MACC,WAAW,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,6BAC7BhB,cAAAA;AAAA,QAACa,YAAAA;AAAA,QAAA;AAAA,UAEC,yBACEb,cAAAA;AAAA,YAACuF,SAAA;AAAA,YAAA;AAAA,cACC,UAAA,EAAW,YAAA;AAAA,cACX,KAAA,EAAO,KAAA;AAAA,cACP,WAAW,qBAAA,CAAO,UAAA;AAAA,cAClB,YAAY,QAAA,CAAS,eAAA;AAAA,cACrB,YAAY,CAAC,IAAA,qBACXvF,cAAAA,CAACuF,SAAA,CAAK,MAAL,EAAU,OAAA,EAAS,MAAM,SAAA,CAAU,WAAA,CAAY,KAAK,QAAQ,CAAA,EAAG,WAAW,qBAAA,CAAO,cAAA,EAC/E,eAAK,QAAA,EACR,CAAA;AAAA,cAEF,MAAA,kBACEvF,cAAAA,CAACG,SAAAA,EAAA,EAAK,SAAQ,KAAA,EAAM,SAAA,EAAW,qBAAA,CAAO,gBAAA,EAAkB,QAAA,EAAA,8EAAA,EAExD;AAAA;AAAA,WAEJ;AAAA,UAEF,uBACEH,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW+D,4BAAAA,CAAW,qBAAA,CAAO,eAAA,EAAiB,eAAe,CAAA;AAAA,cAC7D,aAAG,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,wBAAA,EAAO,SAAS,SAAS,CAAA,kBAAA;AAAA;AAAA,WAAM;AAAA,UAG5D,QAAA,kBAAA/D,eAACgB,WAAAA,EAAA,EAAO,OAAM,SAAA,EAAU,OAAA,EAAQ,QAAA,EAC7B,QAAA,EAAA,QAAA,CAAS,SAAA,EACZ;AAAA,SAAA;AAAA,QA3BK,QAAA,CAAS;AAAA,OA6BjB;AAAA,KAAA,EACH,CAAA;AAAA,IAEJ,CAAC,UAAA,CAAW,MAAA,CAAO,MAAM;AAAA,GAC3B;AACA,EAAA,OAAO,SAAA;AACT,CAAA;;;ACzDA,IAAAxB,sBAAAA,GAAA;AAAA,EAAC,eAAA,EAAAgG,+BAAAA;AAAA,EAIiB,oBAAA,EAAAC,oCAAAA;AAAA,EAIjB,WAAA,EAAArD;AAAA,CAAA;AbqCD,IAAO,eAAA,GAAQoC,gBAAAA,CAA8B,CAAC,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAa,EAAU,GAAA,KAAQ;AAC3G,EAAA,MAAM,YAAYX,aAAAA,CAAQ,MAAM,eAAA,EAAgB,EAAG,EAAE,CAAA;AAErD,EAAAtD,gBAAU,MAAM;AACd,IAAA,SAAA,CAAU,WAAA,EAAY;AACtB,IAAA,IAAI,YAAA,EAAc,MAAA,IAAU,YAAA,EAAc,QAAA,EAAU;AAClD,MAAA,SAAA,CAAU,WAAA,CAAY,EAAE,MAAA,EAAQ,YAAA,CAAa,MAAA,EAAQ,UAAU,YAAA,CAAa,QAAA,EAAS,EAAG,YAAA,CAAa,cAAc,CAAA;AAAA,IACrH;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACL,EAAAA,gBAAU,MAAM;AAEd,IAAA,SAAA,CAAU,UAAU,MAAM,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAAA,gBAAU,MAAM;AAEd,IAAA,SAAA,CAAU,gBAAgB,MAAM,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAAA,gBAAU,MAAM;AAEd,IAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,UAAA,GAAayC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAcA,kBAAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAChD,EAAA8B,yBAAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAO;AAAA,MACL,aAAa,SAAA,CAAU,WAAA;AAAA,MACvB,aAAa,SAAA,CAAU,WAAA;AAAA,MACvB,oBAAoB,SAAA,CAAU,kBAAA;AAAA,MAC9B,eAAe,SAAA,CAAU,aAAA;AAAA,MACzB,YAAY,SAAA,CAAU,UAAA;AAAA,MACtB,UAAU,SAAA,CAAU,WAAA;AAAA,MACpB,WAAW,SAAA,CAAU,eAAA;AAAA,MACrB,WAAW,SAAA,CAAU;AAAA,KACvB,CAAA;AAAA,IACA;AAAC,GACH;AACA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAoB;AAC5C,IAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AAAA,EACnB,CAAA;AACA,EAAA,MAAM,UAAA,GAAajB,cAAQ,MAAM;AAC/B,IAAA,OACEnC,mBAAAA,CAAa,WAAA,CAAY,MAAA,CAAO,OAAgC,MAC/D,CAAC,CAAE,WAAA,CAAY,OAAA,CAAQ,KAAqB,OAAA,IAAW,CAAC,CAAE,WAAA,CAAY,QAAQ,IAAA,CAAsB,OAAA,CAAA;AAAA,EAEzG,CAAA,EAAG,CAAC,WAAA,CAAY,MAAA,CAAO,SAAS,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAC,CAAA;AACzD,EAAA,uBACE1B,cAAAA,CAAC0F,WAAA,EAAA,EAAU,KAAA,EAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,GAAG,KAAA,EAAM,EACzC,QAAA,kBAAA1F,cAAAA,CAAC,YAAA,EAAA,EAAa,OAAO,SAAA,EACnB,QAAA,kBAAAA,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,UAAA,CAAW,OAAA,EAAS,kBAAiB,WAAA,EACnD,QAAA,kBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EACb,QAAA,kBAAAE,eAAAA,CAACyF,aAAA,EAAA,EAAS,UAAU,gBAAA,EACjB,QAAA,EAAA;AAAA,IAAAjE,mBAAAA,CAAa,YAAY,MAAA,CAAO,gBAAkD,qBACjF1B,cAAAA,CAAC2F,aAAA,CAAS,KAAA,EAAT,EAAe,IAAA,EAAM,KAAK,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,KAAA,EACxD,QAAA,kBAAAzF,eAAAA,CAACC,WAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAU,aAAA,EACvB,QAAA,EAAA;AAAA,sBAAAH,cAAAA;AAAA,QAACqD,oBAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,sBAAA;AAAA,UAC5B,gBAAA,EAAkB;AAAA;AAAA,OACpB;AAAA,sBACArD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eACb,QAAA,kBAAAA,cAAAA;AAAA,QAACqD,oBAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,gBAAA;AAAA,UAC5B,gBAAA,EAAkB;AAAA;AAAA,OACpB,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,IAED,UAAA,oBACCnD,eAAAA,CAACyF,aAAA,CAAS,OAAT,EAAe,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,KAAA,EAC3C,QAAA,EAAA;AAAA,MAAA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAqB,OAAA,oBACzCzF,eAAAA,CAACC,WAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAU,aAAA,EACvB,QAAA,EAAA;AAAA,wBAAAD,eAAAA,CAACC,SAAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,GAAA,EAAK,EAAA,EAAI,SAAA,EAAWX,sBAAAA,CAAO,eAAA,EACtE,QAAA,EAAA;AAAA,0BAAAQ,cAAAA,CAAC,SAAI,SAAA,EAAWR,sBAAAA,CAAO,sBAAuB,QAAA,EAAA,WAAA,CAAY,OAAA,CAAQ,KAAK,QAAA,EAAS,CAAA;AAAA,0BAChFU,gBAACC,SAAAA,EAAA,EAAK,KAAK,CAAA,EAAG,OAAA,EAAQ,QAAA,EAAS,KAAA,EAAM,QAAA,EACnC,QAAA,EAAA;AAAA,4BAAAH,cAAAA;AAAA,cAACgB,WAAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,SAAA;AAAA,gBACN,OAAA,EAAQ,UAAA;AAAA,gBACR,OAAA,EAAS,MAAM4E,mBAAA,CAAc,WAAA,CAAY,OAAA,CAAQ,KAAqB,OAAA,EAAS,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,gBACjH,QAAA,EAAA;AAAA;AAAA,aAED;AAAA,4BACA5F,eAACgB,WAAAA,EAAA,EAAO,SAAS,MAAM,SAAA,CAAU,UAAA,EAAW,EAAG,QAAA,EAAA,cAAA,EAAE;AAAA,WAAA,EACnD;AAAA,SAAA,EACF,CAAA;AAAA,wBACAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eACb,QAAA,kBAAAA,cAAAA;AAAA,UAAC6F,kBAAA;AAAA,UAAA;AAAA,YACE,GAAI,YAAY,OAAA,CAAQ,IAAA;AAAA,YACzB,SAAA,EAAW;AAAA,cACT,eAAA,EAAiB;AAAA;AACnB;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAEA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAsB,OAAA,oBAC1C7F,cAAAA;AAAA,QAACe,qBAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAsB,OAAA;AAAA,UAElD,OAAA,EAAS,CAAC,IAAA,KAAS;AACjB,YAAA,SAAA,CAAU,aAAA,CAAc;AAAA,cACtB,IAAA,EAAM,CAAA;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA,EAAM,IAAA;AAAA,gBACN,QAAA,EAAU;AAAA,eACZ;AAAA,cACA,MAAA,EAAQ;AAAA,gBACN,OAAA,EAAS;AAAA;AACX,aACD,CAAA;AAAA,UACH,CAAA;AAAA,UACA,QAAA,kBACEf,cAAAA,CAAAmB,mBAAAA,EAAA,EAIE,0BAAAnB,cAAAA,CAACc,QAAAA,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,KAAA,EAAM,WAAU,SAAA,EAAU,gBAAA,EAAiB,OAAA,EAAS,MAAM,SAAA,CAAU,UAAA,EAAW,EACnG,QAAA,kBAAAd,cAAAA,CAAC0D,mBAAAA,EAAA,EAAc,CAAA,EACjB,CAAA,EACF;AAAA;AAAA;AAUJ,KAAA,EAEJ,CAAA;AAAA,oBAEF1D,eAAC2F,aAAA,CAAS,KAAA,EAAT,EAAe,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,IAAA,EAAM,UAAA,GAAa,MAAM,MAAA,EAC7E,QAAA,kBAAAzF,gBAACC,SAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,SAAA,EAAW4D,4BAAAA,CAAW,aAAa,CAAA,EAEhD,QAAA,EAAA;AAAA,sBAAA/D,cAAAA,CAACqD,sBAAA,EAAc,OAAA,EAAS,YAAY,MAAA,CAAO,MAAA,EAAgC,kBAAkB,mBAAA,EAAa,CAAA;AAAA,sBAC1GrD,cAAAA,CAACG,SAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAW4D,4BAAAA,CAAW,aAAA,EAAe,qBAAA,CAAW,MAAM,CAAA,EACnE,QAAA,kBAAA7D,eAAAA,CAACC,SAAAA,EAAA,EAAK,OAAA,EAAQ,QAAA,EAAS,QAAA,EAAQ,IAAA,EAAC,GAAA,EAAK,EAAA,EAAI,SAAA,EAAW4D,4BAAAA,CAAW,aAAA,EAAe,qBAAA,CAAW,WAAW,CAAA,EACjG,QAAA,EAAA;AAAA,QAAArC,mBAAAA,CAAa,WAAA,CAAY,MAAA,CAAO,WAAW,CAAA,oBAC1C1B,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,UAACqD,oBAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,YAAY,MAAA,CAAO,WAAA;AAAA,YAC5B,gBAAA,kBAAkBrD,cAAAA,CAAC,uBAAA,EAAA,EAAgB,MAAA,EAAQ,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,IAAA,EAAK,EAAG;AAAA;AAAA,SAC/E,EACF,CAAA;AAAA,wBAEFA,cAAAA;AAAA,UAACqD,oBAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,YAAY,MAAA,CAAO,YAAA;AAAA,YAC5B,kCAAkBnD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWV,uBAAO,WAAA,EAAa,QAAA,EAAA;AAAA,cAAA,eAAA;AAAA,cAAI,WAAW,MAAA,CAAO;AAAA,aAAA,EAAK;AAAA;AAAA,SACnF;AAAA,wBAEAU,eAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,KAAK,CAAA,EAElB,QAAA,EAAA;AAAA,0BAAAH,cAAAA;AAAA,YAACqD,oBAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,YAAY,MAAA,CAAO,aAAA;AAAA,cAC5B,gBAAA,EAAkB;AAAA;AAAA,WACpB;AAAA,0BAEArD,eAACqD,oBAAAA,EAAA,EAAc,SAAS,WAAA,CAAY,MAAA,CAAO,MAAA,EAAgC,gBAAA,EAAkBgC,mBAAAA,EAAY;AAAA,SAAA,EAC3G,CAAA;AAAA,wBACArF,cAAAA,CAACqD,oBAAAA,EAAA,EAAc,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,YAAA,EAAc,gBAAA,kBAAkBrD,cAAAA,CAAAmB,mBAAAA,EAAA,EAAE,CAAA,EAAK;AAAA,OAAA,EACpF,CAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAEJ,CAAC","file":"index.cjs.js","sourcesContent":["import { copyText } from '@zero-library/common'\nimport { message } from 'antd'\nimport dayjs from 'dayjs'\n\nexport const copy = (value: string) => {\n copyText(value).then(() => {\n message.success('复制成功')\n })\n}\n\nexport const classifyTime = (timestamp?: number): string => {\n const now = dayjs()\n const target = dayjs(timestamp)\n\n if (target.isSame(now, 'day')) {\n return '今天'\n }\n\n const diffInDays = now.diff(target, 'day')\n if (diffInDays < 7) {\n return '最近 7 天'\n } else if (diffInDays < 30) {\n return '最近 30 天'\n } else if (diffInDays < 180) {\n return '最近半年'\n } else {\n return '更早'\n }\n}\n\n// 对象转换函数,将源对象转换为目标对象\nexport function transform<T extends object, U extends object>(\n source: T,\n fieldMap: {\n [K in keyof U]: keyof T | ((source: T) => U[K]) | U[K]\n }\n): U {\n const result = {} as U\n for (const [targetKey, mapping] of Object.entries(fieldMap)) {\n const key = targetKey as keyof U\n if (typeof mapping === 'function') {\n result[key] = (mapping as (src: T) => U[typeof key])(source)\n } else if (typeof mapping === 'string' && source && mapping in source) {\n result[key] = source[mapping as keyof T] as unknown as U[typeof key]\n } else {\n result[key] = mapping as U[typeof key]\n }\n }\n return result\n}\n\n// 批量对象转换函数\nexport function transforms<T extends object, U extends object>(\n sources: T[],\n fieldMap: {\n [K in keyof U]: keyof T | ((source: T) => U[K]) | U[K]\n }\n): U[] {\n return sources?.map((source) => transform<T, U>(source, fieldMap)) || []\n}\n\n// 构建带查询参数的 URL,支持数组参数\nexport function buildURLWithParams(url: string, params?: Record<string, any>) {\n const query = new URLSearchParams(\n Object.entries(params || {}).flatMap(([key, val]) => (Array.isArray(val) ? val.map((v) => [key, String(v)]) : [[key, String(val)]]))\n ).toString()\n return query ? `${url}${url.includes('?') ? '&' : '?'}${query}` : url\n}\n\nexport const getBase64 = (file: File): Promise<string> => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => resolve(reader.result as string)\n reader.onerror = reject\n reader.readAsDataURL(file)\n })\n}\n","import { createValtioContext } from '@zero-library/common'\nimport { ChatStoreType } from '.'\n\n// 基于泛型创建专用上下文\nexport const { ValtioProvider: ChatProvider, useValtioStore: useChatStore } = createValtioContext<ChatStoreType>()\n",".appCard {\n width: 180px;\n border-radius: 10px;\n border: 1px solid #d7d7d7;\n background-color: #fafafa;\n font-size: 16px;\n cursor: pointer;\n margin: 8px;\n padding: 12px 8px;\n}\n.appCard > div {\n max-width: 100%;\n}\n.appCard > img {\n height: 30px;\n}\n.fileView {\n width: 200px;\n padding: 4px 8px;\n cursor: pointer;\n background-color: #f5f3f3;\n border-radius: 6px;\n}\n.fileEdit {\n margin: 12px 0;\n border-radius: 6px;\n border: 1px solid #f2f2f2;\n}\n.fileEdit .fileEditHeader {\n padding: 2px 8px;\n background-color: #f2f2f2;\n}\n.fileEdit .fileEditContent {\n padding: 8px;\n background-color: #fafafa;\n}\n.quoteList {\n min-width: 300px;\n}\n.quoteList:global.ant-collapse .ant-collapse-item .ant-collapse-header {\n padding: 12px 0;\n color: #8f91a8;\n}\n.quoteList:global.ant-collapse .ant-collapse-item .ant-collapse-content {\n color: #8f91a8;\n background-color: #f2f2f2;\n}\n.mdEdit {\n margin: 10px 0;\n background-color: rgba(242, 242, 242, 0.2);\n border: 1px solid #f2f2f2;\n padding: 10px;\n border-radius: 4px;\n}\n","import { Flex, Spin } from 'antd'\nimport { useChatStore } from '../../../stores/Context'\nimport styles from './styles.module.less'\n\ninterface Props {\n data: {\n // AgentType\n appKey: string\n appName: string\n agentKey: string\n iconUrl: string\n }\n loading: boolean\n}\n// :::alert type=appCard data={appKey:\"cube-acc\",agentKey:\"cube-acc\",appName:\"罗拉易账\",iconUrl:\"/icon-url/2e53e398d31627d559e0b3b1b5acb731.png\"} :::\nexport default ({ data, loading }: Props) => {\n const chatStore = useChatStore()\n const onClick = () => {\n chatStore.switchAgent({ appKey: data.appKey, agentKey: data.agentKey, isVerify: true })\n // emit('openApp', { appKey: data.appKey })\n }\n return (\n <Spin spinning={loading} size=\"small\">\n <Flex vertical gap={4} align=\"center\" className={styles.appCard} onClick={onClick}>\n <img src={data.iconUrl} />\n <div className=\"text-ellipsis\" title={data.appName}>\n {data.appName}\n </div>\n </Flex>\n </Spin>\n )\n}\n","import { FileIcon } from '@zero-library/common'\nimport { Flex, Spin } from 'antd'\nimport { FileUrlType } from '../../../stores'\nimport { useChatStore } from '../../../stores/Context'\nimport styles from './styles.module.less'\n\ninterface Props {\n data: FileUrlType\n loading: boolean\n}\n// :::alert type=fileView data={fileUrl:\"\",fileName:\"\",suffix:\"\"} :::\nexport default ({ data, loading }: Props) => {\n const chatStore = useChatStore()\n const onClick = () => {\n chatStore.setPreview(data, false)\n }\n return (\n <Spin spinning={loading} size=\"small\">\n <Flex gap={8} align=\"center\" className={styles.fileView} onClick={onClick}>\n <FileIcon suffix={data.suffix} />\n <div className=\"text-ellipsis\" title={data.fileName}>\n {data.fileName}\n </div>\n </Flex>\n </Spin>\n )\n}\n","import { request } from '@zero-library/common'\n\nexport interface DocType {\n /**\n * 内容\n */\n content: string\n /**\n * 文档ID\n */\n docId: string\n /**\n * 关键字\n */\n keywords?: string[]\n /**\n * 位置\n */\n position?: number\n /**\n * 分段ID\n */\n sid?: string\n /**\n * 令牌数\n */\n tokens?: number\n /**\n * 字数\n */\n wordCount?: number\n}\nexport const docQuery = (paramsStr: string): Promise<R<DocType>> => {\n return request.get(`/uc/doc?${paramsStr}`)\n}\n","import { RenderMarkdown } from '@zero-library/common'\nimport { Drawer, Empty, Spin } from 'antd'\nimport { useEffect, useState } from 'react'\nimport { docQuery } from '../../../../services/file'\n\ninterface Props {\n fileUrl: string\n title: string\n open: boolean\n onClose: () => void\n}\nexport default ({ title, open, onClose, fileUrl }: Props) => {\n const [content, setContent] = useState('')\n const [loading, setLoading] = useState(false)\n const getContent = async () => {\n try {\n setLoading(true)\n const res = await docQuery(fileUrl)\n setContent(res.data?.content)\n } finally {\n setLoading(false)\n }\n }\n useEffect(() => {\n getContent()\n }, [fileUrl])\n return (\n <Drawer title={title} push={false} width=\"100%\" open={open} onClose={onClose}>\n <Spin spinning={loading}>{content ? <RenderMarkdown content={content} /> : <Empty className=\"m-t-32\" />}</Spin>\n </Drawer>\n )\n}\n","// :::alert type=indexQuote data={index:\"1\",fileName:'',fileUrl:\"\"} :::\nimport { isExternal } from '@zero-library/common'\nimport { Flex, Popover, Spin, Tag } from 'antd'\nimport { useEffect, useRef, useState } from 'react'\nimport DocDrawer from './components/DocDrawer'\n\ninterface Props {\n data: {\n index: string\n fileUrl?: string\n fileName: string\n }\n loading: boolean\n}\nexport default ({ data, loading }: Props) => {\n const [open, setOpen] = useState(false)\n const onClick = () => {\n if (!data.fileUrl) return\n if (isExternal(data.fileUrl)) {\n window.open(data.fileUrl, '_blank')\n } else {\n setOpen(true)\n }\n }\n const Content = (\n <div>\n <Flex align=\"center\" gap={8}>\n {/* <FileIcon suffix={data.suffix} fontSize={16} /> */}\n <a onClick={onClick}>{data.fileName}</a>\n </Flex>\n </div>\n )\n const rootRef = useRef<HTMLDivElement>(null)\n // ✅ 渲染后移动到前一个兄弟元素后面\n useEffect(() => {\n const el = rootRef.current\n if (!el) return\n\n const previous = el.previousElementSibling\n if (!previous) return\n\n // ✅ 插入到前一个节点内(作为最后子元素)\n previous.appendChild(el)\n }, [])\n return (\n <div ref={rootRef} className=\"inline-block m-l-8\">\n <Spin spinning={loading} size=\"small\">\n <Popover content={Content}>\n <Tag bordered={false} color=\"processing\" className=\"cursor-pointer\">\n {data.index}\n </Tag>\n </Popover>\n </Spin>\n {open && <DocDrawer fileUrl={data.fileUrl} title={data.fileName} open={open} onClose={() => setOpen(false)} />}\n </div>\n )\n}\n","import { MarkdownEditor } from '@zero-library/common'\nimport { Button, Flex, Spin } from 'antd'\nimport { useEffect, useState } from 'react'\nimport { useChatStore } from '../../../stores/Context'\nimport styles from './styles.module.less'\n\ninterface Props {\n data: {\n content: string\n // messageId: string\n }\n loading: boolean\n}\n// :::alert type=mdEdit data={content:\"\"} :::\nexport default ({ data, loading }: Props) => {\n const chatStore = useChatStore()\n const [value, setValue] = useState('')\n const onOk = () => {\n console.log('value', value)\n chatStore.sendMessage('开始写作', [], { outline: value })\n }\n useEffect(() => {\n setValue(data.content)\n }, [data.content])\n return (\n <Spin spinning={loading} size=\"small\">\n <div className={styles.mdEdit}>\n <MarkdownEditor disabled={loading} value={value} onChange={setValue} showToolbar={false} />\n {!loading && (\n <Flex justify=\"end\" className=\"m-t-16\">\n <Button color=\"primary\" variant=\"outlined\" onClick={onOk}>\n 确认提纲思路,开始写作\n </Button>\n </Flex>\n )}\n </div>\n </Spin>\n )\n}\n","// :::alert type=fileEdit data={fileName:\"\",content:\"\"} :::\nimport { CopyOutlined, PlayCircleOutlined } from '@ant-design/icons'\nimport { FileIcon, RenderMarkdown } from '@zero-library/common'\nimport { Button, Flex, Spin } from 'antd'\nimport { FileTextType } from 'packages/chat-agent/src/stores'\nimport { copy } from '../../../core/utils'\nimport { useChatStore } from '../../../stores/Context'\nimport styles from './styles.module.less'\n\ninterface Props {\n data: FileTextType\n loading: boolean\n}\nexport default ({ data, loading }: Props) => {\n const chatStore = useChatStore()\n // const configState = useSnapshot(chatStore.config)\n const onPreview = () => {\n chatStore.setPreview(data, true)\n }\n // useEffect(() => {\n // if (configState.preview.isShow !== 2 || (loading && configState.preview.isShow === 1)) {\n // chatStore.setPreview(data, {\n // isEdit: true,\n // isShow: 1,\n // isIntact: !loading\n // })\n // }\n // }, [data, loading])\n\n return (\n <Flex vertical className={styles.fileEdit}>\n <Flex gap={8} align=\"center\" justify=\"space-between\" className={styles.fileEditHeader}>\n <Flex gap={4} align=\"center\" className=\"flex-1\">\n <FileIcon suffix={'md'} fontSize={18} />\n <div className=\"text-ellipsis\" title={data.fileName}>\n {data.fileName}\n </div>\n </Flex>\n <Spin spinning={loading} size=\"small\">\n <Flex>\n <Button color=\"default\" variant=\"text\" size=\"small\" icon={<PlayCircleOutlined />} onClick={onPreview}>\n 预览编辑\n </Button>\n <Button color=\"default\" variant=\"text\" size=\"small\" icon={<CopyOutlined />} onClick={() => copy(data.content)}>\n 复制\n </Button>\n </Flex>\n </Spin>\n </Flex>\n <Flex gap={8} align=\"center\" className={styles.fileEditContent}>\n <RenderMarkdown content={data.content} />\n </Flex>\n </Flex>\n )\n}\n","// 文末引用::::alert type=quoteList data={list:[{\"title\":'介绍介绍介绍介绍介绍介绍.pdf',fileUrl:\"2909615725521334\"},{\"title\":'介绍介绍介绍介绍介绍介绍.pdf',fileUrl:\"2909615725521364\"}]} :::\nimport { CaretRightOutlined } from '@ant-design/icons'\nimport { isExternal } from '@zero-library/common'\nimport { Collapse, Flex, Spin } from 'antd'\nimport { useState } from 'react'\nimport DocDrawer from './components/DocDrawer'\nimport styles from './styles.module.less'\ninterface QuoteItem {\n title: string\n fileUrl: string\n}\ninterface Props {\n data: {\n list: QuoteItem[]\n }\n loading: boolean\n}\nexport default ({ data, loading }: Props) => {\n const [open, setOpen] = useState(false)\n const [selectItem, setSelectItem] = useState({} as QuoteItem)\n const onClick = (item: QuoteItem) => {\n if (!item.fileUrl) return\n if (isExternal(item.fileUrl)) {\n window.open(item.fileUrl, '_blank')\n } else {\n setSelectItem(item)\n setOpen(true)\n }\n }\n return (\n <>\n <Spin spinning={loading} size=\"small\">\n <Collapse\n className={styles.quoteList}\n bordered={false}\n ghost\n expandIcon={({ isActive }) => <CaretRightOutlined rotate={isActive ? 90 : 0} />}\n items={[\n {\n key: '1',\n label: '参考资料',\n children: (\n <Flex vertical gap={4}>\n {data.list.map((item) => (\n <p key={item.fileUrl} onClick={() => onClick(item)} className=\"cursor-pointer\">\n {item.title}\n </p>\n ))}\n </Flex>\n )\n }\n ]}\n />\n </Spin>\n {open && <DocDrawer fileUrl={selectItem.fileUrl} title={selectItem.title} open={open} onClose={() => setOpen(false)} />}\n </>\n )\n}\n","export const DEFAULT_NEW_CONV_ID = 'newConvId'\n\nexport const ChatRoleMap: ObjectType<string> = {\n 1: 'user',\n 2: 'assistant'\n}\n","// import openApp from '@/components/ProductShow/openApp'\nimport { Conversation } from '@ant-design/x'\nimport { MessageStatus, SimpleType } from '@ant-design/x/es/use-x-chat'\nimport { deepMerge, getCurrentUser, OK, RenderControl, shouldRender } from '@zero-library/common'\nimport { message } from 'antd'\nimport { proxy } from 'valtio'\nimport { ChatRoleMap, DEFAULT_NEW_CONV_ID } from '../core/constants'\nimport { classifyTime, transform, transforms } from '../core/utils'\nimport {\n AgentBaseMessageEvent,\n AgentConversation,\n AgentErrorMessageEvent,\n AgentInfo,\n agentInfoQuery,\n agentsQuery,\n AgentTextMessageEvent,\n AgentType,\n chatMessagesQuery,\n chatMessageSuggestedQuery,\n ChatMessageType,\n conversationsQuery,\n deleteConversation,\n InputFile,\n PageFlow,\n RecommendQuestion,\n sendChatMessage,\n SendChatMessage,\n updateFeedback,\n UserInfo\n} from '../services'\nexport interface FileUrlType {\n suffix: string\n fileUrl: string\n fileName: string\n // messageId?: string\n}\nexport interface FileTextType {\n content: string\n suffix: string\n fileName: string\n // messageId?: string\n}\n// interface ExpertInterject {\n// chatId: string\n// msg: {\n// msgContent: string\n// imgList: string[]\n// msgSource: number\n// msgType: number\n// msgId: string\n// quoteMsgContent: string\n// quoteMsgId: number\n// quoteMsgType: number\n// quoteMsgImgList: string[]\n// }\n// sender: ChatRecordType['sender']\n// }\nexport interface AgentMessage<Message extends SimpleType> {\n id: string\n role: string\n content: Message\n feedback?: string\n files?: InputFile[]\n status?: MessageStatus\n createTime?: number\n}\nexport interface ReferencesType {\n type: number // 1:markdown引用(拼正文发) 2: 文案引用(不发正文) // 3:消息引用\n content: {\n name?: string\n markdown?: string\n [key: string]: any\n }\n params?: ObjectType<any>\n}\nexport interface ConversationMessageType {\n content?: SendChatMessage['message'] // 输入框内容\n files?: SendChatMessage['files'] // 上传文件内容\n headerOpen?: boolean\n // quoteMsg: QuoteMsgType // 引用消息\n loading: boolean\n message: PageFlow<AgentMessage<string>>\n questionList?: RecommendQuestion[] // 推荐问题\n // expertInterjects?: ExpertInterject[] 专家插话\n references?: ReferencesType // 引用消息(可扩展quoteMsg)\n}\nexport type ChatStoreType = ReturnType<typeof createChatStore>\nexport interface ChatHooks {\n // onBeforeInit?: () => boolean | Promise<boolean>\n // onAfterInit?: () => void\n onSenderFocus?: () => void\n onHeaderClose?: () => void\n onBeforeSend?: (message: SendChatMessage['message'], files: InputFile[]) => boolean | Promise<boolean> | void\n onAfterSend?: () => void\n onBeforeSwitchAgent?: (agentId: string) => boolean | Promise<boolean> | void\n onAfterSwitchAgent?: (agentId: string) => void\n onBeforeSwitchConversation?: (conversationId: string) => boolean | Promise<boolean> | void\n onAfterSwitchConversation?: (conversationId: string) => void\n // onMessageEvent?: (event) => void\n // onAfterLayout?: () => void\n // onError?: (error: unknown) => void\n}\nexport interface ChatParams {\n bizId?: string\n params?: ObjectType<any>\n}\nexport interface ChatLayout {\n // agentList?: RenderControl<any>\n conversationList?: boolean\n conversationListHeader?: boolean\n preview?: boolean\n messageList?: boolean\n senderHeader?: RenderControl<void, void>\n sender?: RenderControl<\n void,\n {\n placeholder?: string\n }\n >\n senderPrompts?: boolean\n senderFooter?: RenderControl<void, void>\n senderExtraBtn?: RenderControl<void, void>\n referencesBtn?: RenderControl<void, void>\n header?: RenderControl<void, void>\n headerTitle?: RenderControl<void, void>\n headerConversationListBtn?: boolean\n headerNewConversationBtn?: RenderControl<void, void>\n headerCloseBtn?: boolean\n}\nconst defaultLayout = {\n conversationList: true,\n conversationListHeader: true,\n preview: true,\n messageList: true,\n senderHeader: false,\n sender: true,\n senderPrompts: true,\n senderFooter: false,\n senderExtraBtn: false,\n referencesBtn: false,\n header: true,\n headerTitle: true,\n headerConversationListBtn: true,\n headerNewConversationBtn: true,\n headerCloseBtn: false\n} as ChatLayout\nexport function createChatStore() {\n const config = proxy({\n hooks: {} as ChatHooks,\n layout: {} as ChatLayout,\n preview: {\n file: {} as FileUrlType | FileTextType,\n isEdit: false // 未使用\n // isShow: 0, // 0 不显示 1 显示 2 用户关闭\n // isIntact: false // true 完整 false 不完整\n },\n userInfo: {} as UserInfo,\n params: {} as ChatParams\n })\n\n const setPreview = (file = {} as FileUrlType | FileTextType, isEdit = false) => {\n if (shouldRender(config.layout.preview)) {\n config.preview = {\n file,\n isEdit\n }\n } else {\n if ((file as FileUrlType)?.fileUrl) {\n window.open((file as FileUrlType).fileUrl, '_blank')\n } else {\n console.log('当前环境不支持预览')\n }\n }\n }\n const setLayout = (layout: ChatLayout) => {\n config.layout = deepMerge(defaultLayout, layout)\n }\n const setConfigParams = (params = {} as ChatParams) => {\n config.params = { bizId: '', ...params }\n }\n const setHooks = (hooks = {} as ChatHooks) => {\n config.hooks = hooks\n }\n const getUserInfo = () => {\n config.userInfo = transform(getCurrentUser(), {\n id: 'id',\n name: 'name',\n iconUrl: 'avatar',\n description: 'name'\n }) as UserInfo\n }\n\n const agents = proxy({\n // 商品列表\n list: [] as AgentType[],\n loading: false\n })\n const getAgentList = async () => {\n try {\n agents.loading = true\n const { data } = await agentsQuery()\n agents.list = data!\n } finally {\n agents.loading = false\n }\n }\n\n // 会话管理\n const conversation = proxy({\n // 每个会话单独存储\n active: {} as Conversation,\n messages: {} as { [key: Conversation['key']]: ConversationMessageType }\n // feedback: {\n // open: false,\n // loading: false,\n // recordId: '',\n // target: undefined as number | undefined\n // }\n })\n const setReferences = (references?: ReferencesType) => {\n conversation.messages[conversation.active.key].references = references\n }\n const setContent = (content?: SendChatMessage['message']) => {\n conversation.messages[conversation.active.key].content = content\n }\n const setFileList = (files = [] as SendChatMessage['files']) => {\n conversation.messages[conversation.active.key].files = files\n }\n const setHeaderOpen = (headerOpen: ConversationMessageType['headerOpen']) => {\n conversation.messages[conversation.active.key].headerOpen = headerOpen\n }\n const removeQuestionList = (key: Conversation['key']) => {\n if (conversation.messages[key].questionList?.length) {\n conversation.messages[key].questionList = []\n }\n }\n const getQuestionList = async (conversationId: Conversation['key'], message: AgentMessage<string>) => {\n if (!message.id || !message.content) return\n const { data } = await chatMessageSuggestedQuery(agent.active.id, message.id)\n conversation.messages[conversationId].questionList = data!\n }\n\n const feedback = async (conversationId: Conversation['key'], messageId: string, rating: string, index: number) => {\n try {\n await updateFeedback({ agentId: agent.active.id, messageId, rating, bizId: config.params.bizId })\n conversation.messages[conversationId].message.items[index].feedback = rating\n } finally {\n }\n }\n // 历史会话管理\n const conversations = proxy({\n list: {\n items: [] as Conversation[],\n lastId: '',\n hasMore: false\n },\n loading: false,\n delLoading: false\n })\n\n const setInitMessage = async (key: Conversation['key']) => {\n conversation.messages[key] = {\n content: '',\n files: [] as SendChatMessage['files'], // 上传文件内容\n headerOpen: false,\n loading: false,\n message: {\n lastId: '',\n hasMore: false,\n items: []\n },\n questionList: [] as RecommendQuestion[] // 推荐问题\n }\n }\n const agent = proxy({\n active: {} as AgentInfo,\n loading: false,\n params: {} as ObjectType<any>\n })\n // TODO 如果多处调用,需要替换变量; 单处调用可以覆盖整个对象\n const setAgentParams = (params = {} as ObjectType<any>) => {\n agent.params = {\n thinkMode: 2,\n ...params\n }\n }\n const switchAgent = async (\n { appKey, agentKey, isVerify = false }: { appKey: string; agentKey: string; isVerify?: boolean },\n conversationId?: Conversation['key']\n ) => {\n const agentId = `${appKey}:${agentKey}`\n // if (agentId === 'complianceAssistant:complianceAssistant' && agents.list.length) {\n // config.params.appList = JSON.stringify(\n // agents.list?.map((app) => ({\n // appKey: app.appKey,\n // agentKey: app.agentKey,\n // appName: app.agentName,\n // iconUrl: app.iconUrl,\n // description: app.description\n // }))\n // )\n // }\n // 切换智能体\n if (agent.active.id === agentId) return\n\n const canProceed = await config.hooks?.onBeforeSwitchAgent?.(agentId)\n if (canProceed === false) return\n\n try {\n agent.loading = true\n if (isVerify) {\n // await openApp(appKey, false)\n }\n const { data } = await agentInfoQuery(agentId)\n agent.active = data!\n setAgentParams()\n config.hooks?.onAfterSwitchAgent?.(agentId)\n switchConversation({ key: conversationId })\n } finally {\n agent.loading = false\n }\n }\n\n const switchConversation = async (chat?: Conversation) => {\n const chatKey = chat?.key || `${agent.active.id}-${DEFAULT_NEW_CONV_ID}`\n if (conversation.active.key === chatKey) return\n\n const canProceed = await config.hooks?.onBeforeSwitchConversation?.(chatKey)\n if (canProceed === false) return\n // 切换会话\n conversation.active = chat?.key ? chat : ({ key: chatKey } as Conversation)\n\n if (!conversation.messages[chatKey]) {\n setInitMessage(chatKey)\n }\n config.hooks?.onAfterSwitchConversation?.(chatKey)\n if (!chatKey.endsWith(DEFAULT_NEW_CONV_ID) && conversation.messages[chatKey].message.items.length === 0) {\n // 获取会话历史记录\n getMessages(agent.active.id, chatKey)\n }\n }\n const getConversations = async (agentId: AgentInfo['id'], lastId?: string, limit = 20) => {\n try {\n conversations.loading = true\n const { data } = await conversationsQuery({ bizId: config.params.bizId, agentId, lastId, limit })\n if (agent.active.id !== agentId) return\n const items = transforms<AgentConversation, Conversation>(data?.items || [], {\n key: 'id',\n label: 'name',\n group: (c): string => {\n return classifyTime(c.createTime)\n },\n timestamp: 'createTime'\n })\n conversations.list = {\n ...data!,\n items: lastId ? [...conversations.list.items, ...items] : items\n }\n // if (!conversation.active.key || !conversations.list.items.find((item) => item.key === conversation.active.key)) {\n // switchConversation()\n // }\n } finally {\n conversations.loading = false\n }\n }\n\n const getMessages = async (agentId: AgentInfo['id'], conversationId: Conversation['key'], lastId?: string) => {\n // , limit = 200\n if (conversationId) {\n if (!conversationId.endsWith(DEFAULT_NEW_CONV_ID)) {\n try {\n // conversation.messages[key].messageLoading = true\n const { data } = await chatMessagesQuery({\n bizId: config.params.bizId,\n agentId,\n conversationId,\n lastId\n // limit\n })\n\n const messageList = transforms<ChatMessageType, AgentMessage<string>>(data?.items || [], {\n id: 'messageId',\n role: (msg) => ChatRoleMap[msg.role],\n content: 'message',\n files: 'files',\n feedback: 'feedback',\n status: 'success'\n })\n conversation.messages[conversationId].message = {\n ...data!,\n items: lastId ? [...messageList, ...conversation.messages[conversationId].message.items] : messageList\n }\n } finally {\n // conversation.messages[key].messageLoading = false\n }\n }\n }\n }\n const delConversation = async (chat: Conversation) => {\n try {\n conversations.delLoading = true\n await deleteConversation({ agentId: agent.active.id, conversationId: chat.key, bizId: config.params.bizId })\n message.success('删除成功')\n conversations.list.items = conversations.list.items.filter((item) => item.key !== chat.key)\n if (conversation.active.key === chat.key) {\n conversation.active = {\n key: `${agent.active.id}-${DEFAULT_NEW_CONV_ID}`\n } as Conversation\n }\n delete conversation.messages[chat.key]\n } finally {\n conversations.delLoading = false\n }\n }\n\n const removePlaceholder = (key: Conversation['key'], msgId: string) => {\n if (conversation.messages[key]) {\n const index = conversation.messages[key].message.items.findLastIndex((m) => m.id === msgId)\n if (index !== -1) {\n conversation.messages[key].message.items.splice(index, 1)\n }\n }\n }\n const updatePlaceholderMessage = (key: Conversation['key'], msgId: string, chunk: AgentBaseMessageEvent) => {\n // 如果当前是新会话,则更新会话\n if (chunk.conversationId && chunk.conversationId !== key && !conversation.messages[chunk.conversationId]) {\n conversation.messages[chunk.conversationId] = conversation.messages[key]\n delete conversation.messages[key]\n // 如果还在当前会话\n if (key === conversation.active.key) {\n conversation.active = {\n key: chunk.conversationId\n }\n }\n // 如果还在当前智能体\n if (key.startsWith(agent.active.id)) {\n getConversations(agent.active.id)\n }\n }\n let placeholder = {} as AgentMessage<string> | undefined\n if (conversation.messages[chunk.conversationId]) {\n placeholder = conversation.messages[chunk.conversationId].message.items.findLast((m) => m.id === msgId)\n } else if (conversation.messages[key]) {\n placeholder = conversation.messages[key].message.items.findLast((m) => m.id === msgId)\n }\n // console.log('placeholder', placeholder, chunk)\n if (!placeholder) return\n if (chunk.type === 'TEXT_MESSAGE_CONTENT') {\n const textEvent = chunk as AgentTextMessageEvent\n placeholder.content += textEvent.message\n return\n }\n\n // 假设流结束或某个特定事件类型表示消息完成\n if (chunk.type === 'TEXT_MESSAGE_END') {\n const textEvent = chunk as AgentTextMessageEvent\n placeholder.id = textEvent.messageId\n placeholder.status = 'success'\n }\n // TODO chunk.code不应该出现在这\n if (chunk.type === 'RUN_ERROR') {\n const textEvent = chunk as AgentErrorMessageEvent\n placeholder.status = 'error'\n placeholder.content = textEvent.message\n } else if (chunk.code && chunk.code !== OK) {\n removePlaceholder(key, msgId)\n }\n // console.log(123, conversation.messages[chunk.conversationId])\n conversation.messages[chunk.conversationId].loading = false\n }\n\n const sendMessage = async (message?: SendChatMessage['message'], files = [] as InputFile[], params?: SendChatMessage['params']) => {\n const conversationId = conversation.active.key\n if (conversation.messages[conversationId].loading) return\n let newMsgContent: SendChatMessage['message'] = '',\n newImgList: SendChatMessage['files'] | undefined\n const references = conversation.messages[conversationId].references\n if (message) {\n newMsgContent = message\n newImgList = files\n } else {\n if (references?.type === 1 && references?.content?.markdown) {\n newMsgContent = references.content.markdown + '\\n'\n }\n newMsgContent = newMsgContent + conversation.messages[conversationId].content!\n newImgList = conversation.messages[conversationId].files\n }\n if (!newMsgContent) return\n\n const canProceed = await config.hooks?.onBeforeSend?.(newMsgContent, newImgList)\n if (canProceed === false) return\n\n conversation.messages[conversationId].loading = true\n\n const userMsg: AgentMessage<string> = {\n id: `user-${Date.now()}`,\n role: 'user',\n content: newMsgContent,\n files: newImgList,\n status: 'success'\n }\n\n // 正在更新中\n const placeholderId = `placeholder-${Date.now()}`\n const placeholder: AgentMessage<string> = {\n id: placeholderId,\n role: 'assistant',\n content: '',\n status: 'loading'\n }\n\n conversation.messages[conversationId].message.items.push(userMsg, placeholder)\n // 参数合并\n const extraParams = {\n ...config.params\n } as ChatParams\n if (!extraParams.params) {\n extraParams.params = {}\n }\n Object.assign(extraParams.params, agent.params, message ? {} : references?.params, params)\n\n if (!message) {\n setContent('')\n setFileList([])\n setReferences()\n setHeaderOpen(false)\n }\n removeQuestionList(conversationId)\n try {\n sendChatMessage({\n agentId: agent.active.id,\n conversationId: conversationId.endsWith(DEFAULT_NEW_CONV_ID) ? undefined : conversationId,\n message: userMsg.content,\n files: userMsg.files,\n ...extraParams,\n onMessageEvent: (event) => {\n // console.log('placeholder', event)\n updatePlaceholderMessage(conversationId, placeholderId, event)\n }\n })\n\n config.hooks?.onAfterSend?.()\n } catch (error) {\n // console.log('sendMessage', error)\n removePlaceholder(conversationId, placeholderId) // 出错时移除占位符\n conversation.messages[conversationId].loading = false\n }\n }\n const cancelReceive = () => {\n conversation.messages[conversation.active.key].loading = false\n }\n return {\n config,\n setLayout,\n setHooks,\n setConfigParams,\n setPreview,\n getUserInfo,\n agents,\n getAgentList,\n conversation,\n setReferences,\n setContent,\n setFileList,\n setHeaderOpen,\n removeQuestionList,\n getQuestionList,\n feedback,\n conversations,\n setInitMessage,\n agent,\n setAgentParams,\n switchAgent,\n getConversations,\n getMessages,\n switchConversation,\n delConversation,\n removePlaceholder,\n sendMessage,\n cancelReceive\n }\n}\n","import { getToken, TOKEN_KEY } from '@zero-library/common'\nimport { message as notify } from 'antd'\nimport { buildURLWithParams } from './utils'\n\n// HTTP 请求选项接口\nexport interface HttpOptions {\n stream?: boolean\n method?: 'POST' | 'GET' | 'PUT' | 'DELETE'\n headers?: Record<string, string>\n contentType?: string\n onChunk?: (chunk: string) => void\n signal?: AbortSignal\n}\n\nfunction processChunk(chunk: string | object, onChunk?: HttpOptions['onChunk']) {\n if (onChunk) {\n onChunk(typeof chunk === 'string' ? chunk : JSON.stringify(chunk))\n }\n}\n\nfunction parseBuffer(buffer: string, onChunk?: HttpOptions['onChunk']): string {\n let bufferF = buffer\n let jsonStartIndex = bufferF.indexOf('{')\n let jsonEndIndex = -1\n\n while (jsonStartIndex !== -1) {\n let braceCount = 0\n let inString = false\n\n for (let i = jsonStartIndex; i < bufferF.length; i++) {\n const char = bufferF[i]\n if (char === '\"' && bufferF[i - 1] !== '\\\\') {\n inString = !inString\n }\n if (!inString) {\n if (char === '{') braceCount++\n if (char === '}') braceCount--\n }\n if (braceCount === 0) {\n jsonEndIndex = i\n break\n }\n }\n\n if (jsonEndIndex !== -1) {\n const jsonString = bufferF.slice(jsonStartIndex, jsonEndIndex + 1)\n try {\n const parsed = JSON.parse(jsonString)\n processChunk(parsed, onChunk)\n } catch (e) {\n console.warn('Failed to parse JSON chunk:', jsonString)\n }\n bufferF = bufferF.slice(jsonEndIndex + 1).trim()\n jsonStartIndex = bufferF.indexOf('{')\n jsonEndIndex = -1\n } else {\n break\n }\n }\n\n return bufferF\n}\n\n// 错误处理\nasync function handleHttpError(status: number, message?: string) {\n const error = new Error(`${status}: ${message}`)\n console.error('request error:', error)\n await notify.error('服务器开小差啦~😖')\n}\n\n// 处理流式响应\nasync function handleStreamResponse(response: Response, options: HttpOptions): Promise<void> {\n const { onChunk } = options\n const reader = response.body!.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n buffer = parseBuffer(buffer, onChunk)\n break\n }\n buffer += decoder.decode(value, { stream: true })\n buffer = parseBuffer(buffer, onChunk)\n }\n}\n\n// 通用 HTTP 请求函数\nexport async function request(url: string, data: any = {}, options: HttpOptions = {}) {\n const { stream = false, method = 'POST', headers = {}, signal } = options\n\n const controller = new AbortController()\n signal?.addEventListener('abort', () => controller.abort())\n\n let targetURL = '/api' + url\n let body: any = data\n\n if (method === 'GET') {\n targetURL = buildURLWithParams(targetURL, data)\n body = undefined\n } else {\n if (!(body instanceof FormData)) {\n headers['Content-Type'] = 'application/json'\n body = JSON.stringify(body)\n }\n }\n\n const response = await fetch(targetURL, {\n method,\n headers: {\n ...(getToken() && { [TOKEN_KEY]: getToken() }),\n ...headers\n },\n body,\n signal: controller.signal\n })\n\n if (!response.ok) {\n const message = await response.text()\n return await handleHttpError(response.status, message)\n }\n\n if (stream && response.body) {\n // 流式数据走这里\n return handleStreamResponse(response, options)\n }\n\n // 普通请求\n const r = (await response.json()) as R<any>\n if (r.code !== 200) {\n return await handleHttpError(r.code, r.message)\n }\n return r\n}\n\n// 快捷方法\nconst get = (url: string, params: Record<string, any> = {}, options: Omit<HttpOptions, 'method'> = {}) =>\n request(url, params, { ...options, method: 'GET' })\n\nconst post = (url: string, data: any = {}, options: Omit<HttpOptions, 'method'> = {}) => request(url, data, { ...options, method: 'POST' })\n\nconst put = (url: string, data: any = {}, options: Omit<HttpOptions, 'method'> = {}) => request(url, data, { ...options, method: 'PUT' })\n\nconst del = (url: string, data: any = {}, options: Omit<HttpOptions, 'method'> = {}) => request(url, data, { ...options, method: 'DELETE' })\n\nexport default { delete: del, get, post, put }\n","import { request } from '@zero-library/common'\nimport fetchRequest from '../core/fetchRequest'\n\nexport interface UserInfo {\n id: string\n iconUrl: string\n name: string\n description: string\n}\nexport interface PageFlow<T> {\n lastId: string\n hasMore: boolean\n limit?: number\n items: T[]\n}\nexport interface PageParams {\n lastId?: string\n limit?: number\n}\nexport interface AgentInfoFileUpload {\n allowedFileTypes: string[]\n enabled: boolean\n maxFileCount: number\n maxFileSize: number\n}\n\n// 接收数据中data的类型\nexport interface RecommendQuestion {\n id: string\n question: string\n}\nexport interface HotQuestionList {\n id: string\n labelName: string\n hotQuestionList: RecommendQuestion[]\n}\nexport interface AgentInfo {\n id: string\n iconUrl: string\n name: string\n description: string\n parameters: {\n fileUpload: AgentInfoFileUpload\n }\n recommendQuestions: RecommendQuestion[]\n labels: HotQuestionList[]\n}\nexport const agentInfoQuery = (agentId: AgentInfo['id']): Promise<R<AgentInfo>> => {\n return request.get('/agent/detail', { agentId })\n}\n\nexport interface AgentType {\n appKey: string\n agentName: string\n agentKey: string\n iconUrl: string\n description?: string\n}\nexport const agentsQuery = (): Promise<R<AgentType[]>> => {\n return request.get('/agent')\n}\nexport interface AgentConversationsQuery extends PageParams {\n agentId: AgentInfo['id']\n bizId?: string\n}\nexport interface AgentConversation {\n id: number\n name: string\n createTime: number\n}\nexport const conversationsQuery = (params: AgentConversationsQuery): Promise<R<PageFlow<AgentConversation>>> => {\n return request.get('/agent/conversation', params)\n}\nexport interface DeleteConversation {\n agentId: AgentInfo['id']\n conversationId: string\n bizId?: string\n}\nexport const deleteConversation = (params: DeleteConversation): Promise<R<null>> => {\n return request.delete('/agent/conversation', params)\n}\n\nexport interface MessagesQuery extends PageParams {\n agentId: AgentInfo['id']\n conversationId: string\n bizId?: string\n}\nexport type FileMode = 'local' | 'remote'\nexport interface InputFile {\n type: string // 文件类型 document image audio video custom\n mode: FileMode\n name: string\n // 上传后的文件id\n id: string\n url: string\n}\nexport interface ChatMessageType {\n agentId: string\n conversationId: string\n messageId: string\n role: number\n message: string\n files?: InputFile[]\n feedback?: string\n createTime: number\n}\nexport const chatMessagesQuery = (params: MessagesQuery): Promise<R<PageFlow<ChatMessageType>>> => {\n return request.get('/agent/message', params)\n}\n\nexport const chatMessageSuggestedQuery = (agentId: AgentInfo['id'], messageId: ChatMessageType['messageId']): Promise<R<RecommendQuestion[]>> => {\n return request.get('/agent/message/suggested', { agentId, messageId })\n}\n\nexport interface UpdateFeedback {\n agentId: string\n messageId: string\n rating: string\n bizId?: string\n}\nexport const updateFeedback = (params: UpdateFeedback): Promise<R<null>> => {\n return request.put('/agent/message/feedback', params)\n}\n\nexport const uploadFile = (formData: FormData): Promise<R<InputFile>> => {\n return request.post('/agent/file', formData)\n}\n/** Agent状态 */\nexport type MessageType =\n | 'TEXT_MESSAGE_START'\n | 'TEXT_MESSAGE_CONTENT'\n | 'TEXT_MESSAGE_END'\n | 'RUN_STARTED'\n | 'RUN_FINISHED'\n | 'RUN_ERROR'\n | 'STEP_STARTED'\n | 'STEP_FINISHED'\n\nexport interface AgentBaseMessageEvent {\n conversationId: string\n type: MessageType | string\n}\n\nexport interface AgentBaseMessageEvent {\n code: number\n conversationId: string\n type: MessageType | string\n}\n\nexport interface AgentRunMessageEvent extends AgentBaseMessageEvent {\n runId: string\n message: string\n}\n\nexport interface AgentStepMessageEvent extends AgentBaseMessageEvent {\n stepName: string\n}\n\nexport interface AgentTextMessageEvent extends AgentBaseMessageEvent {\n messageId: string\n message: string\n}\n\nexport interface AgentErrorMessageEvent extends AgentBaseMessageEvent {\n code: number\n message: string\n}\nexport interface SendChatMessage {\n agentId?: string\n conversationId?: string\n message: string\n files?: InputFile[]\n params?: ObjectType<any>\n bizId?: string\n onMessageEvent?: (event: AgentBaseMessageEvent) => void\n}\nexport const sendChatMessage = (params: SendChatMessage) => {\n return fetchRequest.post(\n '/agent/chat',\n { ...params, stream: true },\n {\n stream: true,\n onChunk: (chunk: string) => {\n if (params.onMessageEvent) {\n const event = JSON.parse(chunk) as AgentBaseMessageEvent\n params.onMessageEvent(event)\n }\n }\n }\n )\n}\n","import { forwardRef, useEffect, useImperativeHandle, useMemo } from 'react'\n\nimport { CloseOutlined } from '@ant-design/icons'\nimport { Conversation, XProvider } from '@ant-design/x'\nimport { downloadFile, FilePreview, MarkdownEditor, RenderWrapper, shouldRender } from '@zero-library/common'\nimport { Button, Flex, Spin, Splitter, Tag, ThemeConfig } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport { InputFile } from '../../services'\nimport type { ChatHooks, ChatLayout, ChatParams, FileTextType, FileUrlType, ReferencesType } from '../../stores'\nimport { createChatStore } from '../../stores'\nimport { ChatProvider } from '../../stores/Context'\nimport AgentHeader from '../common/AgentHeader'\nimport BubbleListItems from '../common/BubbleListItems'\nimport ChatSender from '../common/ChatSender'\nimport ConversationList from '../common/ConversationList'\nimport ConversationListHeader from '../common/ConversationListHeader'\nimport SenderPromptsItems from '../common/SenderPromptsItems'\nimport chatStyles from '../common/styles.module.less'\nimport styles from './styles.module.less'\n\ninterface Props {\n theme?: ThemeConfig\n defaultAgent?: {\n appKey?: string\n agentKey?: string\n conversationId?: string\n }\n params?: ChatParams\n hooks?: ChatHooks\n layout?: ChatLayout\n}\nexport interface ChatHandle {\n sendMessage: (message?: string, files?: InputFile[]) => Promise<void>\n switchAgent: (\n { appKey, agentKey, isVerify }: { appKey: string; agentKey: string; isVerify: boolean },\n conversationId?: Conversation['key']\n ) => Promise<void>\n switchConversation: (conversation?: Conversation) => Promise<void>\n setReferences: (references?: ReferencesType) => void\n setMessage: (message?: string) => void\n setFiles: (files?: InputFile[]) => void\n setParams: (params: Props['params']) => void\n setLayout: (layout: Props['layout']) => void\n}\nexport default forwardRef<ChatHandle, Props>(({ theme, params, hooks, layout, defaultAgent }: Props, ref) => {\n const chatStore = useMemo(() => createChatStore(), [])\n\n useEffect(() => {\n chatStore.getUserInfo()\n if (defaultAgent?.appKey && defaultAgent?.agentKey) {\n chatStore.switchAgent({ appKey: defaultAgent.appKey, agentKey: defaultAgent.agentKey }, defaultAgent.conversationId)\n }\n }, [])\n useEffect(() => {\n // console.log('layout changed:', layout)\n chatStore.setLayout(layout)\n }, [layout])\n useEffect(() => {\n // console.log('params changed:', params)\n chatStore.setConfigParams(params)\n }, [params])\n useEffect(() => {\n // console.log('hooks changed:', hooks)\n chatStore.setHooks(hooks)\n }, [hooks])\n\n const agentState = useSnapshot(chatStore.agent)\n const configState = useSnapshot(chatStore.config)\n useImperativeHandle(\n ref,\n () => ({\n sendMessage: chatStore.sendMessage,\n switchAgent: chatStore.switchAgent,\n switchConversation: chatStore.switchConversation,\n setReferences: chatStore.setReferences,\n setMessage: chatStore.setContent,\n setFiles: chatStore.setFileList,\n setParams: chatStore.setConfigParams,\n setLayout: chatStore.setLayout\n }),\n []\n )\n const setSplitterSizes = (sizes: number[]) => {\n console.log(sizes)\n }\n const hasPreView = useMemo(() => {\n return (\n shouldRender(configState.layout.preview as ChatLayout['preview']) &&\n (!!(configState.preview.file as FileUrlType).fileUrl || !!(configState.preview.file as FileTextType).content)\n )\n }, [configState.layout.preview, configState.preview.file])\n return (\n <XProvider theme={{ cssVar: true, ...theme }}>\n <ChatProvider store={chatStore}>\n <Spin spinning={agentState.loading} wrapperClassName=\"full-spin\">\n <div className=\"overflow-hidden height-full\">\n <Splitter onResize={setSplitterSizes}>\n {shouldRender(configState.layout.conversationList as ChatLayout['conversationList']) && (\n <Splitter.Panel size={360} collapsible={false} resizable={false}>\n <Flex vertical className=\"height-full\">\n <RenderWrapper\n control={configState.layout.conversationListHeader as ChatLayout['conversationListHeader']}\n DefaultComponent={ConversationListHeader}\n />\n <div className=\"full-scroll\">\n <RenderWrapper\n control={configState.layout.conversationList as ChatLayout['conversationList']}\n DefaultComponent={ConversationList}\n />\n </div>\n </Flex>\n </Splitter.Panel>\n )}\n {hasPreView && (\n <Splitter.Panel collapsible={false} resizable={false}>\n {(configState.preview.file as FileUrlType).fileUrl && (\n <Flex vertical className=\"height-full\">\n <Flex justify=\"space-between\" align=\"center\" gap={16} className={styles.nsPreviewHeader}>\n <div className={styles.nsPreviewHeaderTitle}>{configState.preview.file.fileName}</div>\n <Flex gap={8} justify=\"center\" align=\"center\">\n <Button\n color=\"primary\"\n variant=\"outlined\"\n onClick={() => downloadFile((configState.preview.file as FileUrlType).fileUrl, configState.preview.file.fileName)}\n >\n 下载\n </Button>\n <Button onClick={() => chatStore.setPreview()}>关闭</Button>\n </Flex>\n </Flex>\n <div className=\"full-scroll\">\n <FilePreview\n {...(configState.preview.file as FileUrlType)}\n pdfParams={{\n isHasThumbnails: false\n }}\n />\n </div>\n </Flex>\n )}\n {(configState.preview.file as FileTextType).content && (\n <MarkdownEditor\n value={(configState.preview.file as FileTextType).content}\n // onChange={onUpdateText}\n onQuote={(text) => {\n chatStore.setReferences({\n type: 2,\n content: {\n name: text,\n markdown: text\n },\n params: {\n outline: text\n }\n })\n }}\n extraNav={\n <>\n {/* <Tag bordered={false} color=\"default\" className=\"cursor-pointer\">\n 下载\n </Tag> */}\n <Tag bordered={false} color=\"default\" className=\"cursor-pointer\" onClick={() => chatStore.setPreview()}>\n <CloseOutlined />\n </Tag>\n </>\n // loading && (\n // <Tag bordered={false} color=\"default\">\n // <Flex gap={4} align=\"center\">\n // <SyncOutlined spin style={{ color: LgPrimaryColor }} />\n // 保存中\n // </Flex>\n // </Tag>\n // )\n }\n />\n )}\n </Splitter.Panel>\n )}\n <Splitter.Panel collapsible={false} resizable={false} size={hasPreView ? 400 : undefined}>\n <Flex vertical className={classNames('height-full')}>\n {/** 对话区 - header */}\n <RenderWrapper control={configState.layout.header as ChatLayout['header']} DefaultComponent={AgentHeader} />\n <Flex vertical className={classNames('full-scroll', chatStyles.nsBody)}>\n <Flex justify=\"center\" vertical gap={24} className={classNames('height-full', chatStyles.nsBodyWidth)}>\n {shouldRender(configState.layout.messageList) && (\n <div className=\"full-scroll\">\n <RenderWrapper\n control={configState.layout.messageList as ChatLayout['messageList']}\n DefaultComponent={<BubbleListItems avatar={{ user: false, assistant: true }} />}\n />\n </div>\n )}\n <RenderWrapper\n control={configState.layout.senderHeader as ChatLayout['senderHeader']}\n DefaultComponent={<div className={styles.nsChatTitle}>我是 {agentState.active.name}</div>}\n />\n\n <Flex vertical gap={8}>\n {/* 🌟 提示词 */}\n <RenderWrapper\n control={configState.layout.senderPrompts as ChatLayout['senderPrompts']}\n DefaultComponent={SenderPromptsItems}\n />\n {/* 🌟 输入框 */}\n <RenderWrapper control={configState.layout.sender as ChatLayout['sender']} DefaultComponent={ChatSender} />\n </Flex>\n <RenderWrapper control={configState.layout.senderFooter} DefaultComponent={<></>} />\n </Flex>\n </Flex>\n </Flex>\n </Splitter.Panel>\n </Splitter>\n </div>\n </Spin>\n </ChatProvider>\n </XProvider>\n )\n})\n","import { CloseOutlined, CommentOutlined, PlusOutlined } from '@ant-design/icons'\nimport { RenderWrapper } from '@zero-library/common'\nimport { Avatar, Button, Flex, Popover, Space } from 'antd'\nimport { useSnapshot } from 'valtio'\nimport { ChatLayout } from '../../stores'\nimport { useChatStore } from '../../stores/Context'\nimport ConversationList from './ConversationList'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const configState = useSnapshot(chatStore.config)\n const conversationsState = useSnapshot(chatStore.conversations)\n return (\n <>\n <Flex justify=\"space-between\" align=\"center\" className={styles.nsAgentHeader}>\n <Flex gap={4} align=\"center\">\n <RenderWrapper\n control={configState.layout.headerTitle as ChatLayout['headerTitle']}\n DefaultComponent={\n <>\n <Avatar size={22} src={agentState.active.iconUrl} alt={agentState.active.name} />\n <div className={styles.nsChatTitle}>{agentState.active.name}</div>\n </>\n }\n />{' '}\n </Flex>\n <Space size={0}>\n <RenderWrapper\n control={configState.layout.headerNewConversationBtn as ChatLayout['headerNewConversationBtn']}\n DefaultComponent={<Button type=\"text\" size=\"large\" icon={<PlusOutlined />} onClick={() => chatStore.switchConversation()} />}\n />\n\n <RenderWrapper\n control={configState.layout.headerConversationListBtn as ChatLayout['headerConversationListBtn']}\n DefaultComponent={\n <Popover\n getPopupContainer={(e) => e}\n placement=\"bottom\"\n classNames={{ body: styles.nsChatHeaderPopover }}\n content={<ConversationList />}\n trigger={['click']}\n >\n <Button type=\"text\" size=\"large\" icon={<CommentOutlined />} />\n </Popover>\n }\n />\n\n <RenderWrapper\n control={configState.layout.headerCloseBtn as ChatLayout['headerCloseBtn']}\n DefaultComponent={<Button type=\"text\" size=\"large\" onClick={configState.hooks?.onHeaderClose} icon={<CloseOutlined />} />}\n />\n </Space>\n </Flex>\n </>\n )\n}\n","import { DeleteOutlined, RedoOutlined } from '@ant-design/icons'\nimport { Conversations } from '@ant-design/x'\nimport type { Conversation } from '@ant-design/x/es/conversations/interface'\nimport { Empty, Spin } from 'antd'\nimport { useEffect } from 'react'\nimport InfiniteScroll from 'react-infinite-scroll-component'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const conversationsState = useSnapshot(chatStore.conversations)\n const conversationState = useSnapshot(chatStore.conversation)\n\n useEffect(() => {\n if (agentState.active.id) {\n chatStore.getConversations(agentState.active.id)\n }\n }, [agentState.active.id])\n return (\n <>\n <div className=\"height-full scroll-fade-in\" id=\"scrollableDiv\">\n {conversationsState.list.items.length ? (\n <InfiniteScroll\n dataLength={conversationsState.list.items.length}\n next={() => {\n console.log('next')\n chatStore.getConversations(agentState.active.id, conversationsState.list.lastId)\n }}\n hasMore={conversationsState.list.hasMore}\n loader={\n <div className=\"text-center\">\n <Spin indicator={<RedoOutlined spin />} size=\"small\" />\n </div>\n }\n style={{ overflow: 'hidden' }}\n scrollableTarget=\"scrollableDiv\" // 👈 指定滚动容器\n >\n <Conversations\n className={styles.nsConversations}\n items={conversationsState.list.items as Conversation[]}\n activeKey={conversationState.active.key}\n onActiveChange={async (key) => chatStore.switchConversation({ key })}\n groupable\n menu={(conversation) => ({\n items: [\n {\n label: '删除会话',\n key: 'delete',\n icon: <DeleteOutlined />,\n danger: true,\n onClick: (menuInfo) => {\n menuInfo.domEvent.stopPropagation()\n chatStore.delConversation(conversation)\n }\n }\n ]\n })}\n />\n </InfiniteScroll>\n ) : (\n <Empty description=\"暂无会话记录\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </div>\n </>\n )\n}\n",".loadingMessage {\n background-image: linear-gradient(90deg, #ff6b23 0%, #af3cb8 31%, #53b6ff 89%);\n background-size: 100% 2px;\n background-repeat: no-repeat;\n background-position: bottom;\n padding-bottom: 2px;\n}\n.nsConversations {\n padding: 0 24px;\n}\n.nsConversations :global .ant-conversations-group-title {\n padding: 0;\n}\n.nsConversations :global .ant-conversations-group-title .ant-typography {\n color: #878aab;\n}\n.nsConversations :global .ant-conversations-list .ant-conversations-item {\n padding-left: 16px;\n}\n.nsConversations :global .ant-conversations-list .ant-conversations-item .ant-conversations-label {\n color: rgba(0, 0, 0, 0.88);\n}\n.nsConversations :global .ant-conversations-list .ant-conversations-item.ant-conversations-item-active .ant-conversations-label {\n color: var(--ant-color-primary);\n}\n.nsBody {\n background-color: #f6f7fb;\n}\n.nsBody .nsBodyWidth {\n padding: 12px 0;\n margin: 0 auto;\n max-width: 896px;\n min-width: 320px;\n width: calc(100% - 24px) !important;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content-filled {\n background-color: #fff;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-end .ant-bubble-content-filled {\n background-color: var(--ant-color-primary-bg);\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content .ant-typography {\n font-size: 16px;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content > .ant-collapse {\n margin-bottom: 16px;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content > .ant-collapse .ant-collapse-header {\n color: #8f91a8;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content > .ant-collapse .ant-collapse-content {\n color: #8f91a8;\n margin-top: -10px;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content > .ant-collapse .ant-collapse-content .ant-collapse-content-box {\n padding: 0 10px 0 24px;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n.nsAgentHeader {\n padding: 8px 16px;\n background-color: #fff;\n}\n.nsAgentHeader .nsChatTitle {\n font-size: 16px;\n font-weight: bold;\n}\n.nsAgentHeader .nsChatHeaderPopover {\n max-height: 500px;\n width: 300px;\n display: flex;\n flex-direction: column;\n}\n.nsAgentHeader .nsChatHeaderPopover :global .ant-popover-inner-content {\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n.chatWelcomeWrap :global .ant-prompts .ant-prompts-list {\n overflow: auto;\n}\n.chatWelcomeWrap .chatWelcome :global .ant-welcome-icon > img {\n border-radius: 10px;\n max-width: initial;\n}\n.chatWelcomeWrap .chatWelcomePrompts {\n width: 300px;\n}\n.senderListTitle {\n width: 300px;\n}\n.senderList :global .ant-list-items {\n max-height: 350px;\n overflow-y: auto;\n margin-right: -12px;\n padding-right: 12px;\n}\n.senderList.historyList :global .ant-list-items {\n max-height: initial;\n}\n.senderList .senderListItem {\n background-color: #f6f6f6;\n color: #6b6b6b !important;\n border-radius: 5px;\n width: 300px;\n padding: 6px 12px !important;\n margin-top: 12px;\n font-size: 14px;\n cursor: pointer;\n}\n.senderList .senderListFooter {\n font-size: 12px;\n}\n.nsChatUserName {\n font-size: 16px;\n font-weight: bold;\n}\n.nsSenderReferenceHeaderTitle:global > .ant-sender-header-title {\n overflow: hidden;\n}\n.nsSenderReferenceHeaderContent {\n padding: 0 !important;\n}\n","export const customComponents = {\n appCard: () => import('./AppCard'),\n fileView: () => import('./FileView'),\n indexQuote: () => import('./IndexQuote'),\n mdEdit: () => import('./MdEdit'),\n fileEdit: () => import('./FileEdit'),\n quoteList: () => import('./QuoteList')\n}\n","import { Attachments, Bubble, BubbleProps } from '@ant-design/x'\nimport { RenderMarkdown } from '@zero-library/common'\nimport { Flex } from 'antd'\nimport { AgentMessage } from '../stores'\nimport { customComponents } from '../ui/common/markdownAlert'\n\ninterface Props {\n message: AgentMessage<string>\n placement: BubbleProps['placement']\n}\n\nexport default ({ message, placement }: Props) => {\n return (\n <Flex vertical>\n {message.content && <Bubble placement={placement} content={<RenderMarkdown content={message.content} customComponents={customComponents} />} />}\n {message.files?.map((file, index) => (\n <Bubble\n className=\"m-t-8\"\n key={index}\n variant=\"borderless\"\n placement={placement}\n content={\n <Attachments.FileCard\n key={index}\n item={{\n uid: file.id,\n name: file.name,\n url: file.url\n }}\n />\n }\n />\n ))}\n {/* {message.quoteMsg?.quoteMsgId && (\n <Bubble\n className={classNames(styles.chatQuoteMsg)}\n placement={placement}\n content={\n <Flex vertical gap={8}>\n {message.quoteMsg.quoteMsgContent && (\n <Flex>\n <span>【引用消息】:</span>\n <Flex flex={1} className=\"text-ellipsis-3\">\n {message.quoteMsg.quoteMsgContent}\n </Flex>\n </Flex>\n )}\n {message.quoteMsg?.msgImgList && message.quoteMsg.msgImgList.length > 0 && (\n <Flex>\n <span>【引用图片】:</span>\n <Flex gap={8} wrap flex={1}>\n {message.quoteMsg.msgImgList.map((url, index) => (\n <Attachments.FileCard\n key={index}\n item={{\n uid: url,\n url,\n name: getFileName(url)\n }}\n />\n ))}\n </Flex>\n </Flex>\n )}\n </Flex>\n }\n />\n )} */}\n </Flex>\n )\n}\n","import { CopyOutlined, DislikeOutlined, LikeOutlined, OpenAIOutlined } from '@ant-design/icons'\nimport { Bubble, BubbleProps, Prompts, Welcome } from '@ant-design/x'\nimport { BubbleDataType } from '@ant-design/x/es/bubble/BubbleList'\nimport { isBoolean, UserAvatar } from '@zero-library/common'\nimport { Avatar, AvatarProps, Button, Flex, GetRef, Space } from 'antd'\nimport classNames from 'classnames'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { useSnapshot } from 'valtio'\nimport ChatMessageRender from '../../components/MessageRender'\nimport { copy } from '../../core/utils'\nimport { AgentMessage, ConversationMessageType } from '../../stores'\nimport { useChatStore } from '../../stores/Context'\nimport MessageAIRender from './MessageAIRender'\nimport styles from './styles.module.less'\n\ninterface Props {\n avatar?: boolean | { user: boolean; assistant: boolean }\n}\n/* 🌟 消息列表 */\nexport default ({ avatar = true }: Props) => {\n const chatStore = useChatStore()\n\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n const configState = useSnapshot(chatStore.config)\n\n const conversationRoles = useMemo(() => {\n return {\n user: {\n user: 'user',\n placement: 'end',\n avatar: (isBoolean(avatar) ? avatar : avatar?.user) ? (\n <UserAvatar size={30} avatarSrc={configState.userInfo?.iconUrl} userName={configState.userInfo?.name} />\n ) : null\n },\n assistant: {\n user: 'assistant',\n placement: 'start',\n avatar: (isBoolean(avatar) ? avatar : avatar?.assistant) ? { src: agentState.active.iconUrl, icon: <OpenAIOutlined /> } : null\n }\n } as ObjectType<{ user: 'assistant' | 'user'; placement: BubbleProps['placement']; avatar?: AvatarProps }>\n }, [configState.userInfo, agentState.active, avatar])\n // 当前会话参数\n const chatMessage = useMemo(\n () => conversationState.messages[conversationState.active.key] || ({} as ConversationMessageType),\n [conversationState.messages[conversationState.active.key]]\n )\n const placeholderNode = useMemo(\n () => [\n {\n key: 'placeholder',\n content: (\n <Space direction=\"vertical\" size={16} className={styles.chatWelcomeWrap}>\n <Welcome\n className={classNames(styles.chatWelcome, 'p-t-32')}\n variant=\"borderless\"\n icon={<Avatar shape=\"square\" size={58} src={agentState.active.iconUrl} />}\n title={`你好,我是${agentState.active.name || ''}`}\n description={agentState.active.description || ''}\n />\n {agentState.active.recommendQuestions?.length > 0 && (\n <Prompts\n className=\"m-t-16\"\n wrap\n items={[\n {\n key: '1',\n label: '🤔 推荐问题:',\n children: agentState.active.recommendQuestions.map(({ question, id }) => ({\n key: id,\n description: (\n <span onClick={() => chatStore.onSendMessage(question)} className={classNames(styles.chatWelcomePrompts, 'text-ellipsis')}>\n {question}\n </span>\n )\n }))\n }\n ]}\n />\n )}\n </Space>\n ),\n variant: 'borderless'\n } as BubbleDataType\n ],\n [agentState.active]\n )\n\n const questionList = useMemo(\n () =>\n chatMessage?.questionList?.length\n ? [\n {\n key: 'questionList',\n content: (\n <Prompts\n className=\"m-b-16\"\n styles={{\n list: {\n overflow: 'auto'\n }\n }}\n vertical\n items={chatMessage?.questionList.map(({ question, id }) => ({\n key: id,\n description: <span onClick={() => chatStore.onSendMessage(question)}>{question}</span>\n }))}\n />\n ),\n variant: 'borderless',\n avatar: { style: { visibility: 'hidden' } }\n } as BubbleDataType\n ]\n : [],\n [chatMessage?.questionList]\n )\n\n const chatRecords = useMemo(() => {\n return (chatMessage?.message?.items || []).map((message, index) => {\n // let isHasTime = false\n // if (index === 0) {\n // isHasTime = true\n // } else {\n // const lastMessage = chatMessage.message[index - 1]\n // // if((lastMessage.sendDate - message.sendDate) > 60 * 60 * 1000)\n // }\n return {\n key: message.id || -index,\n placement: conversationRoles[message.role].placement,\n variant: 'borderless',\n avatar: conversationRoles[message.role].avatar,\n content:\n message.role === 'assistant' ? (\n <MessageAIRender message={message as AgentMessage<string>} placement={conversationRoles[message.role].placement} />\n ) : (\n <ChatMessageRender message={message as AgentMessage<string>} placement={conversationRoles[message.role].placement} />\n ),\n // loadingRender: () => <Spin size=\"small\" />,\n footer: message.role === 'assistant' && message.id && (\n <Flex>\n <Button onClick={() => copy(message.content as string)} color=\"default\" variant=\"text\" size=\"small\" icon={<CopyOutlined />} />\n <Button\n color={message.feedback === 'like' ? 'primary' : 'default'}\n disabled={message.status === 'loading'}\n size=\"small\"\n variant=\"text\"\n icon={<LikeOutlined />}\n onClick={() => chatStore.feedback(conversationState.active.key, message.id, 'like', index)}\n />\n <Button\n color={message.feedback === 'dislike' ? 'primary' : 'default'}\n disabled={message.status === 'loading'}\n size=\"small\"\n variant=\"text\"\n icon={<DislikeOutlined />}\n onClick={() => chatStore.feedback(conversationState.active.key, message.id, 'dislike', index)}\n />\n {/* <Button color=\"default\" variant=\"text\" size=\"large\" icon={<ShareAltOutlined />} /> */}\n {/* <Button color=\"default\" variant=\"text\" size=\"large\" icon={<ReloadOutlined />} /> */}\n </Flex>\n )\n // ...(isHasTime\n // ? { rootClassName: styles.hasSendTime, classNames: { header: styles.sendTime }, header: <span>{formatDate(message.sendDate)}</span> }\n // : {})\n } as BubbleDataType\n })\n }, [chatMessage?.message])\n const bubbleListItems = useMemo(() => {\n const list = []\n if (chatRecords.length > 0) {\n list.push(...chatRecords, ...questionList)\n }\n if (list.length) {\n return list\n }\n return [...placeholderNode]\n }, [chatRecords, questionList, placeholderNode])\n\n const listRef = useRef<GetRef<typeof Bubble.List>>(null)\n useEffect(() => {\n // console.log(\n // 'bubbleListItems',\n // bubbleListItems,\n // listRef.current?.nativeElement.scrollHeight,\n // listRef.current?.nativeElement.scrollTop,\n // listRef.current?.nativeElement.clientHeight\n // )\n if (\n bubbleListItems.length &&\n (listRef.current?.nativeElement.scrollHeight ?? 0) -\n ((listRef.current?.nativeElement.scrollTop ?? 0) + (listRef.current?.nativeElement.clientHeight ?? 0)) <\n 100\n ) {\n listRef.current?.scrollTo({ key: bubbleListItems[bubbleListItems.length - 1].key, block: 'end' })\n }\n }, [bubbleListItems])\n return (\n <Bubble.List\n key={conversationState.active.key}\n ref={listRef}\n items={bubbleListItems}\n className={classNames(styles.nsBubbleList, 'height-full', 'scroll-fade-in')}\n />\n )\n}\n","import { CloseCircleOutlined } from '@ant-design/icons'\nimport { Bubble, BubbleProps } from '@ant-design/x'\nimport { RenderMarkdown } from '@zero-library/common'\nimport { Collapse, Flex, Spin, Typography } from 'antd'\nimport classNames from 'classnames'\nimport { useMemo } from 'react'\nimport { AgentMessage } from '../../stores'\nimport { customComponents } from './markdownAlert'\nimport styles from './styles.module.less'\n\ninterface Props {\n message?: AgentMessage<string>\n placement: BubbleProps['placement']\n}\n\nfunction extractThinkContent(content: string): {\n mainContent: string\n thinkContents: string[]\n thinkBuffer: string\n} {\n let main = content\n const thinkContents: string[] = []\n let buffer = ''\n\n const regex = /<think>(.*?)<\\/think>/gs\n for (const match of content.matchAll(regex)) {\n const thinkText = match[1].trim()\n thinkContents.push(thinkText)\n main = main.replace(match[0], '')\n }\n\n const lastStart = content.lastIndexOf('<think>')\n const lastEnd = content.lastIndexOf('</think>')\n if (lastStart > lastEnd) {\n buffer = content.slice(lastStart).replace('<think>', '')\n main = main.slice(0, lastStart)\n }\n\n return { mainContent: main, thinkContents, thinkBuffer: buffer }\n}\n\nfunction renderMarkdownPanel(content: string, label: string, key: string) {\n return {\n key,\n label,\n children: <RenderMarkdown content={content} customComponents={customComponents} />\n }\n}\n\nexport default ({ message, placement }: Props) => {\n const { mainContent, thinkContents, thinkBuffer } = useMemo(() => {\n if (!message?.content) return { mainContent: '', thinkContents: [], thinkBuffer: '' }\n return extractThinkContent(message.content)\n }, [message?.content])\n\n const isWaiting = !message || (!message.content && message.status === 'loading')\n if (isWaiting) {\n return (\n <Typography>\n <Spin size={'small'} />\n </Typography>\n )\n }\n return (\n <Flex vertical>\n <Bubble\n placement={placement}\n className={classNames({ [styles.loadingMessage]: message.status === 'loading' })}\n content={\n <>\n {/* 渲染 think 内容,默认展开所有项 */}\n {thinkContents.length > 0 && (\n <Collapse\n ghost\n size=\"small\"\n defaultActiveKey={thinkContents.map((_, i) => `think-${i}`)}\n items={thinkContents.map((content, index) => renderMarkdownPanel(content, `思考过程`, `think-${index}`))}\n />\n )}\n\n {/* 渲染缓冲中的 think 内容 */}\n {thinkBuffer && (\n <Collapse\n ghost\n size=\"small\"\n defaultActiveKey={['buffer-think']}\n items={[renderMarkdownPanel(thinkBuffer, '仔细思考中...', 'buffer-think')]}\n />\n )}\n\n {/* 渲染主内容 */}\n {mainContent && message.status === 'error' ? (\n <div>\n <CloseCircleOutlined color={'red'} /> {mainContent}\n </div>\n ) : (\n <RenderMarkdown content={mainContent} customComponents={customComponents} />\n )}\n </>\n }\n />\n </Flex>\n )\n}\n","import { CloudUploadOutlined } from '@ant-design/icons'\nimport { Attachments } from '@ant-design/x'\nimport { isNullOrUnDef, isNumber, isObject, useDebounce, useRefState } from '@zero-library/common'\nimport { GetProp, message } from 'antd'\nimport { RcFile, UploadFile } from 'antd/lib/upload'\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from 'react'\nimport { getBase64 } from '../core/utils'\nimport { InputFile, uploadFile } from '../services'\nimport './styles.less'\n\ninterface Props {\n maxCount?: number\n accept?: readonly string[]\n fileSize?: number\n fileSizeTip?: string\n fileList?: InputFile[]\n onChange: (fileList: InputFile[]) => void\n extraParams?: ObjectType<string | undefined>\n}\nexport default forwardRef(({ maxCount, accept, fileSize, fileSizeTip, fileList = [], onChange, extraParams }: Props, ref) => {\n const fileListRef = useRef<InputFile[]>([])\n const [attachedFiles, setAttachedFiles, getAttachedFiles] = useRefState<GetProp<typeof Attachments, 'items'>>([])\n // 初始化 fileList 映射为 Attachments 所需格式\n useEffect(() => {\n if (JSON.stringify(fileList) !== JSON.stringify(fileListRef.current)) {\n fileListRef.current = fileList\n const mapped: GetProp<typeof Attachments, 'items'> = fileList.map((file) => ({\n ...file,\n uid: file.id,\n status: 'done'\n }))\n setAttachedFiles(mapped)\n }\n }, [fileList])\n useEffect(() => {\n // console.log('attachedFiles', attachedFiles)\n const files = attachedFiles\n .filter((file) => file.status === 'done')\n .map((file) => {\n const f = { ...file }\n delete f.status\n delete f.uid\n delete f.size\n return f as unknown as InputFile\n })\n fileListRef.current = files\n onChange(files)\n }, [attachedFiles])\n const onErrorTip = useDebounce((errorMsg: string) => {\n message.error(errorMsg)\n }, 300)\n const onBeforeUpload = (files: RcFile[]) => {\n // console.log('onBeforeUpload', maxCount, files, attachedFiles)\n if (isNumber(maxCount) && files.length + attachedFiles.length > maxCount) {\n onErrorTip(`最多只能上传${maxCount}个文件`)\n return Promise.reject(false)\n }\n }\n const onCustomRequest = async ({ file }: any) => {\n // console.log('onCustomRequest', file)\n if (fileSize && file.size > fileSize) {\n // 校验文件大小\n // const fileSize = 6 * 1024 * 1024 // 6MB\n message.error(`${fileSizeTip}`)\n return\n }\n // console.log('上传文件列表1:', file)\n setAttachedFiles([\n ...getAttachedFiles(),\n {\n type: file.type,\n name: file.name,\n uid: file.uid,\n status: 'uploading',\n percent: 70,\n size: file.size\n }\n ])\n try {\n const formData = new FormData()\n formData.append('file', file)\n if (isObject(extraParams)) {\n Object.keys(extraParams).forEach((key) => {\n if (isNullOrUnDef(extraParams[key])) return\n formData.append(key, extraParams[key])\n })\n }\n // 发送文件到后端\n const { data } = await uploadFile(formData)\n // 如果是图片文件,读取base64添加到url中,以便显示在消息列表中\n if (!data?.url && data?.type === 'image') {\n data.url = await getBase64(file)\n // console.log('上传文件base64:', uploadFile.url)\n }\n\n setAttachedFiles(\n getAttachedFiles().map((f) => {\n if (f.uid === file.uid) {\n return { ...data!, uid: data!.id, status: 'done', size: f.size }\n } else {\n return f\n }\n })\n )\n } catch (error) {\n console.log('上传文件错误:', error)\n setAttachedFiles(\n getAttachedFiles().map((f) => {\n if (f.uid === file.uid) {\n return { ...f, status: 'error', description: '上传失败' }\n } else {\n return f\n }\n })\n )\n }\n }\n const onRemove = (file: UploadFile<any>) => {\n // 删除文件\n setAttachedFiles(attachedFiles.filter((f) => f.uid !== file.uid))\n }\n useImperativeHandle(\n ref,\n () => ({\n validateFile: () => {\n const files = getAttachedFiles()\n const uploadingFiles = files.filter((file) => file.status === 'uploading')\n if (uploadingFiles.length > 0) {\n message.error('请等待所有文件上传完成')\n return false\n }\n const errorFiles = files.filter((file) => file.status === 'error')\n if (errorFiles.length > 0) {\n message.error('请检查上传失败的文件')\n return false\n }\n return true\n }\n }),\n []\n )\n\n const acceptStr = useMemo(() => {\n if (!accept?.length) return\n // 定义文件类型映射\n const fileTypeMap: ObjectType<string[]> = {\n document: [\n '.txt',\n '.md',\n '.mdx',\n '.markdown',\n '.pdf',\n '.html',\n '.xlsx',\n '.xls',\n '.doc',\n '.docx',\n '.csv',\n '.eml',\n '.msg',\n '.pptx',\n '.ppt',\n '.xml',\n '.epub'\n ],\n image: ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg']\n }\n const accepts = []\n accept?.forEach((type) => {\n if (fileTypeMap[type]) {\n accepts.push(...fileTypeMap[type])\n }\n })\n if (accepts.length === 0) {\n accepts.push(...accept)\n }\n\n return accepts.join(',')\n }, [accept])\n\n return (\n <Attachments\n className=\"nsAttachments\"\n accept={acceptStr}\n multiple={!isNumber(maxCount) || maxCount > 1}\n maxCount={maxCount}\n customRequest={onCustomRequest}\n beforeUpload={(file, files) => onBeforeUpload(files)}\n items={attachedFiles}\n onRemove={onRemove}\n placeholder={(type) =>\n type === 'drop'\n ? { title: '将文件放到这里' }\n : {\n icon: <CloudUploadOutlined />,\n title: '提交文件',\n description: (\n <div>\n <div>单击或拖动文件到此区域进行上传; </div>\n {/* {accept && <div>支持扩展名:{accept}; </div>} */}\n </div>\n )\n }\n }\n />\n )\n})\n","import { PaperClipOutlined } from '@ant-design/icons'\nimport { Sender, Suggestion } from '@ant-design/x'\nimport { useSyncInput } from '@zero-library/common'\nimport { Badge, Button, ButtonProps, Flex, GetRef } from 'antd'\nimport { forwardRef, useImperativeHandle, useRef } from 'react'\nimport { AgentInfoFileUpload, InputFile } from '../services'\nimport ChatSendAttachments from './Attachments'\n\ninterface FileUpload extends AgentInfoFileUpload {\n extraParams?: ObjectType<any>\n}\n\ninterface Props {\n placeholder?: string\n content?: string\n fileList?: InputFile[]\n headerOpen?: boolean\n loading?: boolean\n onContentChange: (value: string) => void\n onFileListChange: (files: InputFile[]) => void\n onHeaderOpenChange: (open: boolean) => void\n onSend: () => void\n onCancel?: () => void\n onFocus?: () => void\n extraHeader?: React.ReactNode\n extraFooter?: React.ReactNode\n extraFooterBelow?: React.ReactNode\n sendButtonProps?: ButtonProps\n fileUpload?: FileUpload\n}\n\nexport default forwardRef(\n (\n {\n placeholder,\n content,\n fileList = [],\n headerOpen = false,\n loading = false,\n onContentChange,\n onFileListChange,\n onHeaderOpenChange,\n onSend,\n onCancel,\n onFocus,\n extraHeader,\n extraFooter,\n extraFooterBelow,\n sendButtonProps,\n fileUpload\n }: Props,\n ref\n ) => {\n const senderRef = useRef<GetRef<typeof Sender>>(null)\n const { inputValue, setInputValue } = useSyncInput(content || '', onContentChange)\n\n const attachmentsNode = fileUpload?.enabled && (\n <Badge dot={!!fileList?.length && !headerOpen}>\n <Button type=\"text\" icon={<PaperClipOutlined />} onClick={() => onHeaderOpenChange(!headerOpen)} />\n </Badge>\n )\n\n const attachmentsRef = useRef<any>()\n const senderHeader = (\n <>\n <Sender.Header title=\"选择文件\" open={headerOpen} onOpenChange={onHeaderOpenChange}>\n <ChatSendAttachments\n ref={attachmentsRef}\n fileList={fileList}\n onChange={onFileListChange}\n accept={fileUpload?.allowedFileTypes}\n maxCount={fileUpload?.maxFileCount}\n extraParams={fileUpload?.extraParams}\n />\n </Sender.Header>\n {extraHeader}\n </>\n )\n const onSubmit = () => {\n if (!attachmentsRef.current?.validateFile || attachmentsRef.current.validateFile()) {\n onSend()\n }\n }\n\n // 暴露方法给外部组件\n useImperativeHandle(\n ref,\n () => ({\n focus: (options?: { cursor?: 'start' | 'end' }) => {\n senderRef.current?.focus(options)\n }\n }),\n []\n )\n\n return (\n <Suggestion items={[]} onSelect={(itemVal) => setInputValue(`[${itemVal}]:`)}>\n {({}) => (\n <Sender\n ref={senderRef}\n value={inputValue}\n header={senderHeader}\n onSubmit={onSubmit}\n onChange={setInputValue}\n onFocus={onFocus}\n autoSize={{ minRows: 2, maxRows: 6 }}\n // prefix={attachmentsNode}\n // loading={loading}\n onCancel={onCancel}\n footer={({ components }) => {\n const { SendButton, LoadingButton } = components\n return (\n <Flex vertical>\n <Flex justify=\"space-between\" align=\"center\" gap={12}>\n <Flex className=\"flex-1\" gap={6} align=\"center\">\n {attachmentsNode}\n {extraFooter}{' '}\n </Flex>\n <Flex align=\"center\">{loading ? <LoadingButton /> : <SendButton {...sendButtonProps} />}</Flex>\n </Flex>\n {extraFooterBelow}\n </Flex>\n )\n }}\n actions={false}\n placeholder={placeholder || '有什么我能帮您的吗?'}\n />\n )}\n </Suggestion>\n )\n }\n)\n","import { EnterOutlined } from '@ant-design/icons'\nimport { Sender } from '@ant-design/x'\nimport { RenderWrapper, shouldRender } from '@zero-library/common'\nimport { Button, Flex, Typography } from 'antd'\nimport { useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport ChatSender from '../../components/ChatSender'\nimport { AgentInfoFileUpload, InputFile } from '../../services'\nimport { ChatLayout, ConversationMessageType } from '../../stores'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n const configState = useSnapshot(chatStore.config)\n // 当前会话参数\n const chatMessage = useMemo(\n () => conversationState.messages[conversationState.active.key] || ({} as ConversationMessageType),\n [conversationState.messages[conversationState.active.key]]\n )\n const referenceHandle = (con: string) => {\n if (chatMessage?.loading) return\n chatStore.setContent(con)\n setTimeout(() => {\n chatStore.sendMessage()\n }, 10)\n }\n return (\n <ChatSender\n placeholder={configState.layout.sender?.props?.placeholder}\n content={chatMessage.content}\n fileList={chatMessage.files as InputFile[]}\n headerOpen={chatMessage.headerOpen}\n loading={chatMessage.loading}\n onContentChange={chatStore.setContent}\n onFileListChange={chatStore.setFileList}\n onHeaderOpenChange={chatStore.setHeaderOpen}\n onSend={() => chatStore.sendMessage()}\n onFocus={chatStore.config.hooks?.onSenderFocus}\n fileUpload={{\n ...(agentState.active?.parameters?.fileUpload as AgentInfoFileUpload),\n extraParams: { agentId: agentState.active.id }\n }}\n extraFooter={\n <>\n <Button\n size=\"small\"\n color={agentState.params.thinkMode === 1 ? 'primary' : 'default'}\n variant=\"filled\"\n onClick={() => chatStore.setAgentParams({ thinkMode: agentState.params.thinkMode === 1 ? 2 : 1 })}\n >\n 深度思考\n </Button>\n <RenderWrapper control={configState.layout.senderExtraBtn as ChatLayout['senderExtraBtn']} />\n </>\n }\n extraHeader={\n <Sender.Header\n title={\n <Flex gap={4}>\n <EnterOutlined />\n <Typography.Text type=\"secondary\" ellipsis>\n {chatMessage?.references?.content?.name}\n </Typography.Text>\n </Flex>\n }\n open={!!chatMessage?.references?.content?.name}\n onOpenChange={() => chatStore.setReferences()}\n classNames={{\n header: styles.nsSenderReferenceHeaderTitle,\n content: shouldRender(configState.layout.referencesBtn as ChatLayout['referencesBtn']) ? '' : styles.nsSenderReferenceHeaderContent\n }}\n >\n <RenderWrapper\n control={configState.layout.referencesBtn as ChatLayout['referencesBtn']}\n DefaultComponent={\n <Flex gap={8}>\n {['深度解读', '概要解读'].map((con) => (\n <Button key={con} color=\"primary\" variant=\"filled\" onClick={() => referenceHandle(con)}>\n {con} →\n </Button>\n ))}\n </Flex>\n }\n />\n </Sender.Header>\n }\n />\n )\n}\n","import { PlusOutlined } from '@ant-design/icons'\nimport { Avatar, Button, Flex } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n return (\n <div className=\"p-24\">\n <Flex align=\"center\" gap={8}>\n <Avatar size={36} src={agentState.active.iconUrl} />\n <span className={styles.nsChatUserName}>{agentState.active.name}</span>\n </Flex>\n <Button\n block\n type=\"primary\"\n shape=\"round\"\n onClick={() => chatStore.switchConversation()}\n className={classNames('m-t-16')}\n icon={<PlusOutlined />}\n >\n 新建会话\n </Button>\n </div>\n )\n}\n","import { Button, Flex, List, Popover } from 'antd'\nimport classNames from 'classnames'\nimport { useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { RecommendQuestion } from '../../services'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\n/* 🌟 提示词 */\nexport default () => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n const component = useMemo(\n () =>\n agentState.active.labels?.length > 0 && (\n <Flex gap={4} wrap>\n <Button disabled color=\"default\" variant=\"text\">\n 随便聊聊\n </Button>\n {agentState.active.labels.map((question) => (\n <Popover\n key={question.id}\n content={\n <List\n itemLayout=\"horizontal\"\n split={false}\n className={styles.senderList}\n dataSource={question.hotQuestionList as RecommendQuestion[]}\n renderItem={(item) => (\n <List.Item onClick={() => chatStore.sendMessage(item.question)} className={styles.senderListItem}>\n {item.question}\n </List.Item>\n )}\n footer={\n <Flex justify=\"end\" className={styles.senderListFooter}>\n (您可点击以上问题开启AI体验)\n </Flex>\n }\n />\n }\n title={\n <div\n className={classNames(styles.senderListTitle, 'text-ellipsis')}\n >{`${agentState.active.name}开始关注${question.labelName}内容!`}</div>\n }\n >\n <Button color=\"default\" variant=\"filled\">\n {question.labelName}\n </Button>\n </Popover>\n ))}\n </Flex>\n ),\n [agentState.active.labels]\n )\n return component\n}\n",".nsPreviewHeader {\n padding: 16px 24px;\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);\n}\n.nsPreviewHeader .nsPreviewHeaderTitle {\n font-size: 16px;\n font-weight: bold;\n}\n.nsChatTitle {\n padding: 24px;\n font-size: 24px;\n text-align: center;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/utils.ts","../src/stores/Context.ts","../src/ui/common/markdownAlert/styles.module.less","../src/ui/common/markdownAlert/AppCard.tsx","../src/ui/common/markdownAlert/FileView.tsx","../src/services/file.ts","../src/ui/common/markdownAlert/components/DocDrawer.tsx","../src/ui/common/markdownAlert/IndexQuote.tsx","../src/ui/common/markdownAlert/MdEdit.tsx","../src/ui/common/markdownAlert/FileEdit.tsx","../src/ui/common/markdownAlert/QuoteList.tsx","../src/core/constants.ts","../src/stores/index.ts","../src/core/fetchRequest.ts","../src/services/index.ts","../src/ui/layouts/index.tsx","../src/ui/common/AgentHeader.tsx","../src/ui/common/ConversationList.tsx","../src/ui/common/styles.module.less","../src/ui/common/markdownAlert/index.ts","../src/components/MessageRender.tsx","../src/ui/common/BubbleListItems.tsx","../src/ui/common/MessageAIRender.tsx","../src/components/Attachments.tsx","../src/components/ChatSender.tsx","../src/ui/common/ChatSender.tsx","../src/ui/common/ConversationListHeader.tsx","../src/ui/common/SenderPromptsItems.tsx","../src/ui/layouts/styles.module.less"],"names":["copyText","message","dayjs","createValtioContext","styles_module_default","appCard","fileView","fileEdit","fileEditHeader","fileEditContent","quoteList","mdEdit","jsx","Spin","jsxs","Flex","FileIcon","request","useState","useEffect","Drawer","RenderMarkdown","Empty","isExternal","useRef","Popover","Tag","MarkdownEditor","Button","PlayCircleOutlined","CopyOutlined","Fragment","Collapse","CaretRightOutlined","notify","getToken","TOKEN_KEY","proxy","shouldRender","deepMerge","getCurrentUser","OK","loadingMessage","nsConversations","nsBody","nsBodyWidth","nsBubbleList","nsAgentHeader","nsChatTitle","nsChatHeaderPopover","chatWelcomeWrap","chatWelcome","chatWelcomePrompts","senderListTitle","senderList","senderListItem","senderListFooter","nsChatUserName","nsSenderReferenceHeaderTitle","nsSenderReferenceHeaderContent","useSnapshot","InfiniteScroll","RedoOutlined","Conversations","DeleteOutlined","RenderWrapper","Avatar","Space","PlusOutlined","CommentOutlined","CloseOutlined","Bubble","Attachments","useMemo","Typography","classNames","CloseCircleOutlined","isBoolean","UserAvatar","OpenAIOutlined","Welcome","Prompts","LikeOutlined","DislikeOutlined","forwardRef","useRefState","useDebounce","isNumber","isObject","isNullOrUnDef","useImperativeHandle","CloudUploadOutlined","useSyncInput","Badge","PaperClipOutlined","Sender","Suggestion","ChatSender_default","EnterOutlined","List","nsPreviewHeader","nsPreviewHeaderTitle","XProvider","Splitter","downloadFile","FilePreview"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BO,SAAS,SAAA,CACd,QACA,QAAA,EAGG;AACH,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,MAAW,CAAC,SAAA,EAAW,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3D,IAAA,MAAM,GAAA,GAAM,SAAA;AACZ,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAK,OAAA,CAAsC,MAAM,CAAA;AAAA,IAC7D,WAAW,OAAO,OAAA,KAAY,QAAA,IAAY,MAAA,IAAU,WAAW,MAAA,EAAQ;AACrE,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,OAAkB,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,OAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,UAAA,CACd,SACA,QAAA,EAGK;AACL,EAAA,OAAO,OAAA,EAAS,IAAI,CAAC,MAAA,KAAW,UAAgB,MAAA,EAAQ,QAAQ,CAAC,CAAA,IAAK,EAAC;AACzE;AAGO,SAAS,kBAAA,CAAmB,KAAa,MAAA,EAA8B;AAC5E,EAAA,MAAM,QAAQ,IAAI,eAAA;AAAA,IAChB,MAAA,CAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,KAAK,GAAG,CAAA,KAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,GAAI,CAAC,CAAC,GAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAC,CAAE;AAAA,IACnI,QAAA,EAAS;AACX,EAAA,OAAO,KAAA,GAAQ,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,GAAI,GAAA,GAAM,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,GAAK,GAAA;AACpE;AAnEA,IAIa,MAMA,YAAA,EA2DA,SAAA;AArEb,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mBAAA,GAAA;AAIO,IAAM,IAAA,GAAO,CAAC,KAAA,KAAkB;AACrC,MAAAA,eAAA,CAAS,KAAK,CAAA,CAAE,IAAA,CAAK,MAAM;AACzB,QAAAC,YAAA,CAAQ,QAAQ,0BAAM,CAAA;AAAA,MACxB,CAAC,CAAA;AAAA,IACH,CAAA;AAEO,IAAM,YAAA,GAAe,CAAC,SAAA,KAA+B;AAC1D,MAAA,MAAM,MAAMC,sBAAA,EAAM;AAClB,MAAA,MAAM,MAAA,GAASA,uBAAM,SAAS,CAAA;AAE9B,MAAA,IAAI,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA,EAAG;AAC7B,QAAA,OAAO,cAAA;AAAA,MACT;AAEA,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AACzC,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,OAAO,uBAAA;AAAA,MACT,CAAA,MAAA,IAAW,aAAa,EAAA,EAAI;AAC1B,QAAA,OAAO,wBAAA;AAAA,MACT,CAAA,MAAA,IAAW,aAAa,GAAA,EAAK;AAC3B,QAAA,OAAO,0BAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,OAAO,cAAA;AAAA,MACT;AAAA,IACF,CAAA;AAyCO,IAAM,SAAA,GAAY,CAAC,IAAA,KAAgC;AACxD,MAAA,OAAO,IAAI,OAAA,CAAgB,CAAC,OAAA,EAAS,MAAA,KAAW;AAC9C,QAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,QAAA,MAAA,CAAO,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,MAAgB,CAAA;AACrD,QAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AACjB,QAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,MAC3B,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AC5EA,IAI+B,YAAA,EAA8B,YAAA;AAJ7D,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AAIO,IAAA,CAAM,EAAE,cAAA,EAAgB,YAAA,EAAc,cAAA,EAAgB,iBAAiBC,0BAAA,EAAmC;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACJjH,IAAAC,sBAAAA;AAAA,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gDAAA,GAAA;AAAA,IAAAA,sBAAAA,GAAA;AAAA,MAAC,OAAA,EAAAC,uBAAAA;AAAA,MAgBA,QAAA,EAAAC,wBAAAA;AAAA,MAOA,QAAA,EAAAC,wBAAAA;AAAA,MAKU,cAAA,EAAAC,8BAAAA;AAAA,MAIA,eAAA,EAAAC,+BAAAA;AAAA,MAIV,SAAA,EAAAC,yBAAAA;AAAA,MAWA,MAAA,EAAAC;AAAA,KAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/CD,IAAA,eAAA,GAAA,EAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAeO,eAAA;AAfP,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yCAAA,GAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAaA,IAAO,eAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,SAAA,CAAU,WAAA,CAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,UAAU,IAAA,CAAK,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,MAExF,CAAA;AACA,MAAA,uBACEC,eAACC,SAAAA,EAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAK,SAC5B,QAAA,kBAAAC,eAAAA,CAACC,WAAA,EAAK,QAAA,EAAQ,MAAC,GAAA,EAAK,CAAA,EAAG,OAAM,QAAA,EAAS,SAAA,EAAWX,sBAAAA,CAAO,OAAA,EAAS,OAAA,EAC/D,QAAA,EAAA;AAAA,wBAAAQ,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,wBACxBA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,IAAA,CAAK,OAAA,EACxC,QAAA,EAAA,IAAA,CAAK,OAAA,EACR;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/BA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAWO,gBAAA;AAXP,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0CAAA,GAAA;AAGA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAOA,IAAO,gBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,SAAA,CAAU,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,MAClC,CAAA;AACA,MAAA,uBACEA,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,MAAK,OAAA,EAC5B,QAAA,kBAAAC,gBAACC,SAAAA,EAAA,EAAK,KAAK,CAAA,EAAG,KAAA,EAAM,UAAS,SAAA,EAAWX,sBAAAA,CAAO,UAAU,OAAA,EACvD,QAAA,EAAA;AAAA,wBAAAQ,cAAAA,CAACI,eAAA,EAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,wBAC/BJ,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,IAAA,CAAK,QAAA,EACxC,QAAA,EAAA,IAAA,CAAK,QAAA,EACR;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AC1BA,IAgCa,QAAA;AAhCb,IAAA,SAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sBAAA,GAAA;AAgCO,IAAM,QAAA,GAAW,CAAC,SAAA,KAA2C;AAClE,MAAA,OAAOK,cAAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,SAAS,CAAA,CAAE,CAAA;AAAA,IAC3C,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AClCA,IAWO,iBAAA;AAXP,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sDAAA,GAAA;AAGA,IAAA,SAAA,EAAA;AAQA,IAAO,oBAAQ,CAAC,EAAE,OAAO,IAAA,EAAM,OAAA,EAAS,SAAQ,KAAa;AAC3D,MAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAAS,EAAE,CAAA;AACzC,MAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,MAAA,MAAM,aAAa,YAAY;AAC7B,QAAA,IAAI;AACF,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,OAAO,CAAA;AAClC,UAAA,UAAA,CAAW,GAAA,CAAI,MAAM,OAAO,CAAA;AAAA,QAC9B,CAAA,SAAE;AACA,UAAA,UAAA,CAAW,KAAK,CAAA;AAAA,QAClB;AAAA,MACF,CAAA;AACA,MAAAC,gBAAU,MAAM;AACd,QAAA,UAAA,EAAW;AAAA,MACb,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACZ,MAAA,uBACEP,cAAAA,CAACQ,WAAA,EAAA,EAAO,KAAA,EAAc,IAAA,EAAM,KAAA,EAAO,KAAA,EAAM,MAAA,EAAO,IAAA,EAAY,OAAA,EAC1D,QAAA,kBAAAR,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAU,QAAA,EAAA,OAAA,mBAAUD,cAAAA,CAACS,qBAAA,EAAA,EAAe,OAAA,EAAkB,CAAA,mBAAKT,cAAAA,CAACU,UAAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,GAAG,CAAA,EAC1G,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/BA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAcO,kBAAA;AAdP,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4CAAA,GAAA;AAIA,IAAA,cAAA,EAAA;AAUA,IAAO,kBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIJ,eAAS,KAAK,CAAA;AACtC,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,QAAA,IAAIK,iBAAA,CAAW,IAAA,CAAK,OAAO,CAAA,EAAG;AAC5B,UAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,QACpC,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd;AAAA,MACF,CAAA;AACA,MAAA,MAAM,0BACJX,cAAAA,CAAC,SACC,QAAA,kBAAAA,cAAAA,CAACG,WAAA,EAAK,KAAA,EAAM,UAAS,GAAA,EAAK,CAAA,EAExB,0BAAAH,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAmB,QAAA,EAAA,IAAA,CAAK,QAAA,EAAS,GACtC,CAAA,EACF,CAAA;AAEF,MAAA,MAAM,OAAA,GAAUY,aAAuB,IAAI,CAAA;AAE3C,MAAAL,gBAAU,MAAM;AACd,QAAA,MAAM,KAAK,OAAA,CAAQ,OAAA;AACnB,QAAA,IAAI,CAAC,EAAA,EAAI;AAET,QAAA,MAAM,WAAW,EAAA,CAAG,sBAAA;AACpB,QAAA,IAAI,CAAC,QAAA,EAAU;AAGf,QAAA,QAAA,CAAS,YAAY,EAAE,CAAA;AAAA,MACzB,CAAA,EAAG,EAAE,CAAA;AACL,MAAA,uBACEL,eAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,WAAU,oBAAA,EAC3B,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,MAAK,OAAA,EAC5B,QAAA,kBAAAD,cAAAA,CAACa,YAAAA,EAAA,EAAQ,OAAA,EAAS,SAChB,QAAA,kBAAAb,cAAAA,CAACc,QAAA,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,KAAA,EAAM,YAAA,EAAa,SAAA,EAAU,gBAAA,EAChD,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA,EACF,CAAA,EACF,CAAA;AAAA,QACC,IAAA,oBAAQd,cAAAA,CAAC,iBAAA,EAAA,EAAU,SAAS,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,UAAU,IAAA,EAAY,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAAA,OAAA,EAC9G,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACxDA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAcO,cAAA;AAdP,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wCAAA,GAAA;AAGA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAUA,IAAO,cAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,MAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIM,eAAS,EAAE,CAAA;AACrC,MAAA,MAAM,OAAO,MAAM;AACjB,QAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,KAAK,CAAA;AAC1B,QAAA,SAAA,CAAU,YAAY,0BAAA,EAAQ,IAAI,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,MACtD,CAAA;AACA,MAAAC,gBAAU,MAAM;AACd,QAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,MACvB,CAAA,EAAG,CAAC,IAAA,CAAK,OAAO,CAAC,CAAA;AACjB,MAAA,uBACEP,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,IAAA,EAAK,OAAA,EAC5B,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWV,uBAAO,MAAA,EACrB,QAAA,EAAA;AAAA,wBAAAQ,cAAAA,CAACe,yBAAe,QAAA,EAAU,OAAA,EAAS,OAAc,QAAA,EAAU,QAAA,EAAU,aAAa,KAAA,EAAO,CAAA;AAAA,QACxF,CAAC,2BACAf,cAAAA,CAACG,WAAA,EAAK,OAAA,EAAQ,OAAM,SAAA,EAAU,QAAA,EAC5B,0BAAAH,cAAAA,CAACgB,WAAAA,EAAA,EAAO,KAAA,EAAM,SAAA,EAAU,SAAQ,UAAA,EAAW,OAAA,EAAS,IAAA,EAAM,QAAA,EAAA,oEAAA,EAE1D,CAAA,EACF;AAAA,OAAA,EAEJ,CAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtCA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAaO,gBAAA;AAbP,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0CAAA,GAAA;AAKA,IAAA,UAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAMA,IAAO,gBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,YAAY,YAAA,EAAa;AAE/B,MAAA,MAAM,YAAY,MAAM;AACtB,QAAA,SAAA,CAAU,UAAA,CAAW,MAAM,IAAI,CAAA;AAAA,MACjC,CAAA;AAWA,MAAA,uBACEd,gBAACC,SAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,SAAA,EAAWX,uBAAO,QAAA,EAC/B,QAAA,EAAA;AAAA,wBAAAU,eAAAA,CAACC,SAAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,eAAA,EAAgB,SAAA,EAAWX,sBAAAA,CAAO,cAAA,EACrE,QAAA,EAAA;AAAA,0BAAAU,eAAAA,CAACC,WAAA,EAAK,GAAA,EAAK,GAAG,KAAA,EAAM,QAAA,EAAS,WAAU,QAAA,EACrC,QAAA,EAAA;AAAA,4BAAAH,eAACI,eAAAA,EAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,UAAU,EAAA,EAAI,CAAA;AAAA,4BACtCJ,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,IAAA,CAAK,QAAA,EACxC,QAAA,EAAA,IAAA,CAAK,QAAA,EACR;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,IAAA,EAAK,OAAA,EAC5B,QAAA,kBAAAC,eAAAA,CAACC,SAAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAH,eAACgB,WAAAA,EAAA,EAAO,KAAA,EAAM,SAAA,EAAU,SAAQ,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,IAAA,kBAAMhB,cAAAA,CAACiB,wBAAA,EAAA,EAAmB,CAAA,EAAI,OAAA,EAAS,WAAW,QAAA,EAAA,0BAAA,EAEtG,CAAA;AAAA,4BACAjB,eAACgB,WAAAA,EAAA,EAAO,OAAM,SAAA,EAAU,OAAA,EAAQ,QAAO,IAAA,EAAK,OAAA,EAAQ,sBAAMhB,cAAAA,CAACkB,sBAAa,CAAA,EAAI,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,EAAG,QAAA,EAAA,cAAA,EAE/G;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAlB,cAAAA,CAACG,SAAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,OAAM,QAAA,EAAS,SAAA,EAAWX,sBAAAA,CAAO,eAAA,EAC7C,0BAAAQ,cAAAA,CAACS,qBAAAA,EAAA,EAAe,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA,EACzC;AAAA,OAAA,EACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtDA,IAAA,iBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAiBO,iBAAA;AAjBP,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2CAAA,GAAA;AAKA,IAAA,cAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAWA,IAAO,iBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAa;AAC3C,MAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIH,eAAS,KAAK,CAAA;AACtC,MAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,cAAAA,CAAS,EAAe,CAAA;AAC5D,MAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAoB;AACnC,QAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,QAAA,IAAIK,iBAAAA,CAAW,IAAA,CAAK,OAAO,CAAA,EAAG;AAC5B,UAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,QACpC,CAAA,MAAO;AACL,UAAA,aAAA,CAAc,IAAI,CAAA;AAClB,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd;AAAA,MACF,CAAA;AACA,MAAA,uBACET,eAAAA,CAAAiB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAnB,eAACC,SAAAA,EAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAK,SAC5B,QAAA,kBAAAD,cAAAA;AAAA,UAACoB,aAAA;AAAA,UAAA;AAAA,YACC,WAAW5B,sBAAAA,CAAO,SAAA;AAAA,YAClB,QAAA,EAAU,KAAA;AAAA,YACV,KAAA,EAAK,IAAA;AAAA,YACL,UAAA,EAAY,CAAC,EAAE,QAAA,EAAS,qBAAMQ,cAAAA,CAACqB,wBAAA,EAAA,EAAmB,MAAA,EAAQ,QAAA,GAAW,EAAA,GAAK,CAAA,EAAG,CAAA;AAAA,YAC7E,KAAA,EAAO;AAAA,cACL;AAAA,gBACE,GAAA,EAAK,GAAA;AAAA,gBACL,KAAA,EAAO,0BAAA;AAAA,gBACP,QAAA,kBACErB,cAAAA,CAACG,SAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,GAAA,EAAK,CAAA,EACjB,QAAA,EAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,qBACdH,cAAAA,CAAC,GAAA,EAAA,EAAqB,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA,EAAG,SAAA,EAAU,gBAAA,EAC3D,QAAA,EAAA,IAAA,CAAK,KAAA,EAAA,EADA,IAAA,CAAK,OAEb,CACD,CAAA,EACH;AAAA;AAEJ;AACF;AAAA,SACF,EACF,CAAA;AAAA,QACC,IAAA,oBAAQA,cAAAA,CAAC,iBAAA,EAAA,EAAU,SAAS,UAAA,CAAW,OAAA,EAAS,KAAA,EAAO,UAAA,CAAW,OAAO,IAAA,EAAY,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAAA,OAAA,EACvH,CAAA;AAAA,IAEJ,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACzDO,IAAM,mBAAA,GAAsB,WAAA;AAE5B,IAAM,WAAA,GAAkC;AAAA,EAC7C,CAAA,EAAG,MAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;;;ACEA,UAAA,EAAA;;;ACLA,UAAA,EAAA;AAYA,SAAS,YAAA,CAAa,OAAwB,OAAA,EAAkC;AAC9E,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,CAAQ,OAAO,KAAA,KAAU,QAAA,GAAW,QAAQ,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACnE;AACF;AAEA,SAAS,WAAA,CAAY,QAAgB,OAAA,EAA0C;AAC7E,EAAA,IAAI,OAAA,GAAU,MAAA;AACd,EAAA,IAAI,cAAA,GAAiB,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACxC,EAAA,IAAI,YAAA,GAAe,EAAA;AAEnB,EAAA,OAAO,mBAAmB,EAAA,EAAI;AAC5B,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,QAAA,GAAW,KAAA;AAEf,IAAA,KAAA,IAAS,CAAA,GAAI,cAAA,EAAgB,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACpD,MAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,MAAA,IAAI,SAAS,GAAA,IAAO,OAAA,CAAQ,CAAA,GAAI,CAAC,MAAM,IAAA,EAAM;AAC3C,QAAA,QAAA,GAAW,CAAC,QAAA;AAAA,MACd;AACA,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,IAAI,SAAS,GAAA,EAAK,UAAA,EAAA;AAClB,QAAA,IAAI,SAAS,GAAA,EAAK,UAAA,EAAA;AAAA,MACpB;AACA,MAAA,IAAI,eAAe,CAAA,EAAG;AACpB,QAAA,YAAA,GAAe,CAAA;AACf,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,cAAA,EAAgB,eAAe,CAAC,CAAA;AACjE,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACpC,QAAA,YAAA,CAAa,QAAQ,OAAO,CAAA;AAAA,MAC9B,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,IAAA,CAAK,+BAA+B,UAAU,CAAA;AAAA,MACxD;AACA,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,YAAA,GAAe,CAAC,EAAE,IAAA,EAAK;AAC/C,MAAA,cAAA,GAAiB,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACpC,MAAA,YAAA,GAAe,EAAA;AAAA,IACjB,CAAA,MAAO;AACL,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAGA,eAAe,eAAA,CAAgB,QAAgBX,QAAAA,EAAkB;AAC/D,EAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,GAAG,MAAM,CAAA,EAAA,EAAKA,QAAO,CAAA,CAAE,CAAA;AAC/C,EAAA,OAAA,CAAQ,KAAA,CAAM,kBAAkB,KAAK,CAAA;AACrC,EAAA,MAAMiC,YAAA,CAAO,MAAM,sDAAY,CAAA;AACjC;AAGA,eAAe,oBAAA,CAAqB,UAAoB,OAAA,EAAqC;AAC3F,EAAA,MAAM,EAAE,SAAQ,GAAI,OAAA;AACpB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAM,SAAA,EAAU;AACxC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAA,GAAS,WAAA,CAAY,QAAQ,OAAO,CAAA;AACpC,MAAA;AAAA,IACF;AACA,IAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,IAAA,MAAA,GAAS,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,EACtC;AACF;AAGA,eAAsB,QAAQ,GAAA,EAAa,IAAA,GAAY,EAAC,EAAG,OAAA,GAAuB,EAAC,EAAG;AACpF,EAAA,MAAM,EAAE,SAAS,KAAA,EAAO,MAAA,GAAS,QAAQ,OAAA,GAAU,EAAC,EAAG,MAAA,EAAO,GAAI,OAAA;AAElE,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAA,EAAQ,gBAAA,CAAiB,OAAA,EAAS,MAAM,UAAA,CAAW,OAAO,CAAA;AAE1D,EAAA,IAAI,YAAY,MAAA,GAAS,GAAA;AACzB,EAAA,IAAI,IAAA,GAAY,IAAA;AAEhB,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,SAAA,GAAY,kBAAA,CAAmB,WAAW,IAAI,CAAA;AAC9C,IAAA,IAAA,GAAO,MAAA;AAAA,EACT,CAAA,MAAO;AACL,IAAA,IAAI,EAAE,gBAAgB,QAAA,CAAA,EAAW;AAC/B,MAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAC1B,MAAA,IAAA,GAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,SAAA,EAAW;AAAA,IACtC,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,GAAIC,iBAAS,IAAK,EAAE,CAACC,gBAAS,GAAGD,iBAAS,EAAE;AAAA,MAC5C,GAAG;AAAA,KACL;AAAA,IACA,IAAA;AAAA,IACA,QAAQ,UAAA,CAAW;AAAA,GACpB,CAAA;AAED,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAMlC,QAAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,OAAO,MAAM,eAAA,CAAgB,QAAA,CAAS,MAAA,EAAQA,QAAO,CAAA;AAAA,EACvD;AAEA,EAAA,IAAI,MAAA,IAAU,SAAS,IAAA,EAAM;AAE3B,IAAA,OAAO,oBAAA,CAAqB,UAAU,OAAO,CAAA;AAAA,EAC/C;AAGA,EAAA,MAAM,CAAA,GAAK,MAAM,QAAA,CAAS,IAAA,EAAK;AAC/B,EAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAK;AAClB,IAAA,OAAO,MAAM,eAAA,CAAgB,CAAA,CAAE,IAAA,EAAM,EAAE,OAAO,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,CAAA;AACT;AAGA,IAAM,MAAM,CAAC,GAAA,EAAa,MAAA,GAA8B,IAAI,OAAA,GAAuC,EAAC,KAClG,OAAA,CAAQ,KAAK,MAAA,EAAQ,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAEpD,IAAM,OAAO,CAAC,GAAA,EAAa,IAAA,GAAY,IAAI,OAAA,GAAuC,EAAC,KAAM,OAAA,CAAQ,KAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA;AAE1I,IAAM,MAAM,CAAC,GAAA,EAAa,IAAA,GAAY,IAAI,OAAA,GAAuC,EAAC,KAAM,OAAA,CAAQ,KAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAExI,IAAM,MAAM,CAAC,GAAA,EAAa,IAAA,GAAY,IAAI,OAAA,GAAuC,EAAC,KAAM,OAAA,CAAQ,KAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA;AAE3I,IAAO,uBAAQ,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,MAAM,GAAA,EAAI;;;ACnGtC,IAAM,cAAA,GAAiB,CAAC,OAAA,KAAoD;AACjF,EAAA,OAAOgB,cAAAA,CAAQ,GAAA,CAAI,eAAA,EAAiB,EAAE,SAAS,CAAA;AACjD,CAAA;AASO,IAAM,cAAc,MAA+B;AACxD,EAAA,OAAOA,cAAAA,CAAQ,IAAI,QAAQ,CAAA;AAC7B,CAAA;AAUO,IAAM,kBAAA,GAAqB,CAAC,MAAA,KAA6E;AAC9G,EAAA,OAAOA,cAAAA,CAAQ,GAAA,CAAI,qBAAA,EAAuB,MAAM,CAAA;AAClD,CAAA;AAMO,IAAM,kBAAA,GAAqB,CAAC,MAAA,KAAiD;AAClF,EAAA,OAAOA,cAAAA,CAAQ,MAAA,CAAO,qBAAA,EAAuB,MAAM,CAAA;AACrD,CAAA;AA0BO,IAAM,iBAAA,GAAoB,CAAC,MAAA,KAAiE;AACjG,EAAA,OAAOA,cAAAA,CAAQ,GAAA,CAAI,gBAAA,EAAkB,MAAM,CAAA;AAC7C,CAAA;AAEO,IAAM,yBAAA,GAA4B,CAAC,OAAA,EAA0B,SAAA,KAA6E;AAC/I,EAAA,OAAOA,eAAQ,GAAA,CAAI,0BAAA,EAA4B,EAAE,OAAA,EAAS,WAAW,CAAA;AACvE,CAAA;AAQO,IAAM,cAAA,GAAiB,CAAC,MAAA,KAA6C;AAC1E,EAAA,OAAOA,cAAAA,CAAQ,GAAA,CAAI,yBAAA,EAA2B,MAAM,CAAA;AACtD,CAAA;AAEO,IAAM,UAAA,GAAa,CAAC,QAAA,KAA8C;AACvE,EAAA,OAAOA,cAAAA,CAAQ,IAAA,CAAK,aAAA,EAAe,QAAQ,CAAA;AAC7C,CAAA;AAkDO,IAAM,eAAA,GAAkB,CAAC,MAAA,KAA4B;AAC1D,EAAA,OAAO,oBAAA,CAAa,IAAA;AAAA,IAClB,aAAA;AAAA,IACA,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAK;AAAA,IAC1B;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS,CAAC,KAAA,KAAkB;AAC1B,QAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC9B,UAAA,MAAA,CAAO,eAAe,KAAK,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA;AACF,GACF;AACF,CAAA;;;AF7DA,IAAM,aAAA,GAAgB;AAAA,EACpB,gBAAA,EAAkB,IAAA;AAAA,EAClB,sBAAA,EAAwB,IAAA;AAAA,EACxB,OAAA,EAAS,IAAA;AAAA,EACT,WAAA,EAAa,IAAA;AAAA,EACb,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,IAAA;AAAA,EACR,aAAA,EAAe,IAAA;AAAA,EACf,YAAA,EAAc,KAAA;AAAA,EACd,cAAA,EAAgB,KAAA;AAAA,EAChB,aAAA,EAAe,KAAA;AAAA,EACf,MAAA,EAAQ,IAAA;AAAA,EACR,WAAA,EAAa,IAAA;AAAA,EACb,yBAAA,EAA2B,IAAA;AAAA,EAC3B,wBAAA,EAA0B,IAAA;AAAA,EAC1B,cAAA,EAAgB;AAClB,CAAA;AACO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,SAASoB,YAAA,CAAM;AAAA,IACnB,OAAO,EAAC;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,OAAA,EAAS;AAAA,MACP,MAAM,EAAC;AAAA,MACP,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA,KAGV;AAAA,IACA,UAAU,EAAC;AAAA,IACX,QAAQ;AAAC,GACV,CAAA;AAED,EAAA,MAAM,aAAa,CAAC,IAAA,GAAO,EAAC,EAAiC,SAAS,KAAA,KAAU;AAC9E,IAAA,IAAIC,mBAAA,CAAa,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,EAAG;AACvC,MAAA,MAAA,CAAO,OAAA,GAAU;AAAA,QACf,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAK,MAAsB,OAAA,EAAS;AAClC,QAAA,MAAA,CAAO,IAAA,CAAM,IAAA,CAAqB,OAAA,EAAS,QAAQ,CAAA;AAAA,MACrD,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAI,wDAAW,CAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,KAAuB;AACxC,IAAA,MAAA,CAAO,MAAA,GAASC,gBAAA,CAAU,aAAA,EAAe,MAAM,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,CAAC,MAAA,GAAS,EAAC,KAAoB;AACrD,IAAA,MAAA,CAAO,MAAA,GAAS,EAAE,KAAA,EAAO,EAAA,EAAI,GAAG,MAAA,EAAO;AAAA,EACzC,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,GAAQ,EAAC,KAAmB;AAC5C,IAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AAAA,EACjB,CAAA;AACA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,MAAA,CAAO,QAAA,GAAW,SAAA,CAAUC,qBAAA,EAAe,EAAG;AAAA,MAC5C,EAAA,EAAI,IAAA;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,QAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,SAASH,YAAA,CAAM;AAAA;AAAA,IAEnB,MAAM,EAAC;AAAA,IACP,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AAAA,IAChB,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,OAAA,GAAU,KAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,eAAeA,YAAA,CAAM;AAAA;AAAA,IAEzB,QAAQ,EAAC;AAAA,IACT,UAAU;AAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAOZ,CAAA;AACD,EAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,KAAgC;AACrD,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,UAAA,GAAa,UAAA;AAAA,EAC9D,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,OAAA,KAAyC;AAC3D,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,OAAA,GAAU,OAAA;AAAA,EAC3D,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,GAAQ,EAAC,KAAkC;AAC9D,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,KAAA,GAAQ,KAAA;AAAA,EACzD,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,KAAsD;AAC3E,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,UAAA,GAAa,UAAA;AAAA,EAC9D,CAAA;AACA,EAAA,MAAM,kBAAA,GAAqB,CAAC,GAAA,KAA6B;AACvD,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,CAAE,cAAc,MAAA,EAAQ;AACnD,MAAA,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,CAAE,YAAA,GAAe,EAAC;AAAA,IAC7C;AAAA,EACF,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAO,cAAA,EAAqCpC,QAAAA,KAAkC;AACpG,IAAA,IAAI,CAACA,QAAAA,CAAQ,EAAA,IAAM,CAACA,SAAQ,OAAA,EAAS;AACrC,IAAA,MAAM,EAAE,MAAK,GAAI,MAAM,0BAA0B,KAAA,CAAM,MAAA,CAAO,EAAA,EAAIA,QAAAA,CAAQ,EAAE,CAAA;AAC5E,IAAA,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,YAAA,GAAe,IAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,cAAA,EAAqC,SAAA,EAAmB,QAAgB,KAAA,KAAkB;AAChH,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,CAAe,EAAE,OAAA,EAAS,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAChG,MAAA,YAAA,CAAa,SAAS,cAAc,CAAA,CAAE,QAAQ,KAAA,CAAM,KAAK,EAAE,QAAA,GAAW,MAAA;AAAA,IACxE,CAAA,SAAE;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgBoC,YAAA,CAAM;AAAA,IAC1B,IAAA,EAAM;AAAA,MACJ,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ,EAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,IACA,OAAA,EAAS,KAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,cAAA,GAAiB,OAAO,GAAA,KAA6B;AACzD,IAAA,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,GAAI;AAAA,MAC3B,OAAA,EAAS,EAAA;AAAA,MACT,OAAO,EAAC;AAAA;AAAA,MACR,UAAA,EAAY,KAAA;AAAA,MACZ,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,EAAA;AAAA,QACR,OAAA,EAAS,KAAA;AAAA,QACT,OAAO;AAAC,OACV;AAAA,MACA,cAAc;AAAC;AAAA,KACjB;AAAA,EACF,CAAA;AACA,EAAA,MAAM,QAAQA,YAAA,CAAM;AAAA,IAClB,QAAQ,EAAC;AAAA,IACT,OAAA,EAAS,KAAA;AAAA,IACT,QAAQ;AAAC,GACV,CAAA;AAED,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,GAAS,EAAC,KAAyB;AACzD,IAAA,KAAA,CAAM,MAAA,GAAS;AAAA,MACb,SAAA,EAAW,GAAA;AAAA,MACX,GAAG;AAAA,KACL;AAAA,EACF,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,OAClB,EAAE,MAAA,EAAQ,UAAU,QAAA,GAAW,KAAA,IAC/B,cAAA,KACG;AACH,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAarC,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,EAAA,KAAO,OAAA,EAAS;AAEjC,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,KAAA,EAAO,sBAAsB,OAAO,CAAA;AACpE,IAAA,IAAI,eAAe,KAAA,EAAO;AAE1B,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,MAAA,IAAI,QAAA,EAAU;AAAA,MAEd;AACA,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,eAAe,OAAO,CAAA;AAC7C,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,cAAA,EAAe;AACf,MAAA,MAAA,CAAO,KAAA,EAAO,qBAAqB,OAAO,CAAA;AAC1C,MAAA,kBAAA,CAAmB,EAAE,GAAA,EAAK,cAAA,EAAgB,CAAA;AAAA,IAC5C,CAAA,SAAE;AACA,MAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,KAAwB;AACxD,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,IAAO,CAAA,EAAG,MAAM,MAAA,CAAO,EAAE,IAAI,mBAAmB,CAAA,CAAA;AACtE,IAAA,IAAI,YAAA,CAAa,MAAA,CAAO,GAAA,KAAQ,OAAA,EAAS;AAEzC,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,KAAA,EAAO,6BAA6B,OAAO,CAAA;AAC3E,IAAA,IAAI,eAAe,KAAA,EAAO;AAE1B,IAAA,YAAA,CAAa,SAAS,IAAA,EAAM,GAAA,GAAM,IAAA,GAAQ,EAAE,KAAK,OAAA,EAAQ;AAEzD,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,EAAG;AACnC,MAAA,cAAA,CAAe,OAAO,CAAA;AAAA,IACxB;AACA,IAAA,MAAA,CAAO,KAAA,EAAO,4BAA4B,OAAO,CAAA;AACjD,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA,IAAK,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAEvG,MAAA,WAAA,CAAY,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,IACtC;AAAA,EACF,CAAA;AACA,EAAA,MAAM,gBAAA,GAAmB,OAAO,OAAA,EAA0B,MAAA,EAAiB,QAAQ,EAAA,KAAO;AACxF,IAAA,IAAI;AACF,MAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AACxB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,kBAAA,CAAmB,EAAE,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAChG,MAAA,IAAI,KAAA,CAAM,MAAA,CAAO,EAAA,KAAO,OAAA,EAAS;AACjC,MAAA,MAAM,KAAA,GAAQ,UAAA,CAA4C,IAAA,EAAM,KAAA,IAAS,EAAC,EAAG;AAAA,QAC3E,GAAA,EAAK,IAAA;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,CAAC,CAAA,KAAc;AACpB,UAAA,OAAO,YAAA,CAAa,EAAE,UAAU,CAAA;AAAA,QAClC,CAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,aAAA,CAAc,IAAA,GAAO;AAAA,QACnB,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,SAAS,CAAC,GAAG,cAAc,IAAA,CAAK,KAAA,EAAO,GAAG,KAAK,CAAA,GAAI;AAAA,OAC5D;AAAA,IAIF,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,OAAA,GAAU,KAAA;AAAA,IAC1B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,OAAA,EAA0B,cAAA,EAAqC,MAAA,KAAoB;AAE5G,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,IAAI,CAAC,cAAA,CAAe,QAAA,CAAS,mBAAmB,CAAA,EAAG;AACjD,QAAA,IAAI;AAEF,UAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,iBAAA,CAAkB;AAAA,YACvC,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAAA,YACrB,OAAA;AAAA,YACA,cAAA;AAAA,YACA;AAAA;AAAA,WAED,CAAA;AAED,UAAA,MAAM,WAAA,GAAc,UAAA,CAAkD,IAAA,EAAM,KAAA,IAAS,EAAC,EAAG;AAAA,YACvF,EAAA,EAAI,WAAA;AAAA,YACJ,IAAA,EAAM,CAAC,GAAA,KAAQ,WAAA,CAAY,IAAI,IAAI,CAAA;AAAA,YACnC,OAAA,EAAS,SAAA;AAAA,YACT,KAAA,EAAO,OAAA;AAAA,YACP,QAAA,EAAU,UAAA;AAAA,YACV,MAAA,EAAQ;AAAA,WACT,CAAA;AACD,UAAA,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,GAAU;AAAA,YAC9C,GAAG,IAAA;AAAA,YACH,KAAA,EAAO,MAAA,GAAS,CAAC,GAAG,WAAA,EAAa,GAAG,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,GAAI;AAAA,WAC7F;AAAA,QACF,CAAA,SAAE;AAAA,QAEF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAO,IAAA,KAAuB;AACpD,IAAA,IAAI;AACF,MAAA,aAAA,CAAc,UAAA,GAAa,IAAA;AAC3B,MAAA,MAAM,kBAAA,CAAmB,EAAE,OAAA,EAAS,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,cAAA,EAAgB,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AAC3G,MAAApC,YAAAA,CAAQ,QAAQ,0BAAM,CAAA;AACtB,MAAA,aAAA,CAAc,IAAA,CAAK,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,KAAQ,IAAA,CAAK,GAAG,CAAA;AAC1F,MAAA,IAAI,YAAA,CAAa,MAAA,CAAO,GAAA,KAAQ,IAAA,CAAK,GAAA,EAAK;AACxC,QAAA,YAAA,CAAa,MAAA,GAAS;AAAA,UACpB,KAAK,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,EAAE,IAAI,mBAAmB,CAAA;AAAA,SAChD;AAAA,MACF;AACA,MAAA,OAAO,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAAA,IACvC,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,UAAA,GAAa,KAAA;AAAA,IAC7B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,GAAA,EAA0B,KAAA,KAAkB;AACrE,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9B,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,aAAA,CAAc,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,CAAA;AAC1F,MAAA,IAAI,UAAU,EAAA,EAAI;AAChB,QAAA,YAAA,CAAa,SAAS,GAAG,CAAA,CAAE,QAAQ,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MAC1D;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,wBAAA,GAA2B,CAAC,GAAA,EAA0B,KAAA,EAAe,KAAA,KAAiC;AAE1G,IAAA,IAAI,KAAA,CAAM,cAAA,IAAkB,KAAA,CAAM,cAAA,KAAmB,GAAA,IAAO,CAAC,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,EAAG;AACxG,MAAA,YAAA,CAAa,SAAS,KAAA,CAAM,cAAc,CAAA,GAAI,YAAA,CAAa,SAAS,GAAG,CAAA;AACvE,MAAA,OAAO,YAAA,CAAa,SAAS,GAAG,CAAA;AAEhC,MAAA,IAAI,GAAA,KAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK;AACnC,QAAA,YAAA,CAAa,MAAA,GAAS;AAAA,UACpB,KAAK,KAAA,CAAM;AAAA,SACb;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA,EAAG;AACnC,QAAA,gBAAA,CAAiB,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,MAClC;AAAA,IACF;AACA,IAAA,IAAI,cAAc,EAAC;AACnB,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,EAAG;AAC/C,MAAA,WAAA,GAAc,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,CAAA;AAAA,IACxG,CAAA,MAAA,IAAW,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,EAAG;AACrC,MAAA,WAAA,GAAc,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,CAAA;AAAA,IACvF;AAEA,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,IAAI,KAAA,CAAM,SAAS,sBAAA,EAAwB;AACzC,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,WAAA,CAAY,WAAW,SAAA,CAAU,OAAA;AACjC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,KAAA,CAAM,SAAS,kBAAA,EAAoB;AACrC,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,WAAA,CAAY,KAAK,SAAA,CAAU,SAAA;AAC3B,MAAA,WAAA,CAAY,MAAA,GAAS,SAAA;AAAA,IACvB;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC9B,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,WAAA,CAAY,MAAA,GAAS,OAAA;AACrB,MAAA,WAAA,CAAY,UAAU,SAAA,CAAU,OAAA;AAAA,IAClC,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,SAASwC,SAAA,EAAI;AAC1C,MAAA,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAAA,IAC9B;AAEA,IAAA,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,CAAE,OAAA,GAAU,KAAA;AAAA,EACxD,CAAA;AAEA,EAAA,MAAM,cAAc,OAAOxC,QAAAA,EAAsC,KAAA,GAAQ,IAAmB,MAAA,KAAuC;AACjI,IAAA,MAAM,cAAA,GAAiB,aAAa,MAAA,CAAO,GAAA;AAC3C,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,EAAS;AACnD,IAAA,IAAI,gBAA4C,EAAA,EAC9C,UAAA;AACF,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,UAAA;AACzD,IAAA,IAAIA,QAAAA,EAAS;AACX,MAAA,aAAA,GAAgBA,QAAAA;AAChB,MAAA,UAAA,GAAa,KAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,IAAI,UAAA,EAAY,IAAA,KAAS,CAAA,IAAK,UAAA,EAAY,SAAS,QAAA,EAAU;AAC3D,QAAA,aAAA,GAAgB,UAAA,CAAW,QAAQ,QAAA,GAAW,IAAA;AAAA,MAChD;AACA,MAAA,aAAA,GAAgB,aAAA,GAAgB,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA;AACtE,MAAA,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,KAAA;AAAA,IACrD;AACA,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,MAAM,aAAa,MAAM,MAAA,CAAO,KAAA,EAAO,YAAA,GAAe,eAAe,UAAU,CAAA;AAC/E,IAAA,IAAI,eAAe,KAAA,EAAO;AAE1B,IAAA,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,GAAU,IAAA;AAEhD,IAAA,MAAM,OAAA,GAAgC;AAAA,MACpC,EAAA,EAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,MACtB,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,aAAA;AAAA,MACT,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAGA,IAAA,MAAM,aAAA,GAAgB,CAAA,YAAA,EAAe,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAoC;AAAA,MACxC,EAAA,EAAI,aAAA;AAAA,MACJ,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,EAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,YAAA,CAAa,SAAS,cAAc,CAAA,CAAE,QAAQ,KAAA,CAAM,IAAA,CAAK,SAAS,WAAW,CAAA;AAE7E,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,MAAA,WAAA,CAAY,SAAS,EAAC;AAAA,IACxB;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQA,WAAU,EAAC,GAAI,UAAA,EAAY,MAAA,EAAQ,MAAM,CAAA;AAEzF,IAAA,IAAI,CAACA,QAAAA,EAAS;AACZ,MAAA,UAAA,CAAW,EAAE,CAAA;AACb,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA,aAAA,EAAc;AACd,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AACA,IAAA,kBAAA,CAAmB,cAAc,CAAA;AACjC,IAAA,IAAI;AACF,MAAA,eAAA,CAAgB;AAAA,QACd,OAAA,EAAS,MAAM,MAAA,CAAO,EAAA;AAAA,QACtB,cAAA,EAAgB,cAAA,CAAe,QAAA,CAAS,mBAAmB,IAAI,KAAA,CAAA,GAAY,cAAA;AAAA,QAC3E,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,GAAG,WAAA;AAAA,QACH,cAAA,EAAgB,CAAC,KAAA,KAAU;AAEzB,UAAA,wBAAA,CAAyB,cAAA,EAAgB,eAAe,KAAK,CAAA;AAAA,QAC/D;AAAA,OACD,CAAA;AAED,MAAA,MAAA,CAAO,OAAO,WAAA,IAAc;AAAA,IAC9B,SAAS,KAAA,EAAO;AAEd,MAAA,iBAAA,CAAkB,gBAAgB,aAAa,CAAA;AAC/C,MAAA,YAAA,CAAa,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA,GAAU,KAAA;AAAA,IAClD;AAAA,EACF,CAAA;AACA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,YAAA,CAAa,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,GAAG,EAAE,OAAA,GAAU,KAAA;AAAA,EAC3D,CAAA;AACA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;AG1jBA,YAAA,EAAA;;;ACNA,YAAA,EAAA;;;ACEA,YAAA,EAAA;;;ACPA,IAAA,qBAAA,GAAA;AAAA,EAAC,cAAA,EAAAyC,8BAAAA;AAAA,EAOA,eAAA,EAAAC,+BAAAA;AAAA,EAkBA,MAAA,EAAAC,sBAAAA;AAAA,EAGQ,WAAA,EAAAC,2BAAAA;AAAA,EAOR,YAAA,EAAAC,4BAAAA;AAAA,EA2BA,aAAA,EAAAC,6BAAAA;AAAA,EAIe,WAAA,EAAAC,2BAAAA;AAAA,EAIA,mBAAA,EAAAC,mCAAAA;AAAA,EAWf,eAAA,EAAAC,+BAAAA;AAAA,EAGiB,WAAA,EAAAC,2BAAAA;AAAA,EAIA,kBAAA,EAAAC,kCAAAA;AAAA,EAGjB,eAAA,EAAAC,+BAAAA;AAAA,EAGA,UAAA,EAAAC,0BAAAA;AAAA,EASY,cAAA,EAAAC,8BAAAA;AAAA,EAUA,gBAAA,EAAAC,gCAAAA;AAAA,EAGZ,cAAA,EAAAC,8BAAAA;AAAA,EAIA,4BAAA,EAAAC,4CAAAA;AAAA,EAGA,8BAAA,EAAAC;AAAA,CAAA;ADjHD,IAAO,2BAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAaC,kBAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,kBAAA,GAAqBA,kBAAA,CAAY,SAAA,CAAU,aAAa,CAAA;AAC9D,EAAA,MAAM,iBAAA,GAAoBA,kBAAA,CAAY,SAAA,CAAU,YAAY,CAAA;AAE5D,EAAAzC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA,CAAW,OAAO,EAAA,EAAI;AACxB,MAAA,SAAA,CAAU,gBAAA,CAAiB,UAAA,CAAW,MAAA,CAAO,EAAE,CAAA;AAAA,IACjD;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,CAAW,MAAA,CAAO,EAAE,CAAC,CAAA;AACzB,EAAA,uBACEP,cAAA,CAAAmB,mBAAA,EAAA,EACE,QAAA,kBAAAnB,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAA6B,IAAG,eAAA,EAC5C,QAAA,EAAA,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,MAAA,mBAC7BA,cAAA;AAAA,IAACiD,+BAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,MAC1C,MAAM,MAAM;AACV,QAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,QAAA,SAAA,CAAU,iBAAiB,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,kBAAA,CAAmB,KAAK,MAAM,CAAA;AAAA,MACjF,CAAA;AAAA,MACA,OAAA,EAAS,mBAAmB,IAAA,CAAK,OAAA;AAAA,MACjC,MAAA,kBACEjD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eACb,QAAA,kBAAAA,cAAA,CAACC,SAAA,EAAA,EAAK,SAAA,kBAAWD,cAAA,CAACkD,sBAAa,IAAA,EAAI,IAAA,EAAC,CAAA,EAAI,IAAA,EAAK,SAAQ,CAAA,EACvD,CAAA;AAAA,MAEF,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAS;AAAA,MAC5B,gBAAA,EAAiB,eAAA;AAAA,MAEjB,QAAA,kBAAAlD,cAAA;AAAA,QAACmD,eAAA;AAAA,QAAA;AAAA,UACC,WAAW,qBAAA,CAAO,eAAA;AAAA,UAClB,KAAA,EAAO,mBAAmB,IAAA,CAAK,KAAA;AAAA,UAC/B,SAAA,EAAW,kBAAkB,MAAA,CAAO,GAAA;AAAA,UACpC,gBAAgB,OAAO,GAAA,KAAQ,UAAU,kBAAA,CAAmB,EAAE,KAAK,CAAA;AAAA,UACnE,SAAA,EAAS,IAAA;AAAA,UACT,IAAA,EAAM,CAAC,YAAA,MAAkB;AAAA,YACvB,KAAA,EAAO;AAAA,cACL;AAAA,gBACE,KAAA,EAAO,0BAAA;AAAA,gBACP,GAAA,EAAK,QAAA;AAAA,gBACL,IAAA,iCAAOC,oBAAA,EAAA,EAAe,CAAA;AAAA,gBACtB,MAAA,EAAQ,IAAA;AAAA,gBACR,OAAA,EAAS,CAAC,QAAA,KAAa;AACrB,kBAAA,QAAA,CAAS,SAAS,eAAA,EAAgB;AAClC,kBAAA,SAAA,CAAU,gBAAgB,YAAY,CAAA;AAAA,gBACxC;AAAA;AACF;AACF,WACF;AAAA;AAAA;AACF;AAAA,GACF,kCAEC1C,UAAA,EAAA,EAAM,WAAA,EAAY,wCAAS,KAAA,EAAOA,UAAA,CAAM,sBAAA,EAAwB,CAAA,EAErE,CAAA,EACF,CAAA;AAEJ,CAAA;AD3DA,IAAO,sBAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAasC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAcA,kBAAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAChD,EAA2BA,kBAAAA,CAAY,SAAA,CAAU,aAAa;AAC9D,EAAA,uBACEhD,cAAAA,CAAAmB,mBAAAA,EAAA,EACE,QAAA,kBAAAjB,eAAA,CAACC,SAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,SAAA,EAAW,qBAAA,CAAO,aAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAACC,SAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAM,QAAA,EAClB,QAAA,EAAA;AAAA,sBAAAH,cAAAA;AAAA,QAACqD,oBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,WAAA;AAAA,UAC5B,gBAAA,kBACEnD,eAAA,CAAAiB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAnB,cAAAA,CAACsD,WAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS,GAAA,EAAK,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,4BAC/EtD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,sBAAO,WAAA,EAAc,QAAA,EAAA,UAAA,CAAW,OAAO,IAAA,EAAK;AAAA,WAAA,EAC9D;AAAA;AAAA,OAEJ;AAAA,MAAG;AAAA,KAAA,EACL,CAAA;AAAA,oBACAE,eAAA,CAACqD,UAAA,EAAA,EAAM,IAAA,EAAM,CAAA,EACX,QAAA,EAAA;AAAA,sBAAAvD,cAAAA;AAAA,QAACqD,oBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,wBAAA;AAAA,UAC5B,kCAAkBrD,cAAAA,CAACgB,WAAA,EAAA,EAAO,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,IAAA,kBAAMhB,eAACwD,kBAAA,EAAA,EAAa,CAAA,EAAI,SAAS,MAAM,SAAA,CAAU,oBAAmB,EAAG;AAAA;AAAA,OAC5H;AAAA,sBAEAxD,cAAAA;AAAA,QAACqD,oBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,yBAAA;AAAA,UAC5B,kCACErD,cAAAA;AAAA,YAACa,YAAA;AAAA,YAAA;AAAA,cACC,iBAAA,EAAmB,CAAC,CAAA,KAAM,CAAA;AAAA,cAC1B,SAAA,EAAU,QAAA;AAAA,cACV,UAAA,EAAY,EAAE,IAAA,EAAM,qBAAA,CAAO,mBAAA,EAAoB;AAAA,cAC/C,OAAA,kBAASb,cAAAA,CAAC,wBAAA,EAAA,EAAiB,CAAA;AAAA,cAC3B,OAAA,EAAS,CAAC,OAAO,CAAA;AAAA,cAEjB,QAAA,kBAAAA,cAAAA,CAACgB,WAAA,EAAA,EAAO,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,IAAA,kBAAMhB,cAAAA,CAACyD,qBAAA,EAAA,EAAgB,CAAA,EAAI;AAAA;AAAA;AAC9D;AAAA,OAEJ;AAAA,sBAEAzD,cAAAA;AAAA,QAACqD,oBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,cAAA;AAAA,UAC5B,kCAAkBrD,cAAAA,CAACgB,WAAA,EAAA,EAAO,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,OAAO,aAAA,EAAe,IAAA,kBAAMhB,cAAAA,CAAC0D,uBAAc,CAAA,EAAI;AAAA;AAAA;AACzH,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ,CAAA;;;AGzDO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,SAAS,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,YAAA,EAAA,EAAA,eAAA,CAAA,CAAA;AAAA,EACf,UAAU,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,aAAA,EAAA,EAAA,gBAAA,CAAA,CAAA;AAAA,EAChB,YAAY,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,eAAA,EAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,EAClB,QAAQ,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,WAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AAAA,EACd,UAAU,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,aAAA,EAAA,EAAA,gBAAA,CAAA,CAAA;AAAA,EAChB,WAAW,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,cAAA,EAAA,EAAA,iBAAA,CAAA;AACnB,CAAA;ACIA,IAAO,wBAAQ,CAAC,EAAE,OAAA,EAAArE,QAAAA,EAAS,WAAU,KAAa;AAChD,EAAA,uBACEa,eAAAA,CAACC,SAAAA,EAAA,EAAK,UAAQ,IAAA,EACX,QAAA,EAAA;AAAA,IAAAd,QAAAA,CAAQ,OAAA,oBAAWW,cAAAA,CAAC2D,YAAO,SAAA,EAAsB,OAAA,kBAAS3D,cAAAA,CAACS,uBAAA,EAAe,OAAA,EAASpB,QAAAA,CAAQ,OAAA,EAAS,kBAAoC,CAAA,EAAI,CAAA;AAAA,IAC5IA,SAAQ,KAAA,EAAO,GAAA,CAAI,CAAC,IAAA,EAAM,0BACzBW,cAAAA;AAAA,MAAC2D,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,OAAA;AAAA,QAEV,OAAA,EAAQ,YAAA;AAAA,QACR,SAAA;AAAA,QACA,yBACE3D,cAAAA;AAAA,UAAC4D,aAAA,CAAY,QAAA;AAAA,UAAZ;AAAA,YAEC,IAAA,EAAM;AAAA,cACJ,KAAK,IAAA,CAAK,EAAA;AAAA,cACV,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,KAAK,IAAA,CAAK;AAAA;AACZ,WAAA;AAAA,UALK;AAAA;AAMP,OAAA;AAAA,MAXG;AAAA,KAcR;AAAA,GAAA,EAoCH,CAAA;AAEJ,CAAA;;;AC7DA,UAAA,EAAA;AAEA,YAAA,EAAA;ACIA,SAAS,oBAAoB,OAAA,EAI3B;AACA,EAAA,IAAI,IAAA,GAAO,OAAA;AACX,EAAA,MAAM,gBAA0B,EAAC;AACjC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,MAAM,KAAA,GAAQ,yBAAA;AACd,EAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3C,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAChC,IAAA,aAAA,CAAc,KAAK,SAAS,CAAA;AAC5B,IAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,WAAA,CAAY,SAAS,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,WAAA,CAAY,UAAU,CAAA;AAC9C,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,MAAA,GAAS,QAAQ,KAAA,CAAM,SAAS,CAAA,CAAE,OAAA,CAAQ,WAAW,EAAE,CAAA;AACvD,IAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,IAAA,EAAM,aAAA,EAAe,aAAa,MAAA,EAAO;AACjE;AAEA,SAAS,mBAAA,CAAoB,OAAA,EAAiB,KAAA,EAAe,GAAA,EAAa;AACxE,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,KAAA;AAAA,IACA,0BAAU5D,cAAAA,CAACS,qBAAAA,EAAA,EAAe,SAAkB,gBAAA,EAAoC;AAAA,GAClF;AACF;AAEA,IAAO,0BAAQ,CAAC,EAAE,OAAA,EAAApB,QAAAA,EAAS,WAAU,KAAa;AAChD,EAAA,MAAM,EAAE,WAAA,EAAa,aAAA,EAAe,WAAA,EAAY,GAAIwE,cAAQ,MAAM;AAChE,IAAA,IAAI,CAACxE,QAAAA,EAAS,OAAA,EAAS,OAAO,EAAE,WAAA,EAAa,EAAA,EAAI,aAAA,EAAe,EAAC,EAAG,WAAA,EAAa,EAAA,EAAG;AACpF,IAAA,OAAO,mBAAA,CAAoBA,SAAQ,OAAO,CAAA;AAAA,EAC5C,CAAA,EAAG,CAACA,QAAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAA,MAAM,YAAY,CAACA,QAAAA,IAAY,CAACA,QAAAA,CAAQ,OAAA,IAAWA,SAAQ,MAAA,KAAW,SAAA;AACtE,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEW,eAAC8D,eAAA,EAAA,EACC,QAAA,kBAAA9D,eAACC,SAAAA,EAAA,EAAK,IAAA,EAAM,OAAA,EAAS,CAAA,EACvB,CAAA;AAAA,EAEJ;AACA,EAAA,uBACED,cAAAA,CAACG,SAAAA,EAAA,EAAK,QAAA,EAAQ,MACZ,QAAA,kBAAAH,cAAAA;AAAA,IAAC2D,QAAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,SAAA,EAAWI,4BAAA,CAAW,EAAE,CAAC,qBAAA,CAAO,cAAc,GAAG1E,QAAAA,CAAQ,MAAA,KAAW,SAAA,EAAW,CAAA;AAAA,MAC/E,OAAA,kBACEa,eAAAA,CAAAiB,mBAAAA,EAAA,EAEG,QAAA,EAAA;AAAA,QAAA,aAAA,CAAc,MAAA,GAAS,qBACtBnB,cAAAA;AAAA,UAACoB,aAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAK,IAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,gBAAA,EAAkB,cAAc,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE,CAAA;AAAA,YAC1D,KAAA,EAAO,aAAA,CAAc,GAAA,CAAI,CAAC,OAAA,EAAS,KAAA,KAAU,mBAAA,CAAoB,OAAA,EAAS,CAAA,wBAAA,CAAA,EAAQ,CAAA,MAAA,EAAS,KAAK,CAAA,CAAE,CAAC;AAAA;AAAA,SACrG;AAAA,QAID,+BACCpB,cAAAA;AAAA,UAACoB,aAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAK,IAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,gBAAA,EAAkB,CAAC,cAAc,CAAA;AAAA,YACjC,OAAO,CAAC,mBAAA,CAAoB,WAAA,EAAa,mCAAA,EAAY,cAAc,CAAC;AAAA;AAAA,SACtE;AAAA,QAID,eAAe/B,QAAAA,CAAQ,MAAA,KAAW,OAAA,mBACjCa,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAACgE,yBAAA,EAAA,EAAoB,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE;AAAA,SAAA,EACzC,oBAEAhE,cAAAA,CAACS,uBAAA,EAAe,OAAA,EAAS,aAAa,gBAAA,EAAoC;AAAA,OAAA,EAE9E;AAAA;AAAA,GAEJ,EACF,CAAA;AAEJ,CAAA;ADpFA,IAAO,uBAAA,GAAQ,CAAC,EAAE,MAAA,GAAS,MAAK,KAAa;AAC3C,EAAA,MAAM,YAAY,YAAA,EAAa;AAE/B,EAAA,MAAM,UAAA,GAAauC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA,CAAY,SAAA,CAAU,YAAY,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAcA,kBAAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAEhD,EAAA,MAAM,iBAAA,GAAoBa,cAAQ,MAAM;AACtC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW,KAAA;AAAA,QACX,MAAA,EAAA,CAASI,iBAAU,MAAM,CAAA,GAAI,SAAS,MAAA,EAAQ,IAAA,oBAC5CjE,cAAAA,CAACkE,iBAAA,EAAA,EAAW,MAAM,EAAA,EAAI,SAAA,EAAW,YAAY,QAAA,EAAU,OAAA,EAAS,UAAU,WAAA,CAAY,QAAA,EAAU,MAAM,CAAA,GACpG;AAAA,OACN;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,WAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,SAASD,gBAAA,CAAU,MAAM,CAAA,GAAI,MAAA,GAAS,QAAQ,SAAA,IAAa,EAAE,GAAA,EAAK,UAAA,CAAW,OAAO,OAAA,EAAS,IAAA,kBAAMjE,cAAAA,CAACmE,oBAAA,EAAA,EAAe,GAAG,GAAI;AAAA;AAC5H,KACF;AAAA,EACF,GAAG,CAAC,WAAA,CAAY,UAAU,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAC,CAAA;AAEpD,EAAA,MAAM,WAAA,GAAcN,aAAAA;AAAA,IAClB,MAAM,iBAAA,CAAkB,QAAA,CAAS,kBAAkB,MAAA,CAAO,GAAG,KAAM,EAAC;AAAA,IACpE,CAAC,iBAAA,CAAkB,QAAA,CAAS,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAC;AAAA,GAC3D;AACA,EAAA,MAAM,eAAA,GAAkBA,aAAAA;AAAA,IACtB,MAAM;AAAA,MACJ;AAAA,QACE,GAAA,EAAK,aAAA;AAAA,QACL,OAAA,kBACE3D,eAAAA,CAACqD,UAAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,qBAAA,CAAO,eAAA,EACtD,QAAA,EAAA;AAAA,0BAAAvD,cAAAA;AAAA,YAACoE,SAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWL,4BAAAA,CAAW,qBAAA,CAAO,WAAA,EAAa,QAAQ,CAAA;AAAA,cAClD,OAAA,EAAQ,YAAA;AAAA,cACR,IAAA,kBAAM/D,cAAAA,CAACsD,WAAAA,EAAA,EAAO,KAAA,EAAM,QAAA,EAAS,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS,CAAA;AAAA,cACvE,KAAA,EAAO,CAAA,8BAAA,EAAQ,UAAA,CAAW,MAAA,CAAO,QAAQ,EAAE,CAAA,CAAA;AAAA,cAC3C,WAAA,EAAa,UAAA,CAAW,MAAA,CAAO,WAAA,IAAe;AAAA;AAAA,WAChD;AAAA,UACC,UAAA,CAAW,MAAA,CAAO,kBAAA,EAAoB,MAAA,GAAS,qBAC9CtD,cAAAA;AAAA,YAACqE,SAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,QAAA;AAAA,cACV,IAAA,EAAI,IAAA;AAAA,cACJ,KAAA,EAAO;AAAA,gBACL;AAAA,kBACE,GAAA,EAAK,GAAA;AAAA,kBACL,KAAA,EAAO,qCAAA;AAAA,kBACP,QAAA,EAAU,WAAW,MAAA,CAAO,kBAAA,CAAmB,IAAI,CAAC,EAAE,QAAA,EAAU,EAAA,EAAG,MAAO;AAAA,oBACxE,GAAA,EAAK,EAAA;AAAA,oBACL,6BACErE,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,MAAM,SAAA,CAAU,aAAA,CAAc,QAAQ,CAAA,EAAG,WAAW+D,4BAAAA,CAAW,qBAAA,CAAO,kBAAA,EAAoB,eAAe,GACrH,QAAA,EAAA,QAAA,EACH;AAAA,mBAEJ,CAAE;AAAA;AACJ;AACF;AAAA;AACF,SAAA,EAEJ,CAAA;AAAA,QAEF,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,CAAC,WAAW,MAAM;AAAA,GACpB;AAEA,EAAA,MAAM,YAAA,GAAeF,aAAAA;AAAA,IACnB,MACE,WAAA,EAAa,YAAA,EAAc,MAAA,GACvB;AAAA,MACE;AAAA,QACE,GAAA,EAAK,cAAA;AAAA,QACL,yBACE7D,cAAAA;AAAA,UAACqE,SAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,QAAA;AAAA,YACV,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM;AAAA,gBACJ,QAAA,EAAU;AAAA;AACZ,aACF;AAAA,YACA,QAAA,EAAQ,IAAA;AAAA,YACR,KAAA,EAAO,aAAa,YAAA,CAAa,GAAA,CAAI,CAAC,EAAE,QAAA,EAAU,IAAG,MAAO;AAAA,cAC1D,GAAA,EAAK,EAAA;AAAA,cACL,WAAA,kBAAarE,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,MAAM,SAAA,CAAU,aAAA,CAAc,QAAQ,CAAA,EAAI,QAAA,EAAA,QAAA,EAAS;AAAA,aACjF,CAAE;AAAA;AAAA,SACJ;AAAA,QAEF,OAAA,EAAS,YAAA;AAAA,QACT,QAAQ,EAAE,KAAA,EAAO,EAAE,UAAA,EAAY,UAAS;AAAE;AAC5C,QAEF,EAAC;AAAA,IACP,CAAC,aAAa,YAAY;AAAA,GAC5B;AAEA,EAAA,MAAM,WAAA,GAAc6D,cAAQ,MAAM;AAChC,IAAA,OAAA,CAAQ,WAAA,EAAa,SAAS,KAAA,IAAS,IAAI,GAAA,CAAI,CAACxE,UAAS,KAAA,KAAU;AAQjE,MAAA,OAAO;AAAA,QACL,GAAA,EAAKA,QAAAA,CAAQ,EAAA,IAAM,CAAC,KAAA;AAAA,QACpB,SAAA,EAAW,iBAAA,CAAkBA,QAAAA,CAAQ,IAAI,CAAA,CAAE,SAAA;AAAA,QAC3C,OAAA,EAAS,YAAA;AAAA,QACT,MAAA,EAAQ,iBAAA,CAAkBA,QAAAA,CAAQ,IAAI,CAAA,CAAE,MAAA;AAAA,QACxC,OAAA,EACEA,QAAAA,CAAQ,IAAA,KAAS,WAAA,mBACfW,cAAAA,CAAC,uBAAA,EAAA,EAAgB,OAAA,EAASX,QAAAA,EAAiC,SAAA,EAAW,iBAAA,CAAkBA,QAAAA,CAAQ,IAAI,EAAE,SAAA,EAAW,CAAA,mBAEjHW,cAAAA,CAAC,qBAAA,EAAA,EAAkB,OAAA,EAASX,QAAAA,EAAiC,SAAA,EAAW,iBAAA,CAAkBA,QAAAA,CAAQ,IAAI,CAAA,CAAE,SAAA,EAAW,CAAA;AAAA;AAAA,QAGvH,MAAA,EAAQA,SAAQ,IAAA,KAAS,WAAA,IAAeA,SAAQ,EAAA,oBAC9Ca,eAAAA,CAACC,SAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAACgB,aAAA,EAAO,OAAA,EAAS,MAAM,IAAA,CAAK3B,QAAAA,CAAQ,OAAiB,CAAA,EAAG,KAAA,EAAM,WAAU,OAAA,EAAQ,MAAA,EAAO,MAAK,OAAA,EAAQ,IAAA,kBAAMW,cAAAA,CAACkB,kBAAAA,EAAA,EAAa,CAAA,EAAI,CAAA;AAAA,0BAC5HlB,cAAAA;AAAA,YAACgB,WAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO3B,QAAAA,CAAQ,QAAA,KAAa,MAAA,GAAS,SAAA,GAAY,SAAA;AAAA,cACjD,QAAA,EAAUA,SAAQ,MAAA,KAAW,SAAA;AAAA,cAC7B,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAQ,MAAA;AAAA,cACR,IAAA,kBAAMW,cAAAA,CAACsE,kBAAA,EAAA,EAAa,CAAA;AAAA,cACpB,OAAA,EAAS,MAAM,SAAA,CAAU,QAAA,CAAS,iBAAA,CAAkB,OAAO,GAAA,EAAKjF,QAAAA,CAAQ,EAAA,EAAI,MAAA,EAAQ,KAAK;AAAA;AAAA,WAC3F;AAAA,0BACAW,cAAAA;AAAA,YAACgB,WAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO3B,QAAAA,CAAQ,QAAA,KAAa,SAAA,GAAY,SAAA,GAAY,SAAA;AAAA,cACpD,QAAA,EAAUA,SAAQ,MAAA,KAAW,SAAA;AAAA,cAC7B,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAQ,MAAA;AAAA,cACR,IAAA,kBAAMW,cAAAA,CAACuE,qBAAA,EAAA,EAAgB,CAAA;AAAA,cACvB,OAAA,EAAS,MAAM,SAAA,CAAU,QAAA,CAAS,iBAAA,CAAkB,OAAO,GAAA,EAAKlF,QAAAA,CAAQ,EAAA,EAAI,SAAA,EAAW,KAAK;AAAA;AAAA;AAC9F,SAAA,EAGF;AAAA;AAAA;AAAA;AAAA,OAKJ;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,WAAA,EAAa,OAAO,CAAC,CAAA;AACzB,EAAA,MAAM,eAAA,GAAkBwE,cAAQ,MAAM;AACpC,IAAA,MAAM,OAAO,EAAC;AACd,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,IAAA,CAAK,GAAG,WAAA,EAAa,GAAG,YAAY,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAC,GAAG,eAAe,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,WAAA,EAAa,YAAA,EAAc,eAAe,CAAC,CAAA;AAE/C,EAAA,MAAM,OAAA,GAAUjD,aAAmC,IAAI,CAAA;AACvD,EAAAL,gBAAU,MAAM;AAQd,IAAA,IACE,gBAAgB,MAAA,IAAA,CACf,OAAA,CAAQ,OAAA,EAAS,aAAA,CAAc,gBAAgB,CAAA,KAAA,CAC5C,OAAA,CAAQ,OAAA,EAAS,aAAA,CAAc,aAAa,CAAA,KAAM,OAAA,CAAQ,SAAS,aAAA,CAAc,YAAA,IAAgB,MACnG,GAAA,EACF;AACA,MAAA,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,EAAE,GAAA,EAAK,eAAA,CAAgB,eAAA,CAAgB,MAAA,GAAS,CAAC,CAAA,CAAE,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,IAClG;AAAA,EACF,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AACpB,EAAA,uBACEP,cAAAA;AAAA,IAAC2D,QAAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MAEC,GAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,eAAA;AAAA,MACP,SAAA,EAAWI,4BAAAA,CAAW,qBAAA,CAAO,YAAA,EAAc,eAAe,gBAAgB;AAAA,KAAA;AAAA,IAHrE,kBAAkB,MAAA,CAAO;AAAA,GAIhC;AAEJ,CAAA;;;AEtMA,UAAA,EAAA;AAaA,IAAO,mBAAA,GAAQS,gBAAA,CAAW,CAAC,EAAE,UAAU,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAa,QAAA,GAAW,EAAC,EAAG,QAAA,EAAU,WAAA,IAAsB,GAAA,KAAQ;AAC3H,EAAA,MAAM,WAAA,GAAc5D,YAAAA,CAAoB,EAAE,CAAA;AAC1C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAA,EAAkB,gBAAgB,CAAA,GAAI6D,kBAAA,CAAkD,EAAE,CAAA;AAEhH,EAAAlE,gBAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,UAAU,QAAQ,CAAA,KAAM,KAAK,SAAA,CAAU,WAAA,CAAY,OAAO,CAAA,EAAG;AACpE,MAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACtB,MAAA,MAAM,MAAA,GAA+C,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QAC3E,GAAG,IAAA;AAAA,QACH,KAAK,IAAA,CAAK,EAAA;AAAA,QACV,MAAA,EAAQ;AAAA,OACV,CAAE,CAAA;AACF,MAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzB;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AACb,EAAAA,gBAAU,MAAM;AAEd,IAAA,MAAM,KAAA,GAAQ,aAAA,CACX,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CACvC,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,MAAM,CAAA,GAAI,EAAE,GAAG,IAAA,EAAK;AACpB,MAAA,OAAO,CAAA,CAAE,MAAA;AACT,MAAA,OAAO,CAAA,CAAE,GAAA;AACT,MAAA,OAAO,CAAA,CAAE,IAAA;AACT,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AACH,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAClB,EAAA,MAAM,UAAA,GAAamE,kBAAA,CAAY,CAAC,QAAA,KAAqB;AACnD,IAAArF,YAAAA,CAAQ,MAAM,QAAQ,CAAA;AAAA,EACxB,GAAG,GAAG,CAAA;AACN,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAoB;AAE1C,IAAA,IAAIsF,gBAAS,QAAQ,CAAA,IAAK,MAAM,MAAA,GAAS,aAAA,CAAc,SAAS,QAAA,EAAU;AACxE,MAAA,UAAA,CAAW,CAAA,oCAAA,EAAS,QAAQ,CAAA,kBAAA,CAAK,CAAA;AACjC,MAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAO,EAAE,IAAA,EAAK,KAAW;AAE/C,IAAA,IAAI,QAAA,IAAY,IAAA,CAAK,IAAA,GAAO,QAAA,EAAU;AAGpC,MAAAtF,YAAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,gBAAA,CAAiB;AAAA,MACf,GAAG,gBAAA,EAAiB;AAAA,MACpB;AAAA,QACE,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA,EAAS,EAAA;AAAA,QACT,MAAM,IAAA,CAAK;AAAA;AACb,KACD,CAAA;AACD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,IAAI,CAAA;AAC5B,MAAA,IAAIuF,eAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACxC,UAAA,IAAIC,oBAAA,CAAc,WAAA,CAAY,GAAG,CAAC,CAAA,EAAG;AACrC,UAAA,QAAA,CAAS,MAAA,CAAO,GAAA,EAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,QACvC,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAW,QAAQ,CAAA;AAE1C,MAAA,IAAI,CAAC,IAAA,EAAM,GAAA,IAAO,IAAA,EAAM,SAAS,OAAA,EAAS;AACxC,QAAA,IAAA,CAAK,GAAA,GAAM,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,MAEjC;AAEA,MAAA,gBAAA;AAAA,QACE,gBAAA,EAAiB,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5B,UAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,IAAA,CAAK,GAAA,EAAK;AACtB,YAAA,OAAO,EAAE,GAAG,IAAA,EAAO,GAAA,EAAK,IAAA,CAAM,IAAI,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,IAAA,EAAK;AAAA,UACjE,CAAA,MAAO;AACL,YAAA,OAAO,CAAA;AAAA,UACT;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,8CAAW,KAAK,CAAA;AAC5B,MAAA,gBAAA;AAAA,QACE,gBAAA,EAAiB,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5B,UAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,IAAA,CAAK,GAAA,EAAK;AACtB,YAAA,OAAO,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,OAAA,EAAS,aAAa,0BAAA,EAAO;AAAA,UACtD,CAAA,MAAO;AACL,YAAA,OAAO,CAAA;AAAA,UACT;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAA0B;AAE1C,IAAA,gBAAA,CAAiB,aAAA,CAAc,OAAO,CAAC,CAAA,KAAM,EAAE,GAAA,KAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAClE,CAAA;AACA,EAAAC,yBAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAO;AAAA,MACL,cAAc,MAAM;AAClB,QAAA,MAAM,QAAQ,gBAAA,EAAiB;AAC/B,QAAA,MAAM,iBAAiB,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,WAAW,CAAA;AACzE,QAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,UAAAzF,YAAAA,CAAQ,MAAM,oEAAa,CAAA;AAC3B,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,OAAO,CAAA;AACjE,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAAA,YAAAA,CAAQ,MAAM,8DAAY,CAAA;AAC1B,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,KACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,SAAA,GAAYwE,cAAQ,MAAM;AAC9B,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,IAAA,MAAM,WAAA,GAAoC;AAAA,MACxC,QAAA,EAAU;AAAA,QACR,MAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAO,CAAC,MAAA,EAAQ,SAAS,MAAA,EAAQ,MAAA,EAAQ,SAAS,MAAM;AAAA,KAC1D;AACA,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,MAAA,EAAQ,OAAA,CAAQ,CAAC,IAAA,KAAS;AACxB,MAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,MACnC;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,IACxB;AAEA,IAAA,OAAO,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACE7D,cAAAA;AAAA,IAAC4D,aAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,eAAA;AAAA,MACV,MAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,CAACe,eAAA,CAAS,QAAQ,KAAK,QAAA,GAAW,CAAA;AAAA,MAC5C,QAAA;AAAA,MACA,aAAA,EAAe,eAAA;AAAA,MACf,YAAA,EAAc,CAAC,IAAA,EAAM,KAAA,KAAU,eAAe,KAAK,CAAA;AAAA,MACnD,KAAA,EAAO,aAAA;AAAA,MACP,QAAA;AAAA,MACA,WAAA,EAAa,CAAC,IAAA,KACZ,IAAA,KAAS,SACL,EAAE,KAAA,EAAO,8CAAU,GACnB;AAAA,QACE,IAAA,kBAAM3E,cAAAA,CAAC+E,yBAAA,EAAA,EAAoB,CAAA;AAAA,QAC3B,KAAA,EAAO,0BAAA;AAAA,QACP,WAAA,kBACE/E,cAAAA,CAAC,KAAA,EAAA,EACC,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,0GAAiB,CAAA,EAExB;AAAA;AAEJ;AAAA,GAER;AAEJ,CAAC,CAAA;AC/KD,IAAO,kBAAA,GAAQwE,gBAAAA;AAAA,EACb,CACE;AAAA,IACE,WAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAW,EAAC;AAAA,IACZ,UAAA,GAAa,KAAA;AAAA,IACb,OAAA,GAAU,KAAA;AAAA,IACV,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,SAAA,GAAY5D,aAA8B,IAAI,CAAA;AACpD,IAAA,MAAM,EAAE,UAAA,EAAY,aAAA,KAAkBoE,mBAAA,CAAa,OAAA,IAAW,IAAI,eAAe,CAAA;AAEjF,IAAA,MAAM,eAAA,GAAkB,UAAA,EAAY,OAAA,oBAClChF,cAAAA,CAACiF,UAAA,EAAA,EAAM,GAAA,EAAK,CAAC,CAAC,QAAA,EAAU,MAAA,IAAU,CAAC,YACjC,QAAA,kBAAAjF,cAAAA,CAACgB,WAAAA,EAAA,EAAO,IAAA,EAAK,MAAA,EAAO,IAAA,kBAAMhB,cAAAA,CAACkF,uBAAA,EAAA,EAAkB,CAAA,EAAI,OAAA,EAAS,MAAM,kBAAA,CAAmB,CAAC,UAAU,GAAG,CAAA,EACnG,CAAA;AAGF,IAAA,MAAM,iBAAiBtE,YAAAA,EAAY;AACnC,IAAA,MAAM,YAAA,mBACJV,eAAAA,CAAAiB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAnB,cAAAA,CAACmF,QAAA,CAAO,MAAA,EAAP,EAAc,KAAA,EAAM,4BAAO,IAAA,EAAM,UAAA,EAAY,YAAA,EAAc,kBAAA,EAC1D,QAAA,kBAAAnF,cAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,cAAA;AAAA,UACL,QAAA;AAAA,UACA,QAAA,EAAU,gBAAA;AAAA,UACV,QAAQ,UAAA,EAAY,gBAAA;AAAA,UACpB,UAAU,UAAA,EAAY,YAAA;AAAA,UACtB,aAAa,UAAA,EAAY;AAAA;AAAA,OAC3B,EACF,CAAA;AAAA,MACC;AAAA,KAAA,EACH,CAAA;AAEF,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,IAAI,CAAC,cAAA,CAAe,OAAA,EAAS,gBAAgB,cAAA,CAAe,OAAA,CAAQ,cAAa,EAAG;AAClF,QAAA,MAAA,EAAO;AAAA,MACT;AAAA,IACF,CAAA;AAGA,IAAA8E,yBAAAA;AAAA,MACE,GAAA;AAAA,MACA,OAAO;AAAA,QACL,KAAA,EAAO,CAAC,OAAA,KAA2C;AACjD,UAAA,SAAA,CAAU,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,QAClC;AAAA,OACF,CAAA;AAAA,MACA;AAAC,KACH;AAEA,IAAA,uBACE9E,cAAAA,CAACoF,YAAA,EAAA,EAAW,KAAA,EAAO,IAAI,QAAA,EAAU,CAAC,OAAA,KAAY,aAAA,CAAc,IAAI,OAAO,CAAA,EAAA,CAAI,GACxE,QAAA,EAAA,CAAC,uBACApF,cAAAA;AAAA,MAACmF,QAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAQ,YAAA;AAAA,QACR,QAAA;AAAA,QACA,QAAA,EAAU,aAAA;AAAA,QACV,OAAA;AAAA,QACA,QAAA,EAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QAGnC,QAAA;AAAA,QACA,MAAA,EAAQ,CAAC,EAAE,UAAA,EAAW,KAAM;AAC1B,UAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,UAAA;AACtC,UAAA,uBACEjF,eAAAA,CAACC,SAAAA,EAAA,EAAK,UAAQ,IAAA,EACZ,QAAA,EAAA;AAAA,4BAAAD,eAAAA,CAACC,WAAA,EAAK,OAAA,EAAQ,iBAAgB,KAAA,EAAM,QAAA,EAAS,KAAK,EAAA,EAChD,QAAA,EAAA;AAAA,8BAAAD,eAAAA,CAACC,WAAA,EAAK,SAAA,EAAU,UAAS,GAAA,EAAK,CAAA,EAAG,OAAM,QAAA,EACpC,QAAA,EAAA;AAAA,gBAAA,eAAA;AAAA,gBACA,WAAA;AAAA,gBAAa;AAAA,eAAA,EAChB,CAAA;AAAA,8BACAH,cAAAA,CAACG,SAAAA,EAAA,EAAK,KAAA,EAAM,UAAU,QAAA,EAAA,OAAA,mBAAUH,cAAAA,CAAC,aAAA,EAAA,EAAc,oBAAKA,cAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,iBAAiB,CAAA,EAAG;AAAA,aAAA,EAC1F,CAAA;AAAA,YACC;AAAA,WAAA,EACH,CAAA;AAAA,QAEJ,CAAA;AAAA,QACA,OAAA,EAAS,KAAA;AAAA,QACT,aAAa,WAAA,IAAe;AAAA;AAAA,KAC9B,EAEJ,CAAA;AAAA,EAEJ;AACF,CAAA;;;AC1HA,YAAA,EAAA;AAGA,IAAOqF,sBAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAE/B,EAAA,MAAM,UAAA,GAAarC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA,CAAY,SAAA,CAAU,YAAY,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAcA,kBAAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAEhD,EAAA,MAAM,WAAA,GAAca,aAAAA;AAAA,IAClB,MAAM,iBAAA,CAAkB,QAAA,CAAS,kBAAkB,MAAA,CAAO,GAAG,KAAM,EAAC;AAAA,IACpE,CAAC,iBAAA,CAAkB,QAAA,CAAS,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAC;AAAA,GAC3D;AACA,EAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAgB;AACvC,IAAA,IAAI,aAAa,OAAA,EAAS;AAC1B,IAAA,SAAA,CAAU,WAAW,GAAG,CAAA;AACxB,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,SAAA,CAAU,WAAA,EAAY;AAAA,IACxB,GAAG,EAAE,CAAA;AAAA,EACP,CAAA;AACA,EAAA,uBACE7D,cAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAa,WAAA,CAAY,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,WAAA;AAAA,MAC/C,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,UAAU,WAAA,CAAY,KAAA;AAAA,MACtB,YAAY,WAAA,CAAY,UAAA;AAAA,MACxB,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,iBAAiB,SAAA,CAAU,UAAA;AAAA,MAC3B,kBAAkB,SAAA,CAAU,WAAA;AAAA,MAC5B,oBAAoB,SAAA,CAAU,aAAA;AAAA,MAC9B,MAAA,EAAQ,MAAM,SAAA,CAAU,WAAA,EAAY;AAAA,MACpC,OAAA,EAAS,SAAA,CAAU,MAAA,CAAO,KAAA,EAAO,aAAA;AAAA,MACjC,UAAA,EAAY;AAAA,QACV,GAAI,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAY,UAAA;AAAA,QACnC,WAAA,EAAa,EAAE,OAAA,EAAS,UAAA,CAAW,OAAO,EAAA;AAAG,OAC/C;AAAA,MACA,WAAA,kBACEE,eAAAA,CAAAiB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAnB,cAAAA;AAAA,UAACgB,WAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,KAAA,EAAO,UAAA,CAAW,MAAA,CAAO,SAAA,KAAc,MAAM,SAAA,GAAY,SAAA;AAAA,YACzD,OAAA,EAAQ,QAAA;AAAA,YACR,OAAA,EAAS,MAAM,SAAA,CAAU,cAAA,CAAe,EAAE,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,SAAA,KAAc,GAAA,GAAM,GAAA,GAAM,GAAA,EAAK,CAAA;AAAA,YACvG,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAhB,cAAAA,CAACqD,oBAAAA,EAAA,EAAc,OAAA,EAAS,WAAA,CAAY,OAAO,cAAA,EAAgD;AAAA,OAAA,EAC7F,CAAA;AAAA,MAEF,6BACErD,cAAAA;AAAA,QAACmF,QAAAA,CAAO,MAAA;AAAA,QAAP;AAAA,UACC,uBACEjF,eAAAA,CAACC,SAAAA,EAAA,EAAK,KAAK,CAAA,EACT,QAAA,EAAA;AAAA,4BAAAH,eAACsF,mBAAA,EAAA,EAAc,CAAA;AAAA,4BACftF,cAAAA,CAAC8D,eAAAA,CAAW,IAAA,EAAX,EAAgB,IAAA,EAAK,WAAA,EAAY,QAAA,EAAQ,IAAA,EACvC,QAAA,EAAA,WAAA,EAAa,UAAA,EAAY,OAAA,EAAS,IAAA,EACrC;AAAA,WAAA,EACF,CAAA;AAAA,UAEF,IAAA,EAAM,CAAC,CAAC,WAAA,EAAa,YAAY,OAAA,EAAS,IAAA;AAAA,UAC1C,YAAA,EAAc,MAAM,SAAA,CAAU,aAAA,EAAc;AAAA,UAC5C,UAAA,EAAY;AAAA,YACV,QAAQ,qBAAA,CAAO,4BAAA;AAAA,YACf,SAASpC,mBAAAA,CAAa,WAAA,CAAY,OAAO,aAA4C,CAAA,GAAI,KAAK,qBAAA,CAAO;AAAA,WACvG;AAAA,UAEA,QAAA,kBAAA1B,cAAAA;AAAA,YAACqD,oBAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,YAAY,MAAA,CAAO,aAAA;AAAA,cAC5B,gBAAA,kBACErD,cAAAA,CAACG,SAAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EACR,QAAA,EAAA,CAAC,0BAAA,EAAQ,0BAAM,CAAA,CAAE,GAAA,CAAI,CAAC,wBACrBD,eAAAA,CAACc,WAAAA,EAAA,EAAiB,KAAA,EAAM,SAAA,EAAU,OAAA,EAAQ,QAAA,EAAS,OAAA,EAAS,MAAM,eAAA,CAAgB,GAAG,CAAA,EAClF,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBAAI;AAAA,eAAA,EAAA,EADM,GAEb,CACD,CAAA,EACH;AAAA;AAAA;AAEJ;AAAA;AACF;AAAA,GAEJ;AAEJ,CAAA;;;ACxFA,YAAA,EAAA;AAGA,IAAO,iCAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAagC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAE9C,EAAA,uBACE9C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,gBAACC,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAK,CAAA,EACxB,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAACsD,aAAA,EAAO,IAAA,EAAM,IAAI,GAAA,EAAK,UAAA,CAAW,OAAO,OAAA,EAAS,CAAA;AAAA,sBAClDtD,eAAC,MAAA,EAAA,EAAK,SAAA,EAAW,sBAAO,cAAA,EAAiB,QAAA,EAAA,UAAA,CAAW,OAAO,IAAA,EAAK;AAAA,KAAA,EAClE,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAACgB,WAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAK,IAAA;AAAA,QACL,IAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS,MAAM,SAAA,CAAU,kBAAA,EAAmB;AAAA,QAC5C,SAAA,EAAW+C,6BAAW,QAAQ,CAAA;AAAA,QAC9B,IAAA,kBAAM/D,cAAAA,CAACwD,kBAAAA,EAAA,EAAa,CAAA;AAAA,QACrB,QAAA,EAAA;AAAA;AAAA;AAED,GAAA,EACF,CAAA;AAEJ,CAAA;;;ACxBA,YAAA,EAAA;AAIA,IAAO,6BAAQ,MAAM;AACnB,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAaR,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAE9C,EAAA,MAAM,SAAA,GAAYa,aAAAA;AAAA,IAChB,MACE,UAAA,CAAW,MAAA,CAAO,MAAA,EAAQ,MAAA,GAAS,CAAA,oBACjC3D,eAAAA,CAACC,SAAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,MAAI,IAAA,EAChB,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAACgB,aAAA,EAAO,QAAA,EAAQ,MAAC,KAAA,EAAM,SAAA,EAAU,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAA,0BAAA,EAEhD,CAAA;AAAA,MACC,WAAW,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,6BAC7BhB,cAAAA;AAAA,QAACa,YAAAA;AAAA,QAAA;AAAA,UAEC,yBACEb,cAAAA;AAAA,YAACuF,SAAA;AAAA,YAAA;AAAA,cACC,UAAA,EAAW,YAAA;AAAA,cACX,KAAA,EAAO,KAAA;AAAA,cACP,WAAW,qBAAA,CAAO,UAAA;AAAA,cAClB,YAAY,QAAA,CAAS,eAAA;AAAA,cACrB,YAAY,CAAC,IAAA,qBACXvF,cAAAA,CAACuF,SAAA,CAAK,MAAL,EAAU,OAAA,EAAS,MAAM,SAAA,CAAU,WAAA,CAAY,KAAK,QAAQ,CAAA,EAAG,WAAW,qBAAA,CAAO,cAAA,EAC/E,eAAK,QAAA,EACR,CAAA;AAAA,cAEF,MAAA,kBACEvF,cAAAA,CAACG,SAAAA,EAAA,EAAK,SAAQ,KAAA,EAAM,SAAA,EAAW,qBAAA,CAAO,gBAAA,EAAkB,QAAA,EAAA,8EAAA,EAExD;AAAA;AAAA,WAEJ;AAAA,UAEF,uBACEH,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW+D,4BAAAA,CAAW,qBAAA,CAAO,eAAA,EAAiB,eAAe,CAAA;AAAA,cAC7D,aAAG,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,wBAAA,EAAO,SAAS,SAAS,CAAA,kBAAA;AAAA;AAAA,WAAM;AAAA,UAG5D,QAAA,kBAAA/D,eAACgB,WAAAA,EAAA,EAAO,OAAM,SAAA,EAAU,OAAA,EAAQ,QAAA,EAC7B,QAAA,EAAA,QAAA,CAAS,SAAA,EACZ;AAAA,SAAA;AAAA,QA3BK,QAAA,CAAS;AAAA,OA6BjB;AAAA,KAAA,EACH,CAAA;AAAA,IAEJ,CAAC,UAAA,CAAW,MAAA,CAAO,MAAM;AAAA,GAC3B;AACA,EAAA,OAAO,SAAA;AACT,CAAA;;;ACzDA,IAAAxB,sBAAAA,GAAA;AAAA,EAAC,eAAA,EAAAgG,+BAAAA;AAAA,EAIiB,oBAAA,EAAAC,oCAAAA;AAAA,EAIjB,WAAA,EAAArD;AAAA,CAAA;AbqCD,IAAO,eAAA,GAAQoC,gBAAAA,CAA8B,CAAC,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAa,EAAU,GAAA,KAAQ;AAC3G,EAAA,MAAM,YAAYX,aAAAA,CAAQ,MAAM,eAAA,EAAgB,EAAG,EAAE,CAAA;AAErD,EAAAtD,gBAAU,MAAM;AACd,IAAA,SAAA,CAAU,WAAA,EAAY;AACtB,IAAA,IAAI,YAAA,EAAc,MAAA,IAAU,YAAA,EAAc,QAAA,EAAU;AAClD,MAAA,SAAA,CAAU,WAAA,CAAY,EAAE,MAAA,EAAQ,YAAA,CAAa,MAAA,EAAQ,UAAU,YAAA,CAAa,QAAA,EAAS,EAAG,YAAA,CAAa,cAAc,CAAA;AAAA,IACrH;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACL,EAAAA,gBAAU,MAAM;AAEd,IAAA,SAAA,CAAU,UAAU,MAAM,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAAA,gBAAU,MAAM;AAEd,IAAA,SAAA,CAAU,gBAAgB,MAAM,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAAA,gBAAU,MAAM;AAEd,IAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,UAAA,GAAayC,kBAAAA,CAAY,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAcA,kBAAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAChD,EAAA8B,yBAAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAO;AAAA,MACL,aAAa,SAAA,CAAU,WAAA;AAAA,MACvB,aAAa,SAAA,CAAU,WAAA;AAAA,MACvB,oBAAoB,SAAA,CAAU,kBAAA;AAAA,MAC9B,eAAe,SAAA,CAAU,aAAA;AAAA,MACzB,YAAY,SAAA,CAAU,UAAA;AAAA,MACtB,UAAU,SAAA,CAAU,WAAA;AAAA,MACpB,WAAW,SAAA,CAAU,eAAA;AAAA,MACrB,WAAW,SAAA,CAAU;AAAA,KACvB,CAAA;AAAA,IACA;AAAC,GACH;AACA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAoB;AAC5C,IAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AAAA,EACnB,CAAA;AACA,EAAA,MAAM,UAAA,GAAajB,cAAQ,MAAM;AAC/B,IAAA,OACEnC,mBAAAA,CAAa,WAAA,CAAY,MAAA,CAAO,OAAgC,MAC/D,CAAC,CAAE,WAAA,CAAY,OAAA,CAAQ,KAAqB,OAAA,IAAW,CAAC,CAAE,WAAA,CAAY,QAAQ,IAAA,CAAsB,OAAA,CAAA;AAAA,EAEzG,CAAA,EAAG,CAAC,WAAA,CAAY,MAAA,CAAO,SAAS,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAC,CAAA;AACzD,EAAA,uBACE1B,cAAAA,CAAC0F,WAAA,EAAA,EAAU,KAAA,EAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,GAAG,KAAA,EAAM,EACzC,QAAA,kBAAA1F,cAAAA,CAAC,YAAA,EAAA,EAAa,OAAO,SAAA,EACnB,QAAA,kBAAAA,cAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAU,UAAA,CAAW,OAAA,EAAS,kBAAiB,WAAA,EACnD,QAAA,kBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EACb,QAAA,kBAAAE,eAAAA,CAACyF,aAAA,EAAA,EAAS,UAAU,gBAAA,EACjB,QAAA,EAAA;AAAA,IAAAjE,mBAAAA,CAAa,YAAY,MAAA,CAAO,gBAAkD,qBACjF1B,cAAAA,CAAC2F,aAAA,CAAS,KAAA,EAAT,EAAe,IAAA,EAAM,KAAK,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,KAAA,EACxD,QAAA,kBAAAzF,eAAAA,CAACC,WAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAU,aAAA,EACvB,QAAA,EAAA;AAAA,sBAAAH,cAAAA;AAAA,QAACqD,oBAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,sBAAA;AAAA,UAC5B,gBAAA,EAAkB;AAAA;AAAA,OACpB;AAAA,sBACArD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eACb,QAAA,kBAAAA,cAAAA;AAAA,QAACqD,oBAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAY,MAAA,CAAO,gBAAA;AAAA,UAC5B,gBAAA,EAAkB;AAAA;AAAA,OACpB,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,IAED,UAAA,oBACCnD,eAAAA,CAACyF,aAAA,CAAS,OAAT,EAAe,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,KAAA,EAC3C,QAAA,EAAA;AAAA,MAAA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAqB,OAAA,oBACzCzF,eAAAA,CAACC,WAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAU,aAAA,EACvB,QAAA,EAAA;AAAA,wBAAAD,eAAAA,CAACC,SAAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,GAAA,EAAK,EAAA,EAAI,SAAA,EAAWX,sBAAAA,CAAO,eAAA,EACtE,QAAA,EAAA;AAAA,0BAAAQ,cAAAA,CAAC,SAAI,SAAA,EAAWR,sBAAAA,CAAO,sBAAuB,QAAA,EAAA,WAAA,CAAY,OAAA,CAAQ,KAAK,QAAA,EAAS,CAAA;AAAA,0BAChFU,gBAACC,SAAAA,EAAA,EAAK,KAAK,CAAA,EAAG,OAAA,EAAQ,QAAA,EAAS,KAAA,EAAM,QAAA,EACnC,QAAA,EAAA;AAAA,4BAAAH,cAAAA;AAAA,cAACgB,WAAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,SAAA;AAAA,gBACN,OAAA,EAAQ,UAAA;AAAA,gBACR,OAAA,EAAS,MAAM4E,mBAAA,CAAc,WAAA,CAAY,OAAA,CAAQ,KAAqB,OAAA,EAAS,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,gBACjH,QAAA,EAAA;AAAA;AAAA,aAED;AAAA,4BACA5F,eAACgB,WAAAA,EAAA,EAAO,SAAS,MAAM,SAAA,CAAU,UAAA,EAAW,EAAG,QAAA,EAAA,cAAA,EAAE;AAAA,WAAA,EACnD;AAAA,SAAA,EACF,CAAA;AAAA,wBACAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eACb,QAAA,kBAAAA,cAAAA;AAAA,UAAC6F,kBAAA;AAAA,UAAA;AAAA,YACE,GAAI,YAAY,OAAA,CAAQ,IAAA;AAAA,YACzB,SAAA,EAAW;AAAA,cACT,eAAA,EAAiB;AAAA;AACnB;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAEA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAsB,OAAA,oBAC1C7F,cAAAA;AAAA,QAACe,qBAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAsB,OAAA;AAAA,UAElD,OAAA,EAAS,CAAC,IAAA,KAAS;AACjB,YAAA,SAAA,CAAU,aAAA,CAAc;AAAA,cACtB,IAAA,EAAM,CAAA;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA,EAAM,IAAA;AAAA,gBACN,QAAA,EAAU;AAAA,eACZ;AAAA,cACA,MAAA,EAAQ;AAAA,gBACN,OAAA,EAAS;AAAA;AACX,aACD,CAAA;AAAA,UACH,CAAA;AAAA,UACA,QAAA,kBACEf,cAAAA,CAAAmB,mBAAAA,EAAA,EAIE,0BAAAnB,cAAAA,CAACc,QAAAA,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,KAAA,EAAM,WAAU,SAAA,EAAU,gBAAA,EAAiB,OAAA,EAAS,MAAM,SAAA,CAAU,UAAA,EAAW,EACnG,QAAA,kBAAAd,cAAAA,CAAC0D,mBAAAA,EAAA,EAAc,CAAA,EACjB,CAAA,EACF;AAAA;AAAA;AAUJ,KAAA,EAEJ,CAAA;AAAA,oBAEF1D,eAAC2F,aAAA,CAAS,KAAA,EAAT,EAAe,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,IAAA,EAAM,UAAA,GAAa,MAAM,MAAA,EAC7E,QAAA,kBAAAzF,gBAACC,SAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,SAAA,EAAW4D,4BAAAA,CAAW,aAAa,CAAA,EAEhD,QAAA,EAAA;AAAA,sBAAA/D,cAAAA,CAACqD,sBAAA,EAAc,OAAA,EAAS,YAAY,MAAA,CAAO,MAAA,EAAgC,kBAAkB,mBAAA,EAAa,CAAA;AAAA,sBAC1GrD,cAAAA,CAACG,SAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAW4D,4BAAAA,CAAW,aAAA,EAAe,qBAAA,CAAW,MAAM,CAAA,EACnE,QAAA,kBAAA7D,eAAAA,CAACC,SAAAA,EAAA,EAAK,OAAA,EAAQ,QAAA,EAAS,QAAA,EAAQ,IAAA,EAAC,GAAA,EAAK,EAAA,EAAI,SAAA,EAAW4D,4BAAAA,CAAW,aAAA,EAAe,qBAAA,CAAW,WAAW,CAAA,EACjG,QAAA,EAAA;AAAA,QAAArC,mBAAAA,CAAa,WAAA,CAAY,MAAA,CAAO,WAAW,CAAA,oBAC1C1B,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,UAACqD,oBAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,YAAY,MAAA,CAAO,WAAA;AAAA,YAC5B,gBAAA,kBAAkBrD,cAAAA,CAAC,uBAAA,EAAA,EAAgB,MAAA,EAAQ,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,IAAA,EAAK,EAAG;AAAA;AAAA,SAC/E,EACF,CAAA;AAAA,wBAEFA,cAAAA;AAAA,UAACqD,oBAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,YAAY,MAAA,CAAO,YAAA;AAAA,YAC5B,kCAAkBnD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWV,uBAAO,WAAA,EAAa,QAAA,EAAA;AAAA,cAAA,eAAA;AAAA,cAAI,WAAW,MAAA,CAAO;AAAA,aAAA,EAAK;AAAA;AAAA,SACnF;AAAA,wBAEAU,eAAAA,CAACC,SAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,KAAK,CAAA,EAElB,QAAA,EAAA;AAAA,0BAAAH,cAAAA;AAAA,YAACqD,oBAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,YAAY,MAAA,CAAO,aAAA;AAAA,cAC5B,gBAAA,EAAkB;AAAA;AAAA,WACpB;AAAA,0BAEArD,eAACqD,oBAAAA,EAAA,EAAc,SAAS,WAAA,CAAY,MAAA,CAAO,MAAA,EAAgC,gBAAA,EAAkBgC,mBAAAA,EAAY;AAAA,SAAA,EAC3G,CAAA;AAAA,wBACArF,cAAAA,CAACqD,oBAAAA,EAAA,EAAc,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,YAAA,EAAc,gBAAA,kBAAkBrD,cAAAA,CAAAmB,mBAAAA,EAAA,EAAE,CAAA,EAAK;AAAA,OAAA,EACpF,CAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAEJ,CAAC","file":"index.cjs.js","sourcesContent":["import { copyText } from '@zero-library/common'\nimport { message } from 'antd'\nimport dayjs from 'dayjs'\n\nexport const copy = (value: string) => {\n copyText(value).then(() => {\n message.success('复制成功')\n })\n}\n\nexport const classifyTime = (timestamp?: number): string => {\n const now = dayjs()\n const target = dayjs(timestamp)\n\n if (target.isSame(now, 'day')) {\n return '今天'\n }\n\n const diffInDays = now.diff(target, 'day')\n if (diffInDays < 7) {\n return '最近 7 天'\n } else if (diffInDays < 30) {\n return '最近 30 天'\n } else if (diffInDays < 180) {\n return '最近半年'\n } else {\n return '更早'\n }\n}\n\n// 对象转换函数,将源对象转换为目标对象\nexport function transform<T extends object, U extends object>(\n source: T,\n fieldMap: {\n [K in keyof U]: keyof T | ((source: T) => U[K]) | U[K]\n }\n): U {\n const result = {} as U\n for (const [targetKey, mapping] of Object.entries(fieldMap)) {\n const key = targetKey as keyof U\n if (typeof mapping === 'function') {\n result[key] = (mapping as (src: T) => U[typeof key])(source)\n } else if (typeof mapping === 'string' && source && mapping in source) {\n result[key] = source[mapping as keyof T] as unknown as U[typeof key]\n } else {\n result[key] = mapping as U[typeof key]\n }\n }\n return result\n}\n\n// 批量对象转换函数\nexport function transforms<T extends object, U extends object>(\n sources: T[],\n fieldMap: {\n [K in keyof U]: keyof T | ((source: T) => U[K]) | U[K]\n }\n): U[] {\n return sources?.map((source) => transform<T, U>(source, fieldMap)) || []\n}\n\n// 构建带查询参数的 URL,支持数组参数\nexport function buildURLWithParams(url: string, params?: Record<string, any>) {\n const query = new URLSearchParams(\n Object.entries(params || {}).flatMap(([key, val]) => (Array.isArray(val) ? val.map((v) => [key, String(v)]) : [[key, String(val)]]))\n ).toString()\n return query ? `${url}${url.includes('?') ? '&' : '?'}${query}` : url\n}\n\nexport const getBase64 = (file: File): Promise<string> => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => resolve(reader.result as string)\n reader.onerror = reject\n reader.readAsDataURL(file)\n })\n}\n","import { createValtioContext } from '@zero-library/common'\nimport { ChatStoreType } from '.'\n\n// 基于泛型创建专用上下文\nexport const { ValtioProvider: ChatProvider, useValtioStore: useChatStore } = createValtioContext<ChatStoreType>()\n",".appCard {\n width: 180px;\n border-radius: 10px;\n border: 1px solid #d7d7d7;\n background-color: #fafafa;\n font-size: 16px;\n cursor: pointer;\n margin: 8px;\n padding: 12px 8px;\n}\n.appCard > div {\n max-width: 100%;\n}\n.appCard > img {\n height: 30px;\n}\n.fileView {\n width: 200px;\n padding: 4px 8px;\n cursor: pointer;\n background-color: #f5f3f3;\n border-radius: 6px;\n}\n.fileEdit {\n margin: 12px 0;\n border-radius: 6px;\n border: 1px solid #f2f2f2;\n}\n.fileEdit .fileEditHeader {\n padding: 2px 8px;\n background-color: #f2f2f2;\n}\n.fileEdit .fileEditContent {\n padding: 8px;\n background-color: #fafafa;\n}\n.quoteList {\n min-width: 300px;\n}\n.quoteList:global.ant-collapse .ant-collapse-item .ant-collapse-header {\n padding: 12px 0;\n color: #8f91a8;\n}\n.quoteList:global.ant-collapse .ant-collapse-item .ant-collapse-content {\n color: #8f91a8;\n background-color: #f2f2f2;\n}\n.mdEdit {\n margin: 10px 0;\n background-color: rgba(242, 242, 242, 0.2);\n border: 1px solid #f2f2f2;\n padding: 10px;\n border-radius: 4px;\n}\n","import { Flex, Spin } from 'antd'\nimport { useChatStore } from '../../../stores/Context'\nimport styles from './styles.module.less'\n\ninterface Props {\n data: {\n // AgentType\n appKey: string\n appName: string\n agentKey: string\n iconUrl: string\n }\n loading: boolean\n}\n// :::alert type=appCard data={appKey:\"cube-acc\",agentKey:\"cube-acc\",appName:\"罗拉易账\",iconUrl:\"/icon-url/2e53e398d31627d559e0b3b1b5acb731.png\"} :::\nexport default ({ data, loading }: Props) => {\n const chatStore = useChatStore()\n const onClick = () => {\n chatStore.switchAgent({ appKey: data.appKey, agentKey: data.agentKey, isVerify: true })\n // emit('openApp', { appKey: data.appKey })\n }\n return (\n <Spin spinning={loading} size=\"small\">\n <Flex vertical gap={4} align=\"center\" className={styles.appCard} onClick={onClick}>\n <img src={data.iconUrl} />\n <div className=\"text-ellipsis\" title={data.appName}>\n {data.appName}\n </div>\n </Flex>\n </Spin>\n )\n}\n","import { FileIcon } from '@zero-library/common'\nimport { Flex, Spin } from 'antd'\nimport { FileUrlType } from '../../../stores'\nimport { useChatStore } from '../../../stores/Context'\nimport styles from './styles.module.less'\n\ninterface Props {\n data: FileUrlType\n loading: boolean\n}\n// :::alert type=fileView data={fileUrl:\"\",fileName:\"\",suffix:\"\"} :::\nexport default ({ data, loading }: Props) => {\n const chatStore = useChatStore()\n const onClick = () => {\n chatStore.setPreview(data, false)\n }\n return (\n <Spin spinning={loading} size=\"small\">\n <Flex gap={8} align=\"center\" className={styles.fileView} onClick={onClick}>\n <FileIcon suffix={data.suffix} />\n <div className=\"text-ellipsis\" title={data.fileName}>\n {data.fileName}\n </div>\n </Flex>\n </Spin>\n )\n}\n","import { request } from '@zero-library/common'\n\nexport interface DocType {\n /**\n * 内容\n */\n content: string\n /**\n * 文档ID\n */\n docId: string\n /**\n * 关键字\n */\n keywords?: string[]\n /**\n * 位置\n */\n position?: number\n /**\n * 分段ID\n */\n sid?: string\n /**\n * 令牌数\n */\n tokens?: number\n /**\n * 字数\n */\n wordCount?: number\n}\nexport const docQuery = (paramsStr: string): Promise<R<DocType>> => {\n return request.get(`/uc/doc?${paramsStr}`)\n}\n","import { RenderMarkdown } from '@zero-library/common'\nimport { Drawer, Empty, Spin } from 'antd'\nimport { useEffect, useState } from 'react'\nimport { docQuery } from '../../../../services/file'\n\ninterface Props {\n fileUrl: string\n title: string\n open: boolean\n onClose: () => void\n}\nexport default ({ title, open, onClose, fileUrl }: Props) => {\n const [content, setContent] = useState('')\n const [loading, setLoading] = useState(false)\n const getContent = async () => {\n try {\n setLoading(true)\n const res = await docQuery(fileUrl)\n setContent(res.data?.content)\n } finally {\n setLoading(false)\n }\n }\n useEffect(() => {\n getContent()\n }, [fileUrl])\n return (\n <Drawer title={title} push={false} width=\"100%\" open={open} onClose={onClose}>\n <Spin spinning={loading}>{content ? <RenderMarkdown content={content} /> : <Empty className=\"m-t-32\" />}</Spin>\n </Drawer>\n )\n}\n","// :::alert type=indexQuote data={index:\"1\",fileName:'',fileUrl:\"\"} :::\nimport { isExternal } from '@zero-library/common'\nimport { Flex, Popover, Spin, Tag } from 'antd'\nimport { useEffect, useRef, useState } from 'react'\nimport DocDrawer from './components/DocDrawer'\n\ninterface Props {\n data: {\n index: string\n fileUrl?: string\n fileName: string\n }\n loading: boolean\n}\nexport default ({ data, loading }: Props) => {\n const [open, setOpen] = useState(false)\n const onClick = () => {\n if (!data.fileUrl) return\n if (isExternal(data.fileUrl)) {\n window.open(data.fileUrl, '_blank')\n } else {\n setOpen(true)\n }\n }\n const Content = (\n <div>\n <Flex align=\"center\" gap={8}>\n {/* <FileIcon suffix={data.suffix} fontSize={16} /> */}\n <a onClick={onClick}>{data.fileName}</a>\n </Flex>\n </div>\n )\n const rootRef = useRef<HTMLDivElement>(null)\n // ✅ 渲染后移动到前一个兄弟元素后面\n useEffect(() => {\n const el = rootRef.current\n if (!el) return\n\n const previous = el.previousElementSibling\n if (!previous) return\n\n // ✅ 插入到前一个节点内(作为最后子元素)\n previous.appendChild(el)\n }, [])\n return (\n <div ref={rootRef} className=\"inline-block m-l-8\">\n <Spin spinning={loading} size=\"small\">\n <Popover content={Content}>\n <Tag bordered={false} color=\"processing\" className=\"cursor-pointer\">\n {data.index}\n </Tag>\n </Popover>\n </Spin>\n {open && <DocDrawer fileUrl={data.fileUrl} title={data.fileName} open={open} onClose={() => setOpen(false)} />}\n </div>\n )\n}\n","import { MarkdownEditor } from '@zero-library/common'\nimport { Button, Flex, Spin } from 'antd'\nimport { useEffect, useState } from 'react'\nimport { useChatStore } from '../../../stores/Context'\nimport styles from './styles.module.less'\n\ninterface Props {\n data: {\n content: string\n // messageId: string\n }\n loading: boolean\n}\n// :::alert type=mdEdit data={content:\"\"} :::\nexport default ({ data, loading }: Props) => {\n const chatStore = useChatStore()\n const [value, setValue] = useState('')\n const onOk = () => {\n console.log('value', value)\n chatStore.sendMessage('开始写作', [], { outline: value })\n }\n useEffect(() => {\n setValue(data.content)\n }, [data.content])\n return (\n <Spin spinning={loading} size=\"small\">\n <div className={styles.mdEdit}>\n <MarkdownEditor disabled={loading} value={value} onChange={setValue} showToolbar={false} />\n {!loading && (\n <Flex justify=\"end\" className=\"m-t-16\">\n <Button color=\"primary\" variant=\"outlined\" onClick={onOk}>\n 确认提纲思路,开始写作\n </Button>\n </Flex>\n )}\n </div>\n </Spin>\n )\n}\n","// :::alert type=fileEdit data={fileName:\"\",content:\"\"} :::\nimport { CopyOutlined, PlayCircleOutlined } from '@ant-design/icons'\nimport { FileIcon, RenderMarkdown } from '@zero-library/common'\nimport { Button, Flex, Spin } from 'antd'\nimport { FileTextType } from 'packages/chat-agent/src/stores'\nimport { copy } from '../../../core/utils'\nimport { useChatStore } from '../../../stores/Context'\nimport styles from './styles.module.less'\n\ninterface Props {\n data: FileTextType\n loading: boolean\n}\nexport default ({ data, loading }: Props) => {\n const chatStore = useChatStore()\n // const configState = useSnapshot(chatStore.config)\n const onPreview = () => {\n chatStore.setPreview(data, true)\n }\n // useEffect(() => {\n // if (configState.preview.isShow !== 2 || (loading && configState.preview.isShow === 1)) {\n // chatStore.setPreview(data, {\n // isEdit: true,\n // isShow: 1,\n // isIntact: !loading\n // })\n // }\n // }, [data, loading])\n\n return (\n <Flex vertical className={styles.fileEdit}>\n <Flex gap={8} align=\"center\" justify=\"space-between\" className={styles.fileEditHeader}>\n <Flex gap={4} align=\"center\" className=\"flex-1\">\n <FileIcon suffix={'md'} fontSize={18} />\n <div className=\"text-ellipsis\" title={data.fileName}>\n {data.fileName}\n </div>\n </Flex>\n <Spin spinning={loading} size=\"small\">\n <Flex>\n <Button color=\"default\" variant=\"text\" size=\"small\" icon={<PlayCircleOutlined />} onClick={onPreview}>\n 预览编辑\n </Button>\n <Button color=\"default\" variant=\"text\" size=\"small\" icon={<CopyOutlined />} onClick={() => copy(data.content)}>\n 复制\n </Button>\n </Flex>\n </Spin>\n </Flex>\n <Flex gap={8} align=\"center\" className={styles.fileEditContent}>\n <RenderMarkdown content={data.content} />\n </Flex>\n </Flex>\n )\n}\n","// 文末引用::::alert type=quoteList data={list:[{\"title\":'介绍介绍介绍介绍介绍介绍.pdf',fileUrl:\"2909615725521334\"},{\"title\":'介绍介绍介绍介绍介绍介绍.pdf',fileUrl:\"2909615725521364\"}]} :::\nimport { CaretRightOutlined } from '@ant-design/icons'\nimport { isExternal } from '@zero-library/common'\nimport { Collapse, Flex, Spin } from 'antd'\nimport { useState } from 'react'\nimport DocDrawer from './components/DocDrawer'\nimport styles from './styles.module.less'\ninterface QuoteItem {\n title: string\n fileUrl: string\n}\ninterface Props {\n data: {\n list: QuoteItem[]\n }\n loading: boolean\n}\nexport default ({ data, loading }: Props) => {\n const [open, setOpen] = useState(false)\n const [selectItem, setSelectItem] = useState({} as QuoteItem)\n const onClick = (item: QuoteItem) => {\n if (!item.fileUrl) return\n if (isExternal(item.fileUrl)) {\n window.open(item.fileUrl, '_blank')\n } else {\n setSelectItem(item)\n setOpen(true)\n }\n }\n return (\n <>\n <Spin spinning={loading} size=\"small\">\n <Collapse\n className={styles.quoteList}\n bordered={false}\n ghost\n expandIcon={({ isActive }) => <CaretRightOutlined rotate={isActive ? 90 : 0} />}\n items={[\n {\n key: '1',\n label: '参考资料',\n children: (\n <Flex vertical gap={4}>\n {data.list.map((item) => (\n <p key={item.fileUrl} onClick={() => onClick(item)} className=\"cursor-pointer\">\n {item.title}\n </p>\n ))}\n </Flex>\n )\n }\n ]}\n />\n </Spin>\n {open && <DocDrawer fileUrl={selectItem.fileUrl} title={selectItem.title} open={open} onClose={() => setOpen(false)} />}\n </>\n )\n}\n","export const DEFAULT_NEW_CONV_ID = 'newConvId'\n\nexport const ChatRoleMap: ObjectType<string> = {\n 1: 'user',\n 2: 'assistant'\n}\n","// import openApp from '@/components/ProductShow/openApp'\nimport { Conversation } from '@ant-design/x'\nimport { MessageStatus, SimpleType } from '@ant-design/x/es/use-x-chat'\nimport { deepMerge, getCurrentUser, OK, RenderControl, shouldRender } from '@zero-library/common'\nimport { message } from 'antd'\nimport { proxy } from 'valtio'\nimport { ChatRoleMap, DEFAULT_NEW_CONV_ID } from '../core/constants'\nimport { classifyTime, transform, transforms } from '../core/utils'\nimport {\n AgentBaseMessageEvent,\n AgentConversation,\n AgentErrorMessageEvent,\n AgentInfo,\n agentInfoQuery,\n agentsQuery,\n AgentTextMessageEvent,\n AgentType,\n chatMessagesQuery,\n chatMessageSuggestedQuery,\n ChatMessageType,\n conversationsQuery,\n deleteConversation,\n InputFile,\n PageFlow,\n RecommendQuestion,\n sendChatMessage,\n SendChatMessage,\n updateFeedback,\n UserInfo\n} from '../services'\nexport interface FileUrlType {\n suffix: string\n fileUrl: string\n fileName: string\n // messageId?: string\n}\nexport interface FileTextType {\n content: string\n suffix: string\n fileName: string\n // messageId?: string\n}\n// interface ExpertInterject {\n// chatId: string\n// msg: {\n// msgContent: string\n// imgList: string[]\n// msgSource: number\n// msgType: number\n// msgId: string\n// quoteMsgContent: string\n// quoteMsgId: number\n// quoteMsgType: number\n// quoteMsgImgList: string[]\n// }\n// sender: ChatRecordType['sender']\n// }\nexport interface AgentMessage<Message extends SimpleType> {\n id: string\n role: string\n content: Message\n feedback?: string\n files?: InputFile[]\n status?: MessageStatus\n createTime?: number\n}\nexport interface ReferencesType {\n type: number // 1:markdown引用(拼正文发) 2: 文案引用(不发正文) // 3:消息引用\n content: {\n name?: string\n markdown?: string\n [key: string]: any\n }\n params?: ObjectType<any>\n}\nexport interface ConversationMessageType {\n content?: SendChatMessage['message'] // 输入框内容\n files?: SendChatMessage['files'] // 上传文件内容\n headerOpen?: boolean\n // quoteMsg: QuoteMsgType // 引用消息\n loading: boolean\n message: PageFlow<AgentMessage<string>>\n questionList?: RecommendQuestion[] // 推荐问题\n // expertInterjects?: ExpertInterject[] 专家插话\n references?: ReferencesType // 引用消息(可扩展quoteMsg)\n}\nexport type ChatStoreType = ReturnType<typeof createChatStore>\nexport interface ChatHooks {\n // onBeforeInit?: () => boolean | Promise<boolean>\n // onAfterInit?: () => void\n onSenderFocus?: () => void\n onHeaderClose?: () => void\n onBeforeSend?: (message: SendChatMessage['message'], files: InputFile[]) => boolean | Promise<boolean> | void\n onAfterSend?: () => void\n onBeforeSwitchAgent?: (agentId: string) => boolean | Promise<boolean> | void\n onAfterSwitchAgent?: (agentId: string) => void\n onBeforeSwitchConversation?: (conversationId: string) => boolean | Promise<boolean> | void\n onAfterSwitchConversation?: (conversationId: string) => void\n // onMessageEvent?: (event) => void\n // onAfterLayout?: () => void\n // onError?: (error: unknown) => void\n}\nexport interface ChatParams {\n bizId?: string\n params?: ObjectType<any>\n}\nexport interface ChatLayout {\n // agentList?: RenderControl<any>\n conversationList?: boolean\n conversationListHeader?: boolean\n preview?: boolean\n messageList?: boolean\n senderHeader?: RenderControl<void, void>\n sender?: RenderControl<\n void,\n {\n placeholder?: string\n }\n >\n senderPrompts?: boolean\n senderFooter?: RenderControl<void, void>\n senderExtraBtn?: RenderControl<void, void>\n referencesBtn?: RenderControl<void, void>\n header?: RenderControl<void, void>\n headerTitle?: RenderControl<void, void>\n headerConversationListBtn?: boolean\n headerNewConversationBtn?: RenderControl<void, void>\n headerCloseBtn?: boolean\n}\nconst defaultLayout = {\n conversationList: true,\n conversationListHeader: true,\n preview: true,\n messageList: true,\n senderHeader: false,\n sender: true,\n senderPrompts: true,\n senderFooter: false,\n senderExtraBtn: false,\n referencesBtn: false,\n header: true,\n headerTitle: true,\n headerConversationListBtn: true,\n headerNewConversationBtn: true,\n headerCloseBtn: false\n} as ChatLayout\nexport function createChatStore() {\n const config = proxy({\n hooks: {} as ChatHooks,\n layout: {} as ChatLayout,\n preview: {\n file: {} as FileUrlType | FileTextType,\n isEdit: false // 未使用\n // isShow: 0, // 0 不显示 1 显示 2 用户关闭\n // isIntact: false // true 完整 false 不完整\n },\n userInfo: {} as UserInfo,\n params: {} as ChatParams\n })\n\n const setPreview = (file = {} as FileUrlType | FileTextType, isEdit = false) => {\n if (shouldRender(config.layout.preview)) {\n config.preview = {\n file,\n isEdit\n }\n } else {\n if ((file as FileUrlType)?.fileUrl) {\n window.open((file as FileUrlType).fileUrl, '_blank')\n } else {\n console.log('当前环境不支持预览')\n }\n }\n }\n const setLayout = (layout: ChatLayout) => {\n config.layout = deepMerge(defaultLayout, layout)\n }\n const setConfigParams = (params = {} as ChatParams) => {\n config.params = { bizId: '', ...params }\n }\n const setHooks = (hooks = {} as ChatHooks) => {\n config.hooks = hooks\n }\n const getUserInfo = () => {\n config.userInfo = transform(getCurrentUser(), {\n id: 'id',\n name: 'name',\n iconUrl: 'avatar',\n description: 'name'\n }) as UserInfo\n }\n\n const agents = proxy({\n // 商品列表\n list: [] as AgentType[],\n loading: false\n })\n const getAgentList = async () => {\n try {\n agents.loading = true\n const { data } = await agentsQuery()\n agents.list = data!\n } finally {\n agents.loading = false\n }\n }\n\n // 会话管理\n const conversation = proxy({\n // 每个会话单独存储\n active: {} as Conversation,\n messages: {} as { [key: Conversation['key']]: ConversationMessageType }\n // feedback: {\n // open: false,\n // loading: false,\n // recordId: '',\n // target: undefined as number | undefined\n // }\n })\n const setReferences = (references?: ReferencesType) => {\n conversation.messages[conversation.active.key].references = references\n }\n const setContent = (content?: SendChatMessage['message']) => {\n conversation.messages[conversation.active.key].content = content\n }\n const setFileList = (files = [] as SendChatMessage['files']) => {\n conversation.messages[conversation.active.key].files = files\n }\n const setHeaderOpen = (headerOpen: ConversationMessageType['headerOpen']) => {\n conversation.messages[conversation.active.key].headerOpen = headerOpen\n }\n const removeQuestionList = (key: Conversation['key']) => {\n if (conversation.messages[key].questionList?.length) {\n conversation.messages[key].questionList = []\n }\n }\n const getQuestionList = async (conversationId: Conversation['key'], message: AgentMessage<string>) => {\n if (!message.id || !message.content) return\n const { data } = await chatMessageSuggestedQuery(agent.active.id, message.id)\n conversation.messages[conversationId].questionList = data!\n }\n\n const feedback = async (conversationId: Conversation['key'], messageId: string, rating: string, index: number) => {\n try {\n await updateFeedback({ agentId: agent.active.id, messageId, rating, bizId: config.params.bizId })\n conversation.messages[conversationId].message.items[index].feedback = rating\n } finally {\n }\n }\n // 历史会话管理\n const conversations = proxy({\n list: {\n items: [] as Conversation[],\n lastId: '',\n hasMore: false\n },\n loading: false,\n delLoading: false\n })\n\n const setInitMessage = async (key: Conversation['key']) => {\n conversation.messages[key] = {\n content: '',\n files: [] as SendChatMessage['files'], // 上传文件内容\n headerOpen: false,\n loading: false,\n message: {\n lastId: '',\n hasMore: false,\n items: []\n },\n questionList: [] as RecommendQuestion[] // 推荐问题\n }\n }\n const agent = proxy({\n active: {} as AgentInfo,\n loading: false,\n params: {} as ObjectType<any>\n })\n // TODO 如果多处调用,需要替换变量; 单处调用可以覆盖整个对象\n const setAgentParams = (params = {} as ObjectType<any>) => {\n agent.params = {\n thinkMode: '2',\n ...params\n }\n }\n const switchAgent = async (\n { appKey, agentKey, isVerify = false }: { appKey: string; agentKey: string; isVerify?: boolean },\n conversationId?: Conversation['key']\n ) => {\n const agentId = `${appKey}:${agentKey}`\n // if (agentId === 'complianceAssistant:complianceAssistant' && agents.list.length) {\n // config.params.appList = JSON.stringify(\n // agents.list?.map((app) => ({\n // appKey: app.appKey,\n // agentKey: app.agentKey,\n // appName: app.agentName,\n // iconUrl: app.iconUrl,\n // description: app.description\n // }))\n // )\n // }\n // 切换智能体\n if (agent.active.id === agentId) return\n\n const canProceed = await config.hooks?.onBeforeSwitchAgent?.(agentId)\n if (canProceed === false) return\n\n try {\n agent.loading = true\n if (isVerify) {\n // await openApp(appKey, false)\n }\n const { data } = await agentInfoQuery(agentId)\n agent.active = data!\n setAgentParams()\n config.hooks?.onAfterSwitchAgent?.(agentId)\n switchConversation({ key: conversationId })\n } finally {\n agent.loading = false\n }\n }\n\n const switchConversation = async (chat?: Conversation) => {\n const chatKey = chat?.key || `${agent.active.id}-${DEFAULT_NEW_CONV_ID}`\n if (conversation.active.key === chatKey) return\n\n const canProceed = await config.hooks?.onBeforeSwitchConversation?.(chatKey)\n if (canProceed === false) return\n // 切换会话\n conversation.active = chat?.key ? chat : ({ key: chatKey } as Conversation)\n\n if (!conversation.messages[chatKey]) {\n setInitMessage(chatKey)\n }\n config.hooks?.onAfterSwitchConversation?.(chatKey)\n if (!chatKey.endsWith(DEFAULT_NEW_CONV_ID) && conversation.messages[chatKey].message.items.length === 0) {\n // 获取会话历史记录\n getMessages(agent.active.id, chatKey)\n }\n }\n const getConversations = async (agentId: AgentInfo['id'], lastId?: string, limit = 20) => {\n try {\n conversations.loading = true\n const { data } = await conversationsQuery({ bizId: config.params.bizId, agentId, lastId, limit })\n if (agent.active.id !== agentId) return\n const items = transforms<AgentConversation, Conversation>(data?.items || [], {\n key: 'id',\n label: 'name',\n group: (c): string => {\n return classifyTime(c.createTime)\n },\n timestamp: 'createTime'\n })\n conversations.list = {\n ...data!,\n items: lastId ? [...conversations.list.items, ...items] : items\n }\n // if (!conversation.active.key || !conversations.list.items.find((item) => item.key === conversation.active.key)) {\n // switchConversation()\n // }\n } finally {\n conversations.loading = false\n }\n }\n\n const getMessages = async (agentId: AgentInfo['id'], conversationId: Conversation['key'], lastId?: string) => {\n // , limit = 200\n if (conversationId) {\n if (!conversationId.endsWith(DEFAULT_NEW_CONV_ID)) {\n try {\n // conversation.messages[key].messageLoading = true\n const { data } = await chatMessagesQuery({\n bizId: config.params.bizId,\n agentId,\n conversationId,\n lastId\n // limit\n })\n\n const messageList = transforms<ChatMessageType, AgentMessage<string>>(data?.items || [], {\n id: 'messageId',\n role: (msg) => ChatRoleMap[msg.role],\n content: 'message',\n files: 'files',\n feedback: 'feedback',\n status: 'success'\n })\n conversation.messages[conversationId].message = {\n ...data!,\n items: lastId ? [...messageList, ...conversation.messages[conversationId].message.items] : messageList\n }\n } finally {\n // conversation.messages[key].messageLoading = false\n }\n }\n }\n }\n const delConversation = async (chat: Conversation) => {\n try {\n conversations.delLoading = true\n await deleteConversation({ agentId: agent.active.id, conversationId: chat.key, bizId: config.params.bizId })\n message.success('删除成功')\n conversations.list.items = conversations.list.items.filter((item) => item.key !== chat.key)\n if (conversation.active.key === chat.key) {\n conversation.active = {\n key: `${agent.active.id}-${DEFAULT_NEW_CONV_ID}`\n } as Conversation\n }\n delete conversation.messages[chat.key]\n } finally {\n conversations.delLoading = false\n }\n }\n\n const removePlaceholder = (key: Conversation['key'], msgId: string) => {\n if (conversation.messages[key]) {\n const index = conversation.messages[key].message.items.findLastIndex((m) => m.id === msgId)\n if (index !== -1) {\n conversation.messages[key].message.items.splice(index, 1)\n }\n }\n }\n const updatePlaceholderMessage = (key: Conversation['key'], msgId: string, chunk: AgentBaseMessageEvent) => {\n // 如果当前是新会话,则更新会话\n if (chunk.conversationId && chunk.conversationId !== key && !conversation.messages[chunk.conversationId]) {\n conversation.messages[chunk.conversationId] = conversation.messages[key]\n delete conversation.messages[key]\n // 如果还在当前会话\n if (key === conversation.active.key) {\n conversation.active = {\n key: chunk.conversationId\n }\n }\n // 如果还在当前智能体\n if (key.startsWith(agent.active.id)) {\n getConversations(agent.active.id)\n }\n }\n let placeholder = {} as AgentMessage<string> | undefined\n if (conversation.messages[chunk.conversationId]) {\n placeholder = conversation.messages[chunk.conversationId].message.items.findLast((m) => m.id === msgId)\n } else if (conversation.messages[key]) {\n placeholder = conversation.messages[key].message.items.findLast((m) => m.id === msgId)\n }\n // console.log('placeholder', placeholder, chunk)\n if (!placeholder) return\n if (chunk.type === 'TEXT_MESSAGE_CONTENT') {\n const textEvent = chunk as AgentTextMessageEvent\n placeholder.content += textEvent.message\n return\n }\n\n // 假设流结束或某个特定事件类型表示消息完成\n if (chunk.type === 'TEXT_MESSAGE_END') {\n const textEvent = chunk as AgentTextMessageEvent\n placeholder.id = textEvent.messageId\n placeholder.status = 'success'\n }\n // TODO chunk.code不应该出现在这\n if (chunk.type === 'RUN_ERROR') {\n const textEvent = chunk as AgentErrorMessageEvent\n placeholder.status = 'error'\n placeholder.content = textEvent.message\n } else if (chunk.code && chunk.code !== OK) {\n removePlaceholder(key, msgId)\n }\n // console.log(123, conversation.messages[chunk.conversationId])\n conversation.messages[chunk.conversationId].loading = false\n }\n\n const sendMessage = async (message?: SendChatMessage['message'], files = [] as InputFile[], params?: SendChatMessage['params']) => {\n const conversationId = conversation.active.key\n if (conversation.messages[conversationId].loading) return\n let newMsgContent: SendChatMessage['message'] = '',\n newImgList: SendChatMessage['files'] | undefined\n const references = conversation.messages[conversationId].references\n if (message) {\n newMsgContent = message\n newImgList = files\n } else {\n if (references?.type === 1 && references?.content?.markdown) {\n newMsgContent = references.content.markdown + '\\n'\n }\n newMsgContent = newMsgContent + conversation.messages[conversationId].content!\n newImgList = conversation.messages[conversationId].files\n }\n if (!newMsgContent) return\n\n const canProceed = await config.hooks?.onBeforeSend?.(newMsgContent, newImgList)\n if (canProceed === false) return\n\n conversation.messages[conversationId].loading = true\n\n const userMsg: AgentMessage<string> = {\n id: `user-${Date.now()}`,\n role: 'user',\n content: newMsgContent,\n files: newImgList,\n status: 'success'\n }\n\n // 正在更新中\n const placeholderId = `placeholder-${Date.now()}`\n const placeholder: AgentMessage<string> = {\n id: placeholderId,\n role: 'assistant',\n content: '',\n status: 'loading'\n }\n\n conversation.messages[conversationId].message.items.push(userMsg, placeholder)\n // 参数合并\n const extraParams = {\n ...config.params\n } as ChatParams\n if (!extraParams.params) {\n extraParams.params = {}\n }\n Object.assign(extraParams.params, agent.params, message ? {} : references?.params, params)\n\n if (!message) {\n setContent('')\n setFileList([])\n setReferences()\n setHeaderOpen(false)\n }\n removeQuestionList(conversationId)\n try {\n sendChatMessage({\n agentId: agent.active.id,\n conversationId: conversationId.endsWith(DEFAULT_NEW_CONV_ID) ? undefined : conversationId,\n message: userMsg.content,\n files: userMsg.files,\n ...extraParams,\n onMessageEvent: (event) => {\n // console.log('placeholder', event)\n updatePlaceholderMessage(conversationId, placeholderId, event)\n }\n })\n\n config.hooks?.onAfterSend?.()\n } catch (error) {\n // console.log('sendMessage', error)\n removePlaceholder(conversationId, placeholderId) // 出错时移除占位符\n conversation.messages[conversationId].loading = false\n }\n }\n const cancelReceive = () => {\n conversation.messages[conversation.active.key].loading = false\n }\n return {\n config,\n setLayout,\n setHooks,\n setConfigParams,\n setPreview,\n getUserInfo,\n agents,\n getAgentList,\n conversation,\n setReferences,\n setContent,\n setFileList,\n setHeaderOpen,\n removeQuestionList,\n getQuestionList,\n feedback,\n conversations,\n setInitMessage,\n agent,\n setAgentParams,\n switchAgent,\n getConversations,\n getMessages,\n switchConversation,\n delConversation,\n removePlaceholder,\n sendMessage,\n cancelReceive\n }\n}\n","import { getToken, TOKEN_KEY } from '@zero-library/common'\nimport { message as notify } from 'antd'\nimport { buildURLWithParams } from './utils'\n\n// HTTP 请求选项接口\nexport interface HttpOptions {\n stream?: boolean\n method?: 'POST' | 'GET' | 'PUT' | 'DELETE'\n headers?: Record<string, string>\n contentType?: string\n onChunk?: (chunk: string) => void\n signal?: AbortSignal\n}\n\nfunction processChunk(chunk: string | object, onChunk?: HttpOptions['onChunk']) {\n if (onChunk) {\n onChunk(typeof chunk === 'string' ? chunk : JSON.stringify(chunk))\n }\n}\n\nfunction parseBuffer(buffer: string, onChunk?: HttpOptions['onChunk']): string {\n let bufferF = buffer\n let jsonStartIndex = bufferF.indexOf('{')\n let jsonEndIndex = -1\n\n while (jsonStartIndex !== -1) {\n let braceCount = 0\n let inString = false\n\n for (let i = jsonStartIndex; i < bufferF.length; i++) {\n const char = bufferF[i]\n if (char === '\"' && bufferF[i - 1] !== '\\\\') {\n inString = !inString\n }\n if (!inString) {\n if (char === '{') braceCount++\n if (char === '}') braceCount--\n }\n if (braceCount === 0) {\n jsonEndIndex = i\n break\n }\n }\n\n if (jsonEndIndex !== -1) {\n const jsonString = bufferF.slice(jsonStartIndex, jsonEndIndex + 1)\n try {\n const parsed = JSON.parse(jsonString)\n processChunk(parsed, onChunk)\n } catch (e) {\n console.warn('Failed to parse JSON chunk:', jsonString)\n }\n bufferF = bufferF.slice(jsonEndIndex + 1).trim()\n jsonStartIndex = bufferF.indexOf('{')\n jsonEndIndex = -1\n } else {\n break\n }\n }\n\n return bufferF\n}\n\n// 错误处理\nasync function handleHttpError(status: number, message?: string) {\n const error = new Error(`${status}: ${message}`)\n console.error('request error:', error)\n await notify.error('服务器开小差啦~😖')\n}\n\n// 处理流式响应\nasync function handleStreamResponse(response: Response, options: HttpOptions): Promise<void> {\n const { onChunk } = options\n const reader = response.body!.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n buffer = parseBuffer(buffer, onChunk)\n break\n }\n buffer += decoder.decode(value, { stream: true })\n buffer = parseBuffer(buffer, onChunk)\n }\n}\n\n// 通用 HTTP 请求函数\nexport async function request(url: string, data: any = {}, options: HttpOptions = {}) {\n const { stream = false, method = 'POST', headers = {}, signal } = options\n\n const controller = new AbortController()\n signal?.addEventListener('abort', () => controller.abort())\n\n let targetURL = '/api' + url\n let body: any = data\n\n if (method === 'GET') {\n targetURL = buildURLWithParams(targetURL, data)\n body = undefined\n } else {\n if (!(body instanceof FormData)) {\n headers['Content-Type'] = 'application/json'\n body = JSON.stringify(body)\n }\n }\n\n const response = await fetch(targetURL, {\n method,\n headers: {\n ...(getToken() && { [TOKEN_KEY]: getToken() }),\n ...headers\n },\n body,\n signal: controller.signal\n })\n\n if (!response.ok) {\n const message = await response.text()\n return await handleHttpError(response.status, message)\n }\n\n if (stream && response.body) {\n // 流式数据走这里\n return handleStreamResponse(response, options)\n }\n\n // 普通请求\n const r = (await response.json()) as R<any>\n if (r.code !== 200) {\n return await handleHttpError(r.code, r.message)\n }\n return r\n}\n\n// 快捷方法\nconst get = (url: string, params: Record<string, any> = {}, options: Omit<HttpOptions, 'method'> = {}) =>\n request(url, params, { ...options, method: 'GET' })\n\nconst post = (url: string, data: any = {}, options: Omit<HttpOptions, 'method'> = {}) => request(url, data, { ...options, method: 'POST' })\n\nconst put = (url: string, data: any = {}, options: Omit<HttpOptions, 'method'> = {}) => request(url, data, { ...options, method: 'PUT' })\n\nconst del = (url: string, data: any = {}, options: Omit<HttpOptions, 'method'> = {}) => request(url, data, { ...options, method: 'DELETE' })\n\nexport default { delete: del, get, post, put }\n","import { request } from '@zero-library/common'\nimport fetchRequest from '../core/fetchRequest'\n\nexport interface UserInfo {\n id: string\n iconUrl: string\n name: string\n description: string\n}\nexport interface PageFlow<T> {\n lastId: string\n hasMore: boolean\n limit?: number\n items: T[]\n}\nexport interface PageParams {\n lastId?: string\n limit?: number\n}\nexport interface AgentInfoFileUpload {\n allowedFileTypes: string[]\n enabled: boolean\n maxFileCount: number\n maxFileSize: number\n}\n\n// 接收数据中data的类型\nexport interface RecommendQuestion {\n id: string\n question: string\n}\nexport interface HotQuestionList {\n id: string\n labelName: string\n hotQuestionList: RecommendQuestion[]\n}\nexport interface AgentInfo {\n id: string\n iconUrl: string\n name: string\n description: string\n parameters: {\n fileUpload: AgentInfoFileUpload\n }\n recommendQuestions: RecommendQuestion[]\n labels: HotQuestionList[]\n}\nexport const agentInfoQuery = (agentId: AgentInfo['id']): Promise<R<AgentInfo>> => {\n return request.get('/agent/detail', { agentId })\n}\n\nexport interface AgentType {\n appKey: string\n agentName: string\n agentKey: string\n iconUrl: string\n description?: string\n}\nexport const agentsQuery = (): Promise<R<AgentType[]>> => {\n return request.get('/agent')\n}\nexport interface AgentConversationsQuery extends PageParams {\n agentId: AgentInfo['id']\n bizId?: string\n}\nexport interface AgentConversation {\n id: number\n name: string\n createTime: number\n}\nexport const conversationsQuery = (params: AgentConversationsQuery): Promise<R<PageFlow<AgentConversation>>> => {\n return request.get('/agent/conversation', params)\n}\nexport interface DeleteConversation {\n agentId: AgentInfo['id']\n conversationId: string\n bizId?: string\n}\nexport const deleteConversation = (params: DeleteConversation): Promise<R<null>> => {\n return request.delete('/agent/conversation', params)\n}\n\nexport interface MessagesQuery extends PageParams {\n agentId: AgentInfo['id']\n conversationId: string\n bizId?: string\n}\nexport type FileMode = 'local' | 'remote'\nexport interface InputFile {\n type: string // 文件类型 document image audio video custom\n mode: FileMode\n name: string\n // 上传后的文件id\n id: string\n url: string\n}\nexport interface ChatMessageType {\n agentId: string\n conversationId: string\n messageId: string\n role: number\n message: string\n files?: InputFile[]\n feedback?: string\n createTime: number\n}\nexport const chatMessagesQuery = (params: MessagesQuery): Promise<R<PageFlow<ChatMessageType>>> => {\n return request.get('/agent/message', params)\n}\n\nexport const chatMessageSuggestedQuery = (agentId: AgentInfo['id'], messageId: ChatMessageType['messageId']): Promise<R<RecommendQuestion[]>> => {\n return request.get('/agent/message/suggested', { agentId, messageId })\n}\n\nexport interface UpdateFeedback {\n agentId: string\n messageId: string\n rating: string\n bizId?: string\n}\nexport const updateFeedback = (params: UpdateFeedback): Promise<R<null>> => {\n return request.put('/agent/message/feedback', params)\n}\n\nexport const uploadFile = (formData: FormData): Promise<R<InputFile>> => {\n return request.post('/agent/file', formData)\n}\n/** Agent状态 */\nexport type MessageType =\n | 'TEXT_MESSAGE_START'\n | 'TEXT_MESSAGE_CONTENT'\n | 'TEXT_MESSAGE_END'\n | 'RUN_STARTED'\n | 'RUN_FINISHED'\n | 'RUN_ERROR'\n | 'STEP_STARTED'\n | 'STEP_FINISHED'\n\nexport interface AgentBaseMessageEvent {\n conversationId: string\n type: MessageType | string\n}\n\nexport interface AgentBaseMessageEvent {\n code: number\n conversationId: string\n type: MessageType | string\n}\n\nexport interface AgentRunMessageEvent extends AgentBaseMessageEvent {\n runId: string\n message: string\n}\n\nexport interface AgentStepMessageEvent extends AgentBaseMessageEvent {\n stepName: string\n}\n\nexport interface AgentTextMessageEvent extends AgentBaseMessageEvent {\n messageId: string\n message: string\n}\n\nexport interface AgentErrorMessageEvent extends AgentBaseMessageEvent {\n code: number\n message: string\n}\nexport interface SendChatMessage {\n agentId?: string\n conversationId?: string\n message: string\n files?: InputFile[]\n params?: ObjectType<any>\n bizId?: string\n onMessageEvent?: (event: AgentBaseMessageEvent) => void\n}\nexport const sendChatMessage = (params: SendChatMessage) => {\n return fetchRequest.post(\n '/agent/chat',\n { ...params, stream: true },\n {\n stream: true,\n onChunk: (chunk: string) => {\n if (params.onMessageEvent) {\n const event = JSON.parse(chunk) as AgentBaseMessageEvent\n params.onMessageEvent(event)\n }\n }\n }\n )\n}\n","import { forwardRef, useEffect, useImperativeHandle, useMemo } from 'react'\n\nimport { CloseOutlined } from '@ant-design/icons'\nimport { Conversation, XProvider } from '@ant-design/x'\nimport { downloadFile, FilePreview, MarkdownEditor, RenderWrapper, shouldRender } from '@zero-library/common'\nimport { Button, Flex, Spin, Splitter, Tag, ThemeConfig } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport { InputFile } from '../../services'\nimport type { ChatHooks, ChatLayout, ChatParams, FileTextType, FileUrlType, ReferencesType } from '../../stores'\nimport { createChatStore } from '../../stores'\nimport { ChatProvider } from '../../stores/Context'\nimport AgentHeader from '../common/AgentHeader'\nimport BubbleListItems from '../common/BubbleListItems'\nimport ChatSender from '../common/ChatSender'\nimport ConversationList from '../common/ConversationList'\nimport ConversationListHeader from '../common/ConversationListHeader'\nimport SenderPromptsItems from '../common/SenderPromptsItems'\nimport chatStyles from '../common/styles.module.less'\nimport styles from './styles.module.less'\n\ninterface Props {\n theme?: ThemeConfig\n defaultAgent?: {\n appKey?: string\n agentKey?: string\n conversationId?: string\n }\n params?: ChatParams\n hooks?: ChatHooks\n layout?: ChatLayout\n}\nexport interface ChatHandle {\n sendMessage: (message?: string, files?: InputFile[]) => Promise<void>\n switchAgent: (\n { appKey, agentKey, isVerify }: { appKey: string; agentKey: string; isVerify: boolean },\n conversationId?: Conversation['key']\n ) => Promise<void>\n switchConversation: (conversation?: Conversation) => Promise<void>\n setReferences: (references?: ReferencesType) => void\n setMessage: (message?: string) => void\n setFiles: (files?: InputFile[]) => void\n setParams: (params: Props['params']) => void\n setLayout: (layout: Props['layout']) => void\n}\nexport default forwardRef<ChatHandle, Props>(({ theme, params, hooks, layout, defaultAgent }: Props, ref) => {\n const chatStore = useMemo(() => createChatStore(), [])\n\n useEffect(() => {\n chatStore.getUserInfo()\n if (defaultAgent?.appKey && defaultAgent?.agentKey) {\n chatStore.switchAgent({ appKey: defaultAgent.appKey, agentKey: defaultAgent.agentKey }, defaultAgent.conversationId)\n }\n }, [])\n useEffect(() => {\n // console.log('layout changed:', layout)\n chatStore.setLayout(layout)\n }, [layout])\n useEffect(() => {\n // console.log('params changed:', params)\n chatStore.setConfigParams(params)\n }, [params])\n useEffect(() => {\n // console.log('hooks changed:', hooks)\n chatStore.setHooks(hooks)\n }, [hooks])\n\n const agentState = useSnapshot(chatStore.agent)\n const configState = useSnapshot(chatStore.config)\n useImperativeHandle(\n ref,\n () => ({\n sendMessage: chatStore.sendMessage,\n switchAgent: chatStore.switchAgent,\n switchConversation: chatStore.switchConversation,\n setReferences: chatStore.setReferences,\n setMessage: chatStore.setContent,\n setFiles: chatStore.setFileList,\n setParams: chatStore.setConfigParams,\n setLayout: chatStore.setLayout\n }),\n []\n )\n const setSplitterSizes = (sizes: number[]) => {\n console.log(sizes)\n }\n const hasPreView = useMemo(() => {\n return (\n shouldRender(configState.layout.preview as ChatLayout['preview']) &&\n (!!(configState.preview.file as FileUrlType).fileUrl || !!(configState.preview.file as FileTextType).content)\n )\n }, [configState.layout.preview, configState.preview.file])\n return (\n <XProvider theme={{ cssVar: true, ...theme }}>\n <ChatProvider store={chatStore}>\n <Spin spinning={agentState.loading} wrapperClassName=\"full-spin\">\n <div className=\"overflow-hidden height-full\">\n <Splitter onResize={setSplitterSizes}>\n {shouldRender(configState.layout.conversationList as ChatLayout['conversationList']) && (\n <Splitter.Panel size={360} collapsible={false} resizable={false}>\n <Flex vertical className=\"height-full\">\n <RenderWrapper\n control={configState.layout.conversationListHeader as ChatLayout['conversationListHeader']}\n DefaultComponent={ConversationListHeader}\n />\n <div className=\"full-scroll\">\n <RenderWrapper\n control={configState.layout.conversationList as ChatLayout['conversationList']}\n DefaultComponent={ConversationList}\n />\n </div>\n </Flex>\n </Splitter.Panel>\n )}\n {hasPreView && (\n <Splitter.Panel collapsible={false} resizable={false}>\n {(configState.preview.file as FileUrlType).fileUrl && (\n <Flex vertical className=\"height-full\">\n <Flex justify=\"space-between\" align=\"center\" gap={16} className={styles.nsPreviewHeader}>\n <div className={styles.nsPreviewHeaderTitle}>{configState.preview.file.fileName}</div>\n <Flex gap={8} justify=\"center\" align=\"center\">\n <Button\n color=\"primary\"\n variant=\"outlined\"\n onClick={() => downloadFile((configState.preview.file as FileUrlType).fileUrl, configState.preview.file.fileName)}\n >\n 下载\n </Button>\n <Button onClick={() => chatStore.setPreview()}>关闭</Button>\n </Flex>\n </Flex>\n <div className=\"full-scroll\">\n <FilePreview\n {...(configState.preview.file as FileUrlType)}\n pdfParams={{\n isHasThumbnails: false\n }}\n />\n </div>\n </Flex>\n )}\n {(configState.preview.file as FileTextType).content && (\n <MarkdownEditor\n value={(configState.preview.file as FileTextType).content}\n // onChange={onUpdateText}\n onQuote={(text) => {\n chatStore.setReferences({\n type: 2,\n content: {\n name: text,\n markdown: text\n },\n params: {\n outline: text\n }\n })\n }}\n extraNav={\n <>\n {/* <Tag bordered={false} color=\"default\" className=\"cursor-pointer\">\n 下载\n </Tag> */}\n <Tag bordered={false} color=\"default\" className=\"cursor-pointer\" onClick={() => chatStore.setPreview()}>\n <CloseOutlined />\n </Tag>\n </>\n // loading && (\n // <Tag bordered={false} color=\"default\">\n // <Flex gap={4} align=\"center\">\n // <SyncOutlined spin style={{ color: LgPrimaryColor }} />\n // 保存中\n // </Flex>\n // </Tag>\n // )\n }\n />\n )}\n </Splitter.Panel>\n )}\n <Splitter.Panel collapsible={false} resizable={false} size={hasPreView ? 400 : undefined}>\n <Flex vertical className={classNames('height-full')}>\n {/** 对话区 - header */}\n <RenderWrapper control={configState.layout.header as ChatLayout['header']} DefaultComponent={AgentHeader} />\n <Flex vertical className={classNames('full-scroll', chatStyles.nsBody)}>\n <Flex justify=\"center\" vertical gap={24} className={classNames('height-full', chatStyles.nsBodyWidth)}>\n {shouldRender(configState.layout.messageList) && (\n <div className=\"full-scroll\">\n <RenderWrapper\n control={configState.layout.messageList as ChatLayout['messageList']}\n DefaultComponent={<BubbleListItems avatar={{ user: false, assistant: true }} />}\n />\n </div>\n )}\n <RenderWrapper\n control={configState.layout.senderHeader as ChatLayout['senderHeader']}\n DefaultComponent={<div className={styles.nsChatTitle}>我是 {agentState.active.name}</div>}\n />\n\n <Flex vertical gap={8}>\n {/* 🌟 提示词 */}\n <RenderWrapper\n control={configState.layout.senderPrompts as ChatLayout['senderPrompts']}\n DefaultComponent={SenderPromptsItems}\n />\n {/* 🌟 输入框 */}\n <RenderWrapper control={configState.layout.sender as ChatLayout['sender']} DefaultComponent={ChatSender} />\n </Flex>\n <RenderWrapper control={configState.layout.senderFooter} DefaultComponent={<></>} />\n </Flex>\n </Flex>\n </Flex>\n </Splitter.Panel>\n </Splitter>\n </div>\n </Spin>\n </ChatProvider>\n </XProvider>\n )\n})\n","import { CloseOutlined, CommentOutlined, PlusOutlined } from '@ant-design/icons'\nimport { RenderWrapper } from '@zero-library/common'\nimport { Avatar, Button, Flex, Popover, Space } from 'antd'\nimport { useSnapshot } from 'valtio'\nimport { ChatLayout } from '../../stores'\nimport { useChatStore } from '../../stores/Context'\nimport ConversationList from './ConversationList'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const configState = useSnapshot(chatStore.config)\n const conversationsState = useSnapshot(chatStore.conversations)\n return (\n <>\n <Flex justify=\"space-between\" align=\"center\" className={styles.nsAgentHeader}>\n <Flex gap={4} align=\"center\">\n <RenderWrapper\n control={configState.layout.headerTitle as ChatLayout['headerTitle']}\n DefaultComponent={\n <>\n <Avatar size={22} src={agentState.active.iconUrl} alt={agentState.active.name} />\n <div className={styles.nsChatTitle}>{agentState.active.name}</div>\n </>\n }\n />{' '}\n </Flex>\n <Space size={0}>\n <RenderWrapper\n control={configState.layout.headerNewConversationBtn as ChatLayout['headerNewConversationBtn']}\n DefaultComponent={<Button type=\"text\" size=\"large\" icon={<PlusOutlined />} onClick={() => chatStore.switchConversation()} />}\n />\n\n <RenderWrapper\n control={configState.layout.headerConversationListBtn as ChatLayout['headerConversationListBtn']}\n DefaultComponent={\n <Popover\n getPopupContainer={(e) => e}\n placement=\"bottom\"\n classNames={{ body: styles.nsChatHeaderPopover }}\n content={<ConversationList />}\n trigger={['click']}\n >\n <Button type=\"text\" size=\"large\" icon={<CommentOutlined />} />\n </Popover>\n }\n />\n\n <RenderWrapper\n control={configState.layout.headerCloseBtn as ChatLayout['headerCloseBtn']}\n DefaultComponent={<Button type=\"text\" size=\"large\" onClick={configState.hooks?.onHeaderClose} icon={<CloseOutlined />} />}\n />\n </Space>\n </Flex>\n </>\n )\n}\n","import { DeleteOutlined, RedoOutlined } from '@ant-design/icons'\nimport { Conversations } from '@ant-design/x'\nimport type { Conversation } from '@ant-design/x/es/conversations/interface'\nimport { Empty, Spin } from 'antd'\nimport { useEffect } from 'react'\nimport InfiniteScroll from 'react-infinite-scroll-component'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const conversationsState = useSnapshot(chatStore.conversations)\n const conversationState = useSnapshot(chatStore.conversation)\n\n useEffect(() => {\n if (agentState.active.id) {\n chatStore.getConversations(agentState.active.id)\n }\n }, [agentState.active.id])\n return (\n <>\n <div className=\"height-full scroll-fade-in\" id=\"scrollableDiv\">\n {conversationsState.list.items.length ? (\n <InfiniteScroll\n dataLength={conversationsState.list.items.length}\n next={() => {\n console.log('next')\n chatStore.getConversations(agentState.active.id, conversationsState.list.lastId)\n }}\n hasMore={conversationsState.list.hasMore}\n loader={\n <div className=\"text-center\">\n <Spin indicator={<RedoOutlined spin />} size=\"small\" />\n </div>\n }\n style={{ overflow: 'hidden' }}\n scrollableTarget=\"scrollableDiv\" // 👈 指定滚动容器\n >\n <Conversations\n className={styles.nsConversations}\n items={conversationsState.list.items as Conversation[]}\n activeKey={conversationState.active.key}\n onActiveChange={async (key) => chatStore.switchConversation({ key })}\n groupable\n menu={(conversation) => ({\n items: [\n {\n label: '删除会话',\n key: 'delete',\n icon: <DeleteOutlined />,\n danger: true,\n onClick: (menuInfo) => {\n menuInfo.domEvent.stopPropagation()\n chatStore.delConversation(conversation)\n }\n }\n ]\n })}\n />\n </InfiniteScroll>\n ) : (\n <Empty description=\"暂无会话记录\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </div>\n </>\n )\n}\n",".loadingMessage {\n background-image: linear-gradient(90deg, #ff6b23 0%, #af3cb8 31%, #53b6ff 89%);\n background-size: 100% 2px;\n background-repeat: no-repeat;\n background-position: bottom;\n padding-bottom: 2px;\n}\n.nsConversations {\n padding: 0 24px;\n}\n.nsConversations :global .ant-conversations-group-title {\n padding: 0;\n}\n.nsConversations :global .ant-conversations-group-title .ant-typography {\n color: #878aab;\n}\n.nsConversations :global .ant-conversations-list .ant-conversations-item {\n padding-left: 16px;\n}\n.nsConversations :global .ant-conversations-list .ant-conversations-item .ant-conversations-label {\n color: rgba(0, 0, 0, 0.88);\n}\n.nsConversations :global .ant-conversations-list .ant-conversations-item.ant-conversations-item-active .ant-conversations-label {\n color: var(--ant-color-primary);\n}\n.nsBody {\n background-color: #f6f7fb;\n}\n.nsBody .nsBodyWidth {\n padding: 12px 0;\n margin: 0 auto;\n max-width: 896px;\n min-width: 320px;\n width: calc(100% - 24px) !important;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content-filled {\n background-color: #fff;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-end .ant-bubble-content-filled {\n background-color: var(--ant-color-primary-bg);\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content .ant-typography {\n font-size: 16px;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content > .ant-collapse {\n margin-bottom: 16px;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content > .ant-collapse .ant-collapse-header {\n color: #8f91a8;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content > .ant-collapse .ant-collapse-content {\n color: #8f91a8;\n margin-top: -10px;\n}\n.nsBubbleList:global.ant-bubble-list .ant-bubble .ant-bubble-content > .ant-collapse .ant-collapse-content .ant-collapse-content-box {\n padding: 0 10px 0 24px;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n.nsAgentHeader {\n padding: 8px 16px;\n background-color: #fff;\n}\n.nsAgentHeader .nsChatTitle {\n font-size: 16px;\n font-weight: bold;\n}\n.nsAgentHeader .nsChatHeaderPopover {\n max-height: 500px;\n width: 300px;\n display: flex;\n flex-direction: column;\n}\n.nsAgentHeader .nsChatHeaderPopover :global .ant-popover-inner-content {\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n.chatWelcomeWrap :global .ant-prompts .ant-prompts-list {\n overflow: auto;\n}\n.chatWelcomeWrap .chatWelcome :global .ant-welcome-icon > img {\n border-radius: 10px;\n max-width: initial;\n}\n.chatWelcomeWrap .chatWelcomePrompts {\n width: 300px;\n}\n.senderListTitle {\n width: 300px;\n}\n.senderList :global .ant-list-items {\n max-height: 350px;\n overflow-y: auto;\n margin-right: -12px;\n padding-right: 12px;\n}\n.senderList.historyList :global .ant-list-items {\n max-height: initial;\n}\n.senderList .senderListItem {\n background-color: #f6f6f6;\n color: #6b6b6b !important;\n border-radius: 5px;\n width: 300px;\n padding: 6px 12px !important;\n margin-top: 12px;\n font-size: 14px;\n cursor: pointer;\n}\n.senderList .senderListFooter {\n font-size: 12px;\n}\n.nsChatUserName {\n font-size: 16px;\n font-weight: bold;\n}\n.nsSenderReferenceHeaderTitle:global > .ant-sender-header-title {\n overflow: hidden;\n}\n.nsSenderReferenceHeaderContent {\n padding: 0 !important;\n}\n","export const customComponents = {\n appCard: () => import('./AppCard'),\n fileView: () => import('./FileView'),\n indexQuote: () => import('./IndexQuote'),\n mdEdit: () => import('./MdEdit'),\n fileEdit: () => import('./FileEdit'),\n quoteList: () => import('./QuoteList')\n}\n","import { Attachments, Bubble, BubbleProps } from '@ant-design/x'\nimport { RenderMarkdown } from '@zero-library/common'\nimport { Flex } from 'antd'\nimport { AgentMessage } from '../stores'\nimport { customComponents } from '../ui/common/markdownAlert'\n\ninterface Props {\n message: AgentMessage<string>\n placement: BubbleProps['placement']\n}\n\nexport default ({ message, placement }: Props) => {\n return (\n <Flex vertical>\n {message.content && <Bubble placement={placement} content={<RenderMarkdown content={message.content} customComponents={customComponents} />} />}\n {message.files?.map((file, index) => (\n <Bubble\n className=\"m-t-8\"\n key={index}\n variant=\"borderless\"\n placement={placement}\n content={\n <Attachments.FileCard\n key={index}\n item={{\n uid: file.id,\n name: file.name,\n url: file.url\n }}\n />\n }\n />\n ))}\n {/* {message.quoteMsg?.quoteMsgId && (\n <Bubble\n className={classNames(styles.chatQuoteMsg)}\n placement={placement}\n content={\n <Flex vertical gap={8}>\n {message.quoteMsg.quoteMsgContent && (\n <Flex>\n <span>【引用消息】:</span>\n <Flex flex={1} className=\"text-ellipsis-3\">\n {message.quoteMsg.quoteMsgContent}\n </Flex>\n </Flex>\n )}\n {message.quoteMsg?.msgImgList && message.quoteMsg.msgImgList.length > 0 && (\n <Flex>\n <span>【引用图片】:</span>\n <Flex gap={8} wrap flex={1}>\n {message.quoteMsg.msgImgList.map((url, index) => (\n <Attachments.FileCard\n key={index}\n item={{\n uid: url,\n url,\n name: getFileName(url)\n }}\n />\n ))}\n </Flex>\n </Flex>\n )}\n </Flex>\n }\n />\n )} */}\n </Flex>\n )\n}\n","import { CopyOutlined, DislikeOutlined, LikeOutlined, OpenAIOutlined } from '@ant-design/icons'\nimport { Bubble, BubbleProps, Prompts, Welcome } from '@ant-design/x'\nimport { BubbleDataType } from '@ant-design/x/es/bubble/BubbleList'\nimport { isBoolean, UserAvatar } from '@zero-library/common'\nimport { Avatar, AvatarProps, Button, Flex, GetRef, Space } from 'antd'\nimport classNames from 'classnames'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { useSnapshot } from 'valtio'\nimport ChatMessageRender from '../../components/MessageRender'\nimport { copy } from '../../core/utils'\nimport { AgentMessage, ConversationMessageType } from '../../stores'\nimport { useChatStore } from '../../stores/Context'\nimport MessageAIRender from './MessageAIRender'\nimport styles from './styles.module.less'\n\ninterface Props {\n avatar?: boolean | { user: boolean; assistant: boolean }\n}\n/* 🌟 消息列表 */\nexport default ({ avatar = true }: Props) => {\n const chatStore = useChatStore()\n\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n const configState = useSnapshot(chatStore.config)\n\n const conversationRoles = useMemo(() => {\n return {\n user: {\n user: 'user',\n placement: 'end',\n avatar: (isBoolean(avatar) ? avatar : avatar?.user) ? (\n <UserAvatar size={30} avatarSrc={configState.userInfo?.iconUrl} userName={configState.userInfo?.name} />\n ) : null\n },\n assistant: {\n user: 'assistant',\n placement: 'start',\n avatar: (isBoolean(avatar) ? avatar : avatar?.assistant) ? { src: agentState.active.iconUrl, icon: <OpenAIOutlined /> } : null\n }\n } as ObjectType<{ user: 'assistant' | 'user'; placement: BubbleProps['placement']; avatar?: AvatarProps }>\n }, [configState.userInfo, agentState.active, avatar])\n // 当前会话参数\n const chatMessage = useMemo(\n () => conversationState.messages[conversationState.active.key] || ({} as ConversationMessageType),\n [conversationState.messages[conversationState.active.key]]\n )\n const placeholderNode = useMemo(\n () => [\n {\n key: 'placeholder',\n content: (\n <Space direction=\"vertical\" size={16} className={styles.chatWelcomeWrap}>\n <Welcome\n className={classNames(styles.chatWelcome, 'p-t-32')}\n variant=\"borderless\"\n icon={<Avatar shape=\"square\" size={58} src={agentState.active.iconUrl} />}\n title={`你好,我是${agentState.active.name || ''}`}\n description={agentState.active.description || ''}\n />\n {agentState.active.recommendQuestions?.length > 0 && (\n <Prompts\n className=\"m-t-16\"\n wrap\n items={[\n {\n key: '1',\n label: '🤔 推荐问题:',\n children: agentState.active.recommendQuestions.map(({ question, id }) => ({\n key: id,\n description: (\n <span onClick={() => chatStore.onSendMessage(question)} className={classNames(styles.chatWelcomePrompts, 'text-ellipsis')}>\n {question}\n </span>\n )\n }))\n }\n ]}\n />\n )}\n </Space>\n ),\n variant: 'borderless'\n } as BubbleDataType\n ],\n [agentState.active]\n )\n\n const questionList = useMemo(\n () =>\n chatMessage?.questionList?.length\n ? [\n {\n key: 'questionList',\n content: (\n <Prompts\n className=\"m-b-16\"\n styles={{\n list: {\n overflow: 'auto'\n }\n }}\n vertical\n items={chatMessage?.questionList.map(({ question, id }) => ({\n key: id,\n description: <span onClick={() => chatStore.onSendMessage(question)}>{question}</span>\n }))}\n />\n ),\n variant: 'borderless',\n avatar: { style: { visibility: 'hidden' } }\n } as BubbleDataType\n ]\n : [],\n [chatMessage?.questionList]\n )\n\n const chatRecords = useMemo(() => {\n return (chatMessage?.message?.items || []).map((message, index) => {\n // let isHasTime = false\n // if (index === 0) {\n // isHasTime = true\n // } else {\n // const lastMessage = chatMessage.message[index - 1]\n // // if((lastMessage.sendDate - message.sendDate) > 60 * 60 * 1000)\n // }\n return {\n key: message.id || -index,\n placement: conversationRoles[message.role].placement,\n variant: 'borderless',\n avatar: conversationRoles[message.role].avatar,\n content:\n message.role === 'assistant' ? (\n <MessageAIRender message={message as AgentMessage<string>} placement={conversationRoles[message.role].placement} />\n ) : (\n <ChatMessageRender message={message as AgentMessage<string>} placement={conversationRoles[message.role].placement} />\n ),\n // loadingRender: () => <Spin size=\"small\" />,\n footer: message.role === 'assistant' && message.id && (\n <Flex>\n <Button onClick={() => copy(message.content as string)} color=\"default\" variant=\"text\" size=\"small\" icon={<CopyOutlined />} />\n <Button\n color={message.feedback === 'like' ? 'primary' : 'default'}\n disabled={message.status === 'loading'}\n size=\"small\"\n variant=\"text\"\n icon={<LikeOutlined />}\n onClick={() => chatStore.feedback(conversationState.active.key, message.id, 'like', index)}\n />\n <Button\n color={message.feedback === 'dislike' ? 'primary' : 'default'}\n disabled={message.status === 'loading'}\n size=\"small\"\n variant=\"text\"\n icon={<DislikeOutlined />}\n onClick={() => chatStore.feedback(conversationState.active.key, message.id, 'dislike', index)}\n />\n {/* <Button color=\"default\" variant=\"text\" size=\"large\" icon={<ShareAltOutlined />} /> */}\n {/* <Button color=\"default\" variant=\"text\" size=\"large\" icon={<ReloadOutlined />} /> */}\n </Flex>\n )\n // ...(isHasTime\n // ? { rootClassName: styles.hasSendTime, classNames: { header: styles.sendTime }, header: <span>{formatDate(message.sendDate)}</span> }\n // : {})\n } as BubbleDataType\n })\n }, [chatMessage?.message])\n const bubbleListItems = useMemo(() => {\n const list = []\n if (chatRecords.length > 0) {\n list.push(...chatRecords, ...questionList)\n }\n if (list.length) {\n return list\n }\n return [...placeholderNode]\n }, [chatRecords, questionList, placeholderNode])\n\n const listRef = useRef<GetRef<typeof Bubble.List>>(null)\n useEffect(() => {\n // console.log(\n // 'bubbleListItems',\n // bubbleListItems,\n // listRef.current?.nativeElement.scrollHeight,\n // listRef.current?.nativeElement.scrollTop,\n // listRef.current?.nativeElement.clientHeight\n // )\n if (\n bubbleListItems.length &&\n (listRef.current?.nativeElement.scrollHeight ?? 0) -\n ((listRef.current?.nativeElement.scrollTop ?? 0) + (listRef.current?.nativeElement.clientHeight ?? 0)) <\n 100\n ) {\n listRef.current?.scrollTo({ key: bubbleListItems[bubbleListItems.length - 1].key, block: 'end' })\n }\n }, [bubbleListItems])\n return (\n <Bubble.List\n key={conversationState.active.key}\n ref={listRef}\n items={bubbleListItems}\n className={classNames(styles.nsBubbleList, 'height-full', 'scroll-fade-in')}\n />\n )\n}\n","import { CloseCircleOutlined } from '@ant-design/icons'\nimport { Bubble, BubbleProps } from '@ant-design/x'\nimport { RenderMarkdown } from '@zero-library/common'\nimport { Collapse, Flex, Spin, Typography } from 'antd'\nimport classNames from 'classnames'\nimport { useMemo } from 'react'\nimport { AgentMessage } from '../../stores'\nimport { customComponents } from './markdownAlert'\nimport styles from './styles.module.less'\n\ninterface Props {\n message?: AgentMessage<string>\n placement: BubbleProps['placement']\n}\n\nfunction extractThinkContent(content: string): {\n mainContent: string\n thinkContents: string[]\n thinkBuffer: string\n} {\n let main = content\n const thinkContents: string[] = []\n let buffer = ''\n\n const regex = /<think>(.*?)<\\/think>/gs\n for (const match of content.matchAll(regex)) {\n const thinkText = match[1].trim()\n thinkContents.push(thinkText)\n main = main.replace(match[0], '')\n }\n\n const lastStart = content.lastIndexOf('<think>')\n const lastEnd = content.lastIndexOf('</think>')\n if (lastStart > lastEnd) {\n buffer = content.slice(lastStart).replace('<think>', '')\n main = main.slice(0, lastStart)\n }\n\n return { mainContent: main, thinkContents, thinkBuffer: buffer }\n}\n\nfunction renderMarkdownPanel(content: string, label: string, key: string) {\n return {\n key,\n label,\n children: <RenderMarkdown content={content} customComponents={customComponents} />\n }\n}\n\nexport default ({ message, placement }: Props) => {\n const { mainContent, thinkContents, thinkBuffer } = useMemo(() => {\n if (!message?.content) return { mainContent: '', thinkContents: [], thinkBuffer: '' }\n return extractThinkContent(message.content)\n }, [message?.content])\n\n const isWaiting = !message || (!message.content && message.status === 'loading')\n if (isWaiting) {\n return (\n <Typography>\n <Spin size={'small'} />\n </Typography>\n )\n }\n return (\n <Flex vertical>\n <Bubble\n placement={placement}\n className={classNames({ [styles.loadingMessage]: message.status === 'loading' })}\n content={\n <>\n {/* 渲染 think 内容,默认展开所有项 */}\n {thinkContents.length > 0 && (\n <Collapse\n ghost\n size=\"small\"\n defaultActiveKey={thinkContents.map((_, i) => `think-${i}`)}\n items={thinkContents.map((content, index) => renderMarkdownPanel(content, `思考过程`, `think-${index}`))}\n />\n )}\n\n {/* 渲染缓冲中的 think 内容 */}\n {thinkBuffer && (\n <Collapse\n ghost\n size=\"small\"\n defaultActiveKey={['buffer-think']}\n items={[renderMarkdownPanel(thinkBuffer, '仔细思考中...', 'buffer-think')]}\n />\n )}\n\n {/* 渲染主内容 */}\n {mainContent && message.status === 'error' ? (\n <div>\n <CloseCircleOutlined color={'red'} /> {mainContent}\n </div>\n ) : (\n <RenderMarkdown content={mainContent} customComponents={customComponents} />\n )}\n </>\n }\n />\n </Flex>\n )\n}\n","import { CloudUploadOutlined } from '@ant-design/icons'\nimport { Attachments } from '@ant-design/x'\nimport { isNullOrUnDef, isNumber, isObject, useDebounce, useRefState } from '@zero-library/common'\nimport { GetProp, message } from 'antd'\nimport { RcFile, UploadFile } from 'antd/lib/upload'\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from 'react'\nimport { getBase64 } from '../core/utils'\nimport { InputFile, uploadFile } from '../services'\nimport './styles.less'\n\ninterface Props {\n maxCount?: number\n accept?: readonly string[]\n fileSize?: number\n fileSizeTip?: string\n fileList?: InputFile[]\n onChange: (fileList: InputFile[]) => void\n extraParams?: ObjectType<string | undefined>\n}\nexport default forwardRef(({ maxCount, accept, fileSize, fileSizeTip, fileList = [], onChange, extraParams }: Props, ref) => {\n const fileListRef = useRef<InputFile[]>([])\n const [attachedFiles, setAttachedFiles, getAttachedFiles] = useRefState<GetProp<typeof Attachments, 'items'>>([])\n // 初始化 fileList 映射为 Attachments 所需格式\n useEffect(() => {\n if (JSON.stringify(fileList) !== JSON.stringify(fileListRef.current)) {\n fileListRef.current = fileList\n const mapped: GetProp<typeof Attachments, 'items'> = fileList.map((file) => ({\n ...file,\n uid: file.id,\n status: 'done'\n }))\n setAttachedFiles(mapped)\n }\n }, [fileList])\n useEffect(() => {\n // console.log('attachedFiles', attachedFiles)\n const files = attachedFiles\n .filter((file) => file.status === 'done')\n .map((file) => {\n const f = { ...file }\n delete f.status\n delete f.uid\n delete f.size\n return f as unknown as InputFile\n })\n fileListRef.current = files\n onChange(files)\n }, [attachedFiles])\n const onErrorTip = useDebounce((errorMsg: string) => {\n message.error(errorMsg)\n }, 300)\n const onBeforeUpload = (files: RcFile[]) => {\n // console.log('onBeforeUpload', maxCount, files, attachedFiles)\n if (isNumber(maxCount) && files.length + attachedFiles.length > maxCount) {\n onErrorTip(`最多只能上传${maxCount}个文件`)\n return Promise.reject(false)\n }\n }\n const onCustomRequest = async ({ file }: any) => {\n // console.log('onCustomRequest', file)\n if (fileSize && file.size > fileSize) {\n // 校验文件大小\n // const fileSize = 6 * 1024 * 1024 // 6MB\n message.error(`${fileSizeTip}`)\n return\n }\n // console.log('上传文件列表1:', file)\n setAttachedFiles([\n ...getAttachedFiles(),\n {\n type: file.type,\n name: file.name,\n uid: file.uid,\n status: 'uploading',\n percent: 70,\n size: file.size\n }\n ])\n try {\n const formData = new FormData()\n formData.append('file', file)\n if (isObject(extraParams)) {\n Object.keys(extraParams).forEach((key) => {\n if (isNullOrUnDef(extraParams[key])) return\n formData.append(key, extraParams[key])\n })\n }\n // 发送文件到后端\n const { data } = await uploadFile(formData)\n // 如果是图片文件,读取base64添加到url中,以便显示在消息列表中\n if (!data?.url && data?.type === 'image') {\n data.url = await getBase64(file)\n // console.log('上传文件base64:', uploadFile.url)\n }\n\n setAttachedFiles(\n getAttachedFiles().map((f) => {\n if (f.uid === file.uid) {\n return { ...data!, uid: data!.id, status: 'done', size: f.size }\n } else {\n return f\n }\n })\n )\n } catch (error) {\n console.log('上传文件错误:', error)\n setAttachedFiles(\n getAttachedFiles().map((f) => {\n if (f.uid === file.uid) {\n return { ...f, status: 'error', description: '上传失败' }\n } else {\n return f\n }\n })\n )\n }\n }\n const onRemove = (file: UploadFile<any>) => {\n // 删除文件\n setAttachedFiles(attachedFiles.filter((f) => f.uid !== file.uid))\n }\n useImperativeHandle(\n ref,\n () => ({\n validateFile: () => {\n const files = getAttachedFiles()\n const uploadingFiles = files.filter((file) => file.status === 'uploading')\n if (uploadingFiles.length > 0) {\n message.error('请等待所有文件上传完成')\n return false\n }\n const errorFiles = files.filter((file) => file.status === 'error')\n if (errorFiles.length > 0) {\n message.error('请检查上传失败的文件')\n return false\n }\n return true\n }\n }),\n []\n )\n\n const acceptStr = useMemo(() => {\n if (!accept?.length) return\n // 定义文件类型映射\n const fileTypeMap: ObjectType<string[]> = {\n document: [\n '.txt',\n '.md',\n '.mdx',\n '.markdown',\n '.pdf',\n '.html',\n '.xlsx',\n '.xls',\n '.doc',\n '.docx',\n '.csv',\n '.eml',\n '.msg',\n '.pptx',\n '.ppt',\n '.xml',\n '.epub'\n ],\n image: ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg']\n }\n const accepts = []\n accept?.forEach((type) => {\n if (fileTypeMap[type]) {\n accepts.push(...fileTypeMap[type])\n }\n })\n if (accepts.length === 0) {\n accepts.push(...accept)\n }\n\n return accepts.join(',')\n }, [accept])\n\n return (\n <Attachments\n className=\"nsAttachments\"\n accept={acceptStr}\n multiple={!isNumber(maxCount) || maxCount > 1}\n maxCount={maxCount}\n customRequest={onCustomRequest}\n beforeUpload={(file, files) => onBeforeUpload(files)}\n items={attachedFiles}\n onRemove={onRemove}\n placeholder={(type) =>\n type === 'drop'\n ? { title: '将文件放到这里' }\n : {\n icon: <CloudUploadOutlined />,\n title: '提交文件',\n description: (\n <div>\n <div>单击或拖动文件到此区域进行上传; </div>\n {/* {accept && <div>支持扩展名:{accept}; </div>} */}\n </div>\n )\n }\n }\n />\n )\n})\n","import { PaperClipOutlined } from '@ant-design/icons'\nimport { Sender, Suggestion } from '@ant-design/x'\nimport { useSyncInput } from '@zero-library/common'\nimport { Badge, Button, ButtonProps, Flex, GetRef } from 'antd'\nimport { forwardRef, useImperativeHandle, useRef } from 'react'\nimport { AgentInfoFileUpload, InputFile } from '../services'\nimport ChatSendAttachments from './Attachments'\n\ninterface FileUpload extends AgentInfoFileUpload {\n extraParams?: ObjectType<any>\n}\n\ninterface Props {\n placeholder?: string\n content?: string\n fileList?: InputFile[]\n headerOpen?: boolean\n loading?: boolean\n onContentChange: (value: string) => void\n onFileListChange: (files: InputFile[]) => void\n onHeaderOpenChange: (open: boolean) => void\n onSend: () => void\n onCancel?: () => void\n onFocus?: () => void\n extraHeader?: React.ReactNode\n extraFooter?: React.ReactNode\n extraFooterBelow?: React.ReactNode\n sendButtonProps?: ButtonProps\n fileUpload?: FileUpload\n}\n\nexport default forwardRef(\n (\n {\n placeholder,\n content,\n fileList = [],\n headerOpen = false,\n loading = false,\n onContentChange,\n onFileListChange,\n onHeaderOpenChange,\n onSend,\n onCancel,\n onFocus,\n extraHeader,\n extraFooter,\n extraFooterBelow,\n sendButtonProps,\n fileUpload\n }: Props,\n ref\n ) => {\n const senderRef = useRef<GetRef<typeof Sender>>(null)\n const { inputValue, setInputValue } = useSyncInput(content || '', onContentChange)\n\n const attachmentsNode = fileUpload?.enabled && (\n <Badge dot={!!fileList?.length && !headerOpen}>\n <Button type=\"text\" icon={<PaperClipOutlined />} onClick={() => onHeaderOpenChange(!headerOpen)} />\n </Badge>\n )\n\n const attachmentsRef = useRef<any>()\n const senderHeader = (\n <>\n <Sender.Header title=\"选择文件\" open={headerOpen} onOpenChange={onHeaderOpenChange}>\n <ChatSendAttachments\n ref={attachmentsRef}\n fileList={fileList}\n onChange={onFileListChange}\n accept={fileUpload?.allowedFileTypes}\n maxCount={fileUpload?.maxFileCount}\n extraParams={fileUpload?.extraParams}\n />\n </Sender.Header>\n {extraHeader}\n </>\n )\n const onSubmit = () => {\n if (!attachmentsRef.current?.validateFile || attachmentsRef.current.validateFile()) {\n onSend()\n }\n }\n\n // 暴露方法给外部组件\n useImperativeHandle(\n ref,\n () => ({\n focus: (options?: { cursor?: 'start' | 'end' }) => {\n senderRef.current?.focus(options)\n }\n }),\n []\n )\n\n return (\n <Suggestion items={[]} onSelect={(itemVal) => setInputValue(`[${itemVal}]:`)}>\n {({}) => (\n <Sender\n ref={senderRef}\n value={inputValue}\n header={senderHeader}\n onSubmit={onSubmit}\n onChange={setInputValue}\n onFocus={onFocus}\n autoSize={{ minRows: 2, maxRows: 6 }}\n // prefix={attachmentsNode}\n // loading={loading}\n onCancel={onCancel}\n footer={({ components }) => {\n const { SendButton, LoadingButton } = components\n return (\n <Flex vertical>\n <Flex justify=\"space-between\" align=\"center\" gap={12}>\n <Flex className=\"flex-1\" gap={6} align=\"center\">\n {attachmentsNode}\n {extraFooter}{' '}\n </Flex>\n <Flex align=\"center\">{loading ? <LoadingButton /> : <SendButton {...sendButtonProps} />}</Flex>\n </Flex>\n {extraFooterBelow}\n </Flex>\n )\n }}\n actions={false}\n placeholder={placeholder || '有什么我能帮您的吗?'}\n />\n )}\n </Suggestion>\n )\n }\n)\n","import { EnterOutlined } from '@ant-design/icons'\nimport { Sender } from '@ant-design/x'\nimport { RenderWrapper, shouldRender } from '@zero-library/common'\nimport { Button, Flex, Typography } from 'antd'\nimport { useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport ChatSender from '../../components/ChatSender'\nimport { AgentInfoFileUpload, InputFile } from '../../services'\nimport { ChatLayout, ConversationMessageType } from '../../stores'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n const configState = useSnapshot(chatStore.config)\n // 当前会话参数\n const chatMessage = useMemo(\n () => conversationState.messages[conversationState.active.key] || ({} as ConversationMessageType),\n [conversationState.messages[conversationState.active.key]]\n )\n const referenceHandle = (con: string) => {\n if (chatMessage?.loading) return\n chatStore.setContent(con)\n setTimeout(() => {\n chatStore.sendMessage()\n }, 10)\n }\n return (\n <ChatSender\n placeholder={configState.layout.sender?.props?.placeholder}\n content={chatMessage.content}\n fileList={chatMessage.files as InputFile[]}\n headerOpen={chatMessage.headerOpen}\n loading={chatMessage.loading}\n onContentChange={chatStore.setContent}\n onFileListChange={chatStore.setFileList}\n onHeaderOpenChange={chatStore.setHeaderOpen}\n onSend={() => chatStore.sendMessage()}\n onFocus={chatStore.config.hooks?.onSenderFocus}\n fileUpload={{\n ...(agentState.active?.parameters?.fileUpload as AgentInfoFileUpload),\n extraParams: { agentId: agentState.active.id }\n }}\n extraFooter={\n <>\n <Button\n size=\"small\"\n color={agentState.params.thinkMode === '1' ? 'primary' : 'default'}\n variant=\"filled\"\n onClick={() => chatStore.setAgentParams({ thinkMode: agentState.params.thinkMode === '1' ? '2' : '1' })}\n >\n 深度思考\n </Button>\n <RenderWrapper control={configState.layout.senderExtraBtn as ChatLayout['senderExtraBtn']} />\n </>\n }\n extraHeader={\n <Sender.Header\n title={\n <Flex gap={4}>\n <EnterOutlined />\n <Typography.Text type=\"secondary\" ellipsis>\n {chatMessage?.references?.content?.name}\n </Typography.Text>\n </Flex>\n }\n open={!!chatMessage?.references?.content?.name}\n onOpenChange={() => chatStore.setReferences()}\n classNames={{\n header: styles.nsSenderReferenceHeaderTitle,\n content: shouldRender(configState.layout.referencesBtn as ChatLayout['referencesBtn']) ? '' : styles.nsSenderReferenceHeaderContent\n }}\n >\n <RenderWrapper\n control={configState.layout.referencesBtn as ChatLayout['referencesBtn']}\n DefaultComponent={\n <Flex gap={8}>\n {['深度解读', '概要解读'].map((con) => (\n <Button key={con} color=\"primary\" variant=\"filled\" onClick={() => referenceHandle(con)}>\n {con} →\n </Button>\n ))}\n </Flex>\n }\n />\n </Sender.Header>\n }\n />\n )\n}\n","import { PlusOutlined } from '@ant-design/icons'\nimport { Avatar, Button, Flex } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n return (\n <div className=\"p-24\">\n <Flex align=\"center\" gap={8}>\n <Avatar size={36} src={agentState.active.iconUrl} />\n <span className={styles.nsChatUserName}>{agentState.active.name}</span>\n </Flex>\n <Button\n block\n type=\"primary\"\n shape=\"round\"\n onClick={() => chatStore.switchConversation()}\n className={classNames('m-t-16')}\n icon={<PlusOutlined />}\n >\n 新建会话\n </Button>\n </div>\n )\n}\n","import { Button, Flex, List, Popover } from 'antd'\nimport classNames from 'classnames'\nimport { useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { RecommendQuestion } from '../../services'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\n/* 🌟 提示词 */\nexport default () => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n const component = useMemo(\n () =>\n agentState.active.labels?.length > 0 && (\n <Flex gap={4} wrap>\n <Button disabled color=\"default\" variant=\"text\">\n 随便聊聊\n </Button>\n {agentState.active.labels.map((question) => (\n <Popover\n key={question.id}\n content={\n <List\n itemLayout=\"horizontal\"\n split={false}\n className={styles.senderList}\n dataSource={question.hotQuestionList as RecommendQuestion[]}\n renderItem={(item) => (\n <List.Item onClick={() => chatStore.sendMessage(item.question)} className={styles.senderListItem}>\n {item.question}\n </List.Item>\n )}\n footer={\n <Flex justify=\"end\" className={styles.senderListFooter}>\n (您可点击以上问题开启AI体验)\n </Flex>\n }\n />\n }\n title={\n <div\n className={classNames(styles.senderListTitle, 'text-ellipsis')}\n >{`${agentState.active.name}开始关注${question.labelName}内容!`}</div>\n }\n >\n <Button color=\"default\" variant=\"filled\">\n {question.labelName}\n </Button>\n </Popover>\n ))}\n </Flex>\n ),\n [agentState.active.labels]\n )\n return component\n}\n",".nsPreviewHeader {\n padding: 16px 24px;\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);\n}\n.nsPreviewHeader .nsPreviewHeaderTitle {\n font-size: 16px;\n font-weight: bold;\n}\n.nsChatTitle {\n padding: 24px;\n font-size: 24px;\n text-align: center;\n}\n"]}
|